Salta al contenuto

Come si usa l'archiviazione persistente in Amazon EKS?

8 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: per questioni di sicurezza ed efficienza, è consigliabile installare il driver CSI tramite un componente aggiuntivo Amazon EKS. È inoltre consigliabile installare la versione più recente dei driver. Per i passaggi di installazione e la versione più recente del driver, consulta aws-ebs-csi-driver o aws-efs-csi-driver sul sito web GitHub.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Prerequisiti:

  • Configura una versione di kubectl che sia allineata alla versione di Kubernetes. Per informazioni sul disallineamento delle versioni, consulta kubectl sul sito web Kubernetes.

  • Installa o aggiorna eksctl. Per istruzioni, consulta Installation (Installazione) sul sito web eksctl.

  • Configura le autorizzazioni Crea in AWS Identity and Access Management (AWS IAM). Quindi collega la policy al ruolo del driver CSI o al ruolo del nodo worker Amazon EKS.

  • Crea il cluster Amazon EKS, quindi collega i nodi worker al cluster. Per verificare di aver collegato i nodi worker al cluster, esegui questo comando:

    kubectl get nodes
  • Per verificare l'esistenza di un provider IAM OpenID Connect (OIDC) per il cluster, esegui questo comando AWS CLI describe-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.

  • Per verificare di aver configurato il provider IAM OIDC, esegui questo comando list-open-id-connect-providers:

    aws iam list-open-id-connect-providers | grep OIDC-ID

    Nota: sostituisci OIDC-ID con l'ID del tuo provider OIDC. Se ricevi un messaggio di errore , crea un provider IAM OIDC"No OpenIDConnect provider found in your account".

Driver Amazon EBS CSI

Per distribuire il driver Amazon EBS CSI, completa i seguenti passaggi:

  1. Crea un file della 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/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:aud": "sts.amazonaws.com",
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID: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 OIDC-ID con l'ID del tuo provider OIDC.

  2. Per creare un ruolo IAM denominato AmazonEKS_EBS_CSI_DriverRole, esegui questo comando create-role:

    aws iam create-role
     --role-name AmazonEKS_EBS_CSI_DriverRole
     --assume-role-policy-document file://"trust-policy.json"
  3. Per collegare la policy IAM gestita da AWS del driver CSI al ruolo IAM, esegui questo comando attach-role-policy:

    aws iam attach-role-policy
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
    --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Per distribuire il driver Amazon EBS CSI, utilizza Kustomize, Helm o un componente aggiuntivo gestito da Amazon EKS. Per istruzioni sulla distribuzione, consulta Installation (Installazione) sul sito web GitHub.

  5. Verifica il driver Amazon EBS CSI con un'esempio di applicazione che utilizzi il provisioning dinamico per i Pod. Il driver Amazon EBS CSI fornisce volumi EBS on demand.

Driver Amazon EFS CSI

Crea un ruolo IAM per il driver CSI

Completa i seguenti passaggi per un cluster con nodi worker:

  1. Per utilizzare AmazonEFSCSIDriverPolicy, consulta Se si utilizzano i ruoli IAM per gli account di servizio. Quindi procedi con il passaggio 7.
    Oppure esegui questo comando per scaricare il documento sulla 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. Per creare una policy IAM, esegui questo comando create-policy:

    aws iam create-policy
        --policy-name AmazonEKS_EFS_CSI_Driver_Policy
        --policy-document file://iam-policy-example.json
  3. Per determinare l'ID del provider OIDC del cluster, esegui questo comando describe-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 che concede l'azione AssumeRoleWithWebIdentity all'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/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID: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 e OIDC-ID con l'ID del provider OIDC del tuo cluster.

  5. Per creare un ruolo IAM, esegui questo comando create-role:

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. Per collegare la nuova policy IAM al ruolo, esegui questo comando attach-role-policy:

    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

    Nota: sostituisci YOUR_AWS_ACCOUNT_ID con l'ID del tuo account.

  7. Se utilizzi un componente aggiuntivo gestito, procedi con Distribuisci il driver Amazon EFS CSI. Per installare un driver autogestito, completare i passaggi 7-10. Salva i seguenti contenuti in un file YAML 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

    Nota: sostituisci YOUR_AWS_ACCOUNT_ID con l'ID del tuo account.

  8. Per creare l'account di servizio Kubernetes sul cluster, esegui questo comando:

    kubectl apply -f efs-service-account.yaml

    Nota: l'account di servizio Kubernetes efs-csi-controller-sa contiene l'annotazione del ruolo IAM che hai creato.

  9. Per scaricare il manifesto dal registro pubblico Amazon Elastic Container Registry (Amazon ECR), esegui questo comando:

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

    Nota: sostituisci VERSION con il tuo numero di versione. È consigliabile utilizzare l'ultima versione rilasciata. Per un elenco dei branch attivi, consulta Branches (Branch) sul sito web GitHub. Puoi utilizzare Helm invece di Kustomize per installare il driver. Per i passaggi, consulta Deploy the driver (Distribuzione del driver) sul sito web GitHub.

  10. Modifica il file scaricato per rimuovere le seguenti righe:

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  name: efs-csi-controller-sa
  namespace: kube-system

Nota: non è necessario includere le righe precedenti perché hai già creato un account di servizio nel passaggio 7.

Distribuisci il driver Amazon EFS CSI

Per applicare il manifesto, esegui questo comando:

kubectl apply -f public-ecr-driver.yaml

Se il cluster non contiene nodi e contiene solo Pod AWS Fargate, esegui questo comando per distribuire il driver in 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 EFS

Completa i seguenti passaggi:

  1. Per ottenere l'ID del cloud privato virtuale (VPC) del cluster Amazon EKS, esegui il comando describe-cluster:
    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 del cluster VPC, esegui questo comando describe-vpcs:
    aws ec2 describe-vpcs
     --vpc-ids YOUR_VPC_ID
     --query "Vpcs[].CidrBlock"
     --output text
    Nota: sostituisci YOUR_VPC_ID con l'ID del tuo VPC.
  3. Per creare un gruppo di sicurezza che consenta il traffico NFS (Network File System) in entrata verso i punti di montaggio Amazon EFS, esegui questo comando create-security-group:
    aws ec2 create-security-group
     --description efs-test-sg
     --group-name efs-sg
     --vpc-id YOUR_VPC_ID
    Nota: sostituisci YOUR_VPC_ID con l'ID del tuo VPC. Nell'output, annota il valore GroupId.
  4. Per consentire alle risorse del VPC di comunicare con il file system EFS, aggiungi una regola NFS in entrata eseguendo questo comando authorize-security-group-ingress:
    aws ec2 authorize-security-group-ingress --group-id sg-abc --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    Nota: sostituisci YOUR_VPC_CIDR con il CIDR del tuo VPC e sg-abc con l'ID del tuo gruppo di sicurezza.
  5. Per creare un file system EFS per il cluster Amazon EKS, esegui questo comando create-file-system:
    aws efs create-file-system --creation-token eks-efs
    Nota: annota il valore FileSystemId.
  6. Per creare una destinazione di montaggio per Amazon EFS, esegui questo comando create-mount-target:
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-abc
    Nota: sostituisci FileSystemId con l'ID del tuo file system EFS, sg-abc con l'ID del tuo gruppo di sicurezza e SubnetID con l'ID della sottorete del tuo nodo worker. È consigliabile eseguire il comando precedente per ogni zona di disponibilità in cui vengono eseguiti i nodi worker. Tutte le istanze Amazon Elastic Compute Cloud (Amazon EC2) nelle zone di disponibilità possono utilizzare il file system. Per creare destinazioni di montaggio in più sottoreti, esegui il comando per ogni ID di sottorete.

Verifica il driver Amazon EFS CSI

Per distribuire due Pod che scrivono nello stesso file, consulta Multiple Pods Read Write Many (Accesso da più Pod con la modalità ReadWriteMany) sul sito web GitHub.

Informazioni correlate

Risoluzione degli errori di funzionamento dei file relativi alle quote

Amazon EFS CSI driver (Driver Amazon EFS CSI) sul sito web GitHub

Come faccio a risolvere i problemi relativi ai montaggi dei volumi Amazon EFS in Amazon EKS?

Come posso risolvere i problemi relativi ai miei montaggi di volumi Amazon EFS in Amazon EKS?