Terraform
설치 SCRIPT를 제공해주어 Module들을 사용할 수 있도록 지원
- IAC 표준 , Cloud 업체에서 관리해서 사용 할 수 있도록 잘 되어 있다.
- User는 Script의 module name , version 만 설정하면 구축 가능
AWS_EKS
Amazon Elastic Kubernetes Service(Amazon EKS)는 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스
- 제어 플레인 또는 노드를 설치, 작동 및 유지 관리할 필요 X
- Kubernetes는 컨테이너화된 애플리케이션의 배포, 조정 및 관리 자동화를 위한 오픈 소스 시스템
K8S ( Kubernetes )
Docker의 Container의 개념을 사용
- 하나의 Server에서 여러 App 구축
→ VM을 이용한 APP 구축 ( 서버마다 동일한 환경 설정 , 같은 서버내 다른 APP 설치로 장애 발생 )
→ Container를 이용한 App 구축 순서로 발전 ( 서버에 동일한 환경 FIX하여 setting )
컨테이너 오케스트레이션 시스템
문제점 : 서버의 환경은 통일하게 되었지만, 배포 서비스 시 별도 설정이 필요
→ 이를 해결하기 위하여 나타남( Google )
- 선언적 Update를 지원 = 서버가 죽더라도 알아서 N개를 띄우라고 설정하면 복구가 되는한 계속 실행
Container Deployement
1. Pod
쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위
- 1개 이상의 컨테이너가 뜨는 가장 작은 단위
- 여러 컨테이너 사용 시 Stroage 및 Network는 공유하여 사용
- 1Pod = 2Continaer
2. Deployment / Replicaset
Controller로써, Pod 와 Replicaset에 대한 선언적 업데이트를 제공한다.
- Pod를 관리하는 Controller ( Rolling Update / Recreate )
- Rolling Update시 새로운 Version의 Pod가 생기고 나서야 기존에 Pod를 죽인다.
- 가장 일반적인 배포 방법
3. Statefulset
Deployment 및 scailing 관리 / Pod들의 순서 및 고유성 보장
- Delpoyment와 차이점?
→ 파드는 이름이 고정되어 있고, 처음 구동된 노드(VM or 물리머신)에서만 동작한다
- 고유성이 필요한 이유?
→ HA 구성 필요성 ( Master , Slave ) / Pod 자체가 1개씩 동작되도록 필요성
4. Daemonset
Auto healing = pod에 문제가 생기거나 pod가 실행되고 있는 node에 문제가 생기면 해당 pod를 다시 실행
- 모니터링 , 로그 수집 , Cotrol 을 위한 pod 수행
5. JOB & CRONJOB
- 실행 후 종료가 되는 POD 를 띄우는 목적E.g ) 모델 학습 파이프라인 / 사용자 메일 발송
- 주기적 실행
- 외부 Trigger 사용 ( API 이용 )
Container Service
1. Service
파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
- Loadbalance 개념
- Pod가 죽고 살아나도 쿠버네티스 내부 고정 IP 제공
- Pod를 어떻게 알고 선택하는가?→ Label을 통해 파드 선택 레이블과 셀렉터
- 파드가 서비스 투입 가능 상태 확인 후 서비스의 노출 파드로 투입→ 파드의 모든 컨테이너가 정상적인 Runnig 상태Configure Liveness, Readiness and Startup Probes | Kubernetes
- → Pod의 Status가 Ready 상태일때 정상 ( 파드의 Probe 조건이 모두 정상 )
2. Ingress
클러스터 내부 서비스 대한 외부 접근 관리
- 서비스를 직접 LoadBalance 를 사용
- 인그레스는 서비스를 외부에 제공하며 부가 기능을 제공 할수 있다 ( proxy load balance )
- 대표적인 인그레스 컨트롤러 ( nginx ingress controller / AWS Load Balance Controller )
- 인그레스 무중단 배포 주의
구성 및 저장소
1. ConfigMap / Secret
Key - Value 형태로 Value를 변경하여 보여주려면 Secret
- 암호화는 별도로 추가로 해야한다.
2. PV
생명 주기 이외에도 저장하기 위하여 Pod 에 마운트한다.
- Pod는 생명 주기 이후에 network , volume이 사라진다. ( 초기화 )
Architecture
Component
Control Plance Component
Cluster 스케쥴 , detect , active
Kube-apiservier
Control plance front-end
Etcd
DB의 역할로 Key-value ( Nosql 과 유사한듯 )
kube-scheduler
Node가 배정되지 않는 Pod들을 Detect / 실행 할 노드를 선택
kube-controller-manager
Control-process를 실행하는 컨트롤 플레인 컴포넌트
cloud-controller-manager
WORKER NODE = Containter 화 된 APP을 실행
POD는 기본 구성 단위로, 클러스터에서 실행 중인 컨테이너 집합이라고 한다.
Node Component
Kubelet
Node에서 실행되는 Agent로써, Pod 에서 컨테이너가 동작하도록 확실히 해준다.
Kube-proxy
네트워크 개념을 붙인거라 생각하면 된다. ( IP 주소 서비스 관련 )
Container runtime
컨테이너 실행 담당 ( Docker ,containerd .. )