안녕하세요 쓰니입니다.
저는 G사의 데이터레이크 데이터파이프라인의 환경인 AWS EKS 서비스를 운영하고 있는데요.
이번 글에서는 AWS EKS 1.24 버전을 1.25 버전으로 업그레이드 했던 경험을 공유하려 합니다.
사례 공유로 업그레이드를 어떻게 준비했는지, 1.25 버전의 주요 변경 점, 조치 내용 이야기가 주 내용입니다.
내용은 아래 순으로 진행됩니다.
1. 버전 업그레이드 배경
2. 버전 업그레이드 준비
3. 버전 업그레이드 후기
1. 버전 업그레이드 배경
AWS는 안정적인 서비스 제공을 위해서 주기적으로 버전 업그레이드를 권장하고 지원하는데요.
운영 중인 AWS EKS 클러스터의 1.24 버전이 EOS 기간이 얼마 남지 않아 클러스터 버전 업그레이드를 준비하게 되었습니다.
2. 버전 업그레이드 준비
1) 버전 업그레이드 주요 내용 파악
2) 조치 필요 내용 파악
3) 버전 업그레이드 계획
ㄱ. 요구 사항 정리
ㄴ. 사전 작업 정의
ㄷ. 실제 작업 계획
4) 버전 업그레이드 진행
5) 모니터링
1) 버전 업그레이드 주요 내용 파악
v1.25 버전 업그레이드 주요 내용
- EKS 1.25 버전에서는 EC2 P2 인스턴스 AMI 타입을 사용할 수 없습니다.
- EKS 1.25 버전부터 NVIDIA 525 시리즈 이상의 드라이버를 지원하는데 P3,P4,P5 인스턴스와 호환되므로 버전 업그레이드 전에 P2 타입을 P3,P4,P5 타입 인스턴스로 마이그레이션하고 드라이버와 맞도록 애플리케이션을 업그레이드 해야 합니다.
- PodSecurityPolicy (PSP)가 1.25 버전 부터 삭제 됩니다.
- PSP를 사용하고 있었다면 PSA, PSS로 전환하여야 합니다.
- aws-iam-authenticator v.0.6.3 이 aws-auth ConfigMap 잘 파싱하는지 확인 필요
- kube-system 네임스페이스의 aws-auth ConfigMap YAML 값이 중괄호로 시작하는 경우 앞뒤에 따옴표("")를 추가해야 합니다.
- API Priority and Fairness (APF) 동작 방식이 변경되었습니다.
- 업데이트 된 동작으로 업그레이드 이후 워크로드에 속도 제한이 발생할 수 있습니다. (HTTP 429 response) LIST 요청의 비율 제한으로 잠재적인 워크로드 중단을 방지하려면 워크로드를 재구성하여 이러한 비율을 줄이는 것이 좋습니다. 또는 APF 설정을 조정하여 문제를 해결 할 수 있습니다.
-> https://aws.github.io/aws-eks-best-practices/scalability/docs/control-plane/#preventing-dropped-requests
- EndPointSlice 1.25에서 삭제되며 이 API는 업데이트 됩니다. (discovery.k8s.io/v1beta1 -> discovery.k8s.io/v1)
- EndPointSlice 를 사용하고 있었을 경우 EKS 클러스터 버전 업그레이드 전에 AWS Load Balancer Controller v2.4.7로 업그레이드 (AWS Load Balancer Controller v2.4.6의 경우 EndpointSlice를 사용했기 때문)
참고
1.24 이상 버전부터는 CRI로 Dockershim을 지원하지 않음. containerd 만을 지원하는데 bootstrap script 에 dockershim 관련 내용은 확인해 제거, containerd 를 사용하도록 전환해야 합니다.
2) 조치 필요 내용 파악
클러스터 버전 업그레이드로 인해 삭제되는 PSP, EndPointSlice가 영향이 있었습니다.
해당 내용들은 클러스터 업그레이드 전에 작업을 하는 것을 AWS에서 권장하여 선 작업 후 클러스터 업그레이드를 진행하였습니다.
- PodSecurityPolicy (PSP)가 1.25 버전 부터 삭제 됩니다.
- PAC 솔루션을 사용할 수도 있지만, 지원, 커뮤니티, 사례가 많은 공식 kubernetes PSS로 마이그레이션 하는 것이 이후 EKS 운영에 더 안정적일 것으로 판단해 PSS 선택하였습니다.
- EndPointSlice 1.25에서 삭제되며 이 API는 업데이트 됩니다. (discovery.k8s.io/v1beta1 -> discovery.k8s.io/v1)
- API 변경, AWS Load Balancer Controller 버전 업그레이드
3) 버전 업그레이드 계획
ㄱ. 요구 사항 정리
- 운영 서비스 영향도 최소화
- 서비스 무중단 버전 업그레이드
ㄴ. 사전 작업 정의
- (client) AWSCLI upgrade
- (client) kubectl upgrade
- (EKS object) PSP migration
- (EKS object) AWS Load Balancer Controller upgrade
ㄷ. 실제 작업 계획
- 작업 Manual 작성
4) 버전 업그레이드 진행
4-1. (client) AWSCLI 버전 업그레이드
4-2. (client) kubectl 버전 업그레이드
4-3. (EKS object) PSP migration to PSA PSS
4-4. (EKS object) EndPointSlice api 변경 및 AWS Load Balancer Controller v.2.4.7로 업그레이드
4-5. (EKS) EKS cluster 버전 업그레이드
4-6. (EKS) EKS Add-on 버전 업그레이드
5) 모니터링
- 업그레이드 직후 기존 워크로드 기능테스트 수행, 모니터링
- 안정화 기간 1~2주
3. 버전 업그레이드 후기
여담으로, 해당 버전 업그레이드는 전체 워크로드에 영향이 있어서 개인적으로 심적 부담이 많았는데요.
그래서 준비 기간이 더 길었기도 했지만, 그 시간이 있었기에 업그레이드를 정상적으로 끝마칠 수 있었던 것 같습니다.
이 글이 업그레이드 방향을 잡으시는데 도움이 되길 바라면서 글을 마무리 하도록 하겠습니다.
(다음 글로 EKS 버전 업그레이드 상세 가이드 스크립트를 작성해 보도록 하겠습니다. 🙂)
EKS 버전 업그레이드 상세 가이드 스크립트
[AWS]_EKS_작업스크립트_EKS version upgrade 1.24 -> 1.25
'AWS > EKS' 카테고리의 다른 글
| Amazon EKS 클러스터 업그레이드 가이드 문서 리뷰 (0) | 2024.01.05 |
|---|---|
| EKS 운영 서브넷 IP 부족 관리/해결하기 (0) | 2023.12.12 |