카테고리 없음

[쿠버네티스 강의메모1]초보를 위한 쿠버네티스 안내서

jjineei 2022. 11. 4. 17:51

새롭게 이동한 팀은 도커, 쿠버네티스가 필수이다.

업무 시작 전 교육이 필수인데, 유투브 강의와 인프런 강의를 다 듣는데 아마 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를 생성하면 자원낭비