【Kubernetesリソースシリーズ第三弾】Deploymentについて知る!

10月 11, 2023

どもです。世界中のパーカーを無限回収したい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-


↓オススメ教材

kubernetes

Posted by CY