01. Kubernetes 이론 - 장점

로로·2023년 9월 10일

k8s 뭐가 좋은데❓❓

간편한 선언적 API
워크로드 분리 - 분산 시스템 개발에 용이
어디서나 실행가능 - 개인 컴퓨터, 여러대 서버, 퍼블릭 클라우드 yaml 파일로만 가져가서 사용 가능


1. 선언적(declarative) API

컨테이너가 어떤 상태이길 원하는지만 쿠버네티스에 설정하면 지속해서 컨테이너의 상태를 확인
설정한 상태가 아니라면 그것에 맞게 맞춘다
현재 상태 확인 -> 설정한 상태와의 차이 확인 -> 설정한 상태로 맞추기 -> 현재 상태 확인 -> ...
네트워크 상태 때문에 명령어가 전달되지 않더라도, 클러스터가 동작 중이라면 항상 원하는 상태로 자동 복구
=> 사용하는 컴포넌트들의 구현이 단순
=> 컴포넌트를 여러 개 실행해둘 수 있으므로 단일 장애점(SPOF : 시스템 구성요소 중 동작하지 않으면 전체 시스템이 중단되는 요소) 없다
단점
앱 재시작 같은 단순한 작업은 할 수 없다. 앱 재시작은 쿠버네티스 시스템 내부 동작으로 사용자가 제어할 수 없기 때문이다.
why? 쿠버네티스 입장에서는 같은 설정, 즉 기존 설정과 비교했을 때 변경 사항이 없는 앱은 재시작 하지 않아도 되기 때문

현재는 선언적 특징은 그대로지만, 디플로이먼트, 스테이트풀세트, 데몬세트에 재시작 기능이 추가됨
kubectl이 직접 애너테이션을 변경하면서 재시작 동작을 제어하는 방식으로 변경됨



1. 서비스 디스커버리와 로드 밸런싱

네트워크 상의 장치와 서비스를 자동으로 탐지 <- 오토 스케일링에 의해 동적 생성, 서비스의 IP가 동적으로 변경되는 일이 잦음
컨테이너에 대한 트래픽이 많으면 k8s가 알아서 로드밸런싱하고 배포하여 서비스를 안정적으로 유지

2. 스토리지 오케스트레이션

로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 가능

3. 자동화된 롤아웃과 롤백

배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경 가능
k8s를 자동화해서 배포용 새 컨테이너를 생성하고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있음

4. 자동화된 빈 패킹(bin packing)

컨테이너가 필요로 하는 CPU와 MEM을 지시하고, worker node에 맞춰서 리소스를 가장 잘 사용할 수 있도록 해줌

5. 자동화된 복구(self-healing)

실패한 컨테이너 재시작
컨테이너 교체
'사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고,
서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않음

6. 시크릿과 구성 관리

암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리할 수 있음
컨테이너 이미지를 재구성하지 않고 스택 구성에 비밀을 노출하지 않고도 비밀 및 애플리케이션 구성을 배포 및 업데이트 가능

7. 다양한 배포 방식 지원

  • Deployment Control
    새로운 버전의 애플리케이션을 다양한 전략으로 무중단 배포 가능
  • Statefulsets Control
    실행 순서를 보장하고 호스트 이름과 볼륨을 일정하고 사용할 수 있어서 데이터가 중요한 경우에 사용
  • DaemonSet Control
    로그나 모니터링이 모든 worker node에 설치가 필요한 경우 사용
  • Job, CronJob control
    배치성 작업에 사용

profile
청로하~🏝️

0개의 댓글