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
-
FIScria o FIS Pod no cluster que é fornecido no modelo do experimento.
-
O FIS pod cria um contêiner efêmero no pod de destino.
-
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
eaws:eks:pod-network-packet-loss
não devem ser executadas paralelamente e ter como alvo o mesmo pod. Dependendo do valor do parâmetromaxErrors
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 omaxErrors
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 mesmotrafficType
. 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
-
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 -
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
\ --usernamefis-experiment
\ --cluster-namemy-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
eksctl create iamidentitymapping \ --arn arn:aws:iam::
123456789012
:role/fis-experiment-role
\ --usernamefis-experiment
\ --clustermy-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" } }