Como usar o armazenamento persistente no Amazon EKS?
Quero usar o armazenamento persistente no Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrição
Para usar o armazenamento persistente no Amazon EKS, conclua as etapas de uma das seguintes opções:
- Implante e teste o driver da interface de armazenamento de contêineres (CSI) do Amazon Elastic Block Store (Amazon EBS).
- Implante e teste o driver da interface de armazenamento de contêineres (CSI) do Amazon Elastic File System (Amazon EFS).
Observação: é uma prática recomendada instalar a versão mais recente dos drivers. Para ver as etapas de como instalar os drivers mais recentes, consulte aws-ebs-csi-driver e aws-efs-csi-driver no site do GitHub.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Pré-requisitos:
- Instale a AWS CLI.
- Use o kubectl versão 1.14 ou posterior para os comandos. Para obter mais informações, consulte Instalar ou atualizar o kubectl.
- Defina as permissões do AWS Identity and Access Management (IAM) como Criar. Em seguida, anexe uma política à função de nó de processamento CSI Driver Role do Amazon EKS.
- Crie seu cluster do Amazon EKS e ingresse seus nós de processamento nesse cluster.
Observação: execute o comando kubectl get nodes para verificar se os nós de processamento estão conectados ao cluster. - Execute o comando a seguir para verificar se o seu provedor OpenID Connect (OIDC) do AWS IAM existe para o cluster:
Observação: substitua your_cluster_name pelo nome do seu cluster.aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
- Para verificar se seu provedor OIDC do IAM está configurado, execute o seguinte comando:
Observação: substitua o ID do provedor OIDC pelo ID do seu OIDC. Se você receber um erro “No OpenIDConnect provider found in your account”, você deverá criar um provedor OIDC do IAM.aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
- Instale ou atualize o eksctl. Para obter instruções, consulte Installation no site eksctl.
- Execute o comando a seguir para criar um provedor OIDC do IAM:
Observação: substitua my-cluster pelo nome do seu cluster.eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
Driver CSI do Amazon EBS
Implante o driver de CSI do Amazon EBS
Conclua as seguintes etapas:
-
Crie um arquivo de política de confiança do IAM, semelhante ao exemplo a seguir:
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
Observação: substitua YOUR_AWS_ACCOUNT_ID pelo ID da sua conta da AWS, YOUR_AWS_REGION pela sua região da AWS e seu ID do OIDC pelo seu ID do OIDC.
-
Crie uma função do IAM chamada AmazonEKS_EBS_CSI_DriverRole:
aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
Anexe a política do IAM gerenciada pela AWS ao driver ao perfil do IAM:
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole
-
Implante o driver de CSI do Amazon EBS.
Observação: para implantar o driver CSI do EBS, você pode usar o Kustomize, o Helm ou um complemento gerenciado do Amazon EKS. Para obter instruções sobre como implantar o driver CASI do EBS, consulte Installation no site do GitHub.
Teste o driver CSI do Amazon EBS
Teste seu driver CSI do Amazon EBS com um aplicativo de amostra que usa provisionamento dinâmico para os pods. O volume do Amazon EBS é provisionado sob demanda.
Driver CSI do Amazon EFS
Crie um perfil do IAM para o driver CSI
Conclua as seguintes etapas:
-
Baixe o documento de política do IAM no GitHub:
curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
-
Crie uma política do IAM:
aws iam create-policy --policy-name AmazonEKS_EFS_CSI_Driver_Policy --policy-document file://iam-policy-example.json
-
Execute o comando a seguir para determinar o URL do provedor OIDC do seu cluster:
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
Observação: substitua your_cluster_name pelo nome do seu cluster.
-
Crie a seguinte política de confiança do IAM e, em seguida, conceda a ação AssumeRoleWithWebIdentity à sua conta de serviço do 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
Observação: substitua YOUR_AWS_ACCOUNT_ID pelo ID da sua conta, YOUR_AWS_REGION pela sua região da AWS e XXXXXXXXXX45D83924220DC4815XXXXX pelo ID do provedor OIDC do cluster.
-
Crie um perfil do IAM:
aws iam create-role --role-name AmazonEKS_EFS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
Anexe sua nova política do IAM ao perfil:
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
-
Salve o conteúdo a seguir em um arquivo chamado 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
-
Crie a conta de serviço do Kubernetes no seu cluster:
kubectl apply -f efs-service-account.yaml
Observação: a conta de serviço do Kubernetes chamada efs-csi-controller-sa é anotada com o perfil do IAM que você criou.
-
Baixe o manifesto do registro público do Amazon ECR e use as imagens para instalar o driver:
$ kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.5" > public-ecr-driver.yaml
Observação: para instalar o driver CSI do EFS, você pode usar o Helm e um Kustomize com o AWS Private or Public Registry. Para obter instruções sobre como instalar o driver CSI do EFS, consulte AWS EFS CSI driver no site do GitHub.
-
Edite o arquivo public-ecr-driver.yaml e anote a seção efs-csi-controller-sa da conta de serviço do Kubernetes com o ARN do perfil do IAM que você criou:
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
Implante o driver de CSI do Amazon EFS
Conclua as seguintes etapas:
-
Aplique o manifesto:
$ kubectl apply -f public-ecr-driver.yaml
-
Se o seu cluster contiver somente pods do AWS Fargate (sem nós), execute o seguinte comando para implantar o driver (todas as regiões):
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml
Crie um sistema de arquivos do Amazon EFS
Conclua as seguintes etapas:
- Para obter o ID da nuvem privada virtual (VPC) do seu cluster do Amazon EKS, execute o seguinte comando:
Observação: substitua your_cluster_name pelo nome do seu cluster.aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text
- Para obter o intervalo CIDR para seu cluster da VPC, execute o seguinte comando:
Observação: substitua YOUR_VPC_ID pelo ID da sua VPC.aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text
- Crie um grupo de segurança que permita o tráfego de entrada do sistema de arquivos de rede (NFS) para seus pontos de montagem do Amazon EFS:
Observação: substitua YOUR_VPC_ID pelo ID da sua VPC. Anote o GroupId para usar mais tarde.aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID
- Para permitir que os recursos em sua VPC se comuniquem com seu sistema de arquivos Amazon EFS, adicione uma regra de entrada do NFS:
Observação: substitua YOUR_VPC_CIDR pelo CIDR da sua VPC e sg-xxx pelo ID do seu grupo de segurança.aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
- Crie um sistema de arquivos do Amazon EFS para o seu cluster do Amazon EKS:
Observação: anote o FileSystemId para usar mais tarde.aws efs create-file-system --creation-token eks-efs
- Para criar um destino de montagem para o Amazon EFS, execute o seguinte comando:
Importante: execute o comando anterior para todas as zonas de disponibilidade com o SubnetID na zona de disponibilidade em que seus nós de processamento estão sendo executados. Substitua FileSystemId pelo ID do sistema de arquivos do EFS, sg-xxx pelo ID do seu grupo de segurança e SubnetID pelo ID da sub-rede do seu nó de processamento. Para criar destinos de montagem em várias sub-redes, execute o comando para cada ID de sub-rede. É uma prática recomendada criar um destino de montagem em cada zona de disponibilidade na qual seus nós de processamento estão sendo executados. Você pode criar destinos de montagem para todas as zonas de disponibilidade em que os nós de processamento são executados. Dessa forma, todas as instâncias do Amazon Elastic Compute Cloud (Amazon EC2) nessas zonas de disponibilidade podem usar o sistema de arquivos.aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-xxx
Teste o driver de CSI do Amazon EFS
Para implantar dois pods que gravam no mesmo arquivo, consulte Multiple pods Read Write Many no site do GitHub.
Informações relacionadas
Vídeos relacionados
Conteúdo relevante
- feita há 3 diaslg...
- feita há 19 diaslg...
- Resposta aceitafeita há 16 diaslg...
- feita há um mêslg...
- feita há 19 diaslg...
- AWS OFICIALAtualizada há um ano