Mencadangkan, memulihkan kluster beban kerja menggunakan Velero

Berlaku untuk: AKS di Azure Stack HCI 22H2, AKS di Windows Server

Artikel ini menjelaskan cara menginstal dan menggunakan Velero untuk mencadangkan dan memulihkan beban kerja dan kluster target menggunakan penyimpanan Azure Blob Storage atau MinIO di AKS yang diaktifkan oleh Azure Arc.

Velero adalah alat standar komunitas sumber terbuka untuk mencadangkan dan memulihkan objek kluster Kubernetes dan volume persisten. Ini mendukung berbagai penyedia penyimpanan untuk menyimpan cadangannya. Jika kluster Kubernetes target AKS Arc mengalami crash dan gagal pulih, Anda dapat menggunakan cadangan Velero untuk memulihkan konten dan objek API internalnya ke kluster baru.

Jika Anda tidak ingin menyimpan cadangan di Azure Blob Storage, Anda dapat menggunakan MinIO dengan Velero. Artikel ini menjelaskan cara menginstal dan mengonfigurasi Velero untuk menggunakan Azure Blob Storage atau menginstal dan mengonfigurasi Velero untuk menggunakan penyimpanan MinIO.

Catatan

Velero tidak secara resmi mendukung Microsoft Windows. Dalam pengujian, tim Velero hanya dapat mencadangkan aplikasi Windows stateless. Restic integrasi dan pencadangan aplikasi stateful atau volume persisten tidak didukung.

Prasyarat

Selesaikan prasyarat ini sebelum Anda memulai penyebaran Velero Anda:

Instal Velero dengan Azure Blob Storage

Prosedur di bagian ini menjelaskan cara menginstal Velero dan menggunakan Azure Blob Storage untuk pencadangan. Jika Anda tidak ingin menyimpan cadangan Anda di Azure, buka Menginstal Velero dengan penyimpanan MiniO.

  1. Buka PowerShell sebagai administrator.

  2. Masuk ke Azure menggunakan Azure CLI:

    az login --use-device-code   
    
  3. Instal Velero CLI dengan menjalankan perintah berikut:

Catatan

Bendera --use-restic tidak lagi didukung pada versi velero 1.10+, untuk dapat menggunakan bendera versi 1.9.x diperlukan

choco install velero   
  1. Jika diperlukan, ubah ke langganan Azure yang ingin Anda gunakan untuk cadangan.

    Secara default, Velero menyimpan cadangan dalam langganan Azure yang sama dengan VM dan disk Anda dan tidak akan memungkinkan Anda memulihkan cadangan ke grup sumber daya dalam langganan yang berbeda. Untuk mengaktifkan pencadangan dan pemulihan di seluruh langganan, tentukan langganan yang akan digunakan untuk cadangan Anda. Anda dapat melewati langkah ini jika Anda sudah berada dalam langganan yang ingin Anda gunakan untuk cadangan Anda.

    Beralih ke langganan yang ingin Anda gunakan untuk cadangan Anda:

    1. Gunakan nama langganan untuk menemukan ID langganan:

      $AZURE_BACKUP_SUBSCRIPTION_NAME="<NAME_OF_TARGET_SUBSCRIPTION>"
      $AZURE_BACKUP_SUBSCRIPTION_ID=$(az account list --query="[?name=='$AZURE_BACKUP_SUBSCRIPTION_NAME'].id | [0]" -o tsv)
      
    2. Kemudian ubah langganan:

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  2. Buat akun penyimpanan Azure dan kontainer blob.

    Saat Anda menggunakan Azure Blob Storage untuk pencadangan, Velero memerlukan akun penyimpanan dan kontainer blob untuk menyimpan cadangan. Contoh berikut menunjukkan akun penyimpanan yang dibuat di grup sumber daya Velero_Backups baru.

    Anda harus membuat akun penyimpanan dengan ID unik global yang dapat digunakan di DNS. Skrip sampel menggunakan uuidgen aplikasi untuk menghasilkan nama unik secara acak. Anda dapat menggunakan metode apa pun selama nama mengikuti aturan penamaan Azure untuk akun penyimpanan.

    Akun penyimpanan dibuat dengan kemampuan enkripsi saat tidak aktif (menggunakan kunci terkelola Microsoft) dan dikonfigurasi untuk hanya mengizinkan akses melalui koneksi HTTPS.

    Untuk membuat akun penyimpanan dan kontainer blob, ikuti langkah-langkah berikut:

    1. Buat grup sumber daya untuk akun penyimpanan cadangan. Ubah direktori ke lokasi pilihan Anda, jika diperlukan, dan jalankan perintah berikut:

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. Buat akun penyimpanan:

      $AZURE_STORAGE_ACCOUNT_ID="<NAME_OF_ACCOUNT_TO_ASSIGN>"
      
      az storage account create --name $AZURE_STORAGE_ACCOUNT_ID --resource-group $AZURE_BACKUP_RESOURCE_GROUP --sku Standard_GRS --encryption-services blob --https-only true --kind BlobStorage --access-tier Hot
      
    3. Buat kontainer blob:

      $BLOB_CONTAINER="velero"
      az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
      

      Contohnya menggunakan kontainer blob bernama velero. Anda dapat menggunakan nama yang berbeda, sebaiknya unik untuk satu kluster Kubernetes.

  3. Buat perwakilan layanan:

    1. Dapatkan ID langganan dan ID penyewa untuk akun Azure Anda:

      $AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv)
      $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv) 
      
    2. Buat perwakilan layanan yang memiliki hak istimewa Kontributor.

      Anda dapat membuat perwakilan layanan dengan peran Kontributor atau menggunakan peran kustom:

      • Peran kontributor: Peran Kontributor memberikan akses di seluruh langganan, jadi pastikan lindungi kredensial ini jika Anda menetapkan peran tersebut.
      • Peran kustom: Jika Anda memerlukan peran yang lebih ketat, gunakan peran kustom.

      Tetapkan peran Kontributor:

      Jika Anda akan menggunakan Velero untuk mencadangkan beberapa kluster dengan beberapa kontainer blob, Anda mungkin ingin membuat nama pengguna unik untuk setiap kluster alih-alih menggunakan nama velero.

      Untuk membuat perwakilan layanan dengan peran Kontributor, gunakan perintah berikut. Ganti ID langganan Anda sendiri dan, secara opsional, nama perwakilan layanan Anda sendiri. Microsoft Entra ID akan menghasilkan rahasia untuk Anda.

      $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
      

      Lakukan penyesuaian ini pada perintah jika diperlukan:

      • Jika Anda berencana menggunakan langganan yang berbeda untuk kluster beban kerja dan file cadangan Velero Anda, berikan kedua ID langganan, seperti dalam contoh berikut:

        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID /subscriptions/$AZURE_BACKUP_SUBSCRIPTION_ID)
        
      • Jika Anda tidak ingin menggunakan velero sebagai nama perwakilan layanan Anda, pastikan --name pilihan Anda unik dalam Microsoft Entra ID dan tidak bertentangan dengan perwakilan layanan atau pendaftaran aplikasi lainnya.

      Penting

      Rahasia hanya ditampilkan selama langkah ini, ketika perwakilan layanan dibuat. Pastikan untuk mencatat rahasia untuk digunakan di langkah-langkah mendatang.

      Gunakan peran kustom:

      Jika Anda ingin mengaktifkan tindakan penyedia sumber daya minimum, buat peran kustom, dan tetapkan peran tersebut ke perwakilan layanan.

      1. Buat file bernama azure-role.json dengan konten berikut. Ganti nama peran kustom dan ID langganan Anda sendiri.

        {
            "Name": <CUSTOM_ROLE_NAME>,
            "Id": null,
            "IsCustom": true,
            "Description": "Velero related permissions to perform backups, restores and deletions",
            "Actions": [
                "Microsoft.Compute/disks/read",
                "Microsoft.Compute/disks/write",
                "Microsoft.Compute/disks/endGetAccess/action",
                "Microsoft.Compute/disks/beginGetAccess/action",
                "Microsoft.Compute/snapshots/read",
                "Microsoft.Compute/snapshots/write",
                "Microsoft.Compute/snapshots/delete",
                "Microsoft.Storage/storageAccounts/listkeys/action",
                "Microsoft.Storage/storageAccounts/regeneratekey/action"
            ],
            "NotActions": [],
            "AssignableScopes": [
              "<SUBSCRIPTION_ID>"
            ]
        }
        
      2. Buat peran kustom dan perwakilan layanan:

        az role definition create --role-definition azure-role.json
        
        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "<CUSTOM_ROLE>" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
        

      Untuk informasi selengkapnya tentang membuat peran kustom, lihat Mengatur izin untuk Velero.

  4. Dapatkan nama perwakilan layanan, dan tetapkan nama tersebut ke variabel AZURE_CLIENT_ID :

    $AZURE_CLIENT_ID=(az ad sp list --display-name "velero" --query '[0].appId' -o tsv)
    

    Catatan

    Perwakilan layanan kedaluwarsa. Untuk mengetahui kapan perwakilan layanan baru Anda akan kedaluwarsa, jalankan perintah ini: az ad sp show --id $AZURE_CLIENT_ID.

  5. Buat file yang berisi variabel yang diperlukan penginstalan Velero. Perintah terlihat mirip dengan yang berikut ini:

    AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}
    AZURE_TENANT_ID=${AZURE_TENANT_ID}
    AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
    AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}
    AZURE_RESOURCE_GROUP=${AZURE_BACKUP_RESOURCE_GROUP}
    AZURE_CLOUD_NAME=AzurePublicCloud" | Out-File -FilePath ./credentials-velero.txt
    

    Penting

    Hapus file ini setelah Anda menginstal Velero. Rahasia klien berada dalam teks biasa, yang dapat menimbulkan risiko keamanan.

    Sebelum melanjutkan, verifikasi bahwa file diformat dengan benar. Ekstensi nama file tidak masalah.

    • Hapus spasi atau tab tambahan.
    • Pastikan nama variabel sudah benar.
  6. Menginstal dan memulai Velero.

    Instal Velero pada kluster, dan mulai penyebaran. Prosedur ini membuat namespace layanan yang disebut velero dan menambahkan penyebaran bernama velero ke namespace.

    1. Instal Velero menggunakan perintah berikut. Anda harus menyesuaikan perintah contoh.

      velero install --provider azure --plugins velero/velero-plugin-for-microsoft-azure:v1.5.0 --bucket $BLOB_CONTAINER --secret-file ./credentials-velero.txt --backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID --use-restic
      

      Atur variabel berikut sesuai kebutuhan:

      • Perintah menginstal plugin Microsoft Azure, yang harus kompatibel dengan versi Velero CLI yang Anda gunakan. Contoh perintah menggunakan plugin Microsoft Azure versi 1.5.0, yang kompatibel dengan versi CLI Velero terbaru, 1.9.0. Untuk mengetahui versi plugin Microsoft Azure mana yang akan diinstal dengan versi Valero CLI Anda, lihat matriks kompatibilitas.

      • Pastikan untuk menyertakan --use-restic parameter untuk mengaktifkan pencadangan volume Kubernetes di tingkat sistem file menggunakan Restic. Restic dapat digunakan untuk mencadangkan semua jenis volume Kubernetes. Secara default, Velero mendukung pengambilan rekam jepret volume persisten untuk Volume Amazon EBS, Disk Terkelola Azure, dan Disk Persisten Google. Di AKS Arc, volume Kubernetes menggunakan Volume Bersama Kluster (CSV) untuk menyimpan data. Oleh karena itu, Restic diperlukan untuk mengaktifkan rekam jepret volume persisten. AKS Arc saat ini tidak mendukung rekam jepret volume.

      • subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID bersifat opsional. Anda hanya perlu menyertakannya jika Velero dan kluster beban kerja memiliki ID langganan yang berbeda. Jika mereka menggunakan langganan Azure yang sama, Anda dapat menghapus subscriptionId parameter , dan file credentials-velero.txt akan memberikan informasi tersebut.

      Layanan Velero dimulai secara otomatis pada penginstalan.

    2. Periksa apakah layanan Velero berjalan dengan benar:

      kubectl -n velero get pods
      kubectl logs deployment/velero -n velero
      

      Perintah get pods harus menunjukkan bahwa pod Velero sedang berjalan.

Menginstal Velero dengan penyimpanan MinIO

Prosedur di bagian ini menjelaskan cara menginstal Velero dan menggunakan penyimpanan MinIO untuk pencadangan. Jika Anda lebih suka menggunakan Azure Blob Storage untuk cadangan Anda, buka Menginstal Velero dengan Azure Blob Storage.

Jika Anda tidak ingin menyimpan cadangan Anda di MinIO, buka Menyiapkan Velero untuk menggunakan Azure Blob Storage.

  1. Instal Velero CLI dengan menjalankan perintah berikut. Menginstal Chocolately jika Anda belum melakukannya.

    choco install velero
    
  2. Pasang MinIO:

    1. Buat volume persisten untuk menyimpan cadangan MinIO. Contohnya membuat volume persisten di kelas penyimpanan default di AKS Arc, yang sudah ada.

      1. Buat file YAML bernama minio-pvc-storage.yaml, dengan konten berikut:

        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata: 
        name: minio-pv-claim 
        spec: 
        storageClassName: default 
        accessModes: 
           - ReadWriteOnce 
        resources: 
           requests: 
              storage: 100Gi 
        

        Buat volume persisten dengan menjalankan perintah ini:

        kubectl create -f minio-pvc-storage.yaml
        
      2. Buat file penyebaran, minio-deployment.yaml, untuk memulai MinIO. Sertakan konten berikut. Penyebaran akan menggunakan volume persisten yang Anda buat.

        apiVersion: apps/v1
        kind: Deployment
        metadata:
        name: minio-deployment 
        spec: 
        selector: 
           matchLabels: 
              app: minio 
        strategy: 
           type: Recreate 
        template: 
           metadata: 
              labels: 
              app: minio 
           spec: 
              volumes: 
              - name: storage 
              persistentVolumeClaim: 
                 claimName: minio-pv-claim 
              containers: 
              - name: minio 
              image: minio/minio:latest 
              args: 
              - server 
              - /storage 
              env: 
              - name: MINIO_ACCESS_KEY 
                 value: "<you can define this>" 
              - name: MINIO_SECRET_KEY 
                 value: "<you can define this>" 
              ports: 
              - containerPort: 9000 
                 hostPort: 9000 
              volumeMounts: 
              - name: storage  
                 mountPath: "/storage" 
        

        Kemudian buat penyebaran:

        kubectl create -f minio-deployment.yaml
        
    2. Buat layanan Kubernetes yang disebut minio-service.yaml. Layanan ini akan menyediakan alamat IP eksternal ke pod MinIO.

      Buat file YAML dengan pengaturan berikut untuk mengonfigurasi layanan:

      apiVersion: v1 
      kind: Service 
      metadata: 
      name: minio-service 
      spec: 
      type: LoadBalancer 
      ports: 
         - port: 9000 
            targetPort: 9000 
            protocol: TCP 
      selector: 
         app: minio 
      

      Kemudian buat layanan:

      kubectl create -f mino-service.yaml
      
    3. Dapatkan alamat IP eksternal pod MinIO dengan menjalankan perintah berikut. Anda akan menggunakan alamat tersebut untuk menginstal Velero.

      kubectl get svc
      
    4. Untuk memeriksa apakah MinIO aktif dan berjalan, masuk ke alamat IP di browser, atau gunakan klien MinIO, seperti yang dijelaskan di bawah ini.

      Instal klien MinIO, dan telusuri file MinIO.

      Unduh klien MinIO:

      Invoke-WebRequest -Uri "https://dl.minio.io/client/mc/release/windows-amd64/mc.exe" -OutFile "C:\mc.exe
      

      Selanjutnya, atur alias:

      mc alias set minio http://10.10.77.6:9000 "minio_access_key" "minio_secret_key" --api s3v4
      

      Terakhir, telusuri instalasi MinIO:

      mc ls minio
      
    5. Buat wadah untuk menyimpan file Velero. Wadah ini akan digunakan dalam penginstalan Velero.

      mc mb minio/velero-backup
      
    6. Buat file kredensial MinIO dengan informasi berikut:

      minio.credentials 
             [default] 
        aws_access_key_id=<minio_access_key> 
        aws_secret_access_key=<minio_secret_key> 
      
  3. Pasang Velero:

    velero install --provider aws --bucket velero-backup --secret-file .\minio.credentials --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://10.10.77.6:9000 --plugins velero/velero-plugin-for-aws:v1.1.0 --use-restic
    

    Sebelum Anda menjalankan perintah ini, periksa nama wadah, kredensial MinIO Anda, dan alamat IP eksternal MinIO.

  4. Periksa apakah layanan Velero berjalan dengan benar:

    kubectl -n velero get pods
    kubectl logs deployment/velero -n Velero
    

    Perintah get pods harus menunjukkan bahwa pod Velero sedang berjalan.

Mencadangkan kluster

Anda dapat mencadangkan atau memulihkan semua objek di kluster Anda, atau Anda dapat memfilter objek berdasarkan jenis, namespace, dan/atau label.

Membuat cadangan

Gunakan perintah Velero backup create untuk membuat cadangan ke penyimpanan yang Anda pilih. Contoh berikut menggunakan --default-volumes-to-restic bendera , yang membuat rekam jepret volume persisten. Untuk opsi pencadangan lainnya, lihat Referensi Pencadangan Velero.

  • Pencadangan sesuai permintaan dari semua namespace layanan di kluster Anda:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • Pencadangan sesuai permintaan dari satu namespace layanan di kluster Anda:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • Pencadangan sesuai permintaan dari beberapa namespace yang dipilih di kluster Anda:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE-1>, <NAMESPACE-2> --default-volumes-to-restic
    

Periksa kemajuan pencadangan

  • Untuk memeriksa kemajuan pencadangan, jalankan perintah ini:

    velero backup describe <BACKUP-NAME>
    
  • Jika Anda menggunakan Azure Blob Storage untuk cadangan, Anda dapat melihat cadangan di akun penyimpanan Azure di bawah blob/kontainer yang Anda buat.

Memulihkan kluster

Untuk memulihkan kluster, Anda harus membuat kluster baru untuk memulihkan kluster lama. Anda tidak dapat memulihkan cadangan kluster ke kluster yang ada.

Perintah ini restore memungkinkan Anda memulihkan semua objek dan volume persisten dari cadangan yang dibuat sebelumnya. Anda juga dapat memulihkan hanya subset objek dan volume persisten yang terfilter. Untuk opsi pencadangan lainnya, lihat Pemfilteran sumber daya.

Pada kluster tempat Anda ingin memulihkan cadangan ( kluster tujuan):

  1. Sebarkan Velero dengan menggunakan instruksi di atas. Gunakan kredensial Azure yang sama dengan yang Anda gunakan untuk kluster sumber.

  2. Pastikan objek cadangan Velero dibuat dengan menjalankan perintah berikut. Sumber daya Velero disinkronkan dengan file cadangan di penyimpanan cloud.

    velero backup describe <BACKUP-NAME>
    
  3. Setelah Anda mengonfirmasi bahwa cadangan yang tepat (BACKUP-NAME) ada, pulihkan semua objek dalam cadangan:

    velero restore create --from-backup <BACKUP-NAME>
    

Mendapatkan bantuan dengan perintah Velero

Untuk melihat semua opsi yang terkait dengan perintah Velero tertentu, gunakan --help bendera dengan perintah . Misalnya, velero restore create --help menampilkan semua opsi yang terkait dengan perintah velero restore create.

Misalnya, untuk mencantumkan semua opsi velero restore, jalankan velero restore --help, yang mengembalikan informasi berikut:

  velero restore [command]
  Available Commands:
  create      Create a restore
  delete      Delete restores
  describe    Describe restores
  get         Get restores
  logs        Get restore logs

Menghapus instalan Velero

Untuk menghapus instalasi Velero dari kluster Anda, dan menghapus semua sumber daya yang dibuat oleh penginstalan Velero, jalankan perintah berikut:

kubectl delete namespace/velero clusterrolebinding/velero 
kubectl delete crds -l component=velero

Langkah berikutnya