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を有効化済であること。
また、nginxを搭載したDockerイメージは、以下の場所に格納されている「1.27.0」タグを利用すること。
https://hub.docker.com/_/nginx
やってみたこと
Deploymentの作成
nginxを搭載したDockerイメージを利用して、Pod,ReplicaSet,Deployment,Serviceを作成し、ローカル端末からnginxを搭載したPodにアクセスしたり、Pod削除時のReplicaSetの動作を確認する。その手順は、以下の通り。
1) マニフェストファイル(nginx-test-deployment.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 58 59 60 61 62 63 64 65 66 67 | 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を作成する。
3)「kubectl get all」コマンドを実行すると、作成したPod,ReplicaSet,Deployment,Serviceの状態を確認できる。また、Podはreplicasで指定した2個、作成されている。
4)「kubectl rollout history deploy/(Deployment名)」コマンドを実行すると、Deploy時の履歴コメントが確認できる。
5) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、以下のように、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。
6) 各Podのログを確認すると、5)のコマンドを実行した時のログが、いずれかで確認できる。
7)「kubectl delete pod/(削除するPod名)」コマンドで、Podを削除すると、以下のように、新しいPodが自動的に作成されることが確認できる。
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時の履歴コメントが確認できる。
2) 以下のように、マニフェストファイル(nginx-test-deployment.yml)の赤枠部分を変更する。
3) 2)のファイルを配置し、「kubectl apply -f (マニフェストファイル名)」コマンドを実行し、Deploymentを更新する。その後、「kubectl get all」コマンドで、Pod,ReplicaSet,Deployment,Serviceの状態を確認する。
4)「kubectl rollout history deploy/(Deployment名)」コマンドを実行すると、Deploy時の履歴コメントが追加されたことが確認できる。
5) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、以下のように、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。
6) 各Podのログを確認すると、5)のコマンドを実行した時のログが、いずれかで確認できる。
Deploymentのロールバック
Deploymentのデプロイ履歴を残している場合、ロールバックすることもできる。その手順は、以下の通り。
1)「kubectl undo history deploy/(Deployment名)」コマンドを実行すると、以下のように、Deploy履歴をロールバックすることができる。
2)「kubectl get all」コマンドで、Pod,ReplicaSet,Deployment,Serviceの状態を確認する。
3) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、以下のように、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。
4) 各Podのログを確認すると、3)のコマンドを実行した時のログが、いずれかで確認できる。
5)「kubectl delete -f (マニフェストファイル名)」コマンドを実行すると、以下のように、指定したマニフェストファイルで起動したReplicaset, Pod, Serviceを削除することができる。
要点まとめ
- Deploymentを利用すると、Kubernetesクラスター内で作成したReplicaSetについて、デプロイ管理の仕組みを利用することができる。