O driver Amazon Elastic File System Container Storage Interface (CSI) implementa a especificação CSI para orquestradores de contêineres para gerenciar o ciclo de vida dos sistemas de arquivos Amazon EFS.
Driver CSI do Amazon EFS Versão de especificação CSI | v0.3.0 | v1.1.0 | v1.2.0 |
---|---|---|---|
ramo mestre | não | não | sim |
v2.xx | não | não | sim |
v1.xx | não | não | sim |
v0.3.0 | não | sim | não |
v0.2.0 | não | sim | não |
v0.1.0 | sim | não | não |
O driver CSI do Amazon EFS oferece suporte ao provisionamento dinâmico e ao provisionamento estático. Atualmente, o Provisionamento Dinâmico cria um ponto de acesso para cada PV. Isso significa que um sistema de arquivos Amazon EFS deve ser criado manualmente na AWS primeiro e deve ser fornecido como uma entrada para o parâmetro da classe de armazenamento. Para provisionamento estático, primeiro o sistema de arquivos do Amazon EFS precisa ser criado manualmente na AWS. Depois disso, ele pode ser montado dentro de um contêiner como um volume usando o driver.
As seguintes interfaces CSI são implementadas:
Parâmetros | Valores | Padrão | Opcional | Descrição |
---|---|---|---|---|
modo de provisionamento | efs-ap | falso | Tipo de volume provisionado pelo efs. Atualmente, os pontos de acesso são suportados. | |
arquivoSystemId | falso | Sistema de arquivos sob o qual os pontos de acesso são criados. | ||
diretórioPerms | falso | Permissões de diretório para criação de diretório raiz do ponto de acesso. | ||
UID | verdadeiro | ID do usuário POSIX a ser aplicado para criação do diretório raiz do ponto de acesso. | ||
gid | verdadeiro | ID do grupo POSIX a ser aplicado para criação do diretório raiz do ponto de acesso. | ||
gidRangeStart | 50.000 | verdadeiro | Intervalo inicial do ID do grupo POSIX a ser aplicado para criação do diretório raiz do Ponto de Acesso. Não usado se uid/gid estiver definido. | |
gidRangeEnd | 7.000.000 | verdadeiro | Intervalo final do ID do grupo POSIX. Não usado se uid/gid estiver definido. | |
caminho base | verdadeiro | Caminho sob o qual são criados pontos de acesso para provisionamento dinâmico. Se este parâmetro não for especificado, os pontos de acesso serão criados no diretório raiz do sistema de arquivos | ||
subPathPattern | /${.PV.name} | verdadeiro | O modelo usado para construir o subPath sob o qual cada um dos pontos de acesso criados no Provisionamento Dinâmico. Pode ser composto de strings fixas e variáveis limitadas, é semelhante à variável 'subPathPattern' no gráfico nfs-subdir-external-provisioner. Suporta .PVC.name , .PVC.namespace e .PV.name | |
garantirUniqueDirectory | verdadeiro | verdadeiro | NOTA: Defina isso como falso apenas se tiver certeza de que esse é o comportamento desejado . Usado quando o provisionamento dinâmico está habilitado, se definido como verdadeiro, anexa um UID ao padrão especificado em subPathPattern para garantir que os pontos de acesso não apontem acidentalmente para o mesmo diretório. | |
az | "" | verdadeiro | Usado para montagem entre contas. az no parâmetro da classe de armazenamento é opcional. Se especificado, o ponto de acesso NFS associado ao az será usado para montagem entre contas. Se não for especificado, um destino de montagem aleatório será escolhido para montagem entre contas | |
reutilizarAccessPoint | falso | verdadeiro | Quando definido como verdadeiro, ele cria o token do cliente do ponto de acesso a partir do nome do PVC fornecido. Para que o AccessPoint possa ser replicado de um cluster diferente se o mesmo nome de PVC e configuração de classe de armazenamento forem usados. |
Observação
gidRangeStart
e gidRangeEnd
. Esses parâmetros serão opcionais somente se ambos forem omitidos. Se você especificar um, o outro se tornará obrigatório.az
no parâmetro da classe de armazenamento não deve ser confundido com a opção de montagem efs-utils az
. A opção az
mount é usada para montagem cross-az ou efs one zone file system mount na mesma conta aws do cluster.Se você quiser passar quaisquer outras mountOptions para o driver CSI do Amazon EFS durante a montagem, elas poderão ser transmitidas por meio do volume persistente ou dos objetos da classe de armazenamento, dependendo se o provisionamento estático ou dinâmico for usado. A seguir estão exemplos de algumas mountOptions que podem ser passadas:
Ao usar o driver EFS CSI, esteja ciente de que a opção de montagem noresvport
está habilitada por padrão. Isto significa que o cliente pode usar qualquer porta de origem disponível para comunicação, não apenas as portas reservadas.
Uma das vantagens de usar o Amazon EFS é que ele fornece criptografia em suporte de trânsito usando TLS. Usando criptografia em trânsito, os dados serão criptografados durante sua transição pela rede para o serviço Amazon EFS. Isso fornece uma camada extra de defesa profunda para aplicativos que exigem conformidade rigorosa com a segurança.
A criptografia em trânsito é habilitada por padrão na versão master branch do driver. Para desativá-lo e montar volumes usando NFSv4 simples, defina o campo volumeAttributes
encryptInTransit
como "false"
em seu manifesto de volume persistente. Para obter um exemplo de manifesto, consulte o exemplo de criptografia em trânsito.
Observação
O Kubernetes versão 1.13 ou posterior será necessário se você estiver usando esse recurso no Kubernetes.
As seções a seguir são específicas do Kubernetes. Se você for um usuário do Kubernetes, use-o para obter recursos de driver, etapas de instalação e exemplos.
Driver CSI do Amazon EFS Versão do Kubernetes | maturidade | v1.11 | v1.12 | v1.13 | v1.14 | v1.15 | v1.16 | v1.17+ |
---|---|---|---|---|---|---|---|---|
ramo mestre | GA | não | não | não | não | não | não | sim |
v2.1.x | GA | não | não | não | não | não | não | sim |
v2.0.x | GA | não | não | não | não | não | não | sim |
v1.7.x | GA | não | não | não | não | não | não | sim |
v1.6.x | GA | não | não | não | não | não | não | sim |
v1.5.x | GA | não | não | não | não | não | não | sim |
v1.4.x | GA | não | não | não | não | não | não | sim |
v1.3.x | GA | não | não | não | não | não | não | sim |
v1.2.x | GA | não | não | não | não | não | não | sim |
v1.1.x | GA | não | não | não | sim | sim | sim | sim |
v1.0.x | GA | não | não | não | sim | sim | sim | sim |
v0.3.0 | beta | não | não | não | sim | sim | sim | sim |
v0.2.0 | beta | não | não | não | sim | sim | sim | sim |
v0.1.0 | alfa | sim | sim | sim | não | não | não | não |
Versão do driver CSI do Amazon EFS | Imagem |
---|---|
ramo mestre | amazon/aws-efs-csi-driver:mestre |
v2.1.0 | amazon/aws-efs-csi-driver:v2.1.0 |
v2.0.9 | amazon/aws-efs-csi-driver:v2.0.9 |
v2.0.8 | amazon/aws-efs-csi-driver:v2.0.8 |
v2.0.7 | amazon/aws-efs-csi-driver:v2.0.7 |
v2.0.6 | amazon/aws-efs-csi-driver:v2.0.6 |
v2.0.5 | amazon/aws-efs-csi-driver:v2.0.5 |
v2.0.4 | amazon/aws-efs-csi-driver:v2.0.4 |
v2.0.3 | amazon/aws-efs-csi-driver:v2.0.3 |
v2.0.2 | amazon/aws-efs-csi-driver:v2.0.2 |
v2.0.1 | amazon/aws-efs-csi-driver:v2.0.1 |
v2.0.0 | amazon/aws-efs-csi-driver:v2.0.0 |
v1.7.7 | amazon/aws-efs-csi-driver:v1.7.7 |
v1.7.6 | amazon/aws-efs-csi-driver:v1.7.6 |
v1.7.5 | amazon/aws-efs-csi-driver:v1.7.5 |
v1.7.4 | amazon/aws-efs-csi-driver:v1.7.4 |
v1.7.3 | amazon/aws-efs-csi-driver:v1.7.3 |
v1.7.2 | amazon/aws-efs-csi-driver:v1.7.2 |
v1.7.1 | amazon/aws-efs-csi-driver:v1.7.1 |
v1.7.0 | amazon/aws-efs-csi-driver:v1.7.0 |
v1.6.0 | amazon/aws-efs-csi-driver:v1.6.0 |
v1.5.9 | amazon/aws-efs-csi-driver:v1.5.9 |
v1.5.8 | amazon/aws-efs-csi-driver:v1.5.8 |
v1.5.7 | amazon/aws-efs-csi-driver:v1.5.7 |
v1.5.6 | amazon/aws-efs-csi-driver:v1.5.6 |
v1.5.5 | amazon/aws-efs-csi-driver:v1.5.5 |
v1.5.4 | amazon/aws-efs-csi-driver:v1.5.4 |
v1.5.3 | amazon/aws-efs-csi-driver:v1.5.3 |
v1.5.2 | amazon/aws-efs-csi-driver:v1.5.2 |
v1.5.1 | amazon/aws-efs-csi-driver:v1.5.1 |
v1.5.0 | amazon/aws-efs-csi-driver:v1.5.0 |
v1.4.9 | amazon/aws-efs-csi-driver:v1.4.9 |
v1.4.8 | amazon/aws-efs-csi-driver:v1.4.8 |
v1.4.7 | amazon/aws-efs-csi-driver:v1.4.7 |
v1.4.6 | amazon/aws-efs-csi-driver:v1.4.6 |
v1.4.5 | amazon/aws-efs-csi-driver:v1.4.5 |
v1.4.4 | amazon/aws-efs-csi-driver:v1.4.4 |
v1.4.3 | amazon/aws-efs-csi-driver:v1.4.3 |
v1.4.2 | amazon/aws-efs-csi-driver:v1.4.2 |
v1.4.1 | amazon/aws-efs-csi-driver:v1.4.1 |
v1.4.0 | amazon/aws-efs-csi-driver:v1.4.0 |
v1.3.8 | amazon/aws-efs-csi-driver:v1.3.8 |
v1.3.7 | amazon/aws-efs-csi-driver:v1.3.7 |
v1.3.6 | amazon/aws-efs-csi-driver:v1.3.6 |
v1.3.5 | amazon/aws-efs-csi-driver:v1.3.5 |
v1.3.4 | amazon/aws-efs-csi-driver:v1.3.4 |
v1.3.3 | amazon/aws-efs-csi-driver:v1.3.3 |
v1.3.2 | amazon/aws-efs-csi-driver:v1.3.2 |
v1.3.1 | amazon/aws-efs-csi-driver:v1.3.1 |
v1.3.0 | amazon/aws-efs-csi-driver:v1.3.0 |
v1.2.1 | amazon/aws-efs-csi-driver:v1.2.1 |
v1.2.0 | amazon/aws-efs-csi-driver:v1.2.0 |
v1.1.1 | amazon/aws-efs-csi-driver:v1.1.1 |
v1.1.0 | amazon/aws-efs-csi-driver:v1.1.0 |
v1.0.0 | amazon/aws-efs-csi-driver:v1.0.0 |
v0.3.0 | amazon/aws-efs-csi-driver:v0.3.0 |
v0.2.0 | amazon/aws-efs-csi-driver:v0.2.0 |
v0.1.0 | amazon/aws-efs-csi-driver:v0.1.0 |
Versão do driver | Imagem ECR |
---|---|
v2.1.0 | public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver:v2.1.0 |
Observação
Você pode encontrar imagens de versões anteriores do efs-csi-driver aqui
Observação
Como o Amazon EFS é um sistema de arquivos elástico, ele não impõe nenhuma capacidade do sistema de arquivos. O valor real da capacidade de armazenamento no volume persistente e na declaração de volume persistente não é usado ao criar o sistema de arquivos. No entanto, como a capacidade de armazenamento é um campo obrigatório do Kubernetes, você deve especificar o valor e pode usar qualquer valor válido para a capacidade.
Considerações
1.2
ou posterior do driver. Você pode provisionar estaticamente volumes persistentes usando a versão 1.1
do driver em qualquer versão de cluster do Amazon EKS compatível.1.3.2
ou posterior deste driver oferece suporte à arquitetura Arm64, incluindo instâncias baseadas em Amazon EC2 Graviton.1.4.2
ou posterior deste driver oferece suporte ao uso de FIPS para montagem de sistemas de arquivos. Para obter mais informações sobre como habilitar o FIPS, consulte Helm.Existem possíveis condições de corrida na inicialização do nó (especialmente quando um nó está ingressando no cluster pela primeira vez) onde pods/processos que dependem do driver EFS CSI podem agir em um nó antes que o driver EFS CSI possa inicializar e ficar totalmente pronto. Para combater isso, o driver EFS CSI contém um recurso para remover automaticamente uma contaminação do nó na inicialização. Este recurso foi introduzido a partir da versão v1.7.2 do driver EFS CSI e da versão v2.5.2 de seu gráfico Helm. Os usuários podem contaminar seus nós quando ingressam no cluster e/ou na inicialização, para evitar que outros pods sejam executados e/ou agendados no nó antes que o driver EFS CSI fique pronto.
Este recurso é ativado por padrão e os administradores de cluster devem usar o taint efs.csi.aws.com/agent-not-ready:NoExecute
(qualquer efeito funcionará, mas NoExecute
é recomendado). Por exemplo, os grupos de nós gerenciados EKS oferecem suporte à contaminação automática de nós.
Pré-requisitos
aws configure
no Guia do usuário do AWS Command Line Interface. A versão da AWS CLI instalada no AWS CloudShell também pode ter várias versões anteriores à versão mais recente. Para atualizá-lo, consulte Instalar a AWS CLI em seu diretório inicial no Guia do usuário do AWS CloudShell.kubectl
está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser igual ou até uma versão secundária anterior ou posterior à versão Kubernetes do seu cluster. Para instalar ou atualizar kubectl
, consulte Instalando ou atualizando kubectl
. Observação
Um pod em execução no AWS Fargate monta automaticamente um sistema de arquivos Amazon EFS, sem precisar das etapas manuais de instalação do driver descritas nesta página.
O driver requer permissão do IAM para se comunicar com o Amazon EFS para gerenciar o volume em nome do usuário. Existem vários métodos para conceder permissão IAM ao driver:
AmazonEFSCSIDriverPolicy
deverá ser adicionada à função do IAM do grupo de nós do cluster.Existem várias opções para implantar o driver. A seguir estão alguns exemplos.
Este procedimento requer Helm V3 ou posterior. Para instalar ou atualizar o Helm, consulte Usar o Helm com o Amazon EKS.
Para instalar o driver usando Helm
Adicione o repositório Helm.
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
Atualize o repositório.
helm repo update aws-efs-csi-driver
Instale uma versão do driver usando o gráfico do Helm.
helm upgrade --install aws-efs-csi-driver --namespace kube-system aws-efs-csi-driver/aws-efs-csi-driver
Para especificar um repositório de imagens, adicione o argumento a seguir. Substitua o endereço do repositório pelo endereço da imagem do contêiner do cluster.
--set image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/aws-efs-csi-driver
Se você já criou uma conta de serviço seguindo Criar uma política e função do IAM para o Amazon EKS, adicione os argumentos a seguir.
--set controller.serviceAccount.create=false
--set controller.serviceAccount.name=efs-csi-controller-sa
Se você não tiver acesso de saída à Internet, adicione os argumentos a seguir.
--set sidecars.livenessProbe.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/livenessprobe
--set sidecars.node-driver-registrar.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-node-driver-registrar
--set sidecars.csiProvisioner.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-provisioner
Para forçar o driver CSI do Amazon EFS a usar FIPS para montar o sistema de arquivos, adicione o argumento a seguir.
--set useFips=true
Observação
hostNetwork: true
(deve ser adicionado em especificação/implantação em instalações do Kubernetes onde os metadados da AWS não podem ser acessados pela rede do pod. Para corrigir o seguinte erro NoCredentialProviders: no valid providers in chain
este parâmetro deve ser adicionado.)
Se você quiser fazer download da imagem com um manifesto, recomendamos primeiro tentar estas etapas para extrair imagens seguras do registro privado do Amazon ECR.
Para instalar o driver usando imagens armazenadas no registro privado do Amazon ECR
Baixe o manifesto. Substitua release-XX
pelo branch desejado. Recomendamos usar a versão mais recente lançada. Para obter uma lista de filiais ativas, consulte Filiais.
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-2.X " > private-ecr-driver.yaml
Observação
Se você encontrar um problema que não consegue resolver adicionando permissões do IAM, tente as etapas do Manifesto (registro público).
No comando a seguir, substitua region-code
pela região da AWS em que seu cluster está. Em seguida, execute o comando modificado para substituir us-west-2
no arquivo pela sua região da AWS.
sed -i.bak -e ' s|us-west-2|region-code| ' private-ecr-driver.yaml
Substitua account
no comando a seguir pela conta dos registros de imagem de contêiner da Amazon para a região da AWS em que seu cluster está e execute o comando modificado para substituir 602401143452
no arquivo.
sed -i.bak -e ' s|602401143452|account| ' private-ecr-driver.yaml
Se você já criou uma conta de serviço seguindo Criar uma política e função do IAM para o Amazon EKS, edite o arquivo private-ecr-driver.yaml
. Remova as linhas a seguir que criam uma conta de serviço Kubernetes.
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
Aplique o manifesto.
kubectl apply -f private-ecr-driver.yaml
Em algumas situações, talvez você não consiga adicionar as permissões necessárias do IAM para extrair do registro privado do Amazon ECR. Um exemplo desse cenário é se o principal do IAM não tiver permissão para se autenticar na conta de outra pessoa. Quando isso for verdade, você poderá usar o registro público do Amazon ECR.
Para instalar o driver usando imagens armazenadas no registro público do Amazon ECR
Baixe o manifesto. Substitua release-XX
pelo branch desejado. Recomendamos usar a versão mais recente lançada. Para obter uma lista de filiais ativas, consulte Filiais.
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.X " > public-ecr-driver.yaml
Se você já criou uma conta de serviço seguindo Criar uma política e função do IAM, edite o arquivo public-ecr-driver.yaml
. Remova as linhas a seguir que criam uma conta de serviço Kubernetes.
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
Aplique o manifesto.
kubectl apply -f public-ecr-driver.yaml
Depois de implantar o driver, você pode prosseguir para estas seções:
Parâmetros | Valores | Padrão | Opcional | Descrição |
---|---|---|---|---|
aceitação da vol-metrics | falso | verdadeiro | Ative a emissão de métricas de volume. | |
período de atualização vol-metrics | 240 | verdadeiro | Período de atualização para métricas de volume em minutos. | |
limite de taxa vol-metrics-fs | 5 | verdadeiro | Limitador de taxa de rotinas de métricas de volume por sistema de arquivos. |
Habilitar o parâmetro vol-metrics-opt-in ativa a coleta de dados de inode e de uso de disco. Essa funcionalidade, especialmente em cenários com sistemas de arquivos maiores, pode resultar em um aumento no uso de memória devido à agregação detalhada das informações do sistema de arquivos. Aconselhamos os usuários com sistemas de arquivos de grande escala a considerar esse aspecto ao utilizar esse recurso.
Parâmetros | Valores | Padrão | Opcional | Descrição |
---|---|---|---|---|
excluir-ponto de acesso-diretório-raiz | falso | verdadeiro | Opte por excluir o diretório raiz do ponto de acesso por DeleteVolume. Por padrão, DeleteVolume excluirá o ponto de acesso atrás do Volume Persistente e a exclusão do ponto de acesso não excluirá o diretório raiz do ponto de acesso ou seu conteúdo. | |
etiquetas | verdadeiro | Pares chave-valor separados por espaço que serão adicionados como tags para recursos do Amazon EFS. Por exemplo, '--tags=nome:efs-tag-test data:24 de janeiro' |
Se você deseja atualizar para a versão mais recente lançada:
kubectl apply -k " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 "
Se você deseja atualizar para uma versão específica, primeiro personalize o arquivo yaml do driver localmente:
kubectl kustomize " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 " > driver.yaml
Em seguida, atualize todas as linhas que fazem referência image: amazon/aws-efs-csi-driver
para a versão desejada (por exemplo, para image: amazon/aws-efs-csi-driver:v2.1.0
) no arquivo yaml e implante o driver yaml de novo:
kubectl apply -f driver.yaml
Antes de seguir os exemplos, você precisa:
elasticfilesystem:DescribeMountTargets
e ec2:DescribeAvailabilityZones
em sua política anexada à função de conta de serviço do Amazon EKS. Consulte o exemplo de política aqui. Consulte a documentação do desenvolvedor CSI Spec e Kubernetes CSI para obter um entendimento básico do driver CSI antes de começar.
Se você estiver prestes a atualizar o arquivo de política iam, atualize também a política efs em weaveworks/eksctl https://github.com/weaveworks/eksctl/blob/main/pkg/cfn/builder/statement.go */
As dependências são gerenciadas através do módulo go. Para construir o projeto, primeiro ative o go mod usando export GO111MODULE=on
, para construir o projeto execute: make
Para executar todos os testes unitários, execute: make test
Para obter registros e solucionar problemas do driver, consulte Troubleshooting/README.md.
Esta biblioteca está licenciada sob a licença Apache 2.0.