Use as AWS FIS ações aws:eks:pod - AWS Serviço de injeção de falhas

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Use as AWS FIS ações aws:eks:pod

Você pode usar as ações aws:eks:pod para injetar falhas nos pods do Kubernetes em execução nos seus clusters. EKS

Quando uma ação é iniciada, FIS recupera a imagem do contêiner do FIS pod. Essa imagem é então usada para criar um pod no EKS cluster de destino. O pod recém-criado é responsável por injetar, controlar e monitorar a falha. Para todas as FIS EKS ações, exceto aws:eks:pod-delete, isso é obtido por meio do uso de contêineres efêmeros, um recurso do Kubernetes que permite a criação de contêineres temporários em um pod existente. O contêiner efêmero executa as tarefas de injeção de falhas desejadas no Target Pod.

Diagram showing FIS Pod creation and fault injection process in an EKS Cluster environment.
  1. FIScria o FIS Pod no cluster que é fornecido no modelo do experimento.

  2. O FIS pod cria um contêiner efêmero no pod de destino.

  3. O FIS Pod controla e monitora a injeção de falhas do contêiner efêmero e FIS controla e monitora o Pod. FIS

Após a conclusão do experimento ou se ocorrer um erro, o contêiner efêmero e o FIS pod são removidos.

Ações

Limitações

  • As ações a seguir não funcionam com AWS Fargate:

    • aws:eks:pod-network-blackhole-port

    • aws:eks:pod-network-latency

    • aws:eks:pod-network-packet-loss

  • As ações a seguir não são compatíveis com o modo de rede bridge:

    • aws:eks:pod-network-blackhole-port

    • aws:eks:pod-network-latency

    • aws:eks:pod-network-packet-loss

  • Você não pode identificar alvos do tipo aws:eks:pod em seu modelo de experimento usando tags de recursos ou recursosARNs. Você deve identificar alvos usando os parâmetros de recursos necessários.

  • As ações aws:eks:pod-network-latency e aws:eks:pod-network-packet-loss não devem ser executadas paralelamente e ter como alvo o mesmo pod. Dependendo do valor do parâmetro maxErrors especificado, a ação pode terminar no estado concluído ou com falha:

    • Se maxErrorsPercent for 0 (padrão), a ação terminará no estado de falha.

    • Caso contrário, a falha aumentará até o orçamento maxErrorsPercent. Se o número de injeções com falha não atingir o maxErrors fornecido, a ação terminará no estado concluído.

    • Você pode identificar essas falhas nos logs do contêiner efêmero injetado no pod de destino. Ele falhará com Exit Code: 16.

  • A ação aws:eks:pod-network-blackhole-port não deve ser executada paralelamente a outras ações que tenham como alvo o mesmo pod e usem o mesmo trafficType. Ações paralelas usando diferentes tipos de tráfego são compatíveis.

  • FISsó pode monitorar o status da injeção de falhas quando o securityContext dos pods de destino está configurado como. readOnlyRootFilesystem: false Sem essa configuração, todas as ações do EKS pod falharão.

Requisitos

  • Instale o AWS CLI no seu computador. Isso é necessário somente se você usar o AWS CLI para criar IAM funções. Para obter mais informações, consulte Instalar ou atualizar a AWS CLI.

  • Instalar o kubectl em seu computador. Isso é necessário somente para interagir com o EKS cluster para configurar ou monitorar o aplicativo de destino. Para obter mais informações, consulte https://kubernetes.io/docs/tasks/tools/.

  • A versão mínima suportada do EKS é 1.23.

Crie uma função de experimento

Para realizar um experimento, você precisa configurar uma IAM função para o experimento. Para obter mais informações, consulte Funções do IAM para experimentos do AWS FIS. As permissões necessárias para essa função dependem da ação que você está usando. Consulte as AWS FISações segmentadas aws:eks:pod para encontrar as permissões necessárias para sua ação.

Configuração da conta de serviço do Kubernetes

Configure uma conta de serviço do Kubernetes para realizar experimentos com destinos no namespace especificado do Kubernetes. No exemplo a seguir, a conta de serviço é myserviceaccount e o namespace é default. Observe que default é um dos namespaces padrão do Kubernetes.

Para configurar sua conta de serviço do Kubernetes
  1. Crie um arquivo chamado rbac.yaml e adicione o seguinte.

    kind: ServiceAccount apiVersion: v1 metadata: namespace: default name: myserviceaccount --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: default name: role-experiments rules: - apiGroups: [""] resources: ["configmaps"] verbs: [ "get", "create", "patch", "delete"] - apiGroups: [""] resources: ["pods"] verbs: ["create", "list", "get", "delete", "deletecollection"] - apiGroups: [""] resources: ["pods/ephemeralcontainers"] verbs: ["update"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create"] - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: bind-role-experiments namespace: default subjects: - kind: ServiceAccount name: myserviceaccount namespace: default - apiGroup: rbac.authorization.k8s.io kind: User name: fis-experiment roleRef: kind: Role name: role-experiments apiGroup: rbac.authorization.k8s.io
  2. Execute o seguinte comando .

    kubectl apply -f rbac.yaml

Conceda IAM aos usuários e funções acesso ao Kubernetes APIs

Siga as etapas explicadas em Associar IAM identidades às permissões do Kubernetes na documentação. EKS

Recomendamos usar Access Entries seguindo as etapas explicadas em Conceder IAM aos usuários acesso ao Kubernetes com EKS entradas de acesso.

aws eks create-access-entry \ --principal-arn arn:aws:iam::123456789012:role/fis-experiment-role \ --username fis-experiment \ --cluster-name my-cluster
Importante

Para aproveitar as entradas de acesso, o modo de autenticação do EKS cluster deve ser configurado para o API modo API_AND_CONFIG_MAP ou.

Você também pode usar o comando a seguir para criar um mapeamento de identidade. Para obter mais informações, consulte Gerenciar IAM usuários e funções na eksctl documentação.

eksctl create iamidentitymapping \ --arn arn:aws:iam::123456789012:role/fis-experiment-role \ --username fis-experiment \ --cluster my-cluster
Importante

Aproveitar o kit de ferramentas eksctl para configurar mapeamentos de identidade resultará na criação de entradas no. aws-auth ConfigMap É importante observar que essas entradas geradas não oferecem suporte à inclusão de um componente de caminho. Consequentemente, o ARN fornecido como entrada não deve conter um segmento de caminho (por exemplo,arn:aws:iam::123456789012:role/service-role/fis-experiment-role).

Imagens do contêiner do pod

As imagens do contêiner do pod fornecidas pela AWS FIS estão hospedadas na AmazonECR. Ao fazer referência a uma imagem da AmazonECR, você deve usar a imagem completaURI.

A imagem do contêiner do pod também está disponível na Galeria AWS ECR Pública.

Região da AWS Imagem URI
Leste dos EUA (Ohio) 051821878176.dkr.ecr.us-east-2.amazonaws.com/aws-fis-pod:0.1
Leste dos EUA (N. da Virgínia) 731367659002.dkr.ecr.us-east-1.amazonaws.com/aws-fis-pod:0.1
Oeste dos EUA (N. da Califórnia) 080694859247.dkr.ecr.us-west-1.amazonaws.com/aws-fis-pod:0.1
Oeste dos EUA (Oregon) 864386544765.dkr.ecr.us-west-2.amazonaws.com/aws-fis-pod:0.1
África (Cidade do Cabo) 056821267933.dkr.ecr.af-south-1.amazonaws.com/aws-fis-pod:0.1
Ásia-Pacífico (Hong Kong) 246405402639.dkr.ecr.ap-east-1.amazonaws.com/aws-fis-pod:0.1
Ásia-Pacífico (Mumbai) 524781661239.dkr.ecr.ap-south-1.amazonaws.com/aws-fis-pod:0.1
Ásia-Pacífico (Seul) 526524659354.dkr.ecr.ap-northeast-2.amazonaws.com/aws-fis-pod:0.1
Ásia-Pacífico (Singapura) 316401638346.dkr.ecr.ap-southeast-1.amazonaws.com/aws-fis-pod:0.1
Ásia-Pacífico (Sydney) 488104106298.dkr.ecr.ap-southeast-2.amazonaws.com/aws-fis-pod:0.1
Ásia-Pacífico (Tóquio) 635234321696.dkr.ecr.ap-northeast-1.amazonaws.com/aws-fis-pod:0.1
Canadá (Central) 490658072207.dkr.ecr.ca-central-1.amazonaws.com/aws-fis-pod:0.1
Europa (Frankfurt) 713827034473.dkr.ecr.eu-central-1.amazonaws.com/aws-fis-pod:0.1
Europa (Irlanda) 205866052826.dkr.ecr.eu-west-1.amazonaws.com/aws-fis-pod:0.1
Europa (Londres) 327424803546.dkr.ecr.eu-west-2.amazonaws.com/aws-fis-pod:0.1
Europa (Milão) 478809367036.dkr.ecr.eu-south-1.amazonaws.com/aws-fis-pod:0.1
Europe (Paris) 154605889247.dkr.ecr.eu-west-3.amazonaws.com/aws-fis-pod:0.1
Europa (Espanha) 395402409451.dkr.ecr.eu-south-2.amazonaws.com/aws-fis-pod:0.1
Europa (Estocolmo) 263175118295.dkr.ecr.eu-north-1.amazonaws.com/aws-fis-pod:0.1
Oriente Médio (Barém) 065825543785.dkr.ecr.me-south-1.amazonaws.com/aws-fis-pod:0.1
América do Sul (São Paulo) 767113787785.dkr.ecr.sa-east-1.amazonaws.com/aws-fis-pod:0.1
AWS GovCloud (Leste dos EUA) 246533647532.dkr.ecr.us-gov-east-1.amazonaws.com/aws-fis-pod:0.1
AWS GovCloud (Oeste dos EUA) 246529956514.dkr.ecr.us-gov-west-1.amazonaws.com/aws-fis-pod:0.1

Exemplo de modelo de experimento

Veja a seguir um exemplo de modelo de experimento para a ação aws:eks:pod-network-latency.

{ "description": "Add latency and jitter to the network interface for the target EKS pods", "targets": { "myPods": { "resourceType": "aws:eks:pod", "parameters": { "clusterIdentifier": "mycluster", "namespace": "default", "selectorType": "labelSelector", "selectorValue": "mylabel=mytarget" }, "selectionMode": "COUNT(3)" } }, "actions": { "EksPod-latency": { "actionId": "aws:eks:pod-network-latency", "description": "Add latency", "parameters": { "kubernetesServiceAccount": "myserviceaccount", "duration": "PT5M", "delayMilliseconds": "200", "jitterMilliseconds": "10", "sources": "0.0.0.0/0" }, "targets": { "Pods": "myPods" } } }, "stopConditions": [ { "source": "none", } ], "roleArn": "arn:aws:iam::111122223333:role/fis-experiment-role", "tags": { "Name": "EksPodNetworkLatency" } }