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

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

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

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

アクション

制限事項

  • 以下のアクションは では機能しません 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

  • リソース ARN またはリソースタグを使用して、実験テンプレート内の 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/ を参照してください。

  • 現在サポートされている最小バージョンは 1.23 です。

Kubernetes サービスアカウントのサービスロールを作成します。

IAM ロールを作成して、サービスロールとして使用します。詳細については、「AWS FIS 実験用の IAM ロール」を参照してください。

Kubernetes サービスアカウントを設定する

指定した Kubernetes 名前空間のターゲットで実験を実行するように Kubernetes サービスアカウントを設定します。次の例では、サービスアカウントは myserviceaccount で、名前空間はデフォルトです。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

実験ロールを Kubernetes ユーザーにマッピングします。

以下のコマンドを使用してアイデンティティマッピングを作成します。詳細については、eksctlドキュメントの「IAM ユーザーとロールの管理」を参照してください。

eksctl create iamidentitymapping \ --arn arn:aws:iam::123456789012:role/fis-experiment-role \ --username fis-experiment \ --cluster my-cluster

ポッドコンテナイメージ

AWS FIS が提供するポッドコンテナイメージは Amazon ECR でホストされます。Amazon ECR からイメージを参照する場合は、イメージに完全なイメージの URI を使用する必要があります

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
欧州 (ストックホルム) 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" } }