Backup & Restore
バックアップとリストア手法
- マニフェストファイルを利用する
- etcd のスナップショットを利用する
マニフェストファイルを利用する
クラウドサービスなどでホストしている Kubernetes クラスタの場合 etcd にアクセスできないので、マニフェストファイルをバックアップする必要が出てくる。
以下のコマンドで一括取得し、一部のコンポーネントについてはバックアップが可能。
$ kubectl get all --all-namespaces -o yaml > full-backup.yaml
etcd のスナップショットを利用する
etcd のスナップショットを利用したリストアについて以下で解説する。
etcd への接続準備
$ kubectl describe pod etcd-master -n kube-system などのコマンドから、接続に必要な情報を取得しておく。
一部抜粋
Command:
etcd
--advertise-client-urls=https://127.0.0.1:2379
--cert-file=/etc/kubernetes/pki/etcd/server.crt
--client-cert-auth=true
--data-dir=/var/lib/etcd
--initial-advertise-peer-urls=https://127.0.0.1:2380
--initial-cluster=master=https://127.0.0.1:2380
--key-file=/etc/kubernetes/pki/etcd/server.key
--listen-client-urls=https://127.0.0.1:2379
--listen-peer-urls=https://127.0.0.1:2380
--name=master
--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
--peer-client-cert-auth=true
--peer-key-file=/etc/kubernetes/pki/etcd/peer.key
--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
--snapshot-count=10000
--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
スナップショットの取得
上で取得した情報を利用し、/tmp/snapshot-pre-boot.db にバックアップ用のスナップショットを保存する。
$ ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /tmp/snapshot-pre-boot.db
Snapshot saved at /tmp/snapshot-pre-boot.db
スナップショットを新しいフォルダにリストア
data-dir および initial-cluster-token を新しいものに変更し、データをまずはリストアする。
ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--name=master \
--cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key \
--data-dir /var/lib/etcd-from-backup \
--initial-cluster=master=https://127.0.0.1:2380 \
--initial-cluster-token etcd-cluster-1 \
--initial-advertise-peer-urls=https://127.0.0.1:2380 \
snapshot restore /tmp/snapshot-pre-boot.db
2019-09-21 15:43:18.312634 I | mvcc: restore compact to 1316
2019-09-21 15:43:18.318647 I | etcdserver/membership: added member e92d66acd89ecf29 [https://127.0.0.1:2380] to cluster 7581d6eb2d25405b
稼働中の etcd pod の設定を変更する
今回 etcd は static pod で動いているので /etc/kubernetes/manifests/etcd.yaml を編集すればよい。
起動時に渡されるコマンドを以下の通りに変更する。
--data-dir=/var/lib/etcd-from-backup
--initial-cluster-token=etcd-cluster-1
また、 Volume 周りについても設定変更が必要で、etcd-data の mountPath と hostPath を変更する。
volumeMounts:
- mountPath: /var/lib/etcd-from-backup
name: etcd-data
- mountPath: /etc/kubernetes/pki/etcd
name: etcd-certs
hostNetwork: true
priorityClassName: system-cluster-critical
volumes:
- hostPath:
path: /var/lib/etcd-from-backup
type: DirectoryOrCreate
name: etcd-data
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
