0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes クラスタのバックアップを取得したいとき

Last updated at Posted at 2024-12-05

Kubernetes クラスタのバックアップを取りたい

Kuberentes クラスタの安全性の保持のために、バックアップを取得したい時があります。
組み込みのスナップショット機能を使用して ETCD データベースのスナップショットを取得するときに利用するコマンドを、この記事では説明します。

  • etcdctl snapshot save
  • etcdctl snapshot restore

etcdctl snapshot save

ETCD のスナップショットを取得するコマンド。
これによって、渡したパスにスナップショットが取得されます。
コマンド実行例を次に示します。

$ ETCDCTL_API=3 etcdctl --endpoints=http://ENDPOINTS \
--cacert=CACERT_PATH \
--cert=CERT_PATH \
--key=SERVER_KEY_PATH \
snapshot save /opt/snapshot-pre-boot.db

Snapshot saved at /opt/snapshot-pre-boot.db

それぞれのオプションの意味を次に示します。

  • --endpoints: ETCD サーバが実際にクライアントから接続を受け付けるアドレスを指定
  • --cacert: ETCD CA 証明書ファイルのパスを指定
  • --cert: ETCD サーバ証明書ファイルのパスを指定
  • --key: ETCD サーバがクライアントを識別するために使用する SSL 鍵ファイル

これらのアドレスやパスの確認方法は、後述の「ETCD の設定の確認方法」を参照ください。

etcdctl snapshot restore

スナップショットを復元するコマンド。
これによって、etcdctl snapshot save で取得したスナップショットを復元できます。
コマンド実行例を次に示します。

$ ETCDCTL_API=3 etcdctl  --data-dir /var/lib/etcd-from-backup \
snapshot restore /opt/snapshot-pre-boot.db

バックアップを作成したサーバと同じサーバで復元する場合には、
上記のように、--data-dir のオプションのみが必要になる。

復元後には、/etc/kubernetes/manifests/etcd.yaml をアップデートするのを忘れないでください。
上記の場合は、ETCD のスナップショットを新しいパス /var/lib/etcd-from-backup へ復元したため、
それを YAML ファイルへ反映させます。
具体的には、etcd-data の hostPath の部分を修正します。

  volumes:
  - hostPath:
      path: /var/lib/etcd-from-backup
      type: DirectoryOrCreate
    name: etcd-data

これによって、コンテナ上の /var/lib/etcd は、コントロールプレーン上の /var/lib/etcd-from-backup を指すようになります。
このファイルが更新されると、ETCD Pod は /etc/kubernetes/manifests ディレクトリの下に配置される静的 Pod であるため、自動的に再作成されます。

注意

ETCD Pod が変更されると、自動的に再起動され、kube-controller-manager および kube-scheduler も再起動されます。このポッドが再起動するまで 1-2 分かかります。次のコマンドを実行すると、ETCD ポッドがいつ再起動されるかを確認できます。

$ watch "crictl ps | grep etcd"

ETCD ポッドが Ready 1/1 になっていない場合は、次のコマンドで再起動し、1 分間待ってください。

$ kubectl delete pod -n kube-system etcd-controlplane

ETCD の設定の確認方法

ETCD のバージョン

$ kubectl describe pod etcd-controlplane -n kube-system| grep -i image
    Image:         registry.k8s.io/etcd:3.5.15-0

ETCD のクライアントからの接続を受付けるアドレス

$ kubectl describe pod etcd-controlplane -n kube-system | grep advertise-client-urls
   --advertise-client-urls=https://192.168.28.11:2379

ETCD サーバ証明書ファイルのパス

$ kubectl describe pods etcd-controlplane -n kube-system | grep cert-file
    --cert-file=/etc/kubernetes/pki/etcd/server.crt

ETCD CA 証明書ファイルのパス

$ kubectl describe pods etcd-controlplane -n kube-system | grep trusted-ca-file
      --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

SSL 鍵のファイルパス

$ kubectl describe pod etcd-controlplane -n kube-system | grep key-file
      --key-file=/etc/kubernetes/pki/etcd/server.key

参考

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?