컨테이너를 활용할 수 있는 Workload는 정해져 있는 걸까? 이제는 주변에서 쉽게 보고 들을 수 있는 컨테이너, 하지만 정작 내가 쓰려면 어떻게 써야 할지 감을 잡기 어려운 것도 사실이죠. 유명 게임, 웹 서비스에서 컨테이너를 어떻게, 왜 쓰게 되었는지를 알아봅니다. 그리고 컨테이너에 올리는 작업의 특성을 파악하면 활용할수 있는 팁들까지, 실사례를 통해서 알아봅니다!
7. NodePort
• Exposes the service on each Node’s IP at a static port.
• Routes to a ClusterIP service, which is automatically created.
• from outside the cluster: <NodeIP>:<NodePort>
• 1 service per port
• Uses ports 30000-32767
9. EKS에서 네트워킹
CNI를 사용할때 사용 할수 있는 인스턴스당 사용 가능한 POD갯수
(Number of network interfaces for the instance type ×
(the number of IP addressess per network interface - 1)) + 2
c5d.large 29
c5d.2xlarge 58
c5d.4xlarge 234
c5d.9xlarge 234
c5d.12xlarge 234
c5d.18xlarge 737
c5d.24xlarge 737
c5d.metal 737
10. 사용할 수 있는 IP대역
Primary CIDR range ➔ RFC 1918 addresses
➔ 10/8, 172.16/12, 192.168/16
Secondary CIDR ranges ➔ non-RFC 1918 address blocks
➔ 100.64.0.0/10 와 198.19.0.0/16 를 추가적으로 사용가능
13. AWS Fargate : 오직 태스크에만 집중하세요!
간단하고, 쉬우며, 효율적인
서버리스 컨테이너!
=프로비저닝, 확장
또는 관리할 EC2
인스턴스가 없음
VPC, ELB, IAM,
CloudWatch
등과 통합된 ECS
Native API
CPU, 메모리
사용량에 따라 지불
15. Helm이란?
• Helm은 Kubernetes 애플리케이션 관리를 지원합니다.
• Helm 차트는 가장 복잡한 Kubernetes 애플리케이션을 정의, 설치 및
업그레이드하는 데 도움이됩니다.
• 차트를 쉽게 만들고, 버전을 만들고, 공유하고, 게시 할 수 있습니다.
• Helm 사용하면 더 이상 복사 및 붙여 넣기가 필요하지 않습니다.
https://github.com/kubernetes/helm
16. EKS 직접 알아보기
EKS Workshop link
https://www.eksworkshop.com/
Github roadmap link
https://github.com/aws/containers-roadmap/
Roadmap kanban link
https://github.com/aws/containers-roadmap/projects/1
28. Anipang4 : Realtime Service
• StatefulSet 사용
• Deploy Pod들의 통신
• Pod들의 상태 유지
• ALB Ingress Controller
• LB, Target Group, Domain 등록 자동화
• Domain에 의한 서비스 별 노드 그룹 분리
29. Anipang4 : Realtime Deployment
• AWS CodePipeline
• CodeCommit에 Push
• Build후 ECR에 Image Push
• ECR -> EKS 배포 자동화 기능 없음
• Cli 이용한 스크립트로 직접 배포
• Helm을 통한 배포
• Blue / Green State 변경
30. Anipang4 Realtime Monitoring
• 서비스 초기
• CW에 API등록 후 서버 상태 모니터링
• Scale In/Out AWS CLI로 관리
• 모니터링
• 실시간 접속 수
• Node Health
• CPU / Memory / Network 등 System 상태
• 현재 Prometheus 도입
32. 결정 고민
• 새로운 개념들
• StatefulSets ??
• Job ??
• Pod ??
• DaemonSet ??
• Node ??
• NodeGroup ??
• 매우 다양한 설계 방법들 배포 방식
• 유사한 사례가 없어 적합한 방법을 찾기까지의 험난한 과정
33. 무중단 배포 & 운영 필요
• 게임 특성
• 계속하여 유저가 실시간 서버에 접속해 있어야 할 필요 없음
• 대전 플레이 한 사이클에 최대 4분 정도 플레이
• 기존 선데이토즈 리얼타임 게임 서비스 역시 무중단으로 4년 운영 경험
• Blue / Green 배포 구성 – Nginx Ingress
• 기존 유저 Blue 그룹에 남아 있다면
• Green Label Pod 에 새 이미지를 배포
• 신규 참여 유저들은 Green 그룹으로 이동하여 Match
• 기존 유저 들은 Blue 그룹에서 Match 종료 후 Green으로 이동
34. Service ( App ) Clustering
• 추가되는 Node, Pod들 간의 자동 연결에 대한 고민
• Kubernetes DNS Service Discovery
• Pod 추가 / 제거 -> CoreDNS
• 기존 Pod의 서비스 들이 인지하고 스스로 연결하도록 구성
35. 레퍼런스의 부재
• 게임서비스에 K8S 적용 사례 없음
• 잘 설계된 구성인지 검증 의문
• 개발이 잘 되었지만 실제 라이브 환경에서도 신뢰할 수 있을지 의문
• 시나리오 테스트와 AWS Korea 지원으로 극복
36. EKS 아직도 Beta??
• 기본적인 안정성은 충분함
• 추가적인 Feature들이 나올 것으로 예상
• AWS의 일부 서비스와 더 긴밀하고 편한 연결들 지원 필요
• 설정과 관리가 쉬운 모니터링 툴도 제공 되길 희망
44. Key Takeaways
• Difficulties
• 기존 인프라 위에 완전히 새로운 서비스 구성의 어려움
• 유사 사례 레퍼런스의 부재
• 안정성 확보에 대한 의심
• 운영에 대한 불안감
• Solution
• 시나리오 수립과 케이스 검증으로 안정성 확보
• 한정된 인적 & 물리적 리소스로 안정적인 운영 중
• 배포에 대한 부담 거의 없음
• 계속하여 기존 인프라 구성도 EKS 구성으로 변경 예정