Vorhandenes EBS-Volume importieren

Übersicht

Wenn Sie bereits ein AWS Elastic Block Store-Volume (EBS) zum Importieren in Anthos-Cluster in AWS haben, können Sie ein PersistentVolume-Objekt (PV) erstellen und dieses für einen bestimmten PersistentVolumeClaim (PVC) reservieren.

Auf dieser Seite wird erläutert, wie Sie mithilfe eines vorhandenen, mit Daten gefüllten EBS-Volumes ein PV erstellen und in einem Pod verwenden.

Hinweis

  • Verwenden Sie im Verzeichnis anthos-aws anthos-gke, um den Kontext zu Ihrem Nutzercluster zu wechseln.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Ersetzen Sie CLUSTER_NAME durch den Nutzerclusternamen.

PersistentVolume für ein bereits vorhandenes EBS-Volume erstellen

Sie können ein vorhandenes EBS-Volume durch Angabe eines neuen PV importieren.

  1. Kopieren Sie die folgende YAML-Datei in eine Datei mit dem Namen existing-volume.yaml und vervollständigen Sie die Konfiguration. Ersetzen Sie dabei die folgenden Werte:

    • volume-capacity: Größe des Volumes. Beispiel: 30Gi Weitere Informationen zum Angeben der Volume-Kapazität in Kubernetes finden Sie unter Bedeutung des Arbeitsspeichers.
    • storage-class-name: Der Name der StorageClass, die das Volume bereitstellt. Sie können beispielsweise den Standardwert standard-rwo verwenden.

    • ebs-id: EBS-Volume-ID. Beispiel: vol-05786ec9ec9526b67.

    • fs-type: Das Dateisystem des Volumes. Beispiel: ext4.

    • zone: AWS-Verfügbarkeitszone, die das EBS-Volume hostet. Beispiel: us-east-1c

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: volume-name
      annotations:
        pv.kubernetes.io/provisioned-by: ebs.csi.aws.com
    spec:
      capacity:
        storage: volume-capacity
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: storage-class-name
      claimRef:
        name: my-pvc
        namespace: default
      csi:
        driver: ebs.csi.aws.com
        volumeHandle: ebs-volume-id
        fsType: file-system-type
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.ebs.csi.aws.com/zone
              operator: In
              values:
              - zone
    
  2. Wenden Sie die YAML-Datei auf den Cluster an.

    kubectl apply -f existing-volume.yaml
    
  3. Bestätigen Sie, dass das PV erstellt wurde.

    kubectl describe pv volume-name
    

    Die Ausgabe dieses Befehls enthält den Status des PV.

Volume mit einem PersistentVolumeClaim und einem Pod verwenden

Nachdem Sie das Volume importiert haben, können Sie einen PVC und einen Pod erstellen, an den der PVC anhängt wird.

Die folgende YAML-Datei erstellt einen PVC und hängt ihn an einen Pod an, auf dem der Nginx-Webserver ausgeführt wird. Kopieren Sie die Datei in eine Datei mit dem Namen nginx.yaml und vervollständigen Sie die Konfiguration. Ersetzen Sie dabei die folgenden Werte:

  • storage-class: Der Name der StorageClass aus dem zuvor erstellten PersistentVolume. Beispiel: standard-rwo
  • volume-name: Der Name des zuvor erstellten Volumes.
  • volume-capacity: Größe des Volumes. Beispiel: 30Gi
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-class-name
  volumeName: volume-name
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: volume-capacity
---

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: data
  volumes:
   - name: data
     persistentVolumeClaim:
       claimName: my-pvc
  1. Wenden Sie die YAML-Datei auf den Cluster an.

    kubectl apply -f nginx.yaml
    
  2. Prüfen Sie den Status der Nginx-Instanz mit kubectl describe. In der Ausgabe sollte Running als STATUS enthalten sein.

    kubectl describe pod web-server
    

Verschlüsselte EBS-Volumes verwenden

Wenn Ihr EBS-Volume mit dem AWS Key Management Service (KMS) verschlüsselt ist, müssen Sie den Anthos-Clustern der AWS-Steuerungsebene Zugriff auf Ihren KMS-Schlüssel gewähren.

Führen Sie die folgenden Schritte aus, um den Namen der AWS IAM-Rolle abzurufen:

  1. Wechseln Sie in das Verzeichnis mit Ihren Anthos-Clustern in der AWS-Konfiguration. Sie haben dieses Verzeichnis bei der Installation des Verwaltungsdienstes erstellt.

    cd anthos-aws

  2. Wählen Sie aus, ob Sie Ihre Anthos-Cluster in der AWS-Umgebung mit dem anthos-gke-Tool oder manuell erstellt haben.

    Anthos-gke-Tool

    Verwenden Sie den Befehl terraform output und suchen Sie nach dem Wert von iamInstanceProfile.

    terraform output | grep iamInstanceProfile
    

    Wenn Sie Ihre Anthos-Cluster in der AWS-Umgebung mit dem anthos- gke-Tool erstellt haben, sieht die Ausgabe so aus:

      iamInstanceProfile: gke-CLUSTER_ID-controlplane
      iamInstanceProfile: gke-CLUSTER_ID-nodepool
    

    Dabei ist CLUSTER_ID die ID Ihres Clusters. Kopieren Sie den Wert von gke-CLUSTER_ID-controlplane für den folgenden Schritt.

    Manuell erstellt

    Sehen Sie sich die Ausgabe von terraform output mit dem folgenden Befehl an:

    terraform output | less
    

    Scrollen Sie durch die Ausgabe und suchen Sie nach der Instanz "iamInstanceProfile" nach der AWSCluster-Definition.

    kind: AWSCluster
    metadata:
      name: cluster-0
    spec:
      ...
      controlPlane:
       ...
        iamInstanceProfile: INSTANCE_PROFILE_NAME
    

    Kopieren Sie den Wert von INSTANCE_PROFILE_NAME für den folgenden Schritt.

  3. Um der Steuerungsebene Zugriff auf Ihre EBS-Volumes zu gewähren, fügen Sie dem AWS KMS-Schlüssel, der zum Verschlüsseln EBS-Volume verwendet wird, das AWS-IAM-Profil gke-xxxxxx-controlplane als Schlüsselnutzer hinzu.

Weitere Informationen