一 全量备份恢复
cd /etc/kubeasz/
250 ./ezctl backup k8s-cluster1 #备份 k8s-cluster1 集群数据
251 ls clusters/k8s-cluster1/backup/snapshot
252 kubectl delete pod net-test1 -n default #删除 net-test1数据
#也可以在etcd里面删除 那样快很多
#[root@etcd1 ~]# etcdctl get / --prefix --keys-only |grep net-test1
/registry/events/default/net-test1.17399765470ad369
/registry/events/default/net-test1.173997676183b740
/registry/events/default/net-test1.17399767685e87b7
/registry/events/default/net-test1.173997677c2b01d3
/registry/pods/default/net-test1
[root@etcd1 ~]# etcdctl del /registry/pods/default/net-test1
1
#首先 查看需要删除的pod的存储路径 然后执行删除秒删
#etcdctl del /registry/pods/default/net-test1 然后执行
kubectl get pod -A #核实是否删除成功
./ezctl restore k8s-cluster1 #恢复数据
二 指定备份恢复
环境必须有docker
原理以及公有云实施参考
kubernetes 迁移容灾备份(velero)_CN-FuWei的博客-CSDN博客_velero原理
具体步骤见下
# docker pull minio/minio:RELEASE.2022-04-12T06-55-35Z
# mkdir -p /data/minio
#创建minio容器,如果不指定,则默认用户名与密码为 minioadmin/minioadmin,可以通过环境变量自定义,如下:
# docker run --name minio \
-p 9000:9000 \
-p 9999:9999 \
-d --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /data/minio/data:/data \
minio/minio:RELEASE.2022-04-12T06-55-35Z server /data \
--console-address '0.0.0.0:9999'
进入界面 点击create bucket
名字随意取 只是 自己要记住
本次实验 velerodata
然后直接右下创建 那么 对象存储既创建完毕
2. 部署velero
下载软件,速度看个人 毕竟国外的,自己可以想哈办法加速~
wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
tar xvf velero-v1.8.1-linux-amd64.tar.gz
275 cp velero-v1.8.1-linux-amd64/velero /usr/local/bin/
276 mkdir /data/velero -p
277 ls
278 cd /data/velero/
cat > velero-auth.txt <<EOF
[default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
EOF
cat > awsuser-csr.json <<EOF
{
"CN": "awsuser",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
cp cfssl-certinfo cfssl cfssljson /usr/local/bin/
288 chmod a+x /usr/local/bin/cfssl*
/usr/local/bin/cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem -ca-key=/etc/kubernetes/ssl/ca-key.pem -config=/etc/kubeasz/clusters/k8s-cluster1/ssl/ca-config.json -profile=kubernetes ./awsuser-csr.json | cfssljson -bare awsuser
#注意 ca和key都是你真实主机的 地址
操作步骤
[root@master1 velero]# cp awsuser-key.pem /etc/kubernetes/ssl/
[root@master1 velero]# cp awsuser.pem /etc/kubernetes/ssl/
[root@master1 velero]#
[root@master1 velero]# export KUBE_APISERVER="https://172.31.7.101:6443"
[root@master1 velero]# kubectl config set-cluster kubernetes \
> --certificate-authority=/etc/kubernetes/ssl/ca.pem \
> --embed-certs=true \
> --server=${KUBE_APISERVER} \
> --kubeconfig=./awsuser.kubeconfig
Cluster "kubernetes" set.
[root@master1 velero]# kubectl config set-credentials awsuser \
> --client-certificate=/etc/kubernetes/ssl/awsuser.pem \
> --client-key=/etc/kubernetes/ssl/awsuser-key.pem \
> --embed-certs=true \
> --kubeconfig=./awsuser.kubeconfig
User "awsuser" set.
[root@master1 velero]# kubectl config set-context kubernetes \
> --cluster=kubernetes \
> --user=awsuser \
> --namespace=velero-system \
> --kubeconfig=./awsuser.kubeconfig
Context "kubernetes" created.
[root@master1 velero]# kubectl config use-context kubernetes --kubeconfig=awsuser.kubeconfig
Switched to context "kubernetes".
[root@master1 velero]# kubectl create clusterrolebinding awsuser --clusterrole=cluster-admin --user=awsuser
clusterrolebinding.rbac.authorization.k8s.io/awsuser created
[root@master1 velero]# kubectl create ns velero-system
namespace/velero-system created
[root@master1 velero]# velero --kubeconfig ./awsuser.kubeconfig \
> install \
> --provider aws \
> --plugins velero/velero-plugin-for-aws:v1.3.1 \
> --bucket velerodata \
> --secret-file ./velero-auth.txt \
> --use-volume-snapshots=false \
> --namespace velero-system \
> --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://172.31.7.107:9000
CustomResourceDefinition/backups.velero.io: attempting to create resource
CustomResourceDefinition/backups.velero.io: attempting to create resource client
CustomResourceDefinition/backups.velero.io: created
CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource
CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource client
CustomResourceDefinition/backupstoragelocations.velero.io: created
CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource
CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource client
CustomResourceDefinition/deletebackuprequests.velero.io: created
CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource
CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource client
CustomResourceDefinition/downloadrequests.velero.io: created
CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource
CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource client
CustomResourceDefinition/podvolumebackups.velero.io: created
CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource
CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource client
CustomResourceDefinition/podvolumerestores.velero.io: created
CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource
CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource client
CustomResourceDefinition/resticrepositories.velero.io: created
CustomResourceDefinition/restores.velero.io: attempting to create resource
CustomResourceDefinition/restores.velero.io: attempting to create resource client
CustomResourceDefinition/restores.velero.io: created
CustomResourceDefinition/schedules.velero.io: attempting to create resource
CustomResourceDefinition/schedules.velero.io: attempting to create resource client
CustomResourceDefinition/schedules.velero.io: created
CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource
CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource client
CustomResourceDefinition/serverstatusrequests.velero.io: created
CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource
CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource client
CustomResourceDefinition/volumesnapshotlocations.velero.io: created
Waiting for resources to be ready in cluster...
Namespace/velero-system: attempting to create resource
Namespace/velero-system: attempting to create resource client
Namespace/velero-system: already exists, proceeding
Namespace/velero-system: created
ClusterRoleBinding/velero-velero-system: attempting to create resource
ClusterRoleBinding/velero-velero-system: attempting to create resource client
ClusterRoleBinding/velero-velero-system: created
ServiceAccount/velero: attempting to create resource
ServiceAccount/velero: attempting to create resource client
ServiceAccount/velero: created
Secret/cloud-credentials: attempting to create resource
Secret/cloud-credentials: attempting to create resource client
Secret/cloud-credentials: created
BackupStorageLocation/default: attempting to create resource
BackupStorageLocation/default: attempting to create resource client
BackupStorageLocation/default: created
Deployment/velero: attempting to create resource
Deployment/velero: attempting to create resource client
Deployment/velero: created
Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero-system' to view the status.
[root@master1 velero]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default net-test1 1/1 Running 0 5h46m
kube-system calico-kube-controllers-754966f84c-gd8mq 0/1 Running 8 (122m ago) 6h7m
kube-system calico-node-7dllw 1/1 Running 6 (44m ago) 6h7m
kube-system calico-node-7k99b 1/1 Running 2 (4h44m ago) 6h7m
kube-system calico-node-fhb5j 1/1 Running 3 (4h2m ago) 6h7m
kube-system coredns-7db6b45f67-nx2jk 1/1 Running 0 5h19m
kubernetes-dashboard dashboard-metrics-scraper-f5c565995-gfnv2 1/1 Running 0 5h8m
kubernetes-dashboard kubernetes-dashboard-67495d55c6-czhq7 1/1 Running 3 (132m ago) 5h8m
velero-system velero-6755cb8697-4vgdh 1/1 Running 0 119s
[root@master1 velero]# kubectl describe pod velero-6755cb8697-4vgdh -n velero-system
Name: velero-6755cb8697-4vgdh
Namespace: velero-system
Priority: 0
Node: 172.31.7.111/172.31.7.111
Start Time: Fri, 13 Jan 2023 01:02:44 +0800
Labels: component=velero
deploy=velero
pod-template-hash=6755cb8697
Annotations: prometheus.io/path: /metrics
prometheus.io/port: 8085
prometheus.io/scrape: true
Status: Running
IP: 10.200.166.138
IPs:
IP: 10.200.166.138
Controlled By: ReplicaSet/velero-6755cb8697
Init Containers:
velero-velero-plugin-for-aws:
Container ID: docker://365f580a48bd38f88806e710f9ca20b719e8a6ee4ec4f9457a73c2f89930f5ef
Image: velero/velero-plugin-for-aws:v1.3.1
Image ID: docker-pullable://velero/velero-plugin-for-aws@sha256:b714f0a6d16029ce7faad02a7e9e845b4277b4b5f542bb46d34b91472363366f
Port: <none>
Host Port: <none>
State: Terminated
Reason: Completed
Exit Code: 0
Started: Fri, 13 Jan 2023 01:03:07 +0800
Finished: Fri, 13 Jan 2023 01:03:09 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/target from plugins (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-d4tzl (ro)
Containers:
velero:
Container ID: docker://dc5b08fa499281ab399bbefb0f410ed7037e9494476f27cf7955f4b92227bf6c
Image: velero/velero:v1.8.1
Image ID: docker-pullable://velero/velero@sha256:8d784580931c77892458be8a3b4046ca0c751039c11ea1218d522e9d03cb92cb
Port: 8085/TCP
Host Port: 0/TCP
Command:
/velero
Args:
server
--features=
State: Running
Started: Fri, 13 Jan 2023 01:03:34 +0800
Ready: True
Restart Count: 0
Limits:
cpu: 1
memory: 512Mi
Requests:
cpu: 500m
memory: 128Mi
Environment:
VELERO_SCRATCH_DIR: /scratch
VELERO_NAMESPACE: velero-system (v1:metadata.namespace)
LD_LIBRARY_PATH: /plugins
GOOGLE_APPLICATION_CREDENTIALS: /credentials/cloud
AWS_SHARED_CREDENTIALS_FILE: /credentials/cloud
AZURE_CREDENTIALS_FILE: /credentials/cloud
ALIBABA_CLOUD_CREDENTIALS_FILE: /credentials/cloud
Mounts:
/credentials from cloud-credentials (rw)
/plugins from plugins (rw)
/scratch from scratch (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-d4tzl (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
plugins:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
scratch:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
cloud-credentials:
Type: Secret (a volume populated by a Secret)
SecretName: cloud-credentials
Optional: false
kube-api-access-d4tzl:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m12s default-scheduler Successfully assigned velero-system/velero-6755cb8697-4vgdh to 172.31.7.111
Normal Pulling 4m9s kubelet Pulling image "velero/velero-plugin-for-aws:v1.3.1"
Normal Pulled 3m51s kubelet Successfully pulled image "velero/velero-plugin-for-aws:v1.3.1" in 18.361255891s
Normal Created 3m49s kubelet Created container velero-velero-plugin-for-aws
Normal Started 3m49s kubelet Started container velero-velero-plugin-for-aws
Normal Pulling 3m46s kubelet Pulling image "velero/velero:v1.8.1"
Normal Pulled 3m23s kubelet Successfully pulled image "velero/velero:v1.8.1" in 22.340989395s
Normal Created 3m23s kubelet Created container velero
Normal Started 3m22s kubelet Started container velero
[root@master1 velero]# DATE=`date +%Y%m%d%H%M%S`
[root@master1 velero]# velero backup create myserver-ns-backup-${DATE} \
> --include-namespaces myserver \
> --kubeconfig=./awsuser.kubeconfig \
> --namespace velero-system
Backup request "myserver-ns-backup-20230113011236" submitted successfully.
Run `velero backup describe myserver-ns-backup-20230113011236` or `velero backup logs myserver-ns-backup-20230113011236` for more details.
核实创建成功
还原命令
velero restore create --from-backup myserver-ns-backup-20230113011236 --wait \
--kubeconfig=./awsuser.kubeconfig \
--namespace velero-system