Kubernetes

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

Deploymentを利用すると、Kubernetesクラスター内で作成したReplicaSetについて、デプロイ管理の仕組みを利用することができる。

今回は、nginxを搭載したDockerイメージを利用して、Pod,ReplicaSet,Deployment,Serviceを作成し、ローカル端末からnginxを搭載したPodにアクセスしてみたので、その手順を共有する。

なお、Deploymentについては、以下のサイトを参照のこと。
https://qiita.com/tkusumi/items/01cd18c59b742eebdc6a

また、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イメージ

やってみたこと

  1. Deploymentの作成
  2. Deploymentの更新
  3. Deploymentのロールバック

Deploymentの作成

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

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

apiVersion: apps/v1
kind: Deployment
metadata:
  # Deployment名
  name: nginx-dep
  # Deploy履歴コメント
  annotations:
    kubernetes.io/change-cause: "First release."
spec:
  # 作成するPod数
  replicas: 2
  selector:
    matchLabels:
      # ラベル(Pod,Service,Deploymentを紐付けるために利用)
      app: web-nginx
      env: test
  # 残すDeploy履歴コメント数
  revisionHistoryLimit: 5
  # Deploy時は、旧Podから新Podへ切り替えていくので、その際の動きを指定
  strategy:
    type: RollingUpdate
    rollingUpdate:
      # maxSurge,maxUnavailableは、数値または%で指定
      # Deploy時に、作成するPod数(replicas)をいくつ超えてよいかを指定
      maxSurge: 1
      # Deploy時に、一度に消失してよいPod数を指定
      maxUnavailable: 1
  # 複製したいPodのマニフェスト
  template:
    metadata:
      # Pod名
      name: nginx-pod
      # ラベル(Pod,Service,Deploymentを紐付けるために利用)
      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,Deploymentを紐付けるために利用)
  selector:
    app: web-nginx
    env: test
  # ポート転送設定
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  # ノード受付ポート(30000番以上を指定)
    nodePort: 30080

2) 1)のファイルを配置し、「kubectl apply -f (マニフェストファイル名)」コマンドを実行し、Pod,ReplicaSet,Deployment,Serviceを作成する。
Deploymentの作成_2_1

Deploymentの作成_2_2

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

4)「kubectl rollout history deploy/(Deployment名)」コマンドを実行すると、Deploy時の履歴コメントが確認できる。
Deploymentの作成_4

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

6) 各Podのログを確認すると、5)のコマンドを実行した時のログが、いずれかで確認できる。
Deploymentの作成_6_1

Deploymentの作成_6_2 Deploymentの作成_6_3

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



「CODE×CODE」は、需要の高い技術(AWS, Python等)を習得できるプログラミングスクールスクールだった近年、さまざまな会社でクラウド(特にIaaSやPaaSのパブリッククラウド)の需要が非常に高まっていて、クラウドサービスによるシステム開...

Deploymentの更新

Deploymentのマニフェストのうち、DeploymentのPodテンプレート(spec.template)を変更し「kubectl apply -f (マニフェストファイル名)」コマンドを実行すると、Deploy時の履歴コメントを残すことができる。

その詳細は、以下のサイトを参照のこと。
https://qiita.com/dingtianhongjie/items/1129883270e7e0b29459

Deploymentのマニフェストを変更し、Deploy時の履歴コメントを確認する手順は、以下の通り。

1)「kubectl rollout history deploy/(Deployment名)」コマンドを実行すると、Deploy時の履歴コメントが確認できる。
Deploymentの更新_1

2) 以下のように、マニフェストファイル(nginx-test-deployment.yml)の赤枠部分を変更する。
Deploymentの更新_2

3) 2)のファイルを配置し、「kubectl apply -f (マニフェストファイル名)」コマンドを実行し、Deploymentを更新する。その後、「kubectl get all」コマンドで、Pod,ReplicaSet,Deployment,Serviceの状態を確認する。
Deploymentの更新_3

4)「kubectl rollout history deploy/(Deployment名)」コマンドを実行すると、Deploy時の履歴コメントが追加されたことが確認できる。
Deploymentの更新_4

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

6) 各Podのログを確認すると、5)のコマンドを実行した時のログが、いずれかで確認できる。
Deploymentの更新_6_1

Deploymentの更新_6_2 Deploymentの更新_6_3



株式会社ベアフォスターホールディングスでスキルチェンジできました私はこれまで、Javaを中心としたシステム開発を行ってきましたが、将来的には、Pythonを利用したAI(人工知能)開発を行いたいと思う...

Deploymentのロールバック

Deploymentのデプロイ履歴を残している場合、ロールバックすることもできる。その手順は、以下の通り。

1)「kubectl undo history deploy/(Deployment名)」コマンドを実行すると、以下のように、Deploy履歴をロールバックすることができる。
Deploymentのロールバック_1

2)「kubectl get all」コマンドで、Pod,ReplicaSet,Deployment,Serviceの状態を確認する。
Deploymentのロールバック_2

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

4) 各Podのログを確認すると、3)のコマンドを実行した時のログが、いずれかで確認できる。
Deploymentのロールバック_4_1

Deploymentのロールバック_4_2 Deploymentのロールバック_4_3

5)「kubectl delete -f (マニフェストファイル名)」コマンドを実行すると、以下のように、指定したマニフェストファイルで起動したReplicaset, Pod, Serviceを削除することができる。
Deploymentのロールバック_5

要点まとめ

  • Deploymentを利用すると、Kubernetesクラスター内で作成したReplicaSetについて、デプロイ管理の仕組みを利用することができる。