翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
aws:eks:pod アクションを使用する AWS FIS
aws:eks:pod アクションを使用して、EKSクラスターで実行されている Kubernetes ポッドに障害を挿入できます。
アクションが開始されると、 は Pod FIS コンテナイメージ FISを取得します。次に、このイメージを使用して、ターゲットEKSクラスターにポッドを作成します。新しく作成されたポッドは、障害の注入、制御、モニタリングを担当します。これは、aws:eks:pod-delete を除くすべてのFISEKSアクションで、既存のポッド内に一時コンテナを作成できる Kubernetes 機能であるエフェメラル
-
FIS は、実験テンプレートで提供されている Pod FIS をクラスター内に作成します。
-
Pod はターゲット FIS Pod にエフェメラルコンテナを作成します。
-
FIS Pod は、エフェメラルコンテナのフォールトインジェクションを制御およびモニタリングし、Pod FIS をFIS制御およびモニタリングします。
実験の完了時、またはエラーが発生した場合、エフェメラルコンテナとFISポッドは削除されます。
アクション
制限事項
-
以下のアクションは では機能しません 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
は並列で実行たり、同じポッドをターゲットにしたりしません。指定したmaxErrors
パラメータの値に応じて、アクションは完了または失敗の状態で終了することがあります。maxErrorsPercent
が 0 (デフォルト) の場合、アクションは失敗の状態で終了します。それ以外の場合は、失敗が最大
maxErrorsPercent
の予算まで追加されます。失敗した挿入の数が指定したmaxErrors
に達しない場合、アクションは完了の状態で終了します。これらの障害は、ターゲットポッドに挿入されたエフェメラルコンテナのログから特定できます。
Exit Code: 16
で失敗します。
-
アクション
aws:eks:pod-network-blackhole-port
は、同じポッドをターゲットにし、同じtrafficType
を使用する他のアクションを使用して並列で実行することはしません。異なるトラフィックタイプを使用する並列アクションはサポートされています。 -
FIS は、ターゲットポッドの が に設定されている場合にのみ、障害インジェクションのステータス
securityContext
をモニタリングできますreadOnlyRootFilesystem: false
。この設定がないと、すべてのEKSポッドアクションは失敗します。
要件
-
コンピュータ AWS CLI に をインストールします。これは、 AWS CLI を使用してIAMロールを作成する場合にのみ必要です。詳細については、「AWS CLIのインストールまたは更新」を参照してください。
-
コンピュータに kubectl をインストールします。これは、ターゲットアプリケーションを設定またはモニタリングするためにEKSクラスターとやり取りする場合にのみ必要です。詳細については、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 名前空間の 1 つです。
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「ID を Kubernetes アクセス許可に関連付ける」で説明されているステップに従います。
アクセスエントリ Access Entries を使用して Kubernetes へのアクセスをユーザーに許可する で説明されているステップに従って、 を使用することをお勧めします。 IAM 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
モードに設定する必要があります。
次のコマンドを使用して ID マッピングを作成することもできます。詳細については、 eksctlドキュメントのIAM「ユーザーとロールの管理
eksctl create iamidentitymapping \ --arn arn:aws:iam::
123456789012
:role/fis-experiment-role
\ --usernamefis-experiment
\ --clustermy-cluster
重要
eksctl ツールキットを使用して ID マッピングを設定すると、 内にエントリが作成されますaws-auth
ConfigMap。これらの生成されたエントリは、パスコンポーネントの包含をサポートしていないことに注意してください。したがって、入力としてARN提供される にはパスセグメント (例: arn:aws:iam::123456789012:role/service-role/fis-experiment-role
) を含めることはできません。
ポッドコンテナイメージ
が提供する AWS FISポッドコンテナイメージは Amazon でホストされますECR。Amazon からイメージを参照する場合はECR、フルイメージ を使用する必要がありますURI。
ポッドコンテナイメージは、AWSECRPublic 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 |
欧州 (パリ) | 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" } }