오랜만에 복병을 만난 것 같지만... 차근차근 정리
쿠버네티스란?
- 컨테이너 오케스트레이션 도구
- k8s라는 표기는 “k”와 “s” 사이에 있는 8글자를 나타내는 약식 표기🧐
- 도커 스웜 모드처럼 여러 대의 도커 호스트를 하나의 클러스터로 만들어 준다는 점은 같지만 세부적인 기능을 도쿼스웜보다 많이 제공
- 장점
- 서버 자원 클러스터링, 마이크로서비스 등 컨테이너 기반의 서비스 운영에 필요한 대부분의 오케스트레이션 기능 제공
- 성능과 안정성 면에서 신뢰
- 영속적 볼륨, 스케줄링, 장애 복구 등 컨테이너 기반의 클라우드를 운영할 때 필요한 대부분의 기능과 컴포넌트를 사용자가 직접 커스터마이징 할 수 있음
- CNCF 및 다른 클라우드 운영도구들과 쉽게 연동
- 단점
- 다른 오케스트레이션보다 다양한 지식 필요
- 사용법이 복잡해 학습 비용이 큼
쿠버네티스 클러스터
- 컨트롤 플레인을 담당하는 마스터 노드와 애플리케이션 파트가 실행되는 워크노드로 구성
컨트롤 플레인
- 컨테이너 스케줄링, 서비스 관리, API 요청 처리 등의 작업을 수행
kube-apiserver
: kubectl로부터 명령을 전달받아 실행
kube-scheduler
: 새로운 POD 생성을 감지하고 실행시킬 워커를 선택
kube-controller-manager
: 컨트롤러를 통합, 관리, 실행
cloud-controller-manager
: 클라우드 서비스와 연동해 로드밸런서나 디스크 볼륨 같은 자원을 관리
etcd
: 클러스터의 모든 데이터를 보관하는 일관성, 고가용성을 보장하는 키-값 저장소
노드 컴포넌트
- POD를 유지시키고 쿠버네티스 런타임 환경을 제공하는 역할을 수행
kubelet
: 마스터의 kube-scheduler와 연동하여 워커 노드에 POD를 배치하고 실행하며 실행 중인 POD의 상태를 정기적으로 모니터링하며 kube-scheduler에 통지
kube-proxy
: 각 노드에서 실행되는 네트워크 프록시
클러스터 설치
- 쿠버네티스 소프트웨어, CNI(가상 네트워크 드라이버)를 설치해야함
- CNI 소프트웨어는 플란넬, 칼리코, AWS VPC CNI 등이 있음
- 마스터 노드에는
etcd
라는 데이터베이스, kubectl
설치
- 워커 노드에는
컨테이너 엔진
설치
kubeadm
, kops
, GKE
등으로 클러스터 설치 가능
- 설치 시, 확인사항
- 모든 서버의 시간이 ntp를 통해 동기화돼 있는지 확인
- 모든 서버의 맥(MAC) 주소가 다른지 확인
- 모든 서버가 메모리 2GB, 2CPU 이상의 자원을 가지고 있는지 확인
- 모든 서버의 스왑을 비활성화. 메모리 스왑이 활성화돼 있으면 컨테이너의 성능이 일관되지 않을 수 있음
swapoff -a