[쿠버네티스 강의메모1]초보를 위한 쿠버네티스 안내서
새롭게 이동한 팀은 도커, 쿠버네티스가 필수이다.
업무 시작 전 교육이 필수인데, 유투브 강의와 인프런 강의를 다 듣는데 아마 3달넘게 소요될 것 같다.
천천히, 꾸준히 해보자!
컨테이너 특징
. 가상머신가 비교하여 컨테이너 생성이 쉽고 효율적
. 이미지를 이용한 배포와 롤백이 간단
. 언어,프레임워크 상관없이 application 동일한 방식으로 관리
. 개발,테스팅,운영 환경, 로컬피시, 클라우드까지 동일한 환경을 구축
. 특정 클라우드 벤더에 종속적이지 않음.
도커 흐름
1) 코드작성
2) Build : Create Docker Image
3) Ship : Save docker hub or any storage the image
4) Run : Implement docker image as a container
도커로 띄운 컨테이너가 많아지고, 버전도 모든 컨테이너 한번에 up하고 싶고,
서비스 죽거나 부하 생기는거 모니터링도 하고싶고,,
이런 니즈때문에 컨테이너를 관리 및 모니터링 하는 Conatinr Orchestration이 필요함.
Container Orchestation란?
복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구
컨테이너 오케스트레이션의 특징 (설정으로 아래 것들을 관리할 수 있음)
1) Cluster : node 하나하나가 아닌 cluster 로 추상화하여 관리한다
2) State : 상태관리 (ex. replica하나 더 띄우고 싶으면 바로 생성)
3) Scheduling : 배포관리
4) rollout,rollback : 배포버전 관리
5) service discovery : 서비스 등록 및 조회 ( 서비스 뜬 목록 바로바로 저장소에 등록, 프록시 서버거 이 저장소를 바라보고 ip를 재설정)
6) volume : 볼륨스토리지, node 별로 필요한 volumne을 mount
*이미지 ?
무한생산 가능한 컨테이너 조립키트!
컨테이너를 찍어내는 틀!
*도커로 컨테이너를 띄운다!
<쿠버네티스 아키텍처>
- Master
1) etcd - 모든 상태와 데이터 저장, Key-Value 형태로 데이터 저장
2) API Server - 상태를 바꾸거나 조회하는 역할, REST API, etcd와 유일하게 통신하는 모듈, 권한체크
3) Scheduler - 새로생성된 pod 감지, 어떤 노드에 pod를 실행할지 선택하는 역할.
4) Controller - 끊임없이 상태를 체크하고 원하는 상태를 유지, 하나의 프로세스로 실행, LOOP 무한반복
- Node
1) Kubelet - 각 노드에서 실행, Pod를 실행/중지하고 상태 체크,
CRI(Container Runtime Interface- docker/ Containered/ CRI-O...)
2) proxy - 내/외부 통신 설정, 네트워크 프록시 부하 분산 역할, iptables, IPVS를 사용(설정만 관리)
<오브젝트>
1) Pod
- 가장 작은 배포 단위, 컨테이너를 관리하는 단위
- 여러개의 컨테이너가 하나의 Pod에 속할 수 있음
2) ReplicaSet
- 여러개의 Pod를 관리
- 신규 Pod를 생성하거나 기존 Pod를 제거하여 원하는 수 (Replicas)를 유지
3) Deployment
- 배포 버전을 관리
- 내부적으로 ReplicaSet을 이용
4) Service - ClusterIP
- 클러스터 내부에서 사용하는 프록시
- 클러스터 내부에서 Pod LB
- 고유 IP 를 가짐. 요청을 보낼 때 Pod로 바로보내는게 아니라, Service 로보냄
- 클러스터 내붕서 서비스 연결은 DNS를 이용
5) Service - NodePort
- 노드(host)에 노출되어 외부에서 접근 가능한 서비스
- 서로 다른 노드에 보내도 Cluster IP 찾을 수 있음
6) Service - LoadBalancer
- host가 죽은 NodePort를 호출한다면? 일시적으로 호출안됨. -> LB필요
- 하나의 IP주소를 외부에 노출
7) Ingress (Nginx, HAProxy, ALB..)
- 도메인 또는 경로별 라우팅
- 전부다 node port나 loadbalancer를 생성하면 자원낭비