

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

# FIS aws:eks:pod AWS アクションを使用する
<a name="eks-pod-actions"></a>

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

 アクションが開始されると、FIS は [FIS ポッドコンテナイメージ](eks-pod-actions.html#eks-pod-container-images)を取得します。このイメージは、ターゲット EKS クラスターに Pod を作成するために使用されます。新しく作成された Pod は、障害の挿入、制御、モニタリングを担当します。[aws:eks:pod-delete](fis-actions-reference.html#pod-delete) を除くすべての FIS EKS アクションでは、障害挿入は、既存の Pod 内に一時コンテナを作成できる Kubernetes [機能であるエフェメラル](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/)コンテナを使用して実現されます。エフェメラルコンテナは、ターゲットコンテナと同じ名前空間で起動され、目的のフォールトインジェクションタスクを実行します。ターゲットコンテナが指定されていない場合、Pod 仕様の最初のコンテナがターゲットとして選択されます。

![\[Fault Injection Service workflow in EKS クラスター, showing pod creation and fault injection process.\]](http://docs.aws.amazon.com/ja_jp/fis/latest/userguide/images/eks-actions.png)


1.  FIS は、実験テンプレートで指定されたターゲットクラスターに FIS Pod を作成します。

1.  FIS Pod は、ターゲットコンテナと同じ名前空間のターゲットポッドにエフェメラルコンテナを作成します。

1.  エフェメラルコンテナは、ターゲットコンテナの名前空間に障害を挿入します。

1.  FIS ポッドは、エフェメラルコンテナのフォールトインジェクションを制御およびモニタリングし、FIS は FIS ポッドを制御およびモニタリングします。

 実験の完了時、またはエラーが発生した場合、エフェメラルコンテナと FIS ポッドは削除されます。

## アクション
<a name="supported-eks-pod-actions"></a>
+ [aws:eks:pod-cpu-stress](fis-actions-reference.md#pod-cpu-stress)
+ [aws:eks:pod-delete](fis-actions-reference.md#pod-delete)
+ [aws:eks:pod-io-stress](fis-actions-reference.md#pod-io-stress)
+ [aws:eks:pod-memory-stress](fis-actions-reference.md#pod-memory-stress)
+ [aws:eks:pod-network-blackhole-port](fis-actions-reference.md#pod-network-blackhole-port)
+ [aws:eks:pod-network-latency](fis-actions-reference.md#pod-network-latency)
+ [aws:eks:pod-network-packet-loss](fis-actions-reference.md#pod-network-packet-loss)

## 制限事項
<a name="eks-pod-limitations"></a>
+ 以下のアクションは では機能しません AWS Fargate。
  + aws:eks:pod-network-blackhole-port
  + aws:eks:pod-network-latency
  + aws:eks:pod-network-packet-loss
+ 次のアクションは `bridge` [ネットワークモード](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/networking-networkmode.html)をサポートしていません。
  + aws:eks:pod-network-blackhole-port
  + aws:eks:pod-network-latency
  + aws:eks:pod-network-packet-loss
+ 次のアクションには、エフェメラルコンテナ内のルートアクセス許可が必要です。
  + aws:eks:pod-network-blackhole-port
  + aws:eks:pod-network-latency
  + aws:eks:pod-network-packet-loss

  エフェメラルコンテナは、ターゲット Pod のセキュリティコンテキストからアクセス許可を継承します。Pod 内のコンテナを非ルートユーザーとして実行する必要がある場合は、ターゲット Pod 内のコンテナに個別のセキュリティコンテキストを設定できます。
+ リソース ARN またはリソースタグを使用して、実験テンプレート内の **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 は、ターゲットポッドの が に設定されている場合にのみ、フォールトインジェクションのステータス`securityContext`をモニタリングできます`readOnlyRootFilesystem: false`。この設定を行わないと、すべての EKS Pod アクションは失敗します。

## 要件
<a name="eks-pod-requirements"></a>
+ コンピュータ AWS CLI に をインストールします。これが必要なのは、 AWS CLI を使用して IAM ロールを作成する場合にのみ必要です。詳細については、「[AWS CLIのインストールまたは更新](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。
+ コンピュータに **kubectl** をインストールします。これが必要なのは、EKS クラスターを操作してターゲットアプリケーションを設定するか、監視する場合に限られます。詳細については、[https://kubernetes.io/docs/tasks/tools/](https://kubernetes.io/docs/tasks/tools/) を参照してください。
+ 現在サポートされている最小バージョンは 1.23 です。

## 実験ロールの作成
<a name="create-experiment-role-eks-pod"></a>

 実験を実行するには、実験の IAM ロールを設定する必要があります。詳細については、「[FIS 実験の IAM AWS ロール](getting-started-iam-service-role.md)」を参照してください。このロールに必要なアクセス許可は、使用しているアクションによって異なります。[`aws:eks:pod` をターゲットとするAWS FIS アクション](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#eks-actions-reference)を参照して、アクションに必要なアクセス許可を見つけます。

## Kubernetes サービスアカウントを設定する
<a name="configure-service-account"></a>

指定した 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
   ```

1. 以下のコマンドを実行してください。

   ```
   kubectl apply -f rbac.yaml
   ```

## IAM ユーザーおよびロールに Kubernetes API へのアクセスを付与する
<a name="grant-k8s-access"></a>

「**EKS** ドキュメント」の「[IAM アイデンティティと Kubernetes のアクセス許可を関連付ける](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#authentication-modes)」で説明されているステップに従います。

### オプション 1: アクセスエントリを作成する
<a name="grant-k8s-access-option-1"></a>

**Access Entries** を使用することをお勧めします。次のコマンドを使用して、IAM ロールを Kubernetes ユーザー *fis-experiment* に関連付けるアクセスエントリを作成できます。詳細については、[「EKS アクセスエントリを使用して Kubernetes へのアクセス権を IAM ユーザーに付与](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)する」を参照してください。

```
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` モードに設定する必要があります。

### オプション 2: aws-auth ConfigMap にエントリを追加する
<a name="grant-k8s-access-option-2"></a>

次のコマンドを使用してアイデンティティマッピングを作成することもできます。詳細については、**eksctl**ドキュメントの「[IAM ユーザーとロールの管理](https://eksctl.io/usage/iam-identity-mappings/)」を参照してください。

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

**重要**  
eksctl ツールキットを活用してアイデンティティマッピングを設定すると、`aws-auth` ConfigMap 内にエントリが作成されます。これらの生成されたエントリは、パスコンポーネントの包含をサポートしていないことに注意してください。したがって、入力として提供される ARN にパスセグメント (例: `arn:aws:iam::123456789012:role/service-role/fis-experiment-role`) を含めることはできません。

## ポッドコンテナイメージ
<a name="eks-pod-container-images"></a>

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

ポッドコンテナイメージは、[AWS ECR Public Gallery](https://gallery.ecr.aws/aws-fis/aws-fis-pod) でも使用できます。


| 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 | 
| アジアパシフィック (大阪) | 148336246925.dkr.ecr.ap-northeast-3.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 | 
| 欧州 (チューリッヒ) | 604225987275.dkr.ecr.eu-central-2.amazonaws.com/aws-fis-pod:0.1 | 
| 中東 (バーレーン) | 065825543785.dkr.ecr.me-south-1.amazonaws.com/aws-fis-pod:0.1 | 
| 中東 (アラブ首長国連邦) | 438374459301.dkr.ecr.me-central-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 | 

## 実験テンプレートの例
<a name="example-eks-pod-experiment-template"></a>

以下は、[aws:eks:pod-network-latency](fis-actions-reference.md#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"
    }
}
```