Velero Search and Practice Post demo code

KIND k8s cluster

  1. Create KIND k8s cluster
    kind create cluster --name rocketchat-migrate-demo --config kind-config.yaml
  2. setup metallb
    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/namespace.yaml
    kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.6/manifests/metallb.yaml
    
    kubectl apply -f metallb-config.yaml
  3. setup rocketchat-migrate-demo-control-plane node volume mount
    • 連線至 rocketchat-migrate-demo-control-plane node
      docker exec -it rocketchat-migrate-demo-control-plane bash
    • rocketchat-migrate-demo-control-plane node 建立後緒所需的磁碟區
      for vol in pv1; do mkdir /mnt/disks/$vol; mount -t tmpfs $vol /mnt/disks/$vol; done
  4. create local-storage storageClass
    kubectl apply -f local-pv-storage.yaml
  5. creat local-persistent-storage local persistent volume
    kubectl apply -f local-pv.yaml
  6. create Minio Server
    helm install minio --create-namespace --namespace minio -f minio-values.yaml bitnami/minio
  7. create rocketchat workload
    helm install rocketchat --namespace rocketchat --create-namespace -f rocketchat.yaml stable/rocketchat
  8. setup velero and restic
    helm install velero vmware-tanzu/velero --namespace velero --create-namespace -f velero-values.yaml
  9. annotate pod
    kubectl annotate pod -n rocketchat --selector=release=rocketchat,app=mongodb backup.velero.io/backup-volumes=datadir --overwrite
  10. backup rocketchat
    velero backup create rocketchat-backup --include-namespaces rocketchat
    

s3cmd download bacup

cat <<EOF > ~/.s3cfg
host_base = <kind-minio-server>:9000
host_bucket = <kind-minio-server>:9000
bucket_location = default
use_https = False
access_key =  minio
secret_key = minio123
signature_v2 = False
EOF

mkdir backup
s3cmd -p sync s3://velero/ backup/

GKE cluster

  1. create GKE cluster
  2. setup Minio Server
    helm install minio --create-namespace --namespace minio -f minio-values.yaml bitnami/minio
  3. upload local backup to Minio server
    s3cmd -p sync backup/ s3://velero/
  4. setup Velero & Restic
    MINIO_SVC=$(kubectl -n minio get svc minio -o=jsonpath="{.status.loadBalancer.ingress[0].ip}")
    PUBLIC_URL=http://$MINIO_SVC:9000
    echo $PUBLIC_URL
    helm install velero vmware-tanzu/velero --namespace velero --create-namespace --set configuration.backupStorageLocation.config.publicUrl=$PUBLIC_URL -f velero-values.yaml
  5. setup change-storage-class-config.yaml for StorageClass mapping
    kubectl apply -f change-storage-class-config.yaml -n velero
  6. restore velero backup
    velero restore create --from-backup rocketchat-backup