aws:eks:pod 작업 사용 AWS FIS - AWS 오류 주입 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

aws:eks:pod 작업 사용 AWS FIS

aws:eks:pod 작업을 사용하여 EKS 클러스터에서 실행되는 Kubernetes 포드에 오류를 주입할 수 있습니다.

작업이 시작되면는 FIS 포드 컨테이너 이미지를 FIS 검색합니다. 그런 다음이 이미지를 사용하여 대상 EKS 클러스터에 포드를 생성합니다. 새로 생성된 포드는 오류를 주입, 제어 및 모니터링하는 역할을 합니다. aws:eks:pod-delete을 제외한 모든 FIS EKS 작업의 경우 기존 Pod 내에서 임시 컨테이너를 생성할 수 있는 Kubernetes 기능인 임시 컨테이너를 사용하여 오류 주입이 이루어집니다. 임시 컨테이너는 대상 컨테이너와 동일한 네임스페이스에서 시작되며 원하는 오류 주입 작업을 실행합니다. 대상 컨테이너가 지정되지 않은 경우 포드 사양의 첫 번째 컨테이너가 대상으로 선택됩니다.

Diagram showing FIS Pod creation and fault injection process in an EKS 클러스터 environment.
  1. FIS는 실험 템플릿에 지정된 대상 클러스터에 FIS 포드를 생성합니다.

  2. FIS 포드는 대상 컨테이너와 동일한 네임스페이스의 대상 포드에 임시 컨테이너를 생성합니다.

  3. 임시 컨테이너는 대상 컨테이너의 네임스페이스에 오류를 삽입합니다.

  4. FIS 포드는 임시 컨테이너의 오류 주입을 제어 및 모니터링하고 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

  • 다음 작업에는 임시 컨테이너 내의 루트 권한이 필요합니다.

    • aws:eks:pod-network-blackhole-port

    • aws:eks:pod-network-latency

    • aws:eks:pod-network-packet-loss

    임시 컨테이너는 대상 포드의 보안 컨텍스트에서 권한을 상속합니다. Pod의 컨테이너를 루트가 아닌 사용자로 실행해야 하는 경우 대상 Pod의 컨테이너에 대해 별도의 보안 컨텍스트를 설정할 수 있습니다.

  • 리소스 ARNs 또는 리소스 태그를 사용하여 실험 템플릿에서 aws:eks:pod 유형의 대상을 식별할 수 없습니다. 필수 리소스 파라미터를 사용하여 대상을 식별해야 합니다.

  • aws:eks:pod-network-latency and aws:eks: 작업은 병렬로 실행해서는 안 되며 동일한 포드를 대상으로 pod-network-packet-loss 해야 합니다. 지정한 maxErrors 파라미터의 값에 따라 작업이 완료 또는 실패 상태로 종료될 수 있습니다.

    • maxErrorsPercent가 0(기본값)이면 작업이 failed 상태로 종료됩니다.

    • 그렇지 않으면 실패가 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.23EKS입니다.

실험 역할 생성

실험을 실행하려면 실험에 대한 IAM 역할을 구성해야 합니다. 자세한 내용은 AWS FIS 실험을 위한 IAM 역할 단원을 참조하십시오. 이 역할에 필요한 권한은 사용 중인 작업에 따라 달라집니다. AWS FIS 대상 작업을 aws:eks:pod 참조하여 작업에 필요한 권한을 찾습니다.

Kubernetes 서비스 계정 구성

지정된 Kubernetes 네임스페이스의 대상으로 실험을 실행하도록 Kubernetes 서비스 계정을 구성합니다. 다음 예제에서 서비스 계정은 myserviceaccount 이고 네임스페이스는 입니다default. 참고로 default 는 표준 Kubernetes 네임스페이스 중 하나입니다.

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 자격 증명과 Kubernetes 권한 연결에 설명된 단계를 따릅니다.

IAM 사용자에게 액세스 EKS 항목이 있는 Kubernetes에 대한 액세스 권한 부여에 설명된 단계에 Access Entries 따라를 사용하는 것이 좋습니다.

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 모드로 구성해야 합니다.

다음 명령을 사용하여 자격 증명 매핑을 생성할 수 있습니다. 자세한 내용은 eksctl 설명서의 IAM 사용자 및 역할 관리를 참조하세요.

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)가 포함되어서는 안 됩니다.

포드 컨테이너 이미지

에서 AWS FIS 제공하는 포드 컨테이너 이미지는 Amazon에서 호스팅됩니다ECR. Amazon에서 이미지를 참조ECR할 때는 전체 이미지를 사용해야 합니다URI.

포드 컨테이너 이미지는 AWS ECR 퍼블릭 갤러리에서도 사용할 수 있습니다.

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" } }