Deploymentについて

kubernetes

全体図

Deploymentは、Nodeをまたぎ、さらにReplicasetを包み込んでいる緑色の点線のイメージ。

Deploymentとは

PodのDeploy時に新しいReplicaSetを作成し、旧ReplicaSet管理下の旧Podを一つずつ減らしながら、新ReplicaSet下の新Podを増やし、段階的に置き換えて無停止更新します。また、ロールバックも同様の仕組みで無停止で行います。

実運用ではReplicasetやPod単体で管理することはほとんどなく、このDeploymentでデプロイを管理します。

Deploymentの位置づけ

この図の様に、ReplicasetはPodのラッパーであり、さらにそれらを包み込み世代管理をしているのがDeploymentである。

Deploymentを試す

Deployment作成

kubectl create deployment --image gcr.io/google-samples/hello-app:1.0 helloworld

DeploymentのUpdate

kubectl set image deploy helloworld helloworld=gcr.io/google-samples/hello-app:2.0

dockerImageをセットすることで簡単にUpdateすることができる。

Deploymentのロールアウト

kubectl rollout undo deploy helloworld

undoは一つ前の世代へpodをロールバックさせます。

まとめ

無停止更新やロールバック以外の機能(自動復旧やレプリカ増減)などはReplicasetで説明したので割愛します。

今回はコマンドで作成しましたが、実際にはdry-runすることでYamlファイルを吐き出し、それらを必要に応じて編集するながれをとります。

これはなぜかと言うと、yamlなどのファイルとして残しておけばgithubなどでソース管理することで履歴がのこり、変更Historyを追うことができます。

もしもコマンドだけで行うと、コマンド実行者にしか具体的なことはわからなくなってしまい、何か障害が起きた時にdebugging がしにくくなります。

このあたりも、昨今「infrastructure as code」と騒がれている理由の一つだと思います。

インフラの見える化と、情報共有は無駄な時間を削減する良い選択肢です。

タイトルとURLをコピーしました