Amazon EKS에서 클러스터 버전을 업그레이드할 때 API 오류를 해결하려면 어떻게 해야 합니까?
클러스터에서 더 이상 사용되지 않는 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
다음 단계를 완료하십시오.
- Amazon EKS 콘솔을 엽니다.
- 클러스터 이름을 선택합니다.
- 클러스터 정보에서 업그레이드 인사이트를 선택합니다.
- 인사이트 상태에서 더 이상 사용되지 않는 API 경고 또는 오류 메시지를 검토합니다.
AWS CLI
YAML 파일에 모든 업그레이드 인사이트 세부 정보를 나열하려면 다음 명령을 실행합니다.
[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --output yaml >> insight.yaml
참고: your-cluster-name과 your-region-name을 클러스터의 값으로 바꾸십시오.
출력을 원하는 파일 형식으로 저장합니다.
오류만 표시하도록 인사이트를 필터링하려면 다음 명령을 실행합니다.
[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --filter categories=UPGRADE_READINESS,statuses=ERROR
참고: your-cluster-name과 your-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."
이 오류를 해결하려면 다음 단계를 완료하십시오.
-
다음 명령을 실행하여 클러스터에서 사용하는 PDB를 나열합니다.
kubectl get pdb -A -
다음 명령을 실행하여 최신 API 버전 또는 더 이상 사용되지 않는 버전을 사용하는 PDB를 보기 위한 출력을 확인합니다.
kubectl get pdb your-pdb-name -n your-namespace -o yaml참고: your-pdb-name을 PDB로 바꾸고 your-namespace를 네임스페이스로 바꾸십시오.
-
더 이상 사용되지 않는 API 버전을 사용하는 PDB가 있는 경우 YAML 구성 파일의 최신 API 버전을 사용하도록 업데이트합니다. 자세한 내용은 Kubernetes 웹 사이트에서 애플리케이션의 중단 예산 지정을 참조하십시오.
-
kube-apiserver, newrelic 또는 kube-controller-manager와 같은 특정 사용자 에이전트이기 때문에 더 이상 사용되지 않는 API를 직접적으로 호출하는 엔터티를 파악할 수 없는 경우, EKS 클러스터의 kube-api-server-audit 로그 파일을 확인하여 엔터티를 파악하십시오.
참고: 다음 쿼리를 실행하려면 EKS 클러스터에 Cloudwatch 감사 로그를 사용해야 합니다. -
Amazon CloudWatch 콘솔을 엽니다.
-
Logs Insights를 선택한 다음, 메뉴에서 로그 그룹을 선택합니다. 예를 들어 -/aws/eks/eksworkshop/cluster입니다.
-
시간과 날짜를 필터링하여 마지막 요청 시간을 표시합니다.
쿼리: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" } } -
더 이상 사용되지 않는 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 공식업데이트됨 일 년 전