1.쿠버네티스 시작하기
01. VM vs Container
[서버 관리]
- 다른 버전의 node.js 를 같은 서버에서 써야한다. 등등 한 서버에서 여러가지 버전을 잘 돌리고 싶다.
그래서 등장!
- VM (가상머신) : 서버 하나에 가상머신 여러개. But 여러가지 클라우드 환경에서 (multi) 사용하기 어렵고, 느리다.
- Hypervisor 존재
그런데!! 뚜둥 Docker 등장 🐳
[도커 등장]
모든 실행환경을 컨테이너로 환경을 격리화 시키는 방법이다.
VM과 비교해서 Guest OS가 없어서 OS 가상화 보다 오버헤드가 적고, 효율적으로 동작한다.
어플리케이션을 OS 환경에 종속적이지 않게 동작할 수 있다.
[컨테이너 특징]
- 가상머신과 비교하여 컨테이너 생성이 쉽고 효율적
- 컨테이너 이미지를 이용한 배포와 롤백이 간단
- 언어나 프레임워크에 상관없이 애플리케이션을 동일한 방식으로 관리
- 개발, 테스팅, 운영 환경은 물론 로컬 피시와 클라우드까지 동일한 환경을 구축
- 특정 클라우드 벤더에 종속적이지 않음
배포가 어려운게 local pc에서는 되는데 운영에서는 잘 안될 때가 있다. (서버 환경과 설치에 따라서 달라짐) -> 도커 사용하면 문제 생길 확률이 줄어든다.
[개발과정 정형화]
Developer 코드 작성 -> Build (도커 이미지 생성) -> Ship (이미지를 도커 허브나 저장소에 저장) -> Run (도커 이미지를 컨테이너로 실행)
그렇게 점점 컨테이너가 많아지기 시작함. 관리가 어려워짐. 그래서 컨테이너를 관리하기 위한 기술이 필요해짐.
[컨테이너 오케스트레이션]
Container Orchestration
: 복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구
: 컨테이너를 도커 플랫폼에 올려서 관리+운영+클러스터 서비스 지원해 주는 것
02. 왜 쿠버네티스인가?
컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼
- 오픈소스
- 무한한 확장성
- 사실상의 표준화
: EKS, Elastic Kubernetes Service (Amazon)
: AKS (Azure)
: GKE, Kubernetes Engine (Google)
03. 어떤걸 배울가?
- 도커 컨테이너 실행하기: 도커와 도커컴포즈를 이용한 멀티 컨테이너 관리
- 쿠버네티스에 컨테이너 배포하기: kubectl 사용법, pod, deployment, service 등 기본 리소스 학습
- 외부 접속 설정하기: Cluster IP, NodePort, LoadBalancer, Ingress 서비스 타입 학습, 서비스 디스커버리 학습
- 스케일 아웃 하기: 부하에 따른 컨테이너 개수 조정, 최소 리소스 요청 설정, 오토스케일링
- 그외 고급기능 소개: HELM 패키지 매니저 소개 등
2. 쿠버네티스 알아보기
클라우드 환경에 어울리는 배포 시스템이 쿠버네티스
02. 쿠버네티스 아키텍처
[원하는 상태]
- Desired State
상태 체크 -> 차이점 발견 -> 조치
[구성/ 설계 Architecture]
1) Master 상세
✔️ etcd
- 모든 상태와 데이터를 저장
- 분산 시스템으로 구성하여 안전성을 높임 (고가용성)
- 가볍고 빠르면서 정확하게 설계 (일관성)
- key(directory)-Value 형태로 데이터 저장
- TTL(time to live), watch 같은 부가 기능 제공
- 백업 필수
✔️ kube API server
- 상태를 바꾸거나 조회
- etcd와 유일하게 통신하는 모듈
- REST API 형태로 제공
- 권한을 체크하여 적절한 권한이 없을 경우 요청을 차단
- 관리자 요청 뿐 아니라 다양한 내부 모듈과 통신
- 수평으로 확장되도록 디자인
✔️ Scheduler
- 새로 생성된 Pod을 감지하고 실행할 노드를 선택
- 노드의 현재 상태와 Pod의 요구사항을 체크
✔️ Controller Manager
- 논리적으로 다양한 컨트롤러가 존재
- 끊임 없이 상태를 체크하고 원하는 상태를 유지
- 복잡성을 낮추기 위해 하나의 프로세스로 실행
2) Node 상세
✔️ 컴포넌트 명역할
pod | 컨테이너화된 애플리케이션 그룹 |
kubelet | Node에 할당된 pod의 상태를 체크하고 관리 |
kube-proxy | pod로 연결되는 네트워크를 관리 |
✔️ kubelet
- 각 노드에서 실행
- Pod을 실행/중지하고 상태를 체크
- CRI
✔️ proxy
- 네트워크 프록시와 부하 분산 역할
- 성능상의 이유로 별도의 프록시 프로그램 대신
[Objects]
- Pod: 작은 작은 배포 단위
- 고유한 IP 할당
- 여러개의 컨테이너가 하나의 Pod에 속할 수 있다.
- ReplicaSet: 여러개의 Pod을 관리
- replicas = 3 등 설정할 수 있다.
- Deployment: 배포 버전 관리
- 내부적으로 ReplicaSet을 이용
- Ingress: 도메인 또는 경로별 라우팅
[API 호출]
✔️ YAML
원하는 상태 (desired state)를 다양한 오브젝트 (object)로 정의(spec)하고 API 서버에 yaml 형식으로 전달
📌 Reference
- '초보를 위한 쿠버네티스 안내서'와 '[따배쿠] 쿠버네티스 시리즈' 강의를 토대로 작성하였습니다.
'Cloud > Docker | K8s + CI, CD' 카테고리의 다른 글
컨테이너(Container) 너 좀 멋있다? (0) | 2023.03.03 |
---|---|
[CI/CD] GitHub Actions + AWS Elastic Beanstalk를 활용한 자동화 파이프라인 구축 (정성가득♥️) (2) | 2022.10.02 |
Cloud Computing (0) | 2022.07.12 |
[Docker] Flask로 NLP 모델 서빙하기 (0) | 2022.06.25 |
댓글