Come posso installare il driver CSI per Amazon S3 sui miei cluster Amazon EKS?
Desidero utilizzare il driver CSI (Container Storage Interface) per Amazon Simple Storage Service (Amazon S3) sui miei cluster Amazon Elastic Kubernetes Service (Amazon EKS).
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:
- Installa gli strumenti a riga di comando kubectl e eksctl.
- Crea un provider AWS Identity and Access Management (AWS IAM) OpenID Connect (OIDC) per il cluster.
- Utilizza ruoli IAM per gli account di servizio (IRSA) perché non puoi utilizzare EKS Pod Identity con il driver CSI per Amazon S3.
Per ottenere l'ID dell'emittente OIDC, esegui questo comando AWS CLI describe-cluster:
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5
**Nota:**Sostituisci your_cluster_name con il nome del tuo cluster Amazon EKS.
Per verificare se hai configurato un provider IAM OIDC, esegui questo comando list-open-id-connect-providers:
aws iam list-open-id-connect-providers | grep your_OIDC_ID | cut -d "/" -f4
Nota: sostituisci YOUR_OIDC_ID con il tuo ID OIDC. Se l'output è vuoto, devi creare un provider IAM OIDC.
Esegui questo comando per creare un provider IAM OIDC:
eksctl utils associate-iam-oidc-provider --cluster your_cluster_name --approve
Nota: sostituisci your_cluster_name con il nome del tuo cluster.
Distribuisci il driver CSI per Amazon S3
Completa i seguenti passaggi:
- Crea una policy IAM in base ai requisiti.
Policy di bucket per uso generico:
Nota: sostituisci your_bucket_name con il nome del tuo bucket.cat <<EOF > iam-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "MountpointFullBucketAccess", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your_bucket_name" ] }, { "Sid": "MountpointFullObjectAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::your_bucket_name/*" ] } ] } EOF
Policy di bucket di directory:
Nota: sostituisci YOUR_AWS_REGION con la tua Regione AWS, YOUR_AWS_ACCOUNT_ID con il tuo account AWS, your_bucket_name con il nome del tuo bucket e az_id con la tua zona di disponibilità.cat <<EOF > iam-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3express:CreateSession", "Resource": "arn:aws:s3express:YOUR_AWS_REGION:YOUR_AWS_ACCOUNT_ID:bucket/your_bucket_name--az_id--x-s3" } ] } EOF - Esegui questo comando create-policy per creare una policy IAM denominata AmazonS3CSIDriverPolicy:
Nota: sostituisci iam-policy.json con il file JSON della tua policy IAM.aws iam create-policy --policy-name AmazonS3CSIDriverPolicy --policy-document file://iam-policy.json - Crea la seguente policy di attendibilità IAM:
Nota: sostituisci YOUR_AWS_ACCOUNT_ID con il tuo account, YOUR_AWS_REGION con la tua Regione e YOUR_OIDC_ID con il tuo ID OIDC.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": { "StringLike": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/your_OIDC_ID:sub": "system:serviceaccount:kube-system:s3-csi-*", "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/your_OIDC_ID:aud": "sts.amazonaws.com" } } } ] } EOF - Esegui questo comando create-role per creare un ruolo IAM denominato AmazonEKS_S3_CSI_DriverRole:
Nota: sostituisci trust-policy.json con il file JSON della tua policy di attendibilità IAM.aws iam create-role --role-name AmazonEKS_S3_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json" - Esegui questo comando attach-role-policy per collegare la policy al ruolo IAM:
Nota: sostituisci YOUR_AWS_ACCOUNT_ID con l'ID del tuo account AWS.aws iam attach-role-policy --policy-arn arn:aws:iam::YOUR_AWS_ACCOUNT_ID:policy/AmazonS3CSIDriverPolicy --role-name AmazonEKS_S3_CSI_DriverRole - Esegui questo comando create-addon per distribuire il driver CSI per Amazon S3 sul cluster:
Nota: sostituisci your_cluster_name con il nome del tuo cluster e il YOUR_AWS_ACCOUNT_ID con l'ID del tuo account. Per installare il driver CSI per Amazon S3 con Kustomize o Helm, consulta Installation (Installazione) sul sito web di GitHub.aws eks create-addon --cluster-name your_cluster_name --addon-name aws-mountpoint-s3-csi-driver --service-account-role-arn arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/AmazonEKS_S3_CSI_DriverRole
Per consentire agli utenti di sovrascrivere i file esistenti, aggiungi il flag --allow-overwrite al volume persistente. Devi aggiungere tutte le scritture in sequenza dall'inizio del file. Non puoi aggiungere file, ma devi sostituire i contenuti esistenti con nuovi contenuti. Nel caso specifico dei bucket di directory della classe di storage Amazon S3 Express One Zone, puoi invece aggiungere file esistenti aggiungendo il flag --incremental-upload al volume persistente. In tal caso, inizia dalla fine del file per aggiungere in sequenza tutte le scritture. Per ulteriori informazioni, consulta Reading and writing files (Lettura e scrittura di file) e Configure (Configurazione) sul sito web di GitHub.
Il punto di montaggio del driver CSI per Amazon S3 utilizza solo il provisioning statico. Non puoi utilizzare il provisioning dinamico o creare nuovi bucket. I volumi che monti sul punto di montaggio non possono utilizzare tutte le funzionalità del file system POSIX. Per ulteriori informazioni, consulta Mountpoint for Amazon S3 file system behavior (Comportamento del file system di Mountpoint per Amazon S3) sul sito web di GitHub. Se le applicazioni richiedono file system completi, è consigliabile utilizzare Amazon Elastic File System (Amazon EFS) o Amazon FSx.
Testa il driver CSI per Amazon S3
Per testare il driver CSI per Amazon S3, distribuisci un'applicazione di esempio che utilizza il provisioning statico per i Pod. Per passaggi ed esempi, consulta Static provisioning example (Esempio di provisioning statico) sul sito web di GitHub.
Risolvi i problemi relativi al driver CSI per Amazon S3
Il driver CSI per Amazon S3 non funziona come previsto
Per verificare che i Pod del nodo del driver CSI per Amazon S3 siano in esecuzione, esegui questo comando:
kubectl get all -l app.kubernetes.io/name=aws-mountpoint-s3-csi-driver -n kube-system
Per esaminare i log dei Pod del driver CSI per Amazon S3, esegui questo comando:
kubectl logs daemonset/s3-csi-node -n kube-system -c s3-plugin:
Assicurati che il bucket Amazon S3 si trovi nella stessa Regione del cluster Amazon EKS. Se il bucket e il cluster si trovano in Regioni diverse, aggiorna mountOptions includendo la Regione.
Esempio di configurazione:
apiVersion: v1 kind: PersistentVolume metadata: name: s3-pv-1 spec: accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: s3.csi.aws.com volumeAttributes: bucketName: bucket name volumeHandle: s3-csi-driver-volume mountOptions: - region us-west-2 - allow-other persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem
Se il driver CSI per Amazon S3 non funziona su Amazon Machine Image (AMI) Bottlerocket, esegui questo comando per verificare la versione dell'immagine del container:
kubectl get ds s3-csi-node -n kube-system -ojsonpath="{range .spec.template.spec.containers[*]}{.image}{'\n'}{end}"
Nell'output del comando, assicurati che la versione dell'immagine del container sia maggiore o uguale a v1.4.0. È consigliabile utilizzare la versione più recente del driver CSI per Amazon S3. Per la versione più recente, consulta mountpoint-s3-csi-driver Releases (Versioni di mountpoint-s3-csi-driver) sul sito web di GitHub.
Gli utenti del container non possono accedere al bucket Amazon S3
Per impostazione predefinita, solo l'utente che ha montato il bucket S3 può accedere alla directory montata. Ciò si verifica anche quando configuri autorizzazioni e impostazioni di proprietà per consentire ad altri utenti nel container di accedere al bucket.
Per consentire ad altri utenti non root di accedere alla directory montata, aggiorna mountOptions includendo l'opzione --allow-other. Per consentire all'utente root di accedere alla directory montata come utente diverso, utilizza --allow-root.
Esempio di policy:
apiVersion: v1 kind: PersistentVolume metadata: name: s3-pv-1 spec: accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: s3.csi.aws.com volumeAttributes: bucketName: bucket name volumeHandle: s3-csi-driver-volume mountOptions: - region us-west-2 - allow-other persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem
Ricevi l'errore "Volume capability not supported"
Quando utilizzi il driver CSI per Amazon S3, potresti ricevere un messaggio di errore simile al seguente esempio:
"Warning FailedMount 39s (x8 over 104s) kubelet MountVolume.SetUp failed for volume "s3-pv-1" : rpc error: code = InvalidArgument desc = Volume capability not supported"
Ricevi l'errore precedente quando utilizzi una modalità di accesso non supportata dal driver CSI per Amazon S3, ad esempio ReadWriteOncePod o ReadWriteOnce. Puoi utilizzare solo le modalità di accesso ReadWriteMany o ReadOnlyMany.
- Argomenti
- Containers
- Lingua
- Italiano
