하나의 큰 k8s 클러스터, 엔터프라이즈에 적합?

Kubernetes 클러스터를 망치는 방법
Case1 : 시작하자마자 종료되는 Pod 를 배포
- 앱 시작 과정에서 환경 변수나 외부 API 호출을 통한 설정 등을 읽어오는데 실패하면 그대로 종료하게 구현된 앱에서 발생
- 컨테이너 실행 커맨드나 스크립트가 잘못되어 아무 것도 하지 않고 종료되는 경우 발생함
Case2 : History Limits 설정 없이 CronJob을 걸어 둔다
- etcd 서서히 부하가 증가하며, kube-system component OOM 유발
- 장기간에 걸쳐 서서히 쌓아 오다가 어느 순간 클러스터 컨트롤이 안되기 시작하더니 한순간에 모든 마스터에 장애를 일으키게 된다.
One Big Cluster VS Many Small Ones(Multi Cluster)
One Big Cluster

Control Plane 을 공유
- 모두 동일한 쿠버네티스 버전/설정이 적용
- 모든 Pod 가 하나의 Cluster DNS 를 사용
- 모든 User 가 하나의 Control Plane 을 공유해서 사용함
Worker Node 를 공유
- k8s 의 NameSpace 로 논리적으로 분리해서 사용
- container(cgroups)로 성능 할당, 격리
k8s 의 네임스페이가 충분한 isolation 을 제공하는가?
- Tenant1 이 실서비스를 하고 있는 클러스터에 Tenant2 가 신규 서비스 오픈 전 부하/성능 테스트를 한다면 정말 영향이 없는가?
- DISK, NETWORK I/O 영향 있고 격리를 위한 추가적인 blkio 관리 노력이 필요하다
- Tenant1 의 Pod 와 Tenant2 의 Pod 간 네트워크 통신이 격리되어 있는가?
- Pod 별 견고한 Nework Policy 적용이 필요함, 보안 ACL 을 유지하기 위한 운영 노력이 필요

Isolation 과 보안 보장은 필수 조건이기 때문에 multi cluster startegy 를 선택

멀티 클러스터 전략의 단점을 보완하기 위해 K8s as a Service 개발

K8S 적용 절차
Step1. 컨테이너 적용
- 도구 : Docker
- 산출물 : Dockerfile
Step2. 클러스터 구성
- 도구 : DKOS
- 산출물 : k8s Cluster
Step3. 쿠버네티스 적용
- 도구 : kubectl, kustomize
- 산출물 : deploy yaml
Step4. 모니터링 구성
- 도구 : 사내 모니터링 도구
- 산출물 : 모니터링 URL
Step5. CI/CD 구성
- 도구 : Jenkins/argoCD/D2Hub
- 산출물 : 파이프라인
Step6. 성능테스트
- 도구 : ngrinder ,ab 등
- 산출물 : 성능 테스트 문서
Step7. 트래픽 이전
- 도구 : GSLB or Domain
- 산출물 : Resolve
모키터링!