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)を以下の内容で作成する。
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: 300802) 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について、デプロイ管理の仕組みを利用することができる。



