All Products
Search
Document Center

Container Service for Kubernetes:Migrasi aplikasi lintas versi dengan pusat cadangan

Last Updated:Apr 21, 2026

Anda dapat menggunakan Pusat Cadangan untuk memigrasikan aplikasi dari kluster yang menggunakan plug-in FlexVolume ke kluster yang menggunakan plug-in Container Storage Interface (CSI), atau dari kluster Kubernetes versi lama ke kluster baru. Pusat Cadangan mengatasi masalah yang muncul selama migrasi antar kluster dengan plug-in penyimpanan atau versi Kubernetes berbeda, seperti mencadangkan resource tingkat kluster yang tidak digunakan oleh aplikasi dan secara otomatis menggunakan versi API yang kompatibel dengan kluster pemulihan. Topik ini menjelaskan cara menggunakan Pusat Cadangan untuk memigrasikan aplikasi, dengan contoh migrasi dari kluster yang menggunakan FlexVolume dan menjalankan Kubernetes 1.16 ke kluster yang menggunakan CSI dan menjalankan Kubernetes 1.28.

Catatan

  • Kluster pencadangan dan kluster pemulihan harus berada di wilayah yang sama. Kluster pencadangan harus menjalankan Kubernetes 1.16 atau lebih baru. Untuk menghindari masalah kompatibilitas versi API, disarankan agar Anda tidak menggunakan Pusat Cadangan untuk memigrasikan aplikasi dari versi Kubernetes yang lebih baru ke versi yang lebih lama.

  • Pusat Cadangan tidak mencadangkan resource yang sedang dalam proses penghapusan.

  • Untuk memulihkan data ke volume Network Attached Storage (NAS) yang dikelola oleh Container Network File System (CNFS), Anda harus membuat StorageClass jika berencana mengatur parameter StorageClass menjadi alibabacloud-cnfs-nas selama pemulihan. Untuk informasi selengkapnya, lihat Kelola sistem file NAS menggunakan CNFS.

  • Saat aplikasi dipulihkan, resource dipulihkan terlebih dahulu menggunakan apiVersion yang direkomendasikan untuk versi Kubernetes kluster pemulihan. Jika suatu resource tidak memiliki apiVersion yang didukung oleh kedua versi kluster, Anda harus men-deploy resource tersebut secara manual. Contohnya:

    • Deployment di kluster Kubernetes 1.16 mendukung versi API extensions/v1beta1, apps/v1beta1, apps/v1beta2, dan apps/v1. Saat dipulihkan ke kluster Kubernetes 1.28, resource tersebut dipulihkan menggunakan apps/v1.

    • Ingress di kluster Kubernetes 1.16 mendukung versi API extensions/v1beta1 dan networking.k8s.io/v1beta1. Resource tersebut tidak dapat langsung dipulihkan ke kluster yang menjalankan Kubernetes 1.22 atau lebih baru.

    Untuk informasi selengkapnya tentang perubahan API lintas versi Kubernetes, lihat Catatan rilis ACK dan Panduan Migrasi API yang Ditinggalkan.

    Penting

    Di kluster Kubernetes 1.16, grup API seperti apps dan rbac.authorization.k8s.io sudah mendukung v1. Saat Anda memigrasikan aplikasi ke kluster Kubernetes 1.28, Anda harus memulihkan secara manual resource seperti Ingress dan CronJob.

Kasus penggunaan

  • Migrasi aplikasi lintas plug-in penyimpanan

    Kluster ACK yang menjalankan Kubernetes 1.20 atau lebih baru tidak lagi mendukung plug-in penyimpanan FlexVolume. Anda dapat menggunakan Pusat Cadangan untuk memigrasikan aplikasi berstatus dari kluster FlexVolume ke kluster CSI.

    Catatan

    Anda dapat memigrasikan aplikasi dari kluster yang menggunakan plug-in penyimpanan FlexVolume atau CSI, tetapi kluster pemulihan harus menggunakan plug-in penyimpanan CSI.

  • Berpindah antar kluster dengan selisih versi Kubernetes yang besar

    Dalam beberapa skenario, Anda mungkin perlu memigrasikan layanan dari kluster Kubernetes lama (1.16 atau lebih baru) ke kluster baru. Misalnya, Anda mungkin mengganti plug-in jaringan dari Flannel ke Terway. Pusat Cadangan mendukung migrasi aplikasi lintas versi dengan selisih besar dan secara otomatis menyesuaikan konfigurasi dasar, seperti apiVersion dalam templat aplikasi, agar sesuai dengan versi Kubernetes yang baru.

Prasyarat

  • Aktifkan Cloud Backup. Saat mencadangkan volume persisten NAS, OSS, atau disk lokal, serta dalam skenario cloud hibrida, Pusat Cadangan perlu menggunakan Cloud Backup untuk Pencadangan File.

  • Kluster tempat volume dipulihkan telah dibuat. Untuk memastikan Anda dapat menggunakan snapshot instans Elastic Compute Service (ECS) untuk memulihkan data disk, disarankan agar Anda memperbarui versi Kubernetes kluster ke 1.18 atau lebih baru. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelolaBuat kluster khusus ACK (tidak tersedia lagi), atau Buat kluster terdaftar ACK One.

    Penting
    • Kluster pemulihan harus menggunakan plug-in Container Storage Interface (CSI). Pemulihan aplikasi tidak didukung di kluster 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 di kluster pemulihan. Contohnya:

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

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

  • Komponen layanan pencadangan migrate-controller telah diinstal dan izinnya telah dikonfigurasi. Untuk informasi selengkapnya, lihat Instal komponen layanan pencadangan migrate-controller dan konfigurasikan izin.

  • Untuk mencadangkan volume menggunakan snapshot disk cloud, Anda harus menginstal plug-in CSI versi v1.1.0 atau lebih baru. Untuk informasi selengkapnya, lihat Instal dan tingkatkan komponen CSI.

  • Sambungkan ke kluster menggunakan kubectl.

Alur kerja migrasi

Alur kerja migrasi bervariasi berdasarkan plug-in penyimpanan yang digunakan oleh kluster pencadangan. Gambar berikut menunjukkan detailnya.

Kluster pencadangan tanpa aplikasi penyimpanan

Kluster pencadangan menggunakan FlexVolume

Kluster pencadangan menggunakan CSI

Prosedur

Bagian ini menggunakan contoh migrasi aplikasi, konfigurasi, dan data volume dari kluster ACK yang menggunakan FlexVolume dan menjalankan Kubernetes 1.16 ke kluster ACK yang menggunakan CSI dan menjalankan Kubernetes 1.28. Migrasi menggunakan metode perubahan sumber data atau sumber data tidak berubah. Jika Anda ingin memigrasikan aplikasi yang tidak menggunakan penyimpanan atau jika kluster pencadangan Anda menggunakan plug-in penyimpanan CSI, Anda dapat melewati langkah-langkah yang ditandai sebagai Opsional.

Penting

Jika Anda menggunakan metode sumber data tidak berubah, Anda harus mengubah kebijakan reclaim PersistentVolume (PV) di kluster pencadangan menjadi Retain. Hal ini mencegah data terhapus saat volumenya dihapus.

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

Metode

Deskripsi

Kasus penggunaan

Perubahan sumber data

Metode ini mencadangkan data dari volume di kluster pencadangan dan membuat salinan data baru untuk aplikasi di kluster pemulihan. Metode ini membuat dua set penyimpanan yang sepenuhnya independen. Proses pemulihan data menggunakan pemasangan dinamis, yang memungkinkan Anda mengubah jenis penyimpanan dengan mengonversi StorageClass. Misalnya, Anda dapat mengonversi penyimpanan NAS menjadi penyimpanan disk.

  • Aplikasi di kluster pencadangan dan pemulihan perlu menggunakan set data yang terpisah.

  • Anda perlu mengonversi StorageClass selama proses pemulihan.

Sumber data tidak berubah

Metode ini menggunakan pemasangan statis selama proses pemulihan untuk menggunakan kembali sumber data asli, seperti ID disk atau bucket OSS, berdasarkan PersistentVolumeClaim (PVC) dan PersistentVolume (PV) yang dicadangkan. Jika Anda memigrasikan aplikasi dari kluster FlexVolume ke kluster CSI, Anda harus membuat PVC dan PV statis secara manual karena templat YAML-nya tidak kompatibel.

Aplikasi tidak dapat dijeda untuk penulisan data selama proses pencadangan dan pemulihan, dan memerlukan konsistensi data yang kuat.

Persiapkan lingkungan

Item

Kluster pencadangan

Restore cluster

Versi kluster

1.16.9-aliyun.1

1.28.3-aliyun.1

Versi runtime

Docker 19.03.5

containerd 1.6.20

Versi komponen penyimpanan

FlexVolume: v1.14.8.109-649dc5a-aliyun

CSI: v1.26.5-56d1e30-aliyun

Lainnya

  • Deploy aplikasi uji coba yang apiVersion-nya adalah extensions/v1beta1.

  • Aplikasi tersebut memasang volume disk dan NAS.

Komponen penyimpanan csi-plugin dan csi-provisioner telah diinstal. Untuk informasi selengkapnya, lihat Kelola komponen.

Langkah 1: Deploy aplikasi uji coba

  1. Jalankan perintah berikut untuk deploy volume disk yang disediakan secara dinamis.

    Ganti alicloud-disk-topology dengan nama StorageClass disk default untuk plug-in penyimpanan FlexVolume di kluster 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 deploy volume NAS yang disediakan secara statis.

    Ganti server dengan titik pemasangan sistem file NAS di akun 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 deploy aplikasi. Aplikasi ini memasang volume disk dan NAS dari langkah sebelumnya.

    apiVersion dalam kode berikut menggunakan extensions/v1beta1. apiVersion ini telah ditinggalkan di kluster versi 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 memverifikasi bahwa aplikasi yang dideploy telah dimulai.

    kubectl get pod -l app=nginx

    Output yang diharapkan:

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

Langkah 2: Instal pusat cadangan

  1. Di kluster pencadangan, instal komponen layanan pencadangan migrate-controller.

    Catatan
    • Untuk kluster yang menjalankan Kubernetes 1.16 atau lebih baru, Anda dapat langsung menginstal komponen layanan pencadangan versi V1.7.6 atau lebih baru dari pasar komponen.

    • Jika kluster pencadangan Anda adalah Kluster Edisi Khusus Kubernetes atau kluster terdaftar, atau menggunakan plug-in penyimpanan selain CSI (seperti FlexVolume), Anda perlu mengonfigurasi izin tambahan. Untuk informasi selengkapnya, lihat Kluster terdaftar.

  2. (Opsional) Jika kluster Anda adalah kluster FlexVolume, jalankan perintah berikut untuk memastikan izin yang diperlukan telah dikonfigurasi.

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

    Penting

    Di kluster FlexVolume, setelah komponen layanan pencadangan migrate-controller diinstal, pod migrate-controller keluar secara tidak terduga, dan membuka halaman Application Backup kluster mengembalikan error 404. Dalam kasus ini, Anda harus mengedit file YAML komponen untuk menambahkan variabel lingkungan USE_FLEXVOLUME.

    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 komponen layanan pencadangan berjalan dengan baik.

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

    Output 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

  1. Di wilayah yang sama dengan kluster pencadangan, buat Bucket OSS dengan format nama cnfs-oss-* untuk menyimpan cadangan. Untuk informasi selengkapnya, lihat Buat bucket.

    Catatan

    Kluster ACK yang dikelola memiliki izin untuk Bucket OSS yang namanya diawali dengan cnfs-oss-* secara default. Jika format penamaan bucket Anda tidak memenuhi persyaratan, Anda juga perlu mengonfigurasi izin tambahan. Untuk informasi selengkapnya, lihat Instal komponen dan konfigurasikan izin di konsol.

  2. Buat penyimpanan cadangan.

  3. Jalankan perintah berikut untuk membuat tugas pencadangan segera.

    Untuk informasi tentang cara mengonfigurasi pengaturan pencadangan di konsol ACK, lihat Cadangkan dan pulihkan aplikasi di kluster. Langkah ini memberikan konfigurasi yang direkomendasikan untuk skenario contoh. Sesuaikan pengaturan sesuai skenario spesifik Anda.

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: '{"name":"<your-backup-vault-name>","region":"<your-region-id>","bucket":"<your-oss-bucket-name>","provider":"alibabacloud"}'
      labels:
        csdr/schedule-name: fake-name
      name: <your-backup-name>
      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: <your-backup-vault-name>
      ttl: 720h0m0s
    EOF

    Parameter

    Deskripsi

    excludedNamespaces

    Namespace yang dikecualikan dari pencadangan. Kami menyarankan agar Anda mengecualikan namespace berikut:

    • csdr: Namespace kerja untuk pusat cadangan. Pusat cadangan memiliki logika sinkronisasi antar kluster. Jangan mencadangkan tugas secara manual, seperti pencadangan atau pemulihan, di namespace csdr. Tindakan ini dapat menyebabkan perilaku yang tidak terduga.

    • kube-system, kube-public, dan kube-node-lease adalah namespace yang ada secara default di kluster ACK. Namespace tersebut tidak dapat dengan mudah dipulihkan antar kluster karena perbedaan parameter dan konfigurasi kluster.

    excludedResources

    Resource yang dikecualikan. Anda dapat mengonfigurasi parameter ini berdasarkan kebutuhan bisnis Anda.

    includeClusterResources

    Menentukan apakah akan mencadangkan resource tingkat kluster, seperti StorageClasses, CRD, dan webhook.

    • true: Mencadangkan semua resource tingkat kluster.

    • false: Hanya mencadangkan resource tingkat kluster yang dirujuk oleh resource tingkat namespace di namespace yang dipilih. Misalnya, saat Anda mencadangkan Pod, jika ServiceAccount yang dirujuk diotorisasi oleh ClusterRole, ClusterRole tersebut akan dicadangkan secara otomatis. Saat Anda mencadangkan CR, CRD-nya akan dicadangkan secara otomatis.

    Catatan

    Secara default, IncludeClusterResources diatur ke false untuk tugas pencadangan yang dibuat di Konsol ACK.

    defaultPvBackup

    Menentukan apakah akan mencadangkan data volume.

    • true: Mencadangkan aplikasi dan data di volume yang digunakan oleh Pod yang sedang berjalan.

    • false: Hanya mencadangkan aplikasi.

    Penting
    • Untuk kluster yang menjalankan Kubernetes dan CSI versi 1.18 atau lebih baru, pusat cadangan menggunakan snapshot ECS untuk mencadangkan data disk secara default. Untuk jenis penyimpanan lain atau untuk data disk di kluster yang menjalankan versi Kubernetes dari 1.16 hingga (tetapi tidak termasuk) 1.18, Cloud Backup digunakan.

    • Untuk volume yang tidak digunakan oleh pod yang sedang berjalan, Anda hanya dapat menggunakan metode sumber data tidak berubah. Ini memerlukan pembuatan PV dan PVC statis secara manual di kluster baru dan menentukan sumber data asli, seperti ID disk atau bucket OSS.

    • Jika aplikasi Anda memerlukan konsistensi data yang kuat, jeda penulisan data selama periode pencadangan. Atau, Anda dapat memilih metode sumber data tidak berubah dan hanya mencadangkan aplikasi.

  4. Jalankan perintah berikut untuk menanyakan status tugas pencadangan.

    kubectl -ncsdr describe applicationbackup <your-backup-name>

    Dalam output yang diharapkan, parameter Phase dari Status berubah menjadi Completed, yang menunjukkan bahwa tugas pencadangan berhasil dibuat.

  5. Jalankan perintah berikut untuk memastikan daftar resource untuk cadangan ini.

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

    Anda dapat memeriksa daftar untuk resource yang tidak dicadangkan dan menyesuaikan konfigurasi pencadangan untuk menjalankan pencadangan lagi.

    Resource List:
      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

  1. Instal Pusat Cadangan di kluster pemulihan. Untuk informasi selengkapnya, lihat Langkah 2: Instal pusat cadangan.

  2. Kaitkan penyimpanan cadangan yang telah Anda buat dengan kluster pemulihan.

    1. Login ke Konsol ACK.

    2. Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Operations > Application Backup.

    3. Di halaman Application Backup, klik Restore.

    4. Pilih Backup Vault yang digunakan untuk pencadangan, klik Initialize Backup Vault, dan tunggu hingga cadangan disinkronkan ke kluster ini.

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

Dalam sebagian besar skenario, Anda cukup mengikuti Langkah 6 untuk membuat tugas pemulihan secara langsung di kluster pemulihan. Komponen Pusat Cadangan kemudian secara otomatis menghasilkan klaim dan volume penyimpanan berdasarkan cadangan.

Saat Pusat Cadangan menjalankan tugas pemulihan, komponen tersebut melewati pemulihan PVC dan PV dengan nama yang sama untuk melindungi data yang ada. Artinya, komponen tersebut tidak membangun ulang atau menimpa data di dalam volume. Oleh karena itu, dalam skenario berikut, Anda dapat membuat PVC dan PV terlebih dahulu sebelum tugas pemulihan untuk pemulihan yang lebih fleksibel:

  • Anda mencadangkan volume, tetapi beberapa volume berisi data yang tidak perlu dimigrasikan, seperti log. Anda dapat membuat volume kosong terlebih dahulu.

  • Anda mencadangkan volume, tetapi volume di kluster pencadangan yang tidak digunakan oleh pod yang sedang berjalan juga perlu dimigrasikan ke kluster pemulihan.

  • Anda tidak mencadangkan volume, dan daftar excludedResources mencakup persistentvolumeclaims dan persistentvolumes, atau migrasi melibatkan pemindahan aplikasi dari kluster FlexVolume ke kluster CSI.

Berikut adalah langkah-langkah spesifiknya:

Penting

Disk tidak dapat dipasang lintas zona ketersediaan. Jika Anda beralih ke zona ketersediaan yang berbeda di kluster pemulihan, pilih salah satu metode berikut:

  1. (Opsional) Jika kluster pencadangan Anda adalah kluster FlexVolume, Anda dapat menggunakan tool command-line untuk mengonversi file YAML secara batch karena YAML untuk PV dan PVC berbeda antara FlexVolume dan CSI. Untuk informasi selengkapnya, lihat Gunakan tool command-line FlexVolume2CSI untuk mengonversi file YAML secara batch.

  2. Jalankan perintah berikut untuk deploy file YAML CSI yang diperoleh dari FlexVolume2CSI.

    di mana outputfile.txt adalah output konversi YAML dari tool command-line.

    Perluas untuk melihat file outputfile.txt

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: d-2ze88915lz1il0**** # Disk yang dibuat 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 PVC di kluster pemulihan berada dalam status Bound.

    kubectl get pvc 

    Output 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

Penting
  • Jika resource dengan nama yang sama sudah ada di kluster pemulihan, tugas pemulihan akan melewati resource tersebut.

  • Pusat Cadangan berfokus pada pencadangan dan pemulihan aplikasi bisnis. Sebelum memulai tugas pemulihan, Anda harus menginstal dan mengonfigurasi komponen sistem yang diperlukan di kluster pemulihan. Contohnya:

    • Komponen bebas rahasia ACR: Anda perlu memberikan otorisasi ulang ke kluster pemulihan dan mengonfigurasi acr-configuration.

    • Komponen ALB Ingress: Anda perlu mengonfigurasi ALBConfig dan resource terkait lainnya terlebih dahulu.

Catatan

Saat memulihkan resource Service, Pusat Cadangan menyesuaikannya berdasarkan jenis Service:

  • Service NodePort: Saat memulihkan lintas kluster, Pusat Cadangan mempertahankan nomor port secara default.

  • Untuk Service bertipe LoadBalancer, saat ExternalTrafficPolicy diatur ke Local, HealthCheckNodePort menggunakan nomor port acak secara default. Untuk mempertahankan nomor port, atur spec.preserveNodePorts: true saat membuat tugas pemulihan.

    • Jika Service di kluster pencadangan menggunakan instans SLB yang sudah ada, service yang dipulihkan akan menggunakan instans SLB asli dan menonaktifkan pendengar paksa secara default. Anda perlu mengonfigurasi pendengar di konsol SLB.

    • Jika instans SLB untuk Service di kluster pencadangan dikelola oleh CCM, instans SLB baru akan dibuat oleh CCM saat pemulihan. Untuk informasi selengkapnya, lihat Catatan konfigurasi load balancer untuk Service.

Jika Anda mencadangkan volume saat membuat cadangan, Anda menggunakan metode perubahan sumber data untuk pencadangan dan pemulihan. Anda dapat mengubah jenis penyimpanan dengan menggunakan konversi StorageClass (convertedarg). Misalnya, Anda dapat mengonversi penyimpanan NAS menjadi penyimpanan disk. Anda dapat memilih StorageClass target sesuai kebutuhan.

  • Dalam contoh ini, karena kluster pencadangan adalah kluster FlexVolume v1.16 dan pencadangan volume disk menggunakan Cloud Backup, Anda dapat memilih alicloud-disk sebagai StorageClass target untuk klaim penyimpanan disk-essd (yang dikonversi ke kelas disk CSI dan secara default menjadi alicloud-disk-topology-alltype). Jika kluster pencadangan Anda adalah kluster CSI v1.18 atau lebih baru, Anda tidak perlu melakukan konfigurasi terkait untuk volume disk.

  • Contoh ini juga mengonversi volume NAS FlexVolume menjadi volume NAS terisolasi yang dikelola CNFS dengan memilih StorageClass target alibabacloud-cnfs-nas untuk PVC pvc-nas. Jika kluster Anda tidak memiliki StorageClass alibabacloud-cnfs-nas, lihat Kelola sistem file NAS menggunakan CNFS.

Berikut adalah langkah-langkah spesifiknya:

  1. Jalankan perintah berikut untuk membuat tugas pemulihan.

    Untuk informasi tentang cara mengonfigurasi tugas pemulihan di konsol ACK, lihat Pulihkan aplikasi dan volume data. Langkah ini memberikan konfigurasi yang direkomendasikan untuk skenario contoh. Sesuaikan pengaturan sesuai skenario spesifik Anda.

    cat << EOF | kubectl apply -f -
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationRestore
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          '{"name":"<your-backup-vault-name>","region":"<your-region-id>","bucket":"<your-oss-bucket-name>","provider":"alibabacloud"}'
      name: <your-restore-name>
      namespace: csdr
    spec:
      backupName: <your-backup-name>
      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:
        <backupNamespace>: <restoreNamespace>
    EOF

    Parameter

    Deskripsi

    excludedNamespaces

    Namespace yang dikecualikan. Anda dapat mengecualikan namespace yang tidak diinginkan dari daftar resource cadangan.

    excludedResources

    Resource yang dikecualikan. Anda dapat mengecualikan jenis resource yang tidak diinginkan dari daftar resource cadangan.

    appRestoreOnly

    Untuk cadangan yang mencakup volume, parameter ini menentukan apakah akan memulihkan volume tersebut.

    • true: Membuat volume dinamis dan klaim penyimpanan yang mengarah ke sumber data baru selama pemulihan. Tugas pencadangan yang dibuat di konsol secara default diatur ke true.

    • false: Volume statis tidak dibuat. Anda harus men-deploy volume statis secara manual terlebih dahulu.

    Catatan

    Umumnya, atur nilai ini ke true untuk perubahan sumber data dan ke false untuk sumber data tidak berubah.

    convertedarg

    Daftar konversi StorageClass. Untuk volume bertipe FileSystem, seperti OSS, NAS, CPFS, dan volume lokal, Anda dapat mengonfigurasi parameter ini untuk mengonversi StorageClass PVC-nya ke StorageClass yang ditentukan selama proses pemulihan. Misalnya, Anda dapat mengonversi volume NAS menjadi volume disk.

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

    • namespace: namespace dari PVC.

    • persistentVolumeClaim: nama PVC.

    Di atas adalah parameter yang diperlukan untuk fitur konversi StorageClass.

  2. Jalankan perintah berikut untuk menanyakan status tugas pemulihan.

    kubectl -ncsdr describe applicationrestore <your-restore-name>

    Dalam output yang diharapkan, Phase dari Status berubah menjadi Completed, yang menunjukkan bahwa tugas berhasil dipulihkan.

  3. Jalankan perintah berikut untuk memeriksa apakah ada resource yang gagal dipulihkan dan menemukan penyebab kegagalannya.

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

    Output yang diharapkan:

    Warnings:
      Velero:     <none>
      Cluster:  could not restore, ClusterRoleBinding "kubernetes-proxy" already exists. Warning: the in-cluster version is different than the backed-up version.
      Namespaces:
        demo-ns:  could not restore, ConfigMap "kube-root-ca.crt" already exists. Warning: the in-cluster version is different than the backed-up version.
                   could not restore, Endpoints "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version.
                   could not restore, Service "kubernetes" already exists. Warning: the in-cluster version is different than the backed-up version.
    
    Errors:
      Velero:     <none>
      Cluster:    <none>
      Namespaces:
        demo-ns:  error restoring endpoints/xxxxxx/kubernetes: Endpoints "kubernetes" is invalid: subsets[0].addresses[0].ip: Invalid value: "169.254.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10)
                   error restoring endpointslices.discovery.k8s.io/demo-ns/kubernetes: EndpointSlice.discovery.k8s.io "kubernetes" is invalid: endpoints[0].addresses[0]: Invalid value: "169.xxx.128.9": may not be in the link-local range (169.xxx.0.0/16, fe80::/10)
                   error restoring services/xxxxxx/kubernetes-extranet: Service "kubernetes-extranet" is invalid: spec.ports[0].nodePort: Invalid value: 31882: provided port is already allocated

    Dari output di atas, Anda dapat melihat apakah ada resource di kluster pemulihan yang tidak dipulihkan. Misalnya, Warnings menunjukkan bahwa resource sudah ada dan dilewati. Errors menunjukkan konflik NodePort, karena port asli dipertahankan selama pemulihan lintas kluster.

  4. Pastikan aplikasi yang dipulihkan berjalan dengan baik.

    1. Setelah aplikasi dipulihkan, periksa apakah ada resource yang berada dalam status abnormal karena batasan aplikasi, exception runtime kontainer, atau alasan lainnya. Jika demikian, perbaiki secara manual.

    2. Setelah pemulihan diverifikasi, apiVersion aplikasi Nginx secara default disesuaikan menjadi apps/v1, yang direkomendasikan untuk kluster versi 1.28.