ReplicaSetを利用すると、Kubernetesクラスター内で、定義したレプリカ数のPodを稼働し続けることができる。
今回は、nginxを搭載したDockerイメージを利用して、Pod, ReplicaSet, Serviceを作成し、ローカル端末からnginxを搭載したPodにアクセスしてみたので、その手順を共有する。
なお、ReplicaSetについては、以下のサイトを参照のこと。
https://www.rworks.jp/cloud/kubernetes-op-support/kubernetes-column/kubernetes-entry/29181/
前提条件
以下の手順に従って、「Docker Desktop」インストール済のWindows端末でKubernetesを有効化済であること。
また、nginxを搭載したDockerイメージは、以下の場所に格納されている「1.27.0」タグを利用すること。
https://hub.docker.com/_/nginx
ReplicaSetの作成
nginxを搭載したDockerイメージを利用して、Pod, ReplicaSet, Serviceを作成し、ローカル端末からnginxを搭載したPodにアクセスしたり、Pod削除時のReplicaSetの動作を確認する。その手順は、以下の通り。
1) マニフェストファイル(nginx-test-replicaset.yml)を以下の内容で作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | apiVersion: apps/v1 kind: ReplicaSet metadata: # ReplicaSet名 name: nginx-rep # ラベル(Pod,Service,ReplicaSetを紐付けるために利用) labels: app: web-nginx env: test spec: # 作成するPod数 replicas: 2 selector: matchLabels: # ラベル(Pod,Service,ReplicaSetを紐付けるために利用) app: web-nginx env: test # 複製したいPodのマニフェスト template: metadata: # Pod名 name: nginx-pod # ラベル(Pod,Service,ReplicaSetを紐付けるために利用) labels: app: web-nginx env: test spec: # Podに含まれるコンテナ containers: # Dockerコンテナ名 - name: nginx-pod # 利用するDockerイメージ名 image: nginx:1.27.0 # PodのIPからExposeするポート番号 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: # Service名 name: nginx-service spec: # Service種類 type: NodePort # ラベル(Pod,Service,ReplicaSetを紐付けるために利用) selector: app: web-nginx env: test # ポート転送設定 ports: - port: 80 targetPort: 80 protocol: TCP # ノード受付ポート(30000番以上を指定) nodePort: 30080 |
2) 1)のファイルを配置し、「kubectl apply -f (マニフェストファイル名)」コマンドを実行し、ReplicaSet, Pod, Serviceを作成する。
3)「kubectl get all」コマンドを実行すると、作成したPod, Service, ReplicaSetの状態を確認できる。また、Podはreplicasで指定した2個、作成されている。
4) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、以下のように、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。
なお、今回は6回、上記コマンドの実行を繰り返している。
5) 各Podのログを確認すると、4)のコマンドを実行した時のログが、それぞれで確認できる。
6)「kubectl delete pod/(削除するPod名)」コマンドで、Podを削除すると、以下のように、新しいPodが自動的に作成されることが確認できる。
7) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、Podを再作成後も、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。
8) 新しく作成されたPodのログを確認すると、以下のように、7)のコマンドを実行した時のログが確認できる。
9)「kubectl delete -f (マニフェストファイル名)」コマンドを実行すると、以下のように、指定したマニフェストファイルで起動したReplicaset, Pod, Serviceを削除することができる。
要点まとめ
- ReplicaSetを利用すると、Kubernetesクラスター内で、定義したレプリカ数のPodを稼働し続けることができる。