LoginSignup
20
21

More than 5 years have passed since last update.

メモ:CoreOS の自動アップデートを手動でロールバックする

Last updated at Posted at 2014-07-01
更新(2014/07/11):
自動アップデートをスキップする方法を最後に追加しました。


お詫びと訂正(2014/07/10):
本エントリの中で、「ロールバック後アップデートがスキップされ次回アップデートまでそのまま使い続けられる」旨の記述がありましたが、間違いでした。
しばらくすると、再度同じアップデートが行われてしまいます。
これが意図された正しい動作なのか疑問が残りますが、アップデートは必ず実行されるようです。
不正確な情報発信をしてしまい、申し訳ありませんでした。

CoreOS は、リードオンリーの /usr パーティションを A、B 2つ持っていて、自動アップデートでは使われていない方のパーティションにインストールされ、リブート(これも自動)時に切り替えています。

下の図では 最初 A が使われていて、A が起動中に自動アップデートが始まると、B に対してインストールが始まります。
インストール後、B をプライマリに設定して、リブートがかかり、B をマウントして起動します。

Updates & Patches - CoreOS 2014-07-01 11-54-52 2014-07-01 11-55-01.png

ここで、B でブートに失敗すると、A がブート対象になり、自動的にロールバックがかかります。

ちなみに、アップデート・サーバは各 CoreOS マシンの machine-id を見ている?ので、同じアップデートは2回実行されることはありません。 起動時に `/var/lib/update_engine/prefs/` をチェックして、前回のアップデートを認識していました。

CoreOS ではブートパーティションの管理に cgpt が使われています。

使用中のパーティションを調べる

core@localhost ~ $ sudo su
localhost core # findmnt -n --raw --output=source --target=/usr
/dev/sda3
localhost core # cgpt show -v /dev/sda3
       start        size    part  contents
      264192     2097152       3  Label: "USR-A"
                                  Type: Alias for coreos-rootfs
                                  UUID: 7130C94A-213A-4E5A-8E26-6CCE9662F132
                                  Attr: priority=1 tries=0 successful=1
localhost core # cgpt show -v /dev/sda4
       start        size    part  contents
     2492416     2097152       4  Label: "USR-B"
                                  Type: Alias for coreos-rootfs
                                  UUID: E03DD35C-7C2D-4A47-B3FE-27F15780A57C
                                  Attr: priority=0 tries=0 successful=0

priority が大きい方が最初に選択されます。
tries の数だけリトライされ、0 になってもダメな場合は、次の priority をブートします。
successful をセットすると、ブート可能のものと判断され、使い続けられます。

自動アップデートが実行され、B に対してインストールされると、

localhost core # cgpt show -v /dev/sda4
       start        size    part  contents
     2492416     2097152       4  Label: "USR-B"
                                  Type: Alias for coreos-rootfs
                                  UUID: E03DD35C-7C2D-4A47-B3FE-27F15780A57C
                                  Attr: priority=2 tries=1 successful=0

の状態でリブートがかかります。
リブート後に見てみると、

localhost core # findmnt -n --raw --output=source --target=/usr
/dev/sda4
localhost core # cgpt show -v /dev/sda4
       start        size    part  contents
     2492416     2097152       4  Label: "USR-B"
                                  Type: Alias for coreos-rootfs
                                  UUID: E03DD35C-7C2D-4A47-B3FE-27F15780A57C
                                  Attr: priority=2 tries=0 successful=0

しばらくすると、successful=1 に更新されます。

さて、ここでブートには成功したものの、内部のプログラムにバグやデグレードがあった場合、手動で A にロールバックしたくなります。

手動ロールバック

cgpt prioritize を使って起動したパーティションのプライオリティを上げてリブートします。

localhost core # cgpt show -v /dev/sda3
       start        size    part  contents
      264192     2097152       3  Label: "USR-A"
                                  Type: Alias for coreos-rootfs
                                  UUID: 7130C94A-213A-4E5A-8E26-6CCE9662F132
                                  Attr: priority=1 tries=0 successful=1
localhost core # cgpt prioritize /dev/sda3
localhost core # cgpt show -v /dev/sda3
       start        size    part  contents
      264192     2097152       3  Label: "USR-A"
                                  Type: Alias for coreos-rootfs
                                  UUID: 7130C94A-213A-4E5A-8E26-6CCE9662F132
                                  Attr: priority=2 tries=0 successful=1
localhost core # reboot

これで、A でブートされます。
同じアップデートは2回実行されないので、次のリリースまで、このまま A を使い続けることが出来ます。

追記(2014/07/11):

自動アップデートに関わるファイルで編集/カスタマイズ可能なファイルは、
/etc/coreos/update.conf

ここにスキップしたい最新バージョンを書き込めば次回リリースまで更新を停止出来ます。

GROUP=alpha

GROUP=alpha
COREOS_RELEASE_VERSION=367.0.0

ただし、次回のリリースで更新が完了したら、元に戻さないとアップデートが繰り返されてしまいますので、注意。

ちなみに、GROUP を変更すると、現在使用しているリリースチャンネルを変更することも出来ます。(これは公式ガイドあり)
Switching Release Channels
http://coreos.com/docs/cluster-management/setup/switching-channels/

20
21
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21