Amazon VPC CNI plugin for Kubernetes 지표 도우미 추가 기능 설치 - Amazon EKS

Amazon VPC CNI plugin for Kubernetes 지표 도우미 추가 기능 설치

CNI 지표 헬퍼는 네트워크 인터페이스 및 IP 주소 정보를 수집하고 클러스터 수준에서 지표를 집계하고 이 지표를 Amazon CloudWatch에 게시하는 데 사용할 수 있는 도구입니다. 지표 도우미에 대해 자세한 내용은 GitHub의 cni-metrics-helper를 참조하세요.

Amazon EKS 클러스터를 관리할 때 얼마나 많은 IP 주소가 할당되었고 그 중에서 사용할 수 있는 것이 몇 개인지 알고 싶은 경우가 있습니다. CNI 지표 헬퍼로 할 수 있는 작업은 다음과 같습니다.

  • 시간 경과에 따른 지표 추적

  • IP 할당 및 재사용과 관련된 문제 해결 및 진단

  • 용량 계획에 대한 통찰력 제공

노드가 프로비저닝되면 CNI 플러그 인은 노드의 서브넷에서 기본 네트워크 인터페이스(eth0)로 보조 IP 주소 풀을 자동으로 할당합니다. 이 IP 주소 풀은 웜 풀이라고 하며 그 크기는 노드의 인스턴스 유형에 따라 결정됩니다. 예를 들어 c4.large 인스턴스에서는 인터페이스 1개당 3개의 네트워크 인터페이스와 9개의 IP 주소를 지원할 수 있습니다. 특정 pod에 사용할 수 있는 IP 주소의 개수는 탄력적 네트워크 인터페이스 자체에 IP 주소 중 하나가 예약되어 있기 때문에 최대 개수(10개)보다 하나 적습니다. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서인스턴스 유형별 네트워크 인터페이스당 IP 주소를 참조하세요.

IP 주소 풀이 고갈되면 플러그 인은 다른 탄력적 네트워크 인터페이스를 인스턴스에 자동으로 연결하고 이 인터페이스에 다른 보조 IP 주소 집합을 할당합니다. 이 프로세스는 노드가 탄력적 네트워크 인터페이스를 추가 지원할 수 없을 때까지 계속됩니다.

다음은 클러스터용으로 수집하여 CloudWatch로 내보내는 지표입니다.

  • 클러스터에서 지원할 수 있는 네트워크 인터페이스의 최대 개수

  • pods에 할당된 네트워크 인터페이스의 수

  • 현재 pods에 할당된 IP 주소의 수

  • 사용할 수 있는 IP 주소의 총 개수 및 최대 개수

  • ipamD 오류의 수

사전 조건

  • 클러스터에 대한 기존 AWS Identity and Access Management(IAM) OpenID Connect(OIDC) 제공업체입니다. 이미 있는지 아니면 생성해야 하는지 확인하려면 클러스터의 IAM OIDC 제공업체 생성 섹션을 참조하세요.

  • AWS CLI 버전 2.8.6 이상 또는 1.26.3 이상이 디바이스나 AWS CloudShell에 설치되고 구성되어 있습니다. aws --version | cut -d / -f2 | cut -d ' ' -f1을 사용하여 현재 버전을 확인할 수 있습니다. macOS용 yum, apt-get 또는 Homebrew와 같은 패키지 관리자는 최신 버전의 AWS CLI보다 여러 버전 이전인 경우가 많습니다. 최신 버전을 설치하려면 AWS Command Line Interface 사용 설명서의 최신 버전의 AWS CLI 설치 또는 업데이트aws configure를 통한 빠른 구성을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 AWS CloudShell 사용 설명서의 홈 디렉터리에 AWS CLI 설치를 참조하세요.

  • 디바이스 또는 AWS CloudShell에 설치된 kubectl 명령줄 도구. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어 클러스터 버전이 1.22인 경우 kubectl 버전 1.21, 1.22 또는 1.23를 함께 사용할 수 있습니다. kubectl을 설치하거나 업그레이드하려면 kubectl 설치 또는 업데이트 섹션을 참조하세요.

  • 클러스터가 1.21 이전 버전인 경우 Amazon VPC CNI plugin for Kubernetes, kube-proxy, 및 CoreDNS 추가 기능은 서비스 계정 토큰에 나열된 최소 버전입니다.

CNI 지표 도우미 배포

IAM 정책 및 역할을 생성하고 지표 도우미를 배포합니다.

CNI 지표 헬퍼 배포를 배포하려면

  1. CNI 지표 도우미 cloudwatch:PutMetricData에 지표 데이터를 CloudWatch로 보낼 수 있는 권한을 부여하는 IAM 정책을 생성합니다.

    1. 다음 명령을 실행하여 cni-metrics-helper-policy.json이라는 파일을 생성합니다.

      cat >cni-metrics-helper-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" } ] } EOF
    2. AmazonEKSVPCCNIMetricsHelperPolicy라는 IAM 정책을 생성합니다.

      aws iam create-policy --policy-name AmazonEKSVPCCNIMetricsHelperPolicy \ --description "Grants permission to write metrics to CloudWatch" \ --policy-document file://cni-metrics-helper-policy.json
  2. IAM 역할을 생성하여 여기에 IAM 정책을 연결합니다. Kubernetes 서비스 계정을 생성합니다. Kubernetes 서비스 계정에 IAM 역할 ARN을 추가하고 IAM 역할에 Kubernetes 서비스 계정 이름을 추가합니다. eksctl 또는 AWS CLI를 사용하여 역할을 생성할 수 있습니다.

    eksctl

    다음 명령을 실행하여 IAM 역할을 생성합니다. 선택하는 이름으로 AmazonEKSVPCCNIMetricsHelperRole-my-cluster를 바꿀 수 있지만, 이 역할을 함께 사용할 클러스터의 이름을 역할 이름에 포함하는 것이 좋습니다. 111122223333은 계정 ID로 바꾸고 region-code는 클러스터가 있는 AWS 리전으로 바꿉니다.

    eksctl create iamserviceaccount \ --name cni-metrics-helper \ --namespace kube-system \ --cluster my-cluster \ --role-name "AmazonEKSVPCCNIMetricsHelperRole-my-cluster" \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKSVPCCNIMetricsHelperPolicy \ --approve
    AWS CLI
    1. 클러스터의 OIDC 공급자 URL을 결정합니다. my-cluster을 클러스터 이름으로 교체합니다. 명령의 출력이 None인 경우 사전 요구 사항을 검토합니다.

      aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

      출력 예는 다음과 같습니다.

      oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
    2. IAM 역할을 생성하여 Kubernetes 서비스 계정에 AssumeRoleWithWebIdentity 작업 권한을 부여합니다.

      1. 다음 콘텐츠를 디바이스에 복사합니다. 111122223333을 계정 ID로 바꿉니다. EXAMPLED539D4633E53DE1B71EXAMPLEregion-code를 이전 단계에서 반환된 으로 바꿉니다. 값을 바꾼 후 명령을 실행하여 trust-policy.json이라는 파일을 생성합니다.

        cat >trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:cni-metrics-helper" } } } ] } EOF
      2. 역할을 생성합니다. 선택하는 이름으로 AmazonEKSVPCCNIMetricsHelperRole-my-cluster를 바꿀 수 있지만, 이 역할을 함께 사용할 클러스터의 이름을 역할 이름에 포함하는 것이 좋습니다.

        aws iam create-role \ --role-name AmazonEKSVPCCNIMetricsHelperRole-my-cluster \ --assume-role-policy-document file://"trust-policy.json"
    3. IAM 정책을 역할에 연결합니다. 111122223333을 계정 ID로 바꿉니다.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKSVPCCNIMetricsHelperPolicy \ --role-name AmazonEKSVPCCNIMetricsHelperRole
  3. 생성한 역할이 올바르게 구성되었는지 확인합니다.

    1. 역할에 대한 신뢰 정책을 확인합니다.

      aws iam get-role --role-name AmazonEKSVPCCNIMetricsHelperRole-my-cluster --query Role.AssumeRolePolicyDocument.Statement[]

      출력 예는 다음과 같습니다.

      [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:cni-metrics-helper", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ]
    2. 클러스터의 OIDC 제공업체가 이전 단계에서 반환된 제공업체와 일치하는지 확인합니다.

      aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

      출력 예는 다음과 같습니다.

      https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE

      반환된 출력에서 제공업체의 https:// 부분은 이전 단계에서 반환된 출력에 포함되지 않습니다. 이는 예상된 동작입니다.

  4. 클러스터가 있는 AWS 리전에 대해 다음 명령을 사용하여 CNI 지표 헬퍼의 권장 버전을 클러스터에 추가합니다.

    중요

    한 번에 하나의 마이너 버전만 업데이트해야 합니다. 예를 들어 현재 버전이 1.9이고 1.11로 업데이트하려는 경우 1.10로 먼저 업데이트한 다음 다음 명령하나의 버전 번호로 변경하여 1.11로 업데이트해야 합니다.

    최신 권장 버전은 Amazon EKS가 지원하는 모든 Kubernetes 버전에서 작동합니다.

    AWSGovCloud(미국 동부)(us-gov-east-1)

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.4/config/master/cni-metrics-helper-us-gov-east-1.yaml

    AWS GovCloud(미국 서부)(us-gov-west-1)

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.4/config/master/cni-metrics-helper-us-gov-west-1.yaml

    기타 모든 AWS 리전

    1. 매니페스트 파일을 다운로드합니다.

      curl -o cni-metrics-helper.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.4/config/master/cni-metrics-helper.yaml
    2. 해당 클러스터가 us-west-2에 존재하지 않는 경우 다음 명령의 region-code를 클러스터가 있는 AWS 리전으로 바꾼 다음 파일의 us-west-2를 AWS 리전으로 바꿉니다.

      sed -i.bak -e 's/us-west-2/region-code/' cni-metrics-helper.yaml
    3. 해당 클러스터가 us-west-2에 존재하지 않는 경우 다음 명령의 602401143452를 클러스터가 있는 AWS 리전에 대한 Amazon 컨테이너 이미지 레지스트리의 계정으로 바꾼 다음 파일의 602401143452를 바꿉니다.

      sed -i.bak -e 's/602401143452/602401143452/' cni-metrics-helper.yaml
    4. 매니페스트 파일을 클러스터에 적용합니다.

      kubectl apply -f cni-metrics-helper.yaml
  5. 이전에 생성한 IAM 역할의 ARN을 사용하여 이전 단계에서 생성한 cni-metrics-helper Kubernetes 서비스 계정에 주석을 추가합니다. 111122223333를 계정 ID로, my-cluster을 클러스터 이름으로, AmazonEKSVPCCNIMetricsHelperRole을 이전에 생성한 IAM 역할의 이름으로 바꿉니다.

    kubectl annotate serviceaccount cni-metrics-helper \ -n kube-system \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIMetricsHelperRole
  6. (선택 사항) Kubernetes 서비스 계정에서 사용하는 AWS Security Token Service 엔드포인트 유형을 구성합니다. 자세한 정보는 서비스 계정의 AWS Security Token Service 엔드포인트 구성을 참조하십시오.

  7. cni-metrics-helper 배포를 다시 시작합니다.

    kubectl rollout restart \ deployment cni-metrics-helper \ -n kube-system

지표 대시보드 생성

CNI 지표 헬퍼를 배포한 후 CloudWatch 콘솔에서 CNI 지표를 볼 수 있습니다. 이 주제에서는 클러스터의 CNI 지표를 볼 수 있는 대시보드를 생성하는 방법을 설명합니다.

CNI 지표 대시보드를 생성하려면

  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 지표(Metrics)를 선택한 다음 모든 지표(All metrics)를 선택합니다.

  3. 사용자 지정 네임스페이스에서 Kubernetes를 선택합니다.

  4. CLUSTER_ID를 선택합니다.

  5. 지표(Metrics) 탭에서 대시보드에 추가하려는 지표를 선택합니다.

  6. 콘솔의 오른쪽 상단에서 작업(Actions)을 선택한 다음 대시보드에 추가(Add to dashboard)를 선택합니다.

  7. 대시보드 선택(Select a dashboard) 섹션에서 새로 생성(Create new)을 선택하고 대시보드 이름(예: EKS-CNI-metrics)을 입력한 다음 생성(Create)을 선택합니다.

  8. 위젯 유형(Widget type) 섹션에서 번호(Number)를 선택합니다.

  9. 위젯 제목 사용자 지정(Customize widget title) 섹션에서 대시보드 제목에 EKS CNI metrics와 같은 논리적 이름을 입력합니다.

  10. 대시보드에 추가(Add to dashboard)를 선택하여 종료합니다. 이제 CNI 지표가 사용자가 모니터링할 수 있는 대시보드에 추가되었습니다.

    
                        EKS CNI 지표