Hinweis:

Migrieren Sie Ihr Azure Kubernetes-Servicecluster oder Amazon EKS-Cluster mit Velero zu Container Engine for Kubernetes

Einführung

Velero ist ein Open-Source-Tool für sicheres Backup und Restore, Disaster Recovery und Migration von Kubernetes-Clusterressourcen und persistenten Volumes. Da Oracle Cloud Infrastructure (OCI) Object Storage S3-Compatible ist, können wir das AWS-Plug-in von Velero verwenden. In diesem Tutorial verwenden wir Azure Kubernetes Service (AKS), aber die Schritte sollten auch nahtlos in Amazon Elastic Kubernetes Service (Amazon EKS) funktionieren.

Das folgende Diagramm zeigt eine Übersicht über die Funktionsweise des Prozesses.

Diagramm

Für dieses Tutorial haben wir einen NGINX-Pod vorbereitet, an den ein persistenter Volume Claim und eine benutzerdefinierte index.html-Datei angehängt sind, sowie ein Dummy Secret.

  > kubectl get pods --n nginx      
  NAME          READY   STATUS    RESTARTS   AGE
  task-pv-pod   1/1     Running   0          47h
  > kubectl exec -it task-pv-pod --n nginx -- curl localhost
  AKS to OKE Migration with PVC attached
  >kubectl get secrets --namespace nginx
  NAME           TYPE     DATA   AGE
  okemigration   Opaque   1      2s

Ziele

Voraussetzungen

Aufgabe 1: velero-credentials-Datei mit dem Kunden-Secret-Key erstellen

  1. Wenn Sie noch keinen Kunden-Secret-Key haben, können Sie diese Schritte ausführen.

  2. Erstellen Sie auf dem Rechner, mit dem Sie auf die AKS-/EKS- und OKE-Cluster (oder die Cloud-Shells) zugreifen, die Datei velero-credentials mit dem folgenden Inhalt:

      [default]
      aws_access_key_id=<<Access Key ID>>
      aws_secret_access_key=<<Generated Key>>
    
    

Aufgabe 2: Velero herunterladen und installieren

  1. Installieren Sie Velero auf dem Rechner, mit dem Sie auf die Cluster zugreifen, nach diesen Schritten. Wenn Sie Cloud Shell verwenden, laden Sie ihn hier herunter.

  2. Fahren Sie mit der Installation von Velero in AKS- und OKE-Clustern mit dem folgenden Befehl fort.

    Hinweis: Wenn Sie die Binärdateien heruntergeladen haben, führen Sie velero mit ./ am Anfang aus:

    velero install \
    --provider aws \
    --bucket <<Bucket name>> \
    --prefix <<Tenancy name>> \
    --use-volume-snapshots=false \
    --plugins velero/velero-plugin-for-aws:v1.6.0 \
    --secret-file <<Location of the file created with the customer secret key>> \
    --backup-location-config region=<<Region>>,s3ForcePathStyle="true",s3Url=https://<<tenancy name>>.compat.objectstorage.<<region>>.oraclecloud.com \
    --use-node-agent
    
  3. Prüfen Sie, ob Velero in AKS und OKE installiert wurde, indem Sie den folgenden Befehl ausführen.

    > kubectl get deployment -n velero
    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    velero   1/1     1            1           47h
    

Aufgabe 3: Cluster sichern

  1. Führen Sie im AKS-Cluster den folgenden Befehl aus. In diesem Tutorial nutzen wir die Azure CLI mit den darin heruntergeladenen Velero-Binärdateien.

    velero-v1.11.1-rc.1-linux-amd64> ./velero backup create nginxoke --include-namespaces nginx --default-volumes-to-fs-backup
    Backup request "nginxoke" submitted successfully.
    Run `velero backup describe nginxoke` or `velero backup logs nginxoke` for more details.
    
  2. Prüfen Sie, ob das Cluster gesichert ist.

       velero-v1.11.1-rc.1-linux-amd64> ./velero backup describe nginxoke
       Name:         nginxoke
       Namespace:    velero
       Labels:       velero.io/storage-location=default
       Annotations:  velero.io/source-cluster-k8s-gitversion=v1.24.10
                   velero.io/source-cluster-k8s-major-version=1
                   velero.io/source-cluster-k8s-minor-version=24
       Phase:  Completed
       Namespaces:
       Included:  nginx
       Excluded:  <none>
       .................
    You can also check the Object Storage Bucket:
    ![bucket](./images/bucket.png "Storage Bucket")
    

Aufgabe 4: Wiederherstellen oder In OKE migrieren

  1. Da AKS, EKS und OKE unterschiedliche storageClassNames für die Persistent Volume Claims verwenden, müssen wir eine configMap erstellen, mit der die Quelle storageClassNames in einen OCI-kompatiblen Klassennamen übersetzt wird. Dazu erstellen wir die Datei configMap.yaml mit dem folgenden Inhalt. Passen Sie sie an die Quelle storageClassName an.

    Wichtig: Sie müssen Schritt 1 abschließen. Andernfalls bleiben Ihre Pods im Status "Ausstehend".

    apiVersion: v1
    kind: ConfigMap
    metadata:
    # any name can be used; Velero uses the labels (below)
    # to identify it rather than the name
    name: change-storage-class-config
    # must be in the velero namespace
    namespace: velero
    # the below labels should be used verbatim in your
    # ConfigMap.
    labels:
        # this value-less label identifies the ConfigMap as
        # config for a plugin (i.e. the built-in change storage
        # class restore item action plugin)
        velero.io/plugin-config: ""
        # this label identifies the name and kind of plugin
        # that this ConfigMap is for.
        velero.io/change-storage-class: RestoreItemAction
    data:
    # add 1+ key-value pairs here, where the key is the old
    # storage class name and the value is the new storage
    # class name.
    <old-storage-class>: oci-bv
    
  2. Wenden Sie configMap mit dem folgenden Befehl auf das OKE-Cluster an.

    kubectl apply -f configMap.yaml

  3. Prüfen Sie, ob das OKE-Cluster über den Objektspeicher auf die Backups zugreifen kann.

    $ velero get backup
    NAME         STATUS            ERRORS   WARNINGS   CREATED                          EXPIRES   STORAGE LOCATION   SELECTOR
    nginxoke     Completed         0        0          2023-07-22 14:40:33 +0300 EEST   29d       default            <none>
    
  4. Erstellen Sie die Wiederherstellung mit dem folgenden Befehl.

    $ velero restore create --from-backup nginxoke
    Restore request "nginxoke-20230722145553" submitted successfully.
    Run `velero restore describe nginxoke-20230722145553` or `velero restore logs nginxoke-20230722145553` for more details.
    
  5. Prüfen Sie den Restore-Status.

    $ velero restore describe nginxoke-20230722145553
    Name:         nginxoke-20230722145553
    Namespace:    velero
    Labels:       <none>
    Annotations:  <none>
    Phase:                       Completed
    Total items to be restored:  7
    Items restored:              7
    Started:    2023-07-22 14:55:54 +0300 EEST
    Completed:  2023-07-22 14:56:45 +0300 EEST
    ..........
    
  6. Prüfen Sie, ob das Cluster erfolgreich migriert wurde.

    $ kubectl get pod -n nginx
    NAME          READY   STATUS    RESTARTS   AGE
    task-pv-pod   1/1     Running   0          2m15s
    $ kubectl get secrets -n nginx
    NAME           TYPE     DATA   AGE
    okemigration   Opaque   1      2m21s
    $ kubectl get pvc -n nginx
    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    task-pv-claim   Bound    csi-d03267f7-32cf-4068-8809-d29aa649dcba   50Gi       RWO            oci-bv         2m31s
    $ kubectl exec task-pv-pod -n nginx -- curl http://localhost
    AKS to OKE Migration with PVC attached
    

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.