쿠버네티스는 컨테이너 관리자로 컨테이너 운영을 자동화하기 위한 도구
i.e ) 메소스, 도커스웜
→ 오케스트레이션 도구
: 많은 수의 컨테이너를 협조적으로 연동시키기 위한 통합 시스템이며 이 컨테이너를 다루기 위한 API 및 명령행 도구등이 함께 제공
컨테이너를 이용한 애플리케이션 배포 외에도 다양한 운영 관리 업무를 자동화
→ 도커 호스트 관리, 서버 리소스의 여유를 고려한 컨테이너 배치, 스케일링, 여러 개의 컨테이너 그룹에 대한 로드 밸런싱, 헬스 체크 등의 기능
쿠버네티스의 리소스란 애플리케이션을 구성하는 부품과 같은 것으로 노드, 네임스페이스, 파드
Kubernetes
를 통해서 여러 가지 일을 할 수 있지만 부화 모니터링을 통한 부화 분산 역할도 진행 가능
📍여기서 같은 역할을 하는 **Load balancer
와 Kubernetes
차이점은 실행 환경
Kubernetes
는 cluster라는 큰 컴퓨터 안에서 docker container가 실행되기 때문에 따로 가상 컴퓨터(instance)를 실행하지 않아도 분산 부화 가능 당연히 속도 면에서 Load balncer
보다 이점 있음
Kubernetes의 여러 리소스를 관리하기 위한 집합체
노드(node)
입니다. 노드(node)는 클러스터(cluster)의 관리 대상으로 등록된 도커 호스트로, 도커 컨테이너가 배치되는 대상Kubernetes Cluster 전체를 컨트롤하는 역할로 API서버,스케줄러,컨트롤러 매니저, etcd
로 구성
Example
Master Node = 본사
- api서버 = 본사 전산직
- etcd = 정보를 수집하는 직원
- 스케줄러 = 공장의 업무를 담당해주는 직원
- 컨트롤러 매니저 = 업무를 구체화 시켜주는 직원
Master Node에 의해 주어진 명령어를 받고 실제 워크로드에 생성하여 서비스하는 컴포넌트 → Kubelet, kube-proxy, cAdvisor 와 컨테이너 런타임으로 구성
Example
Node = 공장
- kubelet = 공장 전산직
- kube-proxy = 공장 직원에 업무를 명령을 일하는 직원에게 전송 직원
- container runtime= 공장기계 또는 일하는 직원
- cAdisor = 공장에 기계가 잘 돌아가는 지 확인하는 직원
클러스터 안의 가상 클러스터를 네임스페이스(namespace)
→전체 클러스터에서 리소스의 구분 용도 즉, 전체 클러스터에서 특정 이름으로 클러스터의 영역을 구분
컨테이너가 모인 집합체의 단위로, 적어도 하나 이상의 컨테이너로 이뤄짐
📍앞서 언급한 컨테이너는 도커 컨테이너를 의미하는데 쿠버네티스를 도커와 함께 사용한다면 파드는 컨테이너 하나 혹은 컨테이너의 집합체가 됨
현재 운영하고 있는, 기존 버전을 가진 서버를 Blue 컴퓨터 → 모든 유저 연결
새로운 버전을 배포해야할 때, 새로운 버전을 가진 서버를 Green 컴퓨터에 켬
유저 트래픽 이동 : Blue → Green
Blue는 계속 대기하고 있다가, 혹시 Green에 문제가 생기면 다시 Blue로 트래픽을 옮김
✅ 단점은 현재 운영중인 서버의 2배 가량의 자원이 필요
카나리 배포는 일부 유저 트래픽만 새로운 버전을 배포한 서버로 보내서, 문제가 없는지 체크
괜찮다면 더 많은 유저 트래픽을 새로운 배포한 서버로 보내고, 이를 반복
현재 운영중인 서버 중에서 하나의 컴퓨터를 끔
껐던 컴퓨터에 새로운 버전을 담아 배포 → 두번째 컴퓨터를 끔
이런식으로 기존버전에서 새로운 버전으로 트래픽을 점진적으로 전환하는 것