Come si usa l'archiviazione persistente in Amazon EKS?

7 minuti di lettura
0

Desidero utilizzare l'archiviazione persistente in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Per utilizzare lo storage persistente in Amazon EKS, completa i passaggi per una delle seguenti opzioni:

Nota: è consigliabile assicurarsi di aver installato la versione più recente dei driver. Per istruzioni su come installare i driver più recenti, consulta aws-ebs-csi-driver e aws-efs-csi-driver sul sito Web GitHub.

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Prerequisiti:

  • Installare AWS CLI.
  • Usa kubectl versione 1.14 o successiva per i comandi. Per ulteriori informazioni, consulta Installazione o aggiornamento di kubectl.
  • Imposta le autorizzazioni AWS Identity and Access Management (IAM) su Crea. Quindi, allega una policy al ruolo del nodo di lavoro Amazon EKS CSI Driver Role.
  • Crea il tuo cluster Amazon EKS e unisci i nodi worker al cluster.
    Nota: esegui il comando get nodes di kubectl per verificare che i nodi worker siano collegati al cluster.
  • Per verificare che il provider AWS IAM OpenID Connect (OIDC) esiste per il cluster, esegui il comando seguente:
    aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
    Nota: sostituisci your_cluster_name con il nome del tuo cluster.
  • Esegui il seguente comando per verificare che il provider IAM OIDC sia configurato:
    aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
    Nota: sostituisci l'ID del provider oidc con il tuo ID OIDC. Se ricevi il messaggio di errore "No OpenIDConnect provider found in your account", dovrai creare un provider IAM OIDC.
  • Installa o aggiorna eksctl. Per istruzioni, consulta Installazione sul sito web eksctl.
  • Esegui il seguente comando per creare un provider IAM OIDC:
    eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
    Nota: sostituisci my-cluster con il nome del tuo cluster.

Driver Amazon EBS CSI

Implementa il driver CSI per Amazon EBS

Completa i seguenti passaggi:

  1. Crea un file di policy di attendibilità IAM simile all'esempio seguente:

    cat <<EOF > trust-policy.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<your OIDC ID>"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:aud": "sts.amazonaws.com",
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    Nota: sostituisci YOUR_AWS_ACCOUNT_ID con l'ID del tuo account AWS, YOUR_AWS_REGION con la tua regione AWS e your OIDC ID con il tuo ID OIDC.

  2. Crea un ruolo IAM denominato AmazonEKS_EBS_CSI_DriverRole:

    aws iam create-role
     --role-name AmazonEKS_EBS_CSI_DriverRole
     --assume-role-policy-document file://"trust-policy.json"
  3. Allega la policy IAM gestita da AWS del driver al ruolo IAM:

    aws iam attach-role-policy
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
    --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Implementa il driver CSI per Amazon EBS.
    Nota: puoi implementare il driver CSI per EBS con Kustomize, Helm o un componente aggiuntivo gestito da Amazon EKS. Per istruzioni su come distribuire il driver EBS CSI, consulta Installazione sul sito Web di GitHub.

Testa il driver CSI per Amazon EBS

Testa il driver CSI per Amazon EBS con un'applicazione di esempio che utilizzi il provisioning dinamico per i pod. Il volume Amazon EBS viene assegnato su richiesta.

Driver CSI Amazon EFS

Crea un ruolo IAM per il driver CSI

Completa i seguenti passaggi:

  1. Scarica il documento della policy IAM da GitHub:

    curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
  2. Crea una policy IAM:

    aws iam create-policy
        --policy-name AmazonEKS_EFS_CSI_Driver_Policy
        --policy-document file://iam-policy-example.json
  3. Esegui il comando seguente per determinare l'ID del provider OIDC del tuo cluster:

    aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text

    Nota: sostituisci your_cluster_name con il nome del tuo cluster.

  4. Crea la seguente policy di attendibilità IAM, poi assegna l'azione AssumeRoleWithWebIdentity al tuo account di servizio Kubernetes:

    cat <<EOF > trust-policy.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    Nota: sostituisci YOUR_AWS_ACCOUNT_ID con l'ID del tuo account, YOUR_AWS_REGION con la tua regione AWS e XXXXXXXXXX45D83924220DC4815XXXXX con l'ID del provider OIDC del tuo cluster.

  5. Crea un ruolo IAM:

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. Collega la nuova policy IAM al ruolo:

    aws iam attach-role-policy
      --policy-arn arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AmazonEKS_EFS_CSI_Driver_Policy
      --role-name AmazonEKS_EFS_CSI_DriverRole
  7. Salva i contenuti seguenti in un file denominato efs-service-account.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      labels:
        app.kubernetes.io/name: aws-efs-csi-driver
      name: efs-csi-controller-sa
      namespace: kube-system
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::<AWS_ACCOUNT_ID>:role/AmazonEKS_EFS_CSI_DriverRole
  8. Crea l'account di servizio di Kubernetes nel tuo cluster:

    kubectl apply -f efs-service-account.yaml

    **Nota:**L'account di servizio di Kubernetes denominato efs-csi-controller-sa è annotato con il ruolo IAM che hai creato.

  9. Scarica il manifesto dal registro pubblico Amazon ECR e utilizza le immagini per installare il driver:

    $ kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.5" > public-ecr-driver.yaml

    Nota: è possibile installare il driver CSI per EFS utilizzando Helm e un Kustomize con registro privato o pubblico AWS. Per istruzioni su come installare il driver EFS CSI, consulta il driver AWS EFS CSI sul sito Web di GitHub.

  10. Modifica il file public-ecr-driver.yaml e annota la sezione dell'account di servizio Kubernetes efs-csi-controller-sa con l'ARN del ruolo IAM creato:

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<accountid>:role/AmazonEKS\_EFS\_CSI\_DriverRole
  name: efs-csi-controller-sa
  namespace: kube-system

Implementa il driver CSI per Amazon EFS

Completa i seguenti passaggi:

  1. Applica il manifesto:

    $ kubectl apply -f public-ecr-driver.yaml
  2. Se il cluster contiene solo pod AWS Fargate (nessun nodo), implementa il driver con il seguente comando (per tutte le regioni):

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml

Crea un file system Amazon EFS

Completa i seguenti passaggi:

  1. Per ottenere l'ID del cloud privato virtuale (VPC) del tuo cluster Amazon EKS, esegui il seguente comando:
    aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text
    Nota: sostituisci your_cluster_name con il nome del tuo cluster.
  2. Per ottenere l'intervallo CIDR per il tuo cluster VPC, esegui il seguente comando:
    aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text
    Nota: sostituisci YOUR_VPC_ID con il tuo ID VPC.
  3. Crea un gruppo di sicurezza che consenta il traffico Network File System (NFS) in entrata per i punti di montaggio di Amazon EFS:
    aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID
    Nota: sostituisci YOUR_VPC_ID con il tuo ID VPC. Annota il GroupId da utilizzare in seguito.
  4. Aggiungi una regola NFS in entrata in modo che le risorse nel VPC possano comunicare con il file system di Amazon EFS:
    aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    Nota: sostituisci YOUR_VPC_CIDR con il tuo VPC CIDR e sg-xxx con l'ID del tuo gruppo di sicurezza.
  5. Crea un file system di Amazon EFS per il cluster Amazon EKS:
    aws efs create-file-system --creation-token eks-efs
    Nota: annota il FileSystemId da utilizzare in seguito.
  6. Per creare un target di montaggio per Amazon EFS, esegui il comando seguente:
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-xxx
    Importante: assicurati di eseguire il comando per tutte le zone di disponibilità con il SubnetID nella zona di disponibilità in cui sono in esecuzione i nodi worker. Sostituisci FileSystemId con l'ID del tuo file system EFS, sg-xxx con l'ID del tuo gruppo di sicurezza e SubnetID con l'ID della sottorete del tuo nodo di lavoro. Per creare destinazioni di montaggio in più sottoreti, esegui il comando per ogni ID di sottorete. È consigliabile creare un target di montaggio in ogni zona di disponibilità in cui sono in esecuzione i nodi worker. È possibile creare target di montaggio per tutte le zone di disponibilità in cui vengono avviati i nodi worker. A questo punto, tutte le istanze Amazon Elastic Compute Cloud (Amazon EC2) nella zona di disponibilità con il target di montaggio possono utilizzare il file system.

Testa il driver CSI per Amazon EFS

Per distribuire due pod che scrivono nello stesso file, vedi Multiple Pods Read Write Many sul sito Web GitHub.

Informazioni correlate

Risoluzione dei problemi di Amazon EFS

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa