本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS FIS aws:eks:Pod 動作
您可以使用 aws:eks:Pod 動作,將故障注入EKS叢集中執行的 Kubernetes Pod。
啟動動作時, 會FIS擷取 FIS Pod 容器映像 。然後,此影像用於在目標EKS叢集中建立 Pod。新建立的 Pod 負責注入、控制和監控故障。對於所有FISEKS動作,除了 aws:eks:pod-delete 之外,這是透過使用暫時容器
-
FIS 在實驗範本中提供的叢集中建立 FIS Pod。
-
Pod 在目標 FIS Pod 中建立暫時容器。
-
Pod FIS 控制和監控暫時容器的故障注入,並FIS控制和監控 FIS Pod。
完成實驗或發生錯誤時,會移除暫時容器和 FIS Pod。
動作
限制
-
下列動作不適用於 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
。如果沒有此組態,所有 Pod EKS 動作都會失敗。
要求
-
AWS CLI 在電腦上安裝 。只有在您將使用 AWS CLI 建立IAM角色時,才需要這樣做。如需詳細資訊,請參閱安裝或更新 AWS CLI。
-
在您電腦上安裝 kubectl。只有與EKS叢集互動才能設定或監控目標應用程式,才需要這樣做。如需詳細資訊,請參閱 https://https://kubernetes.io/docs/tasks/tools/
。 -
支援的 最低版本EKS為 1.23。
建立實驗角色
若要執行實驗,您需要設定實驗IAM的角色。如需詳細資訊,請參閱適用於 AWS FIS 實驗的 IAM 角色。此角色的必要許可取決於您正在使用的動作。請參閱AWS FIS目標動作aws:eks:pod
,以尋找動作的必要許可。
設定 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
請遵循EKS文件中將IAM身分與 Kubernetes 許可建立關聯中所述的步驟。
我們建議您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 容器映像
提供的 AWS FIS Pod 容器映像託管在 Amazon 中ECR。當您參考來自 Amazon 的映像時ECR,您必須使用完整映像 URI。
Pod 容器映像也可以在 AWS ECR Public Gallery
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 |
Europe (Paris) | 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 |
Middle East (Bahrain) | 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" } }