K8S——————通过kubuasz- ansible 进行k8s-etcd全量数据删除备份 通过 velero 安装部署 实现指定数据备份恢复

一 全量备份恢复

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值