【Kubernetesリソースシリーズ第三弾】Deploymentについて知る!
どもです。世界中のパーカーを無限回収したいsaisaiです。
今回はkubernetesリソースシリーズ第三弾ということで、Deploymentについて学んでいきたいと思います。
Deploymentという単語もkubernetes関連の様々な記事で目にします。バッチリ抑えておきましょう。
Deploymentの概要
Deploymentとは、Replicasetの集合体です。Replicasetにつきましてはこちらの記事で取り上げておりますので、まだご存知でない方はご参照ください。
Replicasetの世代管理ができることが大きな特徴といえます。マニフェストファイルは以下の通りです。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
annotations:
kubernetes.io/change-cause: "First release." #デプロイにコメントをつける
spec:
replicas: 2 #Replicasetの数
selector:
matchLabels:
app: web
env: study
revisionHistoryLimit: 14 #Replicasetの保存する世代数(デフォルトは10)
strategy: #デプロイ方法を指定します
type: RollingUpdate #ローリングアップデート
rollingUpdate:
maxSurge: 1 #レプリカ数を超えて良いpod数
maxUnavailable: 1 #一度に消失しても良いpod数
template: #作成、増減するpodの情報
metadata:
name: nginx
labels:
app: web
env: study
spec:
containers:
- name: nginx
image: nginx:1.17.2-alpine
それでは実際にDeploymantを起動していきます。
Deploymentの起動と世代操作
それでは早速Deploymentを起動してみます。
$ kubectl apply -f deployment.yml
deployment.apps/nginx created
内容を確認してみましょう。
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/nginx-84f6544559-wsxpk 1/1 Running 0 68s
pod/nginx-84f6544559-zwgqc 1/1 Running 0 68s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d2h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 2/2 2 2 68s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-84f6544559 2 2 2 68s
podが2つ作成されていますね!その他のリソースもバッチリ作成されています。
続いて履歴についてみていきます。初めてのデプロイであることが確認できます。
kubectl rollout history deploy/nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
1 First release.
それでは、上記マニフェストファイルを修正してもう一度デプロイを行ってみましょう。以下の部分を変更します。
kubernetes.io/change-cause: "First release."
-> kubernetes.io/change-cause: "Second release." #コメントの修正
image: nginx:1.17.2-alpine
-> image: nginx:1.17.3-alpine #Docker Imageのバージョン変更
それでは、変更を適用しましょう。
$ kubectl apply -f deployment.yml
deployment.apps/nginx configured
履歴を再度確認します。
$ kubectl rollout history deploy/nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
1 First release.
2 Second release.
無事アップデートが行われたことが確認できます。
続いで前の世代にロールバックしてみましょう。
$ kubectl rollout undo deploy/nginx
deployment.apps/nginx rolled back
ここでもう一度履歴を確認してみます。
$ kubectl rollout history deploy/nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
2 Second release
3 <none>
世代候補の中から第一世代が消えていますね!前の世代に戻ることができたといえそうです。
ひとこと
今回はkubernetesリソースのひとつである、Deploymentについて学習したことを記事にしてみました。
世代管理する対象のスケールがマトリョーシカのように大きくなってきてなかなか困惑する内容になりますが、クラスター構成全体を広く見渡せるようどんどん実戦で使っていきたいと思います。
ここまで読んでいただきありがとうございました。
-saisai-
↓オススメ教材