Kubernetes

マニフェストファイルを利用してReplicaSetを作成しnginxにアクセスしてみた

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を有効化済であること。

「Docker Desktop」インストール済のWindows端末でkubectlコマンドを実行してみたKubernetesは、複数のホストにまたがるコンテナ群を一括で管理するソフトウェアで、「Docker Desktop」をインストール済...

また、nginxを搭載したDockerイメージは、以下の場所に格納されている「1.27.0」タグを利用すること。
https://hub.docker.com/_/nginx

前提条件_nginxを搭載したDockerイメージ

ReplicaSetの作成

nginxを搭載したDockerイメージを利用して、Pod, ReplicaSet, Serviceを作成し、ローカル端末からnginxを搭載したPodにアクセスしたり、Pod削除時のReplicaSetの動作を確認する。その手順は、以下の通り。

1) マニフェストファイル(nginx-test-replicaset.yml)を以下の内容で作成する。

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を作成する。
ReplicaSetの作成_2_1

ReplicaSetの作成_2_2

3)「kubectl get all」コマンドを実行すると、作成したPod, Service, ReplicaSetの状態を確認できる。また、Podはreplicasで指定した2個、作成されている。
ReplicaSetの作成_3

4) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、以下のように、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。
ReplicaSetの作成_4

なお、今回は6回、上記コマンドの実行を繰り返している。

5) 各Podのログを確認すると、4)のコマンドを実行した時のログが、それぞれで確認できる。
ReplicaSetの作成_5_1

ReplicaSetの作成_5_2 ReplicaSetの作成_5_3

6)「kubectl delete pod/(削除するPod名)」コマンドで、Podを削除すると、以下のように、新しいPodが自動的に作成されることが確認できる。
ReplicaSetの作成_6

7) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、Podを再作成後も、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。
ReplicaSetの作成_7

8) 新しく作成されたPodのログを確認すると、以下のように、7)のコマンドを実行した時のログが確認できる。
ReplicaSetの作成_8

9)「kubectl delete -f (マニフェストファイル名)」コマンドを実行すると、以下のように、指定したマニフェストファイルで起動したReplicaset, Pod, Serviceを削除することができる。
ReplicaSetの作成_9

要点まとめ

  • ReplicaSetを利用すると、Kubernetesクラスター内で、定義したレプリカ数のPodを稼働し続けることができる。