現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン: v1.33
Kubernetes v1.33 のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: 最新バージョン
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になります。