Designing K8S Cluster

LEE EUI JOO·2023년 2월 17일
0

하나의 큰 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
profile
무럭무럭 자라볼까

1개의 댓글

comment-user-thumbnail
2023년 2월 18일

모키터링!

답글 달기