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

ステップ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 editkubectl applyのような他のコマンドによって、以前のリビジョンに更新することに相当します。

トラブルシューティング

最終更新 April 05, 2025 at 1:39 PM PST: Apply review feedback (c16b900ba5)