All Products
Search
Document Center

Container Service for Kubernetes:Gunakan Pusat Cadangan untuk Memigrasikan Aplikasi di Klaster ACK yang Menjalankan Versi Kubernetes Lama

Last Updated:Jul 06, 2025

Anda dapat menggunakan Pusat Cadangan untuk memigrasikan aplikasi dari klaster Container Service for Kubernetes (ACK) yang menggunakan FlexVolume ke klaster ACK yang menggunakan CSI. Anda juga dapat memigrasikan aplikasi dari klaster ACK dengan versi Kubernetes lama ke klaster ACK dengan versi Kubernetes baru. Pusat Cadangan membantu memigrasikan aplikasi lintas klaster yang menggunakan plug-in volume berbeda atau menjalankan versi Kubernetes berbeda. Sebagai contoh, Anda dapat mencadangkan sumber daya tingkat klaster yang tidak aktif atau secara otomatis beralih ke versi API yang didukung oleh klaster tempat sumber daya dipulihkan. Topik ini menjelaskan cara menggunakan Pusat Cadangan untuk memigrasikan aplikasi. Dalam topik ini, aplikasi dalam klaster yang menggunakan FlexVolume dan menjalankan Kubernetes 1.16 dimigrasikan ke klaster yang menggunakan CSI dan menjalankan Kubernetes 1.28.

Catatan penggunaan

  • Klaster cadangan dan klaster pemulihan harus diterapkan di wilayah yang sama. Klaster cadangan harus menjalankan Kubernetes 1.16 atau lebih baru. Kami menyarankan agar Anda tidak menggunakan Pusat Cadangan untuk memigrasikan aplikasi dari klaster yang menjalankan versi Kubernetes baru ke klaster yang menjalankan versi Kubernetes lama untuk menghindari masalah kompatibilitas versi API.

  • Pusat Cadangan tidak mencadangkan sumber daya yang sedang dihapus.

  • Untuk memulihkan cadangan ke volume File Storage NAS (NAS) yang dikelola oleh CNFS (dengan menyetel StorageClass ke alibabacloud-cnfs-nas), Anda perlu membuat StorageClass terlebih dahulu. Untuk informasi lebih lanjut, lihat Gunakan CNFS untuk Mengelola Sistem File NAS (Disarankan).

  • Pusat Cadangan sebaiknya memulihkan aplikasi ke versi API yang disarankan untuk klaster pemulihan. Jika tidak ada versi API yang didukung oleh versi Kubernetes lama dan baru suatu sumber daya, Anda perlu menerapkan sumber daya tersebut secara manual. Contoh:

    • Deployment dalam klaster yang menjalankan Kubernetes 1.16 mendukung extensions/v1beta1, apps/v1beta1, apps/v1beta2, dan apps/v1. Dalam skenario ini, versi API Deployment dalam klaster yang menjalankan Kubernetes 1.28 dipulihkan ke apps/v1.

    • Ingress dalam klaster yang menjalankan Kubernetes 1.16 mendukung extensions/v1beta1 dan networking.k8s.io/v1beta1. Dalam skenario ini, Anda tidak dapat memulihkan Ingress dalam klaster yang menjalankan Kubernetes 1.22 atau lebih baru.

    Untuk informasi lebih lanjut tentang pembaruan API untuk versi Kubernetes berbeda, lihat Catatan Rilis untuk Versi Kubernetes yang Didukung oleh ACK dan Panduan Migrasi API yang Ditinggalkan.

    Penting

    Dalam klaster yang menjalankan Kubernetes 1.16, grup seperti apps dan rbac.authorization.k8s.io sudah mendukung versi API v1. Setelah Anda memigrasikan aplikasi ke klaster yang menjalankan Kubernetes 1.28, Anda perlu memulihkan sumber daya Ingress dan CronJob secara manual.

Skenario penggunaan

  • Migrasikan Aplikasi Lintas Klaster yang Menggunakan Plug-in Volume Berbeda

    Klaster ACK yang versi Kubernetes-nya 1.20 atau lebih baru tidak lagi mendukung FlexVolume. Anda dapat menggunakan Pusat Cadangan untuk memigrasikan aplikasi stateful dari klaster yang menggunakan FlexVolume ke klaster yang menggunakan CSI.

    Catatan

    Klaster cadangan dapat menggunakan FlexVolume atau CSI tetapi klaster pemulihan harus menggunakan CSI.

  • Migrasikan Aplikasi Lintas Klaster yang Menjalankan Versi Kubernetes Berbeda

    Dalam beberapa skenario, Anda mungkin perlu memigrasikan aplikasi dari klaster yang menjalankan versi Kubernetes lama (1.16 atau lebih baru). Sebagai contoh, Anda mungkin ingin mengganti plug-in jaringan dari Flannel ke Terway. Anda dapat menggunakan Pusat Cadangan untuk memigrasikan aplikasi lintas beberapa versi Kubernetes. Pusat Cadangan dapat secara otomatis menyesuaikan konfigurasi dasar template aplikasi, seperti versi API, ke versi Kubernetes baru.

Prasyarat

  • Cloud Backup telah diaktifkan. Untuk mencadangkan volume yang menggunakan sistem file NAS, bucket OSS, dan disk lokal atau mencadangkan volume dalam skenario cloud hybrid, Anda harus mengonfigurasi Pusat Cadangan untuk menggunakan Cloud Backup guna membuat cadangan. Untuk informasi lebih lanjut, lihat Cadangan Cloud.

  • Klaster tempat volume dipulihkan telah dibuat. Untuk memastikan bahwa Anda dapat menggunakan snapshot Elastic Compute Service (ECS) untuk memulihkan data disk, kami menyarankan Anda memperbarui versi Kubernetes klaster menjadi 1.18 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat Klaster ACK yang Dikelola, Buat Klaster ACK Khusus (Tidak Dilanjutkan), atau Buat Proxy Pendaftaran Klaster dan Daftarkan Klaster Kubernetes yang Diterapkan di Pusat Data.

    Penting
    • Klaster pemulihan harus menggunakan plug-in Container Storage Interface (CSI). Pemulihan aplikasi tidak didukung dalam klaster yang menggunakan FlexVolume atau menggunakan csi-compatible-controller dan FlexVolume.

    • Pusat Cadangan digunakan untuk mencadangkan dan memulihkan aplikasi. Sebelum menjalankan tugas pemulihan, Anda harus menginstal dan mengonfigurasi komponen sistem dalam klaster pemulihan. Contoh:

      • aliyun-acr-credential-helper: Anda perlu memberikan izin ke klaster pemulihan dan mengonfigurasi acr-configuration.

      • alb-ingress-controller: Anda perlu mengonfigurasi ALBConfig.

  • migrate-controller diinstal dan izin diberikan.

  • Untuk membuat snapshot disk guna mencadangkan volume, Anda harus menginstal CSI 1.1.0 atau lebih baru. Untuk informasi lebih lanjut, lihat Kelola Komponen csi-plugin dan csi-provisioner.

  • Klien kubectl terhubung ke klaster.

Alur kerja migrasi

Alur kerja migrasi bervariasi berdasarkan plug-in volume yang digunakan oleh klaster cadangan. Gambar berikut menunjukkan detailnya.

  • Tidak Ada Aplikasi dalam Klaster Cadangan yang Menggunakan Volume

  • Klaster Cadangan Menggunakan FlexVolume

  • Klaster Cadangan Menggunakan CSI

Prosedur

Klaster ACK yang menggunakan FlexVolume dan menjalankan Kubernetes 1.16 digunakan dalam contoh ini. Contoh ini menunjukkan cara memigrasikan aplikasi, konfigurasi, dan volume dari klaster tersebut ke klaster ACK yang menggunakan CSI dan menjalankan Kubernetes 1.28. Anda dapat melakukan migrasi dengan mengubah sumber data atau tanpa mengubah sumber data. Untuk memigrasikan aplikasi yang tidak menggunakan volume atau memigrasikan aplikasi dari klaster yang menggunakan CSI, Anda dapat melewati langkah-langkah opsional.

Penting

Jika Anda tidak mengubah sumber data, atur kebijakan klaim Persistent Volume (PV) di klaster cadangan ke Retain. Jika tidak, data akan dihapus setelah Anda menghapus volume.

kubectl patch pv/<pv-name> --type='json' -p '[{"op":"replace","path":"/spec/persistentVolumeReclaimPolicy","value":"Retain"}]'

Metode

Deskripsi

Skema penggunaan

Ubah sumber data

Cadangkan data yang disimpan dalam volume di klaster cadangan dan sinkronkan cadangan ke klaster pemulihan. Ini berarti bahwa klaster cadangan dan pemulihan masing-masing menggunakan sumber data. Proses pemulihan data menggunakan volume yang diatur secara dinamis. Anda dapat mengubah jenis volume dengan mengubah StorageClass. Sebagai contoh, Anda dapat mengubah volume NAS menjadi volume disk.

  • Anda ingin aplikasi di klaster cadangan dan pemulihan menggunakan sumber data berbeda.

  • Anda ingin mengubah StorageClass saat memulihkan data.

Jangan ubah sumber data

Proses pemulihan menggunakan volume yang diatur secara statis yang dipulihkan dari persistent volumes (PV) dan persistent volume claims (PVC) dalam cadangan. Oleh karena itu, klaster cadangan dan pemulihan menggunakan sumber data yang sama, seperti ID disk atau Object Storage Service (OSS) bucket. Jika Anda ingin memigrasikan aplikasi dari FlexVolume ke CSI, Anda perlu membuat PV dan PVC yang diatur secara statis secara manual karena CSI tidak mendukung template YAML FlexVolume.

Anda tidak dapat menangguhkan operasi penulisan untuk bisnis Anda selama pemulihan data dan bisnis memerlukan konsistensi data.

Siapkan lingkungan

Metode

Klaster cadangan

Klaster pemulihan

Versi Kubernetes

1.16.9-aliyun.1

1.28.3-aliyun.1

Versi runtime

Docker 19.03.5

containerd 1.6.20

Versi plug-in volume

FlexVolume: v1.14.8.109-649dc5a-aliyun

CSI: v1.26.5-56d1e30-aliyun

Lainnya

  • Sebarkan aplikasi uji. apiVersion aplikasi adalah extensions/v1beta1.

  • Mount disk dan volume NAS ke aplikasi.

Instal plug-in csi-plugin dan csi-provisioner. Untuk informasi lebih lanjut, lihat Kelola komponen.

Langkah 1: Sebarkan aplikasi uji

  1. Jalankan perintah berikut untuk menyebarkan volume disk yang diatur secara dinamis.

    Ganti alicloud-disk-topology dengan nama default disk StorageClass yang diinstal oleh plug-in FlexVolume di klaster Anda.

    cat << EOF | kubectl apply -f -
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: disk-essd
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: alicloud-disk-topology
      resources:
        requests:
          storage: 20Gi
    EOF
  2. Jalankan perintah berikut untuk menyebarkan volume NAS yang diatur secara statis.

    Ganti server dengan titik mount sistem file NAS Anda.

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas
    spec:
      capacity:
        storage: 5Gi
      storageClassName: nas
      accessModes:
        - ReadWriteMany
      flexVolume:
        driver: "alicloud/nas"
        options:
          server: "1758axxxxx-xxxxx.cn-beijing.nas.aliyuncs.com"
          vers: "3"
          options: "nolock,tcp,noresvport"
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas
      resources:
        requests:
          storage: 5Gi
    EOF
  3. Jalankan perintah berikut untuk menyebarkan aplikasi dan mount volume disk dan NAS ke aplikasi.

    apiVersion dalam kode berikut diatur ke extensions/v1beta1. Versi API ini sudah tidak digunakan lagi di Kubernetes 1.28.

    cat << EOF | kubectl apply -f -
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
              - name: nas
                mountPath: /cold
              - name: disk
                mountPath: /hot
          volumes:
            - name: nas
              persistentVolumeClaim:
                claimName: pvc-nas
            - name: disk
              persistentVolumeClaim:
                claimName: disk-essd   
    EOF
  4. Jalankan perintah berikut untuk memastikan bahwa aplikasi berjalan normal:

    kubectl get pod -l app=nginx

    Hasil yang Diharapkan:

    NAME                    READY   STATUS    RESTARTS   AGE
    nginx-5ffbc895b-xxxxx   1/1     Running   0          2m28s

Langkah 2: Instal pusat cadangan di klaster cadangan

  1. Instal migrate-controller di klaster cadangan.

    Catatan
    • Anda dapat langsung menginstal migrate-controller 1.7.6 atau lebih baru di klaster yang versi Kubernetes-nya lebih baru dari 1.16 dari halaman Add-ons di konsol ACK.

    • Jika klaster cadangan adalah klaster khusus ACK, klaster terdaftar, atau klaster yang menggunakan plug-in volume selain CSI (seperti FlexVolume), Anda perlu memberikan izin tambahan. Untuk informasi lebih lanjut, lihat Klaster Terdaftar.

  2. (Opsional) Jika klaster Anda menggunakan FlexVolume, jalankan perintah berikut untuk memastikan bahwa izin yang diperlukan telah diberikan:

    kubectl -n csdr get secret alibaba-addon-secret
  3. (Opsional) Jika klaster Anda menggunakan FlexVolume, jalankan perintah berikut untuk menambahkan variabel lingkungan USE_FLEXVOLUME untuk menerapkan migrate-controller di namespace kube-system.

    Penting

    Setelah migrate-controller diinstal di klaster yang menggunakan FlexVolume, pod migrate-controller keluar secara tidak normal dan halaman cadangan aplikasi menampilkan kesalahan 404. Dalam kasus ini, Anda perlu menambahkan variabel lingkungan USE_FLEXVOLUME ke file YAML migrate-controller.

    kubectl -n kube-system patch deployment migrate-controller --type json -p '[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"USE_FLEXVOLUME","value":"true"}}]'
  4. Jalankan perintah berikut untuk memastikan bahwa migrate-controller berjalan normal:

    kubectl -n kube-system get pod -l app=migrate-controller
    kubectl -n csdr get pod 

    Hasil yang Diharapkan:

    NAME                                  READY   STATUS    RESTARTS   AGE
    migrate-controller-6c8b9c6cbf-967x7   1/1     Running   0          3m55s
    NAME                               READY   STATUS    RESTARTS   AGE
    csdr-controller-69787f6dc8-f886h   1/1     Running   0          3m39s
    csdr-velero-58494f6bf4-52mv6       1/1     Running   0          3m37s

Langkah 3: Buat cadangan di klaster cadangan

  1. Buat Bucket OSS bernama cnfs-oss-* di wilayah klaster cadangan untuk menyimpan cadangan.

    Catatan

    Secara default, klaster ACK yang dikelola memiliki izin pada bucket OSS bernama cnfs-oss-*. Jika bucket OSS Anda tidak sesuai dengan konvensi penamaan, Anda perlu memberikan izin tambahan. Untuk informasi lebih lanjut, lihat Instal migrate-controller dan Berikan Izin.

  2. Buat Vault Cadangan.

  3. Jalankan perintah berikut untuk membuat tugas cadangan waktu nyata.

    Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter cadangan di konsol, lihat Cadangkan dan Pulihkan Aplikasi di Klaster ACK. Anda dapat memodifikasi konfigurasi yang disarankan dalam langkah ini berdasarkan skenario aktual.

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: '{"name":"<Nama vault cadangan>","region":"<ID Wilayah, seperti cn-beijing>","bucket":"<Nama bucket OSS yang terkait dengan vault cadangan>","provider":"alibabacloud"}'
      labels:
        csdr/schedule-name: fake-name
      name: <Nama cadangan>
      namespace: csdr
    spec:
      excludedNamespaces:
      - csdr
      - kube-system
      - kube-public
      - kube-node-lease
      excludedResources:
      - storageclasses
      - clusterroles
      - clusterrolebindings
      - events
      - persistentvolumeclaims
      - persistentvolumes
      includeClusterResources: true
      pvBackup:
        defaultPvBackup: true
      storageLocation: <Nama vault cadangan>
      ttl: 720h0m0s
    EOF

    Parameter

    Deskripsi

    excludedNamespaces

    Daftar namespace yang akan dikecualikan dari tugas cadangan. Kami menyarankan Anda mengecualikan namespace berikut:

    • csdr: namespace pusat cadangan. Pusat cadangan secara otomatis menyinkronkan data antar klaster. Jangan mencadangkan tugas cadangan dan pemulihan di namespace csdr secara manual. Jika tidak, pengecualian mungkin terjadi.

    • kube-system, kube-public, dan kube-node-lease: namespace default dalam klaster ACK. Namespace ini tidak dapat dipulihkan secara langsung karena parameter atau konfigurasi klaster yang berbeda.

    excludedResources

    Daftar sumber daya yang akan dikecualikan dari tugas cadangan. Konfigurasikan daftar berdasarkan kebutuhan bisnis Anda.

    includeClusterResources

    Tentukan apakah akan mencadangkan semua sumber daya tingkat klaster, seperti StorageClasses, CustomResourceDefinitions (CRDs), dan webhook.

    • true: mencadangkan semua sumber daya tingkat klaster.

    • false: mencadangkan hanya sumber daya tingkat klaster yang digunakan oleh sumber daya tingkat namespace di namespace yang ditentukan. Sebagai contoh, ketika sistem mencadangkan pod, akun layanan yang digunakan oleh pod diberi peran klaster. Dalam hal ini, peran klaster dicadangkan secara otomatis. Ketika sistem mencadangkan CustomResource (CR), CRD yang sesuai juga dicadangkan.

    Catatan

    Secara default, IncludeClusterResources diatur ke false untuk tugas cadangan yang dibuat di konsol ACK.

    defaultPvBackup

    Tentukan apakah akan mencadangkan data dalam volume.

    • true: mencadangkan aplikasi dan data yang digunakan oleh pod yang sedang berjalan di volume.

    • false: mencadangkan hanya aplikasi.

    Penting
    • Secara default, snapshot Elastic Compute Service (ECS) dibuat untuk mencadangkan volume disk di klaster yang versi Kubernetes dan CSI-nya keduanya 1.18 atau lebih baru. Cloud Backup digunakan untuk mencadangkan jenis volume lainnya di klaster sebelumnya atau volume disk di klaster yang versi Kubernetes dan CSI-nya antara 1.16 dan 1.18 (tidak termasuk 1.18).

    • Untuk volume yang tidak digunakan oleh pod yang sedang berjalan, Anda harus membuat PV dan PVC yang diatur secara statis secara manual di klaster pemulihan dan menentukan sumber volume, seperti ID disk atau bucket OSS. Ini berarti Anda tidak dapat mengubah sumber data dalam skenario ini.

    • Jika bisnis Anda sangat bergantung pada konsistensi data, Anda perlu menangguhkan operasi penulisan selama proses cadangan. Anda juga dapat mencadangkan hanya aplikasi tanpa mengubah sumber data.

  4. Jalankan perintah berikut untuk memeriksa status tugas cadangan:

    kubectl -ncsdr describe applicationbackup <Nama cadangan>

    Jika Phase di kolom Status dalam output berubah menjadi Completed, tugas cadangan telah dibuat.

  5. Jalankan perintah berikut untuk memastikan daftar sumber daya yang akan dicadangkan:

    kubectl -ncsdr get pod | grep csdr-velero
    kubectl -ncsdr exec -it <Nama pod csdr-velero> -- /velero describe backup <Nama cadangan> --details

    Anda dapat melihat sumber daya yang dilewati dalam daftar cadangan, memodifikasi parameter cadangan, lalu menjalankan ulang tugas cadangan.

    Daftar Sumber Daya:
      apiextensions.k8s.io/v1/CustomResourceDefinition:
        - volumesnapshots.snapshot.storage.k8s.io
      v1/Endpoints:
        - default/kubernetes
      v1/Namespace:
        - default
      v1/PersistentVolume:
        - d-2ze88915lz1il01v1yeq
        - pv-nas
      v1/PersistentVolumeClaim:
        - default/disk-essd
        - default/pvc-nas
      v1/Secret:
        - default/default-token-n7jss
        - default/oss-secret
        - default/osssecret
      v1/Service:
        - default/kubernetes
      v1/ServiceAccount:
        - default/default
      ...

Langkah 4: Instal pusat cadangan di klaster pemulihan

  1. Instal Pusat Cadangan di klaster pemulihan. Untuk informasi lebih lanjut, lihat Langkah 2: Instal Pusat Cadangan di Klaster Cadangan.

  2. Hubungkan vault cadangan sebelumnya dengan klaster pemulihan.

    1. Masuk ke Konsol ACK.

    2. Di halaman Clusters, temukan klaster yang ingin Anda kelola dan klik namanya. Di panel sisi kiri, pilih Operations > Application Backup.

    3. Di halaman Application Backup, klik Restore.

    4. Pilih vault cadangan Anda dari daftar drop-down Backup Vaults, klik Initialize Backup Vault, lalu tunggu sistem menyinkronkan cadangan ke klaster saat ini.

(Opsional) Langkah 5: Buat PV dan PVC secara manual di klaster pemulihan

Dalam sebagian besar skenario, Anda hanya perlu melakukan Langkah 6 untuk membuat tugas pemulihan di klaster pemulihan. Pusat Cadangan akan secara otomatis membuat PV dan PVC dari cadangan.

Untuk melindungi data, ketika Pusat Cadangan menjalankan tugas pemulihan, ia tidak membuat ulang atau menimpa PV dan PVC yang sudah ada dengan nama yang sama dengan cadangan. Dalam skenario berikut, Anda dapat membuat PV dan PVC sebelum tugas pemulihan dimulai.

  • Anda ingin mencadangkan volume dan melewati log yang disimpan di beberapa volume.

  • Anda ingin mencadangkan volume yang tidak digunakan oleh pod yang sedang berjalan.

  • Anda tidak ingin mencadangkan volume dan persistentvolumeclaims serta persistentvolumes ditentukan dalam daftar excludedResources, atau Anda ingin memigrasikan aplikasi dari FlexVolume ke CSI.

Prosedur:

Penting

Anda tidak dapat memount disk lintas zona. Jika Anda ingin memulihkan sumber daya di zona berbeda di klaster pemulihan, gunakan salah satu solusi berikut.

  • Sinkronkan data dengan mengubah sumber data.

  • Masuk ke Konsol ECS. Buat Snapshot untuk disk dan buat disk dari snapshot di zona baru. Untuk informasi lebih lanjut, lihat Buat Snapshot untuk Disk. Ganti ID zona di nodeAffinity dan ID disk di file YAML berikut bernama outputfile.txt.

  1. (Opsional) Jika klaster cadangan menggunakan FlexVolume, Anda perlu menggunakan CLI Flexvolume2CSI untuk mengonversi file YAML secara batch karena file YAML PV dan PVC yang dikelola oleh FlexVolume dan CSI berbeda. Untuk informasi lebih lanjut, lihat Gunakan CLI FlexVolume2CSI untuk Mengonversi File YAML secara Batch.

  2. Jalankan perintah berikut untuk menggunakan Flexvolume2CSI menghasilkan file YAML yang didukung oleh CSI.

    outputfile.txt adalah file YAML yang dihasilkan oleh Flexvolume2CSI.

    Lihat Isi File outputfile.txt

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: d-2ze88915lz1il0**** # Volume disk yang diatur secara dinamis.
      name: d-2ze88915lz1il0****
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 20Gi
      csi:
        driver: diskplugin.csi.alibabacloud.com
        fsType: ext4
        volumeHandle: d-2ze88915lz1il0****
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/zone
              operator: In
              values:
              - cn-beijing-i
      persistentVolumeReclaimPolicy: Delete
      storageClassName: alicloud-disk-essd
      volumeMode: Filesystem
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-essd
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      selector:
        matchLabels:
          alicloud-pvname: d-2ze88915lz1il0****
      storageClassName: alicloud-disk-essd
      volumeMode: Filesystem
    
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: pv-nas
      name: pv-nas
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          server: 1758axxxxx-xxxxx.cn-beijing.nas.aliyuncs.com
        volumeHandle: pv-nas
      mountOptions:
      - vers=3
      - nolock,tcp,noresvport
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nas
      volumeMode: Filesystem
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas
      storageClassName: nas
      volumeMode: Filesystem
    
    kubectl apply -f outputfile.txt
  3. Jalankan perintah berikut untuk memastikan bahwa PVC di klaster pemulihan dalam status Bound:

    kubectl get pvc 

    Hasil yang Diharapkan:

    NAME        STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    disk-essd   Bound    d-2ze88915lz1il0xxxxxx   20Gi       RWO            alicloud-disk-essd   29m
    pvc-nas     Bound    pv-nas                   5Gi        RWX            nas                  29m

Langkah 6: Buat tugas pemulihan di klaster pemulihan

Penting
  • Jika sumber daya dengan nama yang sama sudah ada di klaster pemulihan, tugas pemulihan akan melewati sumber daya tersebut.

  • Pusat Cadangan dikembangkan untuk mencadangkan dan memulihkan aplikasi. Sebelum menjalankan tugas pemulihan, Anda harus menginstal dan mengonfigurasi komponen sistem di klaster pemulihan. Contoh:

    • Komponen Penarikan Gambar Tanpa Kata Sandi Container Registry: Anda perlu memberikan izin dan mengonfigurasi acr-configuration di klaster pemulihan.

    • Komponen ALB Ingress: Anda perlu mengonfigurasi ALBConfig.

Catatan

Perhatikan item berikut ketika Anda memulihkan Layanan:

  • Layanan NodePort: Secara default, port Layanan dipertahankan ketika Anda memulihkan Layanan lintas klaster.

  • Layanan LoadBalancer: Secara default, HealthCheckNodePort acak digunakan ketika ExternalTrafficPolicy diatur ke Local. Untuk mempertahankan port, tentukan spec.preserveNodePorts: true saat Anda membuat tugas pemulihan.

    • Jika Anda memulihkan Layanan yang menggunakan instance SLB yang ada di klaster cadangan, Layanan yang dipulihkan menggunakan instance SLB yang sama dan menonaktifkan listener secara default. Anda perlu masuk ke konsol SLB untuk mengonfigurasi listener.

    • Layanan LoadBalancer dikelola oleh cloud controller manager (CCM) di klaster cadangan. Saat Anda memulihkan Layanan LoadBalancer, CCM secara otomatis membuat instance SLB untuk Layanan yang dipulihkan. Untuk informasi lebih lanjut, lihat Pertimbangan untuk Mengonfigurasi Layanan Tipe LoadBalancer.

Jika Anda memilih untuk mencadangkan volume, klaster pemulihan akan menggunakan sumber data yang berbeda. Gunakan convertedarg untuk mengonversi jenis volume. Sebagai contoh, Anda dapat mengonversi volume NAS menjadi volume disk. Pilih StorageClass sesuai dengan kebutuhan bisnis Anda.

  • Dalam contoh ini, klaster cadangan menjalankan Kubernetes 1.16 dan menggunakan FlexVolume. Volume disk dicadangkan menggunakan Cloud Backup. Dengan demikian, Anda dapat menentukan StorageClass alicloud-disk untuk PVC disk-essd, yang mengonversi volume menjadi volume disk yang dikelola oleh CSI. StorageClass default adalah alicloud-disk-topology-alltype. Jika klaster cadangan menjalankan Kubernetes 1.18 atau lebih baru dan menggunakan CSI, konversi volume disk tidak diperlukan.

  • Dalam contoh ini, StorageClass alibabacloud-cnfs-nas ditentukan untuk PVC pvc-nas, yang mengonversi volume NAS yang dikelola oleh FlexVolume menjadi volume NAS yang dikelola oleh CNFS. Jika StorageClass alibabacloud-cnfs-nas tidak digunakan di klaster Anda, lihat Gunakan CNFS untuk mengelola sistem file NAS (disarankan).

Prosedur:

  1. Jalankan perintah berikut untuk membuat tugas pemulihan.

    Untuk informasi lebih lanjut tentang cara mengonfigurasi tugas pemulihan di konsol, lihat Cadangkan dan Pulihkan Aplikasi di Klaster ACK. Anda dapat memodifikasi konfigurasi yang disarankan dalam langkah ini berdasarkan skenario aktual.

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationRestore
    metadata:
        csdr.alibabacloud.com/backuplocations: >-
           '{"name":"<Nama vault cadangan>","region":"<ID Wilayah, seperti cn-beijing>","bucket":"<Nama bucket OSS yang terkait dengan vault cadangan>","provider":"alibabacloud"}'
      name: <Nama pemulihan>
      namespace: csdr
    spec:
      backupName: <Nama cadangan>
      excludedNamespaces:
      - arms-prom
      excludedResources:
      - secrets
      appRestoreOnly: false
      convertedarg:
      - convertToStorageClassType: alicloud-disk-topology-alltype
        namespace: default
        persistentVolumeClaim: alicloud-disk
      - convertToStorageClassType: alibabacloud-cnfs-nas
        namespace: default
        persistentVolumeClaim: pvc-nas
      namespaceMapping:
        <namespace cadangan>: <namespace pemulihan>
    EOF

    Parameter

    Deskripsi

    excludedNamespaces

    Daftar namespace yang akan dikecualikan. Anda dapat mengecualikan namespace dalam daftar cadangan dari tugas pemulihan.

    excludedResources

    Daftar sumber daya yang akan dikecualikan. Anda dapat mengecualikan sumber daya dalam daftar cadangan dari tugas pemulihan.

    appRestoreOnly

    Tentukan apakah akan memulihkan volume dari cadangan volume.

    • true: Pusat cadangan membuat PV dan PVC yang diatur secara dinamis yang menunjuk ke sumber data baru. Parameter ini diatur ke true untuk tugas pemulihan yang dibuat di konsol.

    • false: Anda perlu membuat volume yang diatur secara statis secara manual sebelum tugas pemulihan dimulai.

    Catatan

    Dalam sebagian besar kasus, atur parameter ini ke true jika Anda ingin mengubah sumber data dan atur parameter ini ke false jika Anda tidak mengubah sumber data.

    convertedarg

    Daftar konversi StorageClass. Untuk volume jenis FileSystem, seperti OSS, NAS, CPFS, dan volume lokal, Anda dapat mengonfigurasi parameter ini untuk mengonversi StorageClass PVC mereka ke StorageClass yang ditentukan selama proses pemulihan. Sebagai contoh, Anda dapat mengonversi volume NAS menjadi volume disk.

    • convertToStorageClassType: StorageClass yang diinginkan. Pastikan bahwa StorageClass ada di klaster saat ini. Anda hanya dapat menentukan StorageClass disk atau NAS.

    • namespace: namespace PVC.

    • persistentVolumeClaim: nama PVC.

    Di atas adalah parameter yang diperlukan untuk fitur konversi StorageClass.

  2. Jalankan perintah berikut untuk memeriksa status tugas pemulihan:

    kubectl -ncsdr describe applicationrestore <Nama cadangan>

    Jika Phase di kolom Status dalam output berubah menjadi Completed, tugas pemulihan telah dibuat.

  3. Jalankan perintah berikut untuk memeriksa apakah sumber daya gagal dipulihkan dan melihat penyebabnya:

    kubectl -ncsdr get pod | grep csdr-velero
    kubectl -ncsdr exec -it <Nama pod csdr-velero> -- /velero describe restore <Nama pemulihan> --details

    Hasil yang Diharapkan:

    Peringatan:
      Velero:     <none>
      Klaster:  tidak dapat memulihkan, ClusterRoleBinding "kubernetes-proxy" sudah ada. Peringatan: versi dalam klaster berbeda dengan versi yang dicadangkan.
      Namespace:
        demo-ns:  tidak dapat memulihkan, ConfigMap "kube-root-ca.crt" sudah ada. Peringatan: versi dalam klaster berbeda dengan versi yang dicadangkan.
                   tidak dapat memulihkan, Endpoints "kubernetes" sudah ada. Peringatan: versi dalam klaster berbeda dengan versi yang dicadangkan.
                   tidak dapat memulihkan, Service "kubernetes" sudah ada. Peringatan: versi dalam klaster berbeda dengan versi yang dicadangkan.
    
    Kesalahan:
      Velero:     <none>
      Klaster:    <none>
      Namespace:
        demo-ns:  kesalahan memulihkan endpoints/xxxxxx/kubernetes: Endpoints "kubernetes" tidak valid: subsets[0].addresses[0].ip: Nilai Tidak Valid: "169.254.128.9": mungkin tidak berada dalam rentang link-local (169.xxx.0.0/16, fe80::/10)
                   kesalahan memulihkan endpointslices.discovery.k8s.io/demo-ns/kubernetes: EndpointSlice.discovery.k8s.io "kubernetes" tidak valid: endpoints[0].addresses[0]: Nilai Tidak Valid: "169.xxx.128.9": mungkin tidak berada dalam rentang link-local (169.xxx.0.0/16, fe80::/10)
                   kesalahan memulihkan services/xxxxxx/kubernetes-extranet: Service "kubernetes-extranet" tidak valid: spec.ports[0].nodePort: Nilai Tidak Valid: 31882: port yang diberikan sudah dialokasikan

    Informasi Peringatan dalam output di atas menunjukkan bahwa beberapa sumber daya dilewati oleh tugas pemulihan. Informasi Kesalahan menunjukkan bahwa penggunaan ulang NodePort gagal. Port asli dipertahankan ketika Layanan dipulihkan lintas klaster.

  4. Periksa apakah aplikasi berjalan normal.

    1. Setelah aplikasi dipulihkan, periksa apakah sumber daya dalam status tidak normal karena batasan bisnis, pengecualian kontainer, atau masalah lainnya. Jika ya, perbaiki masalah tersebut secara manual.

    2. Setelah Anda memperbaiki masalah, apiVersion aplikasi secara otomatis diatur ke apps/v1, yang disarankan untuk klaster ACK yang menjalankan Kubernetes 1.28.