가시다님 EKS 스터디 참여하고 내용을 정리합니다.
EKS 처음 설치한다고 가정하면 어떻게 설치하는것이 Best Practice일까 고민을 많이 한다. 항상 그렇듯이 현재 설정은 무언가 아쉽고 불만이다. 하지만 막상 변경하려고 하면 이런저런 고민을 핑계로 미룬다.
처음할 때 제대로 하는게 당연히 좋다. 내 경험이 비록 제한이 많지만 그래도 실제 경험은 항상 소중하니, 혹시 새롭게 구성하는 사람들에게 작은 도움이 될까봐 정리해봅니다.
스토리지와 노드 그룹 설정에 대하여 정리합니다.
===============================
EBS CSI Driver 아키텍처
출처 : https://malwareanalysis.tistory.com/598
(eks_dive-dev:argo)dev$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ebs-gp3-ext4 (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 3y36d
eks 환경에서 스테이트풀 애플리케이션 운영 중
prometheus, loki 등
kafka, redis, es 등은 개발 환경은 eks에 직접 설치, 운영 환경은 aws managed 서비스 msk, elasticache, opensearch 등 사용 중
장점 : 비용 저렴, 대부분의 애플리케이션이 기본 데이터 3중화로 구성되어 안정적인 운영 가능, ec2 환경에 비하여 설치 및 관리가 용이
단점 : managed 서비스에 비하여 백업, 패치 업그레이드 등의 추가 운영 지식이 필요
EC2, VM에 관리하는 것보다 EKS, 쿠버네티스 관리가 훨씬 낫다고 생각함
Add-on 이용 Amazon EFS CSI Driver 설치
AI 환경의 용량이 큰 AI 이미지의 저장 용도로 사용 하였음
필요 시 Add-on 이용 CSI Snapshot Controller 설치
아직 사용하지 않음
PVC 데이터를 주기적으로 Snapshot을 이용하여 백업 가능
EKS 제공 매니지드 노드 그룹 사용하지 않음
Karpenter 노드풀 이용
Karpenter 파드는 Fargate 노드 배포
ARM CPU 노드 사용
AMD CPU에 비하여 20% 이상 저렴하고 인스턴스 교체 주기가 빨라 추가 성능 향상 효과 기대
현재 AMD to ARM 이전 작업 중
이미지 빌드 시 단일 플랫폼(not multi platform 빌드) 빌드 고려 중
multi 빌드는 시간이 오래 걸림
운영 체제 Amazon Linux 2023
현재 Amazon Linux 2 사용 중(25년 연말 업그레이드 예정)
Karpenter 이용하여 최신 보안 패치가 적용된 OS로 주기적으로 교체
Spot 노드 그룹 사용
실패 시 재실행이 가능한 배치잡 파드 실행 용도 용도
Dev 환경은 전체 파드를 Spot 노드 그룹으로 운영하였으나 m7i 등 특정 인스턴스 타입은 노드 교체 횟수가 매우 잦고 특정 시점에는 노드 스케줄 자체가 되지 않는 현상이 발생하여 on-demand로 변경
Saving Plan(30% 할인) 적용하면 Spot(70%)에 비하여 차이가 아주 크지는 않음
Spot이 어느정도 안정적(예를 들어 1주일에 1번 정도)으로 운영이 가능하면 적극 고려 가능
참조
amazon-guardduty aws-guardduty-agent 11 11 11 11 11 <none> 46d
kube-system aws-node 11 11 11 11 11 <none> 2y122d
kube-system csi-secrets-store-secrets-store-csi-driver 4 4 4 4 4 kubernetes.io/os=linux 46d
kube-system ebs-csi-node 11 11 11 11 11 kubernetes.io/os=linux 7d22h
kube-system ebs-csi-node-windows 0 0 0 0 0 kubernetes.io/os=windows 7d22h
kube-system kube-proxy 11 11 11 11 11 <none> 3y36d
kube-system secrets-provider-aws-secrets-store-csi-driver-provider-aws 4 4 4 4 4 kubernetes.io/os=linux 46d
monitoring loki-canary 10 10 10 10 10 <none> 125d
monitoring prometheus-prometheus-node-exporter 11 11 11 11 11 kubernetes.io/os=linux 453d
monitoring promtail 11 11 11 11 11 <none> 454d