DaemonSet上でロールバックを実施する
このページでは、DaemonSet上でロールバックを行う方法について説明します。
始める前に
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
作業するKubernetesサーバーは次のバージョン以降のものである必要があります: 1.7.バージョンを確認するには次のコマンドを実行してください: kubectl version
.
DaemonSet上でローリングアップデートを実施する方法については既に知っているものとします。
DaemonSet上のロールバックの実施
ステップ1: ロールバック先のDaemonSetのリビジョンを見つける
最新のリビジョンにロールバックしたい場合は、このステップを省略できます。
DaemonSetの全てのリビジョンを列挙します:
kubectl rollout history daemonset <daemonset-name>
これはDaemonSetのリビジョンのリストを返します:
daemonsets "<daemonset-name>"
REVISION CHANGE-CAUSE
1 ...
2 ...
...
- 変更理由は作成時にDaemonSetのアノテーション
kubernetes.io/change-cause
からコピーされます。 実行したコマンドをchange-causeアノテーションに記録するために、kubectl
内で--record=true
を指定することができます。
特定のリビジョンの詳細を見るためには次を実行します:
kubectl rollout history daemonset <daemonset-name> --revision=1
これは、そのリビジョンの詳細を返します:
daemonsets "<daemonset-name>" with revision #1
Pod Template:
Labels: foo=bar
Containers:
app:
Image: ...
Port: ...
Environment: ...
Mounts: ...
Volumes: ...
ステップ2: 特定のリビジョンにロールバックする
# ステップ1で得たリビジョン番号を--to-revisionで指定します。
kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision>
成功すると、コマンドは次を返します:
daemonset "<daemonset-name>" rolled back
備考:
--to-revision
フラグが指定されない場合は、kubectlは最新のリビジョンを取得します。ステップ3: DaemonSetのロールバックの進行状況を監視する
kubectl rollout undo daemonset
は、サーバーに対してDaemonSetのロールバックを開始するよう指示します。
実際のロールバックはクラスターのコントロールプレーン内で非同期に実行されます。
ロールバックの進行状況を監視するためには次を実行します:
kubectl rollout status ds/<daemonset-name>
ロールバックが完了すると、次のような出力が得られます:
daemonset "<daemonset-name>" successfully rolled out
DaemonSetのリビジョンを理解する
前のkubectl rollout history
のステップでは、DaemonSetのリビジョンのリストを取得しました。
各リビジョンは、ControllerRevisionという名前のリソースに格納されています。
各リビジョンに何が格納されているか確認するためには、DaemonSetのリビジョンの生のリソースを探します:
kubectl get controllerrevision -l <daemonset-selector-key>=<daemonset-selector-value>
これはControllerRevisionsのリストを返します:
NAME CONTROLLER REVISION AGE
<daemonset-name>-<revision-hash> DaemonSet/<daemonset-name> 1 1h
<daemonset-name>-<revision-hash> DaemonSet/<daemonset-name> 2 1h
各ControllerRevisionはアノテーションとDaemonSetのリビジョンのテンプレートを格納します。
kubectl rollout undo
は特定のControllerRevisionを受け取り、DaemonSetのテンプレートを、ControllerRevision内に保管されたテンプレートに置き換えます。
kubectl rollout undo
はDaemonSetのテンプレートを、kubectl edit
やkubectl apply
のような他のコマンドによって、以前のリビジョンに更新することに相当します。
備考:
DaemonSetのリビジョンはロールフォワードのみとなります。 これはつまり、ロールバックが完了すると、ControllerRevisionのリビジョン番号(.revision
フィールド)が繰り上がります。
例えば、システムにリビジョン1と2があってリビジョン2からリビジョン1にロールバックすると、.revision: 1
のControllerRevisionは.revision: 3
になります。