バックアップと回復
RKE2はetcdスナップショットを使用してクラスター情報をバックアップします。このページでは、rke2 etcd-snapshot CLIツールを使用してetcdスナップショットを管理し、etcdスナップショットから復元する方法について説明します。スナップショットは埋め込みetcd専用であり、`datastore-endpoint`構成を使用して別のデータストアを使用する場合は、Experimentalに移動してください。
RKE2 etcdスナップショットはノードのファイルシステムに保存され、災害復旧シナリオのためにS3互換のオブジェクトストアにアップロードすることもできます。スナップショットは、定期的に自動化されることも、手動でオンデマンドで取得されることもあります。 rke2 etcd-snapshot CLIツールは、スナップショットを作成、削除、管理するために使用できる一連のサブコマンドを提供します。
| サブコマンド | 説明 |
|---|---|
delete |
指定されたスナップショットを削除する |
ls、list、l |
スナップショットの一覧 |
prune |
設定された保持数を超えるスナップショットを削除する |
保存 |
オンデマンドでetcdスナップショットをトリガーする |
etcdスナップショットサブコマンドに関する追加情報は、`rke2 etcd-snapshot --help`を実行してください。
スナップショットの作成
-
スケジュール済
-
オンデマンド
スケジュールされたスナップショットはデフォルトで有効で、システム時間の00:00と12:00に実行され、5つのスナップショットが保持されます。スケジュールされたスナップショットは、`etcd-snapshot`で始まり、ノード名とタイムスタンプが続く名前を持っています。
以下のオプションは、スケジュールされたスナップショットの操作を制御します:
| フラグ | 説明 |
|---|---|
|
スケジュールされたスナップショットを無効にする |
|
etcdスケジュールされたスナップショットの基本名を設定します。(デフォルト: |
|
etcdスナップショットを圧縮します。 |
|
dbスナップショットを保存するディレクトリ。(デフォルトの場所: |
|
保持するスナップショットの数(デフォルト:5) |
|
スナップショットの間隔時間をcron仕様で指定します。例えば、5時間ごとに`0 */5 * * * |
data-dirの値はデフォルトで`/var/lib/rancher/rke2`に設定されており、`--data-dir`フラグを設定することで独立して変更できます。
スケジュールされたスナップショットは、サーバーの`--etcd-snapshot-dir`値で設定されたパスに保存されます。S3互換のオブジェクトストアに複製したい場合は、S3設定オプションを参照してください。
スナップショットは`rke2 etcd-snapshot save`コマンドを実行することで手動で保存できます。これらのオンデマンドスナップショットには保持期間がなく、ユーザーは`rke2 etcd-snapshot delete`または`rke2 etcd-snapshot prune`コマンドを使用して手動で削除する必要があります。オンデマンドスナップショットの名前は`on-demand`で始まり、ノード名とタイムスタンプが続きます。
以下のオプションは、オンデマンドスナップショットの操作を制御します:
| フラグ | 説明 |
|---|---|
|
etcdオンデマンドスナップショットのベース名を設定します。(デフォルト: |
|
etcdスナップショットを圧縮します。 |
|
dbスナップショットを保存するディレクトリ。(デフォルトの場所: |
data-dirの値はデフォルトで`/var/lib/rancher/rke2`に設定されており、`--data-dir`フラグを設定することで独立して変更できます。
--name`フラグは`rke2 etcd-snapshot save`コマンドを実行しているときのみ設定できます。他の2つも`rke2 server 設定ファイルの一部となることができます。
オンデマンドスナップショットは、サーバーの`--etcd-snapshot-dir`値で設定されたパスに保存されます。S3互換のオブジェクトストアに複製したい場合は、S3設定オプションを参照してください。
スナップショットの削除
スケジュールされたスナップショットは、スナップショットの数が設定された保持カウント(デフォルトは5)を超えると自動的に削除されます。最も古いスナップショットが最初に削除されます。
スケジュールされたスナップショットまたはオンデマンドスナップショットを手動で削除するには、`rke2 etcd-snapshot delete`コマンドを使用できます:
rke2 etcd-snapshot delete <SNAPSHOT-NAME-1> <SNAPSHOT-NAME-2> ...
prune`サブコマンドは、名前のプレフィックス(デフォルトは`on-demand)に一致し、設定された保持カウントを超えるスナップショットを削除します。保持カウントを設定するためのフラグ`--snapshot-retention`が含まれています。スケジュールされたスナップショットの場合、デフォルトの保持ポリシーを上書きします。オンデマンドスナップショットには保持ポリシーがなく、このフラグが必要です。
"オンデマンド"スナップショットを少ない数に削減します:
rke2 etcd-snapshot prune --snapshot-retention <NUM-OF-SNAPSHOTS-TO-RETAIN>
"スケジュールされた"スナップショットを少ない数に削減します:
rke2 etcd-snapshot prune --name etcd-snapshot --etcd-snapshot-retention <NUM-OF-SNAPSHOTS-TO-RETAIN>
S3互換オブジェクトストアのサポート
RKE2は、etcdスナップショットをS3互換オブジェクトストアに複製し、そこから復元することをサポートしています。S3のサポートは、オンデマンドスナップショットとスケジュールされたスナップショットの両方で利用可能です。
| フラグ | 説明 |
|---|---|
|
S3へのバックアップを有効にします |
|
S3エンドポイントURL |
|
S3エンドポイントに接続するためのS3カスタムCA証明書 |
|
S3のSSL証明書検証を無効にします |
|
S3アクセスキー |
|
S3シークレットキー |
|
S3セッショントークン |
|
S3バケット名 |
|
S3バケットのルックアップタイプ、'auto'、'dns'、'path’のいずれか;設定されていない場合のデフォルトは’auto’です |
|
S3リージョン/バケットの場所(オプション)。デフォルトはus-east-1です |
|
S3フォルダー |
|
S3保持制限(デフォルト:5) |
|
S3に接続する際に使用するプロキシサーバー、プロキシ関連の環境変数を上書きします |
|
HTTPS経由のS3を無効にします |
|
S3タイムアウト (デフォルト: |
|
etcd-s3 が有効で、他の etcd-s3 オプションが設定されていない場合に、S3 を構成するために kube-system ネームスペース内で使用される秘密の名前 |
例えば、S3 でのオンデマンド etcd スナップショットの作成と削除は次のように機能します:
$ rke2 etcd-snapshot --s3 --s3-bucket=test-bucket --s3-access-key=test --s3-secret-key=secret save
INFO[0000] Snapshot on-demand-server-0-1754907117 saved.
$ rke2 etcd-snapshot --s3 --s3-bucket=test-bucket --s3-access-key=test --s3-secret-key=secret ls
Name Location Size Created
on-demand-server-0-1754907117 s3://test-bucket/test-folder/on-demand-server-0-1754907117 8937504 2025-07-22T10:02:03Z
on-demand-server-0-1754907117 file:///var/lib/rancher/rke2/server/db/snapshots/on-demand-server-0-1754907117 8937504 2025-07-22T10:02:03Z
$ rke2 etcd-snapshot --s3 --s3-bucket=test-bucket --s3-access-key=test --s3-secret-key=secret delete on-demand-server-0-1753178523
INFO[0000] Snapshot on-demand-server-0-1754907117 deleted.
$ rke2 etcd-snapshot --s3 --s3-bucket=test-bucket --s3-access-key=test --s3-secret-key=secret ls
Name Location Size Created
S3 保持
|
バージョンゲート
バージョンv1.34.0+rke2r1、v1.33.4+rke2r1、v1.32.8+rke2r1、v1.31.12+rke2r1から、RKE2にはS3保持用の新しいフラグが含まれています。それはローカルスナップショット保持と同じデフォルト値を持っています。 |
| フラグ | 説明 |
|---|---|
|
保持するS3のスナップショットの数(デフォルト: |
S3 構成秘密のサポート
|
バージョンゲート
S3構成シークレットのサポートは、2024年8月のリリース:v1.30.4+rke2r1、v1.29.8+rke2r1、v1.28.13+rke2r1から利用可能です。 |
RKE2はKubernetesシークレットからetcd S3スナップショット構成を読み取ることをサポートしています。
これは、セキュリティ上の理由からRKE2 CLIフラグや設定ファイルに資格情報をハードコーディングするよりも好まれる場合があります。また、RKE2を再起動せずに資格情報をローテーションする必要がある場合にも適しています。
シークレットを介してS3スナップショット構成を渡すには、--etcd-s3`と--etcd-s3-config-secret=<SECRET-NAME>`でRKE2を起動します。
RKE2が起動する際にシークレットは存在する必要はありませんが、スナップショットの保存/リスト/削除/プルーニング操作が行われるたびにチェックされます。
S3 構成 Secret はスナップショットを復元する際には使用できません。なぜなら、復元中に秘密を提供するための apiserver が利用できないからです。 S3 に保存されたスナップショットを復元する際には、CLI を介して S3 構成を渡す必要があります。
|
Secret を有効にするには、 |
Secret 内のキーは、上記の --etcd-s3-* CLI フラグに対応しています。
etcd-s3-endpoint-ca キーは PEM エンコードされた CA バンドルを受け入れます。また、etcd-s3-endpoint-ca-name キーを使用して、kube-system ネームスペース内にある 1 つ以上の PEM エンコードされた CA バンドルを含む ConfigMap の名前を指定することができます。
apiVersion: v1
kind: Secret
metadata:
name: rke2-etcd-snapshot-s3-config
namespace: kube-system
type: etcd.k3s.cattle.io/s3-config-secret
stringData:
etcd-s3-endpoint: ""
etcd-s3-endpoint-ca: ""
etcd-s3-endpoint-ca-name: ""
etcd-s3-skip-ssl-verify: "false"
etcd-s3-access-key: "AWS_ACCESS_KEY_ID"
etcd-s3-secret-key: "AWS_SECRET_ACCESS_KEY"
etcd-s3-bucket: "bucket"
etcd-s3-folder: "folder"
etcd-s3-region: "us-east-1"
etcd-s3-insecure: "false"
etcd-s3-timeout: "5m"
etcd-s3-proxy: ""
スナップショットの復元
RKE2はスナップショットを復元する際にいくつかのステップを実行します:
-
スナップショットがS3に保存されている場合、ファイルはスナップショットディレクトリにダウンロードされます。
-
スナップショットが圧縮されている場合、解凍されます。
-
存在する場合、現在のetcdデータベースファイルは`$<data-dir>/server/db/etcd-old-$TIMESTAMP/`に移動されます。
-
スナップショットの内容がディスクに抽出され、チェックサムが検証されます。
-
Etcdが起動し、現在のノードを除くすべてのetcdクラスターのメンバーがクラスターから削除されます。
-
CA証明書やその他の機密データがデータストアから抽出され、後で使用するためにディスクに書き込まれます。
-
復元が完了し、RKE2は復元が行われたサーバーで再起動して通常通り使用できます。
-
(オプション)エージェントとコントロールプレーンサーバーは通常通り起動できます。
-
(オプション)古いデータベースファイルを削除した後、etcdサーバーを再起動してクラスターに再参加できます。
スナップショットを復元する際、作成時と同じRKE2バージョンを使用する必要はありません。より高いマイナーバージョンも使用可能です。
スナップショット復元手順
クラスター構成に一致するタブを以下から選択してください。
-
単一サーバー
-
複数のサーバ
-
RKE2サービスを停止します:
systemctl stop rke2-server -
rke2 server`を--cluster-reset`フラグで実行し、--cluster-reset-restore-path`で復元するスナップショットのパスを指定します。 スナップショットがS3に保存されている場合、S3設定フラグ(--etcd-s3`、`--etcd-s3-bucket`など)を提供し、復元パスとしてスナップショットのファイル名のみを指定します。復元するスナップショットを指定せずに`--cluster-reset`フラグを使用すると、スナップショットを復元せずにetcdクラスターを単一メンバーにリセットします。
rke2 server \ --cluster-reset \ --cluster-reset-restore-path=<PATH-TO-SNAPSHOT>*結果:*RKE2はスナップショットを復元し、クラスターのメンバーシップをリセットし、再起動の準備ができたことを示すメッセージを表示します:
Managed etcd cluster membership has been reset, restart without --cluster-reset flag now. -
RKE2を再起動します:
systemctl start rke2-serverRKE2の設定ファイル内にetcd-s3バックアップ設定が定義されている場合、RKE2の復元は設定されたS3バケットからスナップショットファイルを取得しようとします。この場合、引数`--cluster-reset-restore-path`にはスナップショットのファイル名のみを渡す必要があります。etcd-s3バックアップ構成が存在するローカルスナップショットファイルから復元するには、引数`--etcd-s3=false`を追加し、引数`--cluster-reset-restore-path`にローカルスナップショットファイルのフルパスを渡します。
安全機構として、RKE2がクラスターをリセットするとき、`/var/lib/rancher/rke2/server/db/reset-flag`に空のファイルを作成し、ユーザーが連続して複数のクラスターリセットを誤って実行するのを防ぎます。このファイルはRKE2が通常通り起動すると削除されます。
この例では、3つのサーバー、S1、S2、`S3`があります。スナップショットは`S1`にあります。
-
すべてのサーバーでRKE2を停止してください。
systemctl stop rke2-server -
S1で、
rke2 server`を--cluster-reset`オプションで実行し、--cluster-reset-restore-path`には復元するスナップショットへのパスを指定します。 スナップショットがS3に保存されている場合、S3設定フラグ(--etcd-s3`、`--etcd-s3-bucket`など)を提供し、復元パスにはスナップショットのファイル名のみを指定します。復元するスナップショットを指定せずに`--cluster-reset`フラグを使用すると、スナップショットを復元せずにetcdクラスターを単一メンバーにリセットします。
rke2 server \ --cluster-reset \ --cluster-reset-restore-path=<PATH-TO-SNAPSHOT>*結果:*RKE2はスナップショットを復元し、クラスターのメンバーシップをリセットし、再起動の準備ができたことを示すメッセージを表示します:
Managed etcd cluster membership has been reset, restart without --cluster-reset flag now.
Backup and delete $<datadir>/server/db on each peer etcd server and rejoin the nodes. -
S1で、RKE2を再起動してください。
systemctl start rke2-server -
S2とS3では、`/var/lib/rancher/rke2/server/db/`にあるデータディレクトリを削除してください。
rm -rf /var/lib/rancher/rke2/server/db/ -
S2とS3で、復元されたクラスターに参加するためにRKE2を再起動してください。
systemctl start rke2-server
RKE2の設定ファイル内にetcd-s3バックアップ構成が定義されている場合、RKE2の復元は設定されたS3バケットからスナップショットファイルを取得しようとします。この場合、引数`--cluster-reset-restore-path`にはスナップショットのファイル名のみを渡す必要があります。etcd-s3バックアップ構成が存在するローカルスナップショットファイルから復元するには、引数`--etcd-s3=false`を追加し、引数`--cluster-reset-restore-path`にローカルスナップショットファイルのフルパスを渡します。
安全機構として、RKE2がクラスターをリセットするとき、`/var/lib/rancher/rke2/server/db/reset-flag`に空のファイルを作成し、ユーザーが連続して複数のクラスターリセットを誤って実行するのを防ぎます。このファイルはRKE2が通常通り起動すると削除されます。
新しいホストへの復元
etcdスナップショットを取得したホストとは異なるホストに復元することが可能です。その際、スナップショットを取得する際に元々使用されたサーバートークンを渡す必要があります。これはスナップショット内のブートストラップデータを復号化するために使用されます。プロセスは上記と同じですが、ステップ2を次のように変更します:
-
スナップショットを取得したノードで、次の値を保存します:
/var/lib/rancher/rke2/server/token。これはステップ3の`<BACKED-UP-TOKEN-VALUE>`です。 -
スナップショットを新しいノードにコピーしてください。ノード内のパスはステップ3の`<PATH-TO-SNAPSHOT>`です。
-
次のコマンドを使用して、最初のサーバーノードからスナップショットの復元を開始してください。
rke2 server \
--cluster-reset \
--cluster-reset-restore-path=<PATH-TO-SNAPSHOT>
--token=<BACKED-UP-TOKEN-VALUE>
トークンの値はRKE2の設定ファイルにも設定できます。
|
ETCDスナップショットファイル カスタムリソース
スナップショットは、クラスター範囲の`ETCDSnapshotFile`リソースをリストまたは説明することで、任意のKubernetesクライアントを使用してリモートで表示できます。 `rke2 etcd-snapshot list`コマンドがそのノードに表示されるスナップショットのみを表示するのとは異なり、`ETCDSnapshotFile`リソースはクラスターのメンバーに存在するすべてのスナップショットを追跡します。
$ kubectl get etcdsnapshotfile
Name Location Size Created
etcd-snapshot-server-0-1754906881 s3://test-bucket/test-folder/etcd-snapshot-server-0-1754906881 8937504 2025-08-11T10:08:01Z
etcd-snapshot-server-0-1754906881 file:///var/lib/rancher/rke2/server/db/snapshots/etcd-snapshot-server-0-1754907185 8937504 2025-08-11T10:08:01Z
etcd-snapshot-server-0-1754907185 s3://test-bucket/test-folder/etcd-snapshot-server-0-1754907185 9633824 2025-08-11T10:13:05Z
etcd-snapshot-server-0-1754907185 file:///var/lib/rancher/rke2/server/db/snapshots/etcd-snapshot-server-0-1754907185 9633824 2025-08-11T10:13:05Z
$ kubectl describe etcdsnapshotfile s3-etcd-snapshot-server-0-1754906881-e1e196
Name: s3-etcd-snapshot-server-0-1754906881-e1e196
Namespace:
Labels: etcd.rke2.cattle.io/snapshot-storage-node=s3
Annotations: etcd.rke2.cattle.io/snapshot-token-hash: 2bb80d537b1d
API Version: k3s.cattle.io/v1
Kind: ETCDSnapshotFile
Metadata:
Creation Timestamp: 2025-08-11T10:10:37Z
Finalizers:
wrangler.cattle.io/managed-etcd-snapshots-controller
Generation: 1
Resource Version: 2356
UID: d4fa68e7-b692-4ad8-8740-77d2bb9c062f
Spec:
Location: s3://test-bucket/test-folder/etcd-snapshot-server-0-1754906881
Node Name: server-0
s3:
Bucket: test-bucket
Endpoint: localhost:9090
Insecure: true
Prefix: test-folder
Region: us-east-1
Skip SSL Verify: true
Snapshot Name: etcd-snapshot-server-0-1754906881
Status:
Creation Time: 2025-08-11T10:08:01Z
Ready To Use: true
Size: 8937504
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ETCDSnapshotCreated 6m24s rke2-supervisor Snapshot etcd-snapshot-server-0-1754906881 saved on server-0
$ kubectl describe etcdsnapshotfile s3-on-demand-k3s-server-1-1730308816-79b15c
外部DBバックアップ(実験的)
|
データストア自体のバックアップに加えて、`/var/lib/rancher/rke2/server/token`にあるサーバートークンファイルもバックアップする必要があります。 バックアップから復元する際には、このファイルを復元するか、その値を`token`オプションに渡す必要があります。 復元時に同じトークン値を使用しない場合、スナップショットは使用できなくなります。トークンはデータストア内の機密データを暗号化するために使用されるためです。 |
SQLiteを使用したバックアップと復元
SQLiteデータストアをバックアップまたは復元するために特別なコマンドは必要ありません。
-
SQLiteデータストアをバックアップするには、`/var/lib/rancher/rke2/server/db/`のコピーを取ります。
-
SQLiteデータストアを復元するには、`/var/lib/rancher/rke2/server/db`の内容を復元します(上記で説明したように、トークンも復元してください)。