가시다님 EKS 스터디 참여하고 내용을 정리합니다.
EKS 처음 설치한다고 가정하면 어떻게 설치하는것이 BP(Best Practice)일까 고민을 많이 한다. 항상 그렇듯이 현재 설정은 무언가 아쉽고 불만이다. 하지만 막상 변경하려고 하면 이런저런 고민을 핑계로 미룬다.
처음할 때 제대로 하는게 당연히 좋다. 내 경험이 비록 작지만 그래도 실제 경험은 항상 소중하니, 혹시 새롭게 구성하는 사람들에게 작은 도움이 될까봐 정리해봅니다.
EKS 용 별도 VPC 사용
Default VPC 이 외 별도 VPC 사용
기존 VPC 있으면 그대로 사용
Private(Not Public) Subnet에 워커 노드 배포
Subnet CIDR /20(또는 /22 이상) 사용
/24는 EKS 업그레이드 작업 시 IP 부족 문제 발생
개발 환경 : 단일 AZ, 운영 환경 : 3AZ
AZ 간 Data Transfer 비용 절감 목적
AWS VPC CNI 사용
Prefix Delegation 사용하지 않음
대부분 xlarge, 2xlarge 많아서 부족할 일이 거의 없음
참고로 노드 당 많으면 30개 정도 파드 실행 중
kube-proxy는 iptables 모드 사용
IPVS 크게 성능 차이가 없다고 하고 사용할만큼 특별히 성능 제약을 느끼지 못하는 경우가 대부분일 듯
Ingress w/ ALB, AWS LB Controller 사용
NLB는 특별히 사용할일이 없는 듯
ALB 옵션으로 IP Mode 사용
ExternalDNS Controller 사용
CoreDNS - add-on으로 설치
CoreDNS on fargate, nodelocaldns, CoreDNS ndots 사용하지 않는데, 필요에 따라 검토 필요한 듯
lameduck 옵션은 필요 시 사용(개인적으로 Spot 노드 사용 시 장애 경험으로 옵션 추가함)
Topology Aware Routing 사용하지 않음
AZ 당 2개, 6개 이상 파드가 많으면 적용 유리
애플리케이션 배포 시 Rolling Update 사용
ArgoRollout 이용한 Blue/Green 사용하였으나 Blue/Green 요구 사항이 크지 않아 Rolling Update 변경
Blue/Green 사용 시 노드가 추가로 배포되어 추가 자원 필요 + 불필요하게 파드가 재시작되는 이슈가 발생함
Network Policy 권고
아직 사용하지 않음
AWS SG for PODs 필요 시 검토
아직 사용하지 않음
Probe
Readiness, Liveness 사용
(대부분의 파드가 2개의 Probe endpoint 경로를 분리해서 사용하지는 않음)
Startup Probe는 앱 성격에 따라 검토 필요
파드 업데이트 시 안정성 높이는 방법
주로 terminationGracePeriodSeconds : 60초 지정
일부 파드 Pod Graceful Shutdown 지정
preStop Hook 사용 (Helm Starter Template 수정 내역)
# Lifecycle preStop Hook
lifecycle:
preStop:
enabled: true
command: ["sh", "-c", "echo 'PreStop Hook Execution'; sleep 10"] ## or sleep 30