Kubernetesバックアップとリカバリ
10733 ワード
文章の主な参考
https://yq.aliyun.com/articles/336781?spm=a2c4e.11153940.blogcont561894.22.11337fffUWosVP
主な手順を記録する
etcdデータ をバックアップ
まず、ETCDには3つのバックアップがあり、同期するので、1台のmasterマシンでETCDバックアップを実行するだけでいいです.
また、次のコマンドを実行する前に、現在のマシンのkube-apiserverが実行されていることを確認します.
バックアップの実行
実行が完了すると、/var/lib/etcd_backupでバックアップのsnapshotを見つけます
ETCDのバックアップによるKubernetesクラスタ のリカバリ
まず、マスターマシンを3台ずつ停止して、クベapiserverが停止していることを確認し、次のコマンドを実行して値を0にします.
それぞれ3台のMasterノードでETCDサービスを停止
ETCDデータディレクトリの削除
各ノードでデータをリカバリするには、まず、バックアップデータが/var/lib/etcd_に存在すると仮定して、各masterノードにデータをコピーする必要があります.backup/backup_20180107172459.db
リカバリコマンドの実行
それぞれ3つのマスターノードでETCDを起動し、サービスコマンドで起動成功を確認します.
ETCDが健康であれば、Master 1台につきkube-apiserverを回復します
クラスタが正常に回復したかどうかを確認すると、クラスタが正常に起動していることがわかります.以前に導入されたアプリケーションもあります.まとめ: Kubernetesのバックアップは主にETCDのバックアップで完了しています.リカバリでは、kube-apiserverを停止し、ETCDを停止し、データをリカバリし、ETCDを起動し、kube-apiserverを起動する順序を主に考慮します.アリクラウドコンテナサービスKubernetesクラスタへようこそ.
転載先:https://www.cnblogs.com/ericnie/p/8847933.html
https://yq.aliyun.com/articles/336781?spm=a2c4e.11153940.blogcont561894.22.11337fffUWosVP
主な手順を記録する
まず、ETCDには3つのバックアップがあり、同期するので、1台のmasterマシンでETCDバックアップを実行するだけでいいです.
また、次のコマンドを実行する前に、現在のマシンのkube-apiserverが実行されていることを確認します.
ps -ef|grep kube-apiserver
root 2063 2047 1 1 05 ? 00:41:01 kube-apiserver
バックアップの実行
export ETCD_SERVERS=$(ps -ef|grep apiserver|grep -Eo "etcd servers=.*2379"|awk -F= '{print $NF}')
mkdir -p /var/lib/etcd_backup/
export ETCDCTL_API=3
etcdctl snapshot --endpoints=$ETCD_SERVERS --cacert=/var/lib/etcd/cert/ca.pem --cert=/var/lib/etcd/cert/etcd-client.pem --key=/var/lib/etcd/cert/etcd-client-key.pem save /var/lib/etcd_backup/backup_$(date "+%Y%m%d%H%M%S").db
Snapshot saved at /var/lib/etcd_backup/backup_20180107172459.db
実行が完了すると、/var/lib/etcd_backupでバックアップのsnapshotを見つけます
[root@iZwz95q64qi83o88y9lq4cZ etcd_backup]# cd /var/lib/etcd_backup/
[root@iZwz95q64qi83o88y9lq4cZ etcd_backup]# ls
backup_20180107172459.db
[root@iZwz95q64qi83o88y9lq4cZ etcd_backup]# du -sh backup_20180107172459.db
8.0M backup_20180107172459.db
まず、マスターマシンを3台ずつ停止して、クベapiserverが停止していることを確認し、次のコマンドを実行して値を0にします.
mkdir -p /etc/kubernetes/manifests-backups
mv /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests-backups/
ps -ef|grep kube-api|grep -v grep |wc -l
0
それぞれ3台のMasterノードでETCDサービスを停止
service etcd stop
ETCDデータディレクトリの削除
mv /var/lib/etcd/data.etcd /var/lib/etcd/data.etcd_bak
各ノードでデータをリカバリするには、まず、バックアップデータが/var/lib/etcd_に存在すると仮定して、各masterノードにデータをコピーする必要があります.backup/backup_20180107172459.db
scp /var/lib/etcd_backup/backup_20180107172459.db root@master1:/var/lib/etcd_backup/
scp /var/lib/etcd_backup/backup_20180107172459.db root@master2:/var/lib/etcd_backup/
scp /var/lib/etcd_backup/backup_20180107172459.db root@master3:/var/lib/etcd_backup/
リカバリコマンドの実行
set -x
export ETCD_NAME=$(cat /usr/lib/systemd/system/etcd.service|grep ExecStart|grep -Eo "name.*-name-[0-9].*--client"|awk '{print $2}')
export ETCD_CLUSTER=$(cat /usr/lib/systemd/system/etcd.service|grep ExecStart|grep -Eo "initial-cluster.*--initial"|awk '{print $2}')
export ETCD_INITIAL_CLUSTER_TOKEN=$(cat /usr/lib/systemd/system/etcd.service|grep ExecStart|grep -Eo "initial-cluster-token.*"|awk '{print $2}')
export ETCD_INITIAL_ADVERTISE_PEER_URLS=$(cat /usr/lib/systemd/system/etcd.service|grep ExecStart|grep -Eo "initial-advertise-peer-urls.*--listen-peer"|awk '{print $2}')
ETCDCTL_API=3 etcdctl snapshot --cacert=/var/lib/etcd/cert/ca.pem --cert=/var/lib/etcd/cert/etcd-client.pem --key=/var/lib/etcd/cert/etcd-client-key.pem restore /var/lib/etcd_backup/backup_20180107172459.db \
--name $ETCD_NAME \
--data-dir /var/lib/etcd/data.etcd \
--initial-cluster $ETCD_CLUSTER \
--initial-cluster-token $ETCD_INITIAL_CLUSTER_TOKEN \
--initial-advertise-peer-urls $ETCD_INITIAL_ADVERTISE_PEER_URLS
chown -R etcd:etcd /var/lib/etcd/data.etcd
それぞれ3つのマスターノードでETCDを起動し、サービスコマンドで起動成功を確認します.
# service etcd start
# service etcd status
# export ETCD_SERVERS=$(cat /etc/kubernetes/manifests-backups/kube-apiserver.yaml |grep etcd-server|awk -F= '{print $2}')
ETCDCTL_API=3 etcdctl endpoint health --endpoints=$ETCD_SERVERS --cacert=/var/lib/etcd/cert/ca.pem --cert=/var/lib/etcd/cert/etcd-client.pem --key=/var/lib/etcd/cert/etcd-client-key.pem
https://192.168.250.198:2379 is healthy: successfully committed proposal: took = 2.238886ms
https://192.168.250.196:2379 is healthy: successfully committed proposal: took = 3.390819ms
https://192.168.250.197:2379 is healthy: successfully committed proposal: took = 2.925103ms
ETCDが健康であれば、Master 1台につきkube-apiserverを回復します
# mv /etc/kubernetes/manifests-backups/kube-apiserver.yaml /etc/kubernetes/manifests/
クラスタが正常に回復したかどうかを確認すると、クラスタが正常に起動していることがわかります.以前に導入されたアプリケーションもあります.
# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
etcd-2 Healthy {"health": "true"}
etcd-1 Healthy {"health": "true"}
# kubectl get no
NAME STATUS ROLES AGE VERSION
cn-shenzhen.i-wz90xxpi51k2u51t5y0p Ready master 44d v1.8.4
cn-shenzhen.i-wz93236e8pccdscwz3ha Ready master 44d v1.8.4
cn-shenzhen.i-wz953xx6qnlzdi6vo2aa Ready 44d v1.8.4
cn-shenzhen.i-wz953xx6qnlzdi6vo2ab Ready 44d v1.8.4
kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 1 1 1 1 23d
転載先:https://www.cnblogs.com/ericnie/p/8847933.html