aws:eks:pod アクションを使用する AWS FIS - AWS 障害インジェクションサービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

aws:eks:pod アクションを使用する AWS FIS

aws:eks:pod アクションを使用して、EKSクラスターで実行されている Kubernetes ポッドに障害を挿入できます。

アクションが開始されると、 は Pod FIS コンテナイメージ FISを取得します。次に、このイメージを使用して、ターゲットEKSクラスターにポッドを作成します。新しく作成されたポッドは、障害の注入、制御、モニタリングを担当します。これは、aws:eks:pod-delete を除くすべてのFISEKSアクションで、既存のポッド内に一時コンテナを作成できる Kubernetes 機能であるエフェメラルコンテナ を使用して実現されます。エフェメラルコンテナは、ターゲットポッドで目的の障害インジェクションタスクを実行します。

Diagram showing FIS Pod creation and fault injection process in an EKS クラスター environment.
  1. FIS は、実験テンプレートで提供されている Pod FIS をクラスター内に作成します。

  2. Pod はターゲット FIS Pod にエフェメラルコンテナを作成します。

  3. 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-latencyaws: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 サービスアカウントを設定する
  1. 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
  2. 以下のコマンドを実行します。

    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 \ --username fis-experiment \ --cluster-name my-cluster
重要

アクセスエントリを活用するには、EKSクラスターの認証モードを API_AND_CONFIG_MAPまたは API モードに設定する必要があります。

次のコマンドを使用して ID マッピングを作成することもできます。詳細については、 eksctlドキュメントのIAM「ユーザーとロールの管理」を参照してください。

eksctl create iamidentitymapping \ --arn arn:aws:iam::123456789012:role/fis-experiment-role \ --username fis-experiment \ --cluster my-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" } }