내용으로 건너뛰기

Amazon EKS에서 클러스터 버전을 업그레이드할 때 API 오류를 해결하려면 어떻게 해야 합니까?

4분 분량
0

클러스터에서 더 이상 사용되지 않는 API를 사용하고 있으며, 다음 업그레이드 전에 수정해야 한다는 오류 또는 경고 상태를 받았습니다.

간략한 설명

클러스터 버전 업그레이드 중 Amazon EKS 콘솔의 업그레이드 인사이트 탭에는 다양한 Kubernetes 구성 요소 상태가 표시됩니다. 여러 구성 요소에 대한 업그레이드 프로세스 중에 다음과 같은 상태가 표시됩니다.

  • 오류 상태는 클러스터를 업그레이드한 후 클러스터가 특정 API 버전을 참조하는 호출을 거부함을 나타냅니다.
  • 경고 상태는 문제가 있지만 즉각적인 조치가 필요하지 않음을 나타냅니다. 이 상태는 Kubernetes 리소스가 현재 클러스터 버전보다 최소 2개 이전 버전인 버전에서 제거되도록 예약된 경우 발생할 수 있습니다.
  • 통과 상태는 구성 요소가 모든 업그레이드 검사 및 검증을 통과했음을 나타냅니다. 아무런 조치도 필요하지 않습니다.
  • 알 수 없음 상태는 업그레이드 시스템에서 구성 요소의 상태를 확인할 수 없음을 나타내며, 정보가 부족하거나 프로세스 중에 상태가 확실하지 않음으로 발생할 수 있습니다. 조치를 취해야 할 수도 있습니다.

클러스터를 업그레이드하기 전에 오류 또는 경고 상태의 구성 요소를 검토하여 문제를 파악하고 해결하십시오.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

API 상태 확인

AWS Management Console 또는 AWS CLI를 사용하여 클러스터에서 더 이상 사용되지 않는 API의 상태를 확인할 수 있습니다.

AWS Management Console

다음 단계를 완료하십시오.

  1. Amazon EKS 콘솔을 엽니다.
  2. 클러스터 이름을 선택합니다.
  3. 클러스터 정보에서 업그레이드 인사이트를 선택합니다.
  4. 인사이트 상태에서 더 이상 사용되지 않는 API 경고 또는 오류 메시지를 검토합니다.

AWS CLI

YAML 파일에 모든 업그레이드 인사이트 세부 정보를 나열하려면 다음 명령을 실행합니다.

 [+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --output yaml >> insight.yaml

참고: your-cluster-nameyour-region-name을 클러스터의 값으로 바꾸십시오.

출력을 원하는 파일 형식으로 저장합니다.

오류만 표시하도록 인사이트를 필터링하려면 다음 명령을 실행합니다.

[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --filter categories=UPGRADE_READINESS,statuses=ERROR

참고: your-cluster-nameyour-region-name을 클러스터의 값으로 바꾸십시오.

출력은 텍스트 형식으로 저장됩니다.

더 이상 사용되지 않는 API 상태 오류 해결

업그레이드 인사이트 탭 상태에 클러스터의 API가 더 이상 사용되지 않는 상태로 표시되면 오류가 발생할 수 있습니다. 예를 들어 포드 중단 예산(PDB) API 오류가 발생하면 다음과 비슷한 메시지를 받을 수 있습니다.

"EKS using deprecated api version "/apis/policy/v1beta1/poddisruptionbudgets" and needs to replace it with "/apis/policy/v1/poddisruptionbudgets" before upgrading EKS cluster."

이 오류를 해결하려면 다음 단계를 완료하십시오.

  1. 다음 명령을 실행하여 클러스터에서 사용하는 PDB를 나열합니다.

    kubectl get pdb -A
  2. 다음 명령을 실행하여 최신 API 버전 또는 더 이상 사용되지 않는 버전을 사용하는 PDB를 보기 위한 출력을 확인합니다.

    kubectl get pdb your-pdb-name -n your-namespace -o yaml

    참고: your-pdb-name을 PDB로 바꾸고 your-namespace를 네임스페이스로 바꾸십시오.

  3. 더 이상 사용되지 않는 API 버전을 사용하는 PDB가 있는 경우 YAML 구성 파일의 최신 API 버전을 사용하도록 업데이트합니다. 자세한 내용은 Kubernetes 웹 사이트에서 애플리케이션의 중단 예산 지정을 참조하십시오.

  4. kube-apiserver, newrelic 또는 kube-controller-manager와 같은 특정 사용자 에이전트이기 때문에 더 이상 사용되지 않는 API를 직접적으로 호출하는 엔터티를 파악할 수 없는 경우, EKS 클러스터의 kube-api-server-audit 로그 파일을 확인하여 엔터티를 파악하십시오.
    참고: 다음 쿼리를 실행하려면 EKS 클러스터에 Cloudwatch 감사 로그를 사용해야 합니다.

  5. Amazon CloudWatch 콘솔을 엽니다.

  6. Logs Insights를 선택한 다음, 메뉴에서 로그 그룹을 선택합니다. 예를 들어 -/aws/eks/eksworkshop/cluster입니다.

  7. 시간과 날짜를 필터링하여 마지막 요청 시간을 표시합니다.
    쿼리:

    fields @logStream, @timestamp, responseStatus.code, @message
    | filter @logStream like /^kube-apiserver-audit/
    | filter requestURI like /\/apis\/autoscaling\/v2beta2\/horizontalpodautoscalers/    ### ---> Replace this with your Deprecated API's
    | sort @timestamp desc
    | limit 1000

    출력:

    {
       "kind":"Event",
       "apiVersion":"audit.k8s.io/v1",
       "level":"Request",
       "auditID":"bd2b2b0c-8556-4468-8b35-91e2e78759a6",
       "stage":"ResponseComplete",
       "requestURI":"/apis/autoscaling/v2beta2/horizontalpodautoscalers?allowWatchBookmarks=true\u0026resourceVersion=118801277\u0026timeout=5m51s\u0026timeoutSeconds=351\u0026watch=true",
       "verb":"watch",
       "user":{
          "username":"system:serviceaccount:newrelic:newrelic-kube-state-metrics",
          "uid":"9b97a09a-cf70-4fe2-8fd8-6c87110ce672",
          "groups":[
             "system:serviceaccounts",
             "system:serviceaccounts:newrelic",
             "system:authenticated"
          ],
          "extra":{
             "authentication.kubernetes.io/pod-name":[
                "newrelic-kube-state-metrics-5bb6ccc94d-8nj9v"
             ],
             "authentication.kubernetes.io/pod-uid":[
                "5b156744-00b6-4dfb-a998-a32140409b8e"
             ]
          }
       },
       "sourceIPs":[
          "10.62.98.22"
       ],
       "userAgent":"v2.6.0",
       "objectRef":{
          "resource":"horizontalpodautoscalers",
          "apiGroup":"autoscaling",
          "apiVersion":"v2beta2"
       },
       "responseStatus":{
          "metadata":{
    
          },
          "code":200
       },
       "requestReceivedTimestamp":"2024-12-13T20:13:04.438616Z",
       "stageTimestamp":"2024-12-13T20:18:55.441744Z",
       "annotations":{
          "authorization.k8s.io/decision":"allow",
          "authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"newrelic-kube-state-metrics\" of ClusterRole \"newrelic-kube-state-metrics\" to ServiceAccount \"newrelic-kube-state-metrics/newrelic\"",
          "k8s.io/deprecated":"true",
          "k8s.io/removed-release":"1.26"
       }
    }
  8. 더 이상 사용되지 않는 API를 최신 API로 업데이트하려면 다음 작업 중 하나를 수행합니다.
    사용자 이름에 cluster-autoscaler가 표시되면 클러스터 오토스케일러를 최신 버전으로 업데이트합니다.
    사용자 이름에 newrelic-kube-state-metric이 표시되면 별도로 설치된 경우 클러스터를 최신 kube-state-metrics 버전으로 업데이트합니다. 또는 kube-state-metrics가 번들로 제공되는 경우 New Relic 플러그인을 업그레이드합니다.
    참고: AWS는 지난 30일 동안 더 이상 사용되지 않는 API를 스캔합니다. cluster-autoscaler 또는 newrelic-kube-state-metric을 업데이트한 후 AWS에서 더 이상 사용되지 않는 API를 스캔하고 업데이트 인사이트 탭에 상태를 업데이트하는 데 최대 30일이 걸릴 수 있습니다.

AWS 공식업데이트됨 4달 전