-
[EKS] EKS 업그레이드 후기Kubernetes/EKS 2024. 10. 27. 20:17
드디어... EKS 업그레이드 일정이 끝났다
대민 서비스를 업그레이드 하는거라서 굉장히 꼼꼼하게 준비했던 업그레이드..
간단하게라도 후기를 남겨보면서 복기해보려고 한다
EKS를 업그레이드 하게 된 배경
우선.. RDS와 마찬가지로 Extended Support 비용 때문에, 해당 비용을 줄이기 위해서는 업그레이드를 반드시 진행해야 했다.
운영중인 고객사의 EKS의 버전은 1.23.. 비용이 안나올려면 최소 1.29까지는 올려야하는 상황!
그렇다면.. 최소 5번의 롤링 업데이트를 진행해야하는데
롤링 업데이트의 경우 1) 롤백이 불가능 2) API 가 Deprecated 되는것이 뭐가 있는지 찾아보고 숙지해서 준비해야놔야함
-> 1)번 롤백 불가능하다는 단점이 너무너무 커서... 결국 Blue/Green 업데이트로 가게 되는데...!!!!!
Blue/Green은 1.30 버전의 클러스터를 이전 버전의 클러스터 내용과 똑같이 구성해서 도메인만 새로운 클러스터로 위치하게 꺾어주면 된다
하지만.. 고객사에서 클러스터를 구성했던 개발자가 퇴사해서 eks를 어떻게 구성했는지 아무도 몰랐다!!!!
readme 파일이 간간히 있었지만 모든게 있지는 않았다!!!!! ㅜ,ㅜ @@@@!!!!!!!!!!!!
결국 우리는...고객사와 함께 머리를 맞대어 구성해보기로 한다...
사실 RDS 부터 시작해서 쭉쭉 eks까지 해보려고 했으나... 늘 계획대로 되지 않는 법
일정 및 구성 협의
일단 크게 일정은
1) EKS 에 구성된 서비스 및 구조 파악
2) 임시 도메인 붙여서 DEV 배포
3) DEV 환경 서비스 검증
4) PROD 배포
5) 최종 도메인 변경 (DEV, PROD)
일케 됐었고... 1)번 과정이 정말 오래 걸렸다 왜냐면 오로지 yaml 파일만 보고 파악하려니 확실하지도 않고.. 파일도 약간 안맞는 부분도 있고.. 콘솔에 떠있는거랑 비교해가면서 퍼즐 맞추듯이 맞춰갔다
사실, 이번 업그레이드를 진행하면서 Jenkins, ArgoCD, Karpenter 등의 툴을 이용해서 기존의 코드 배포 파이프라인을 바꿔보고 싶었는데 아무래도 시간이 촉박했고 새롭게 구성해서 검증하기엔 인력도 모자랐다...실시간 대민서비스라 장애가 나면 안되기 때문에 우선은 무사히 그대로 옮기는것이 우선이라고 생각했다. 이런 경우에 우리가 쓰고 싶었던 새로운 기술들을 넣는것은 욕심이라는 생각이 들었다...
기존 클러스터 구성 파악 및 테스트 진행
어떻게 구성을 파악했냐면
1) 어떤 서비스들이 있는지 파악
1) Route53에 있는 EKS 관련 도메인 정리
2) EKS 스펙 정리 (클러스터, VPC, Subnet, 인스턴스타입, 애드온, 관련 IAM Role들, 보안그룹 등등..)
3) 내부 리소스들을 네임스페이스별로 분류
4) 3)번에서 분류한 리소스별로 Service, Deployment Yaml 파일의 여부를 파악 (전달주신 깃헙파일 토대로)
5) API Deprecated 되는 사항들 파악 (다행히도 psp 관련해서 영향받는게 있었음)
6) 마이그레이션 해야할 데이터 여부 파악 및 pv, pvc 현황 파악
크게 이정도로 분류하고 하나씩 파고 들어갔다...
미리 test 계정에 yaml 파일 배포도 해보면서 계속 테스트도 해봤다.
기억에 남았던 트러블 슈팅 과정은
6)번 과정.. 반드시 옮겨야할 데이터들이 있어서.. ebs로 떠져있는 pv를 AMI로 뜨고, 새로운 AMI를 새로운 pv로 만들어서 pvc로 붙일려 했지만.......!!!!!!!! 그 서비스를 구성할때 operater가 알아서 pv랑 pvc를 만들게 구성되어 있어서.... 도저히 새로운 pvc를 붙일수가 없었다 (코드 구성을 우리가 바꿀수 있는게 아니니깐.......)
그래서 결국 pv-migrate 이 명령어로 대체했다. ... .... 진땀뺐던 경험 ㅜ
그외 자잘자잘하게 구성하면서 만났던 에러들은 따로 정리했다..
Dev 환경 배포 및 서비스 검증
테스트 배포가 마무리 되어가니 협의된 날짜가 되었고, 실제 고객사 계정에 클러스터를 신규로 생성하고, dev 네임스페이스 환경에 리소스들을 배포했다.
그리고 임시 도메인으로 리소스들을 연결 후 개발자분께서 검증해주셨다.
새롭게 ecr을 파서 이미지를 올리고 테스트 해봤는데, 이미지가 잘 안먹기도 했고
하드코딩되어 있던 기존 eks의 소스 내용들때문에 진땀을 빼기도 했고...
검증 과정에서 지속적으로 소통하면서 에러를 해결해나갔다.
dev 환경에서 검증 완료 후, prod 환경도 미리 배포해놓았다. (기존 서비스에는 영향 없는거 확인)
당일에는 임시도메인에서 실제도메인으로 바꾸는 방법으로 진행하기로 했다.
Prod 환경 최종 배포 및 검증
대망의 최종 업그레이드날이 되었고,
우선 기존 도메인에 새로운 eks의 alb들로 연결해주고 dev에서 검증했던대로 prod 환경 검증을 시작했다.
중간에 웹소켓 에러라던지... 데이터 로드 문제라던지.. 문제 상황을 여러번 마주했는데 개발자분이 엄청난 상황대처능력으로...
뚝딱뚝딱 해결해나가셨다
우리 입장에서는 kubectl logs 라던지.. describe를 통해서만 에러를 확인할수 밖에 없어서 초조하게 인프라적으로만 모니터링 해야했다.
결국 4시간 만에 무사히 잘 마무리했고, 에러없이 서비스는 잘 동작중이다.
후기
만약 이번 업그레이드가 실패했다면,,,,,, 롤링 업데이트 방법도 생각해두고 있었다. 하지만 그런일은 일어나지 않아서 정말정말 다행이다.ㅎㅎㅎ
서비스가 실시간으로 고객들에게 제공되는 대민서비스라, 장애에 굉~~~~장히 민감하다. 그래서 이번 eks 업그레이드 과정에서 최대한 보수적으로 생각하고 꼼꼼하게 정리했고, 확인하고 또 확인해봤던 것 같다.
잘 마무리 돼서 정말 다행이고.. 우린 고객사랑 기념으로 밥을 먹기로 했다 ~!
처음에 티스토리 적을땐 기술적인 내용도 정리할까 하다가.. 민감한 정보까지 혹시 노출될까봐 업그레이드 여정만 간단히 정리해본다.. !
'Kubernetes > EKS' 카테고리의 다른 글
[Kubernetes] EKS Workshop #3 (0) 2024.06.09 [Kubernetes] EKS Workshop #2 (0) 2024.06.09 [Kubernetes] EKS Workshop #1 (1) 2024.06.09