本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS FIS aws: eks: pod 操作
你可以使用 aws: eks: pod 操作将故障注入集群中运行的 Kubernetes 容器中。EKS
启动操作后,会FIS检索 FISPod 容器镜像。然后使用此镜像在目标EKS集群中创建 pod。新创建的 pod 负责注入、控制和监控故障。对于除了 aws: eks: pod-delete 之外的所有FISEKS操作,都是通过使用临时容器来实现的,这是一项 Kub ernetes 功能,允许在现有 pod 中创建临时容器
-
FIS在集群中创建实验模板中提供的 FIS Pod。
-
P FIS od 在目标 Pod 中创建一个临时容器。
-
FISPod 控制和监视临时容器的故障注入,并FIS控制和监控 Pod。FIS
实验完成后或发生错误时,临时容器和 P FIS od 将被移除。
操作
限制
-
以下操作不适用于 AWS Fargate:
aws:eks:pod-network-blackhole-port
aws:eks:pod-network-latency
aws:eks:pod-network-packet-loss
-
以下操作不支持
bridge
网络模式:aws:eks:pod-network-blackhole-port
aws:eks:pod-network-latency
aws:eks:pod-network-packet-loss
-
您无法使用资源或资源ARNs标签在实验模板中识别 aws: eks: pod 类型的目标。必须使用必要资源参数来标识目标。
-
操作
aws:eks:pod-network-latency
和aws:eks:pod-network-packet-loss
不应以同一容器组(Pod)为目标并行运行。根据您指定的maxErrors
参数值,该操作可能以已完成或失败状态结束:如果
maxErrorsPercent
为 0(默认值),则该操作将以失败状态结束。否则,失败将增加
maxErrorsPercent
预算。如果失败的注入次数未达到提供的maxErrors
,则该操作将以已完成状态结束。您可以从目标容器组(Pod)中注入的临时容器的日志中识别出这些失败。它将失败,并显示
Exit Code: 16
。
-
操作
aws:eks:pod-network-blackhole-port
不应与其他以同一容器组(Pod)为目标并使用相同trafficType
的操作并行运行。支持使用不同流量类型的并行操作。 -
FIS只有当目标 pod 的设置为时,才能监控故障注入
securityContext
的状态readOnlyRootFilesystem: false
。如果没有此配置,所有 EKS pod 操作都将失败。
要求
-
在您的计算机 AWS CLI 上安装。只有当你要使用创建IAM角色时, AWS CLI 才需要这样做。有关更多信息,请参阅安装或更新 AWS CLI。
-
在计算机上安装 kubectl。只有在与EKS集群交互以配置或监控目标应用程序时才需要这样做。有关更多信息,请参阅 https://kubernetes.io/docs/tasks/tools/
。 -
支持的最低版本EKS为 1.23。
创建实验角色
要运行实验,你需要为实验配置一个IAM角色。有关更多信息,请参阅 适用于 AWS FIS 实验的 IAM 角色。此角色所需的权限取决于您正在使用的操作。请参阅aws:eks:pod
以查找AWS FIS操作所需的权限为目标的操作。
配置 Kubernetes 服务账户
配置 Kubernetes 服务账户,使用指定 Kubernetes 命名空间中的目标运行实验。在以下示例中,服务帐号为 myserviceaccount
命名空间是 default
。 请注意 default 是标准的 Kubernetes 命名空间之一。
配置 Kubernetes 服务账户
-
创建一个名为
rbac.yaml
的文件,并添加以下内容。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 -
运行以下命令。
kubectl apply -f rbac.yaml
向IAM用户和角色授予访问 Kubernetes 的权限 APIs
按照文档中将IAM身份与 Kubernetes 权限关联中介绍的步骤进行操作。EKS
我们建议按照Access Entries通过访问条目向IAM用户授予对 Kubernetes 的访问权限中所述的步骤来使用EKS。
aws eks create-access-entry \ --principal-arn arn:aws:iam::
123456789012
:role/fis-experiment-role
\ --usernamefis-experiment
\ --cluster-namemy-cluster
重要
为了利用访问入口,必须将EKS集群的身份验证模式配置为API_AND_CONFIG_MAP
或API
模式。
您也可以使用以下命令来创建身份映射。有关更多信息,请参阅eksctl文档中的管理IAM用户和角色
eksctl create iamidentitymapping \ --arn arn:aws:iam::
123456789012
:role/fis-experiment-role
\ --usernamefis-experiment
\ --clustermy-cluster
重要
利用 eksctl 工具包配置身份映射将导致在中创建条目。aws-auth
ConfigMap需要注意的是,这些生成的条目不支持包含路径组件。因此,作为输入ARN提供的内容不得包含路径段(例如arn:aws:iam::123456789012:role/service-role/fis-experiment-role
)。
容器组(pod)容器映像
提供的 pod 容器镜像托管 AWS FIS在 Amazon 中ECR。当您引用来自亚马逊的图片时ECR,必须使用完整图片URI。
Pod 容器镜像也可以在AWSECR公共画廊
AWS 区域 | 图片 URI |
---|---|
美国东部(俄亥俄) | 051821878176.dkr.ecr.us-east-2.amazonaws.com/aws-fis-pod:0.1 |
美国东部(弗吉尼亚州北部) | 731367659002.dkr.ecr.us-east-1.amazonaws.com/aws-fis-pod:0.1 |
美国西部(加利福尼亚北部) | 080694859247.dkr.ecr.us-west-1.amazonaws.com/aws-fis-pod:0.1 |
美国西部(俄勒冈州) | 864386544765.dkr.ecr.us-west-2.amazonaws.com/aws-fis-pod:0.1 |
非洲(开普敦) | 056821267933.dkr.ecr.af-south-1.amazonaws.com/aws-fis-pod:0.1 |
亚太地区(香港) | 246405402639.dkr.ecr.ap-east-1.amazonaws.com/aws-fis-pod:0.1 |
亚太地区(孟买) | 524781661239.dkr.ecr.ap-south-1.amazonaws.com/aws-fis-pod:0.1 |
亚太地区(首尔) | 526524659354.dkr.ecr.ap-northeast-2.amazonaws.com/aws-fis-pod:0.1 |
亚太地区(新加坡) | 316401638346.dkr.ecr.ap-southeast-1.amazonaws.com/aws-fis-pod:0.1 |
亚太地区(悉尼) | 488104106298.dkr.ecr.ap-southeast-2.amazonaws.com/aws-fis-pod:0.1 |
亚太地区(东京) | 635234321696.dkr.ecr.ap-northeast-1.amazonaws.com/aws-fis-pod:0.1 |
加拿大(中部) | 490658072207.dkr.ecr.ca-central-1.amazonaws.com/aws-fis-pod:0.1 |
欧洲地区(法兰克福) | 713827034473.dkr.ecr.eu-central-1.amazonaws.com/aws-fis-pod:0.1 |
欧洲地区(爱尔兰) | 205866052826.dkr.ecr.eu-west-1.amazonaws.com/aws-fis-pod:0.1 |
欧洲地区(伦敦) | 327424803546.dkr.ecr.eu-west-2.amazonaws.com/aws-fis-pod:0.1 |
欧洲地区(米兰) | 478809367036.dkr.ecr.eu-south-1.amazonaws.com/aws-fis-pod:0.1 |
欧洲地区(巴黎) | 154605889247.dkr.ecr.eu-west-3.amazonaws.com/aws-fis-pod:0.1 |
欧洲(西班牙) | 395402409451.dkr.ecr.eu-south-2.amazonaws.com/aws-fis-pod:0.1 |
欧洲地区(斯德哥尔摩) | 263175118295.dkr.ecr.eu-north-1.amazonaws.com/aws-fis-pod:0.1 |
中东(巴林) | 065825543785.dkr.ecr.me-south-1.amazonaws.com/aws-fis-pod:0.1 |
南美洲(圣保罗) | 767113787785.dkr.ecr.sa-east-1.amazonaws.com/aws-fis-pod:0.1 |
AWS GovCloud (美国东部) | 246533647532.dkr.ecr.us-gov-east-1.amazonaws.com/aws-fis-pod:0.1 |
AWS GovCloud (美国西部) | 246529956514.dkr.ecr.us-gov-west-1.amazonaws.com/aws-fis-pod:0.1 |
实验模板示例
以下是 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" } }