๐ Docker ์ ๋ฆฌ
1. Docker ๊ด๋ จ ์ฉ์ด
- Dcoekr Image
-> ๊ฒฝ๋ํ ๋์ด์๊ณ ๊ฐํธํ๊ฒ ๋ถ๋ฆฌ๋ ํ๊ฒฝ์์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ ๊ฐ์ก๋ค.
- Dockerfile : SW์ ์ธํ
ํ์ผ
- Docker Container
- Docker Hub(hub.docker.com)
- Docker Compose
- ๋ค์์ Docker Container๋ค์ ๊ด๋ฆฌ
- docker-compose.yml
- Service
- Networks
- Volumes: host/anonymous/named volumes
2. Docker๋ฅผ ์ค์ Production ํ๊ฒฝ์์ ์ฌ์ฉํ ๋ ์ ๋
ํ ์
- Docker volumes
- Host volume์ ๋ณดํต ๊ฐ๋ฐ์ ์์ค์ฝ๋๋ฅผ ๋ฐ๋ก container์์ผ๋ก ๋ง์ดํธํ๊ธฐ ์ํจ์ด๋ค.
- Production์์๋ named volumes๋ฅผ ์จ์ผํ๋ค.
- Docker container๋ read-only๋ก ์ฌ์ฉํ๋ค.
- ๋ด์ฉ์ ๋ฐ๊ฟ์ผํ๋ค๋ฉด ์คํ ์ค์ธ ์ปจํ
์ด๋๋ฅผ ์์ ํ๋ฉด ์๋๋ค.
- ํญ์ ์ด๋ฏธ์ง๋ฅผ ์๋ก ๋น๋ํ๊ณ ๋ค์ ์ปจํ
์ด๋๋ค์ ์๋ก Launchํด์ผํ๋ค.
- ์๋ํ๊ฐ ์ค์ํด์ก๋ค. : CI/CD ํ๋ก์ธ์ค
- ๋ค์์ Docker Container๋ค์ ๋ค์์ Host๋ค์์ ์คํ์ด ํ์ํ๋ค.
- ์ฉ๋ ๋ฌธ์ ์ Fail-over(๋๋ fail-tolerant)
3. Docker๋ฅผ ๊ฐ์ธ ์์ฐ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด์ ์ฌ์ฉ
- ๊ฐ๋ฐ์ ํ์ํ ๋ชจ๋์ Docker Image๋ก ๋ฐ์์์ Container๋ก ์คํ
- ์ฌ๋ฌ SW๋ฅผ ์ฐ๋ํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ์ด ๊ฒ๋ค์ docker-compose๋ก ์ค์
- ์ฅ์
- ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก SW์ค์น(๋ฌธ์ํํ๊ณ ๋งค๋ด์ผํ๊ฒ ์ค์น ๋ถํ์)
- ๋ถ๋ฆฌ๋ ์ถฉ๋์๋ ํ๊ฒฝ์์ SW์ค์น/์คํ
๐ ์๋ฒ ๊ด๋ฆฌ์ ์ด๋ ค์
ํด๊ฒฐ๋ฐฉ์
1. ๋ฌธ์ํ
- ์ง๊ธ ์๋น์ค ์ํฉ๊ณผ ์
์
๋ฐฉ๋ฒ ๋ฌธ์ํ
- ๋ค์ํ ๋ฌธ์ ๋ฐ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ ๋ฌธ์ํ
- ๋ฌธ์๋ฅผ ํ์ฌ ์ํฉ์ ๋ง๊ฒ ์
๋ฐ์ดํธํ๋ ๊ฒ์ ์์ฒญ๋ ๋
ธ๋ ฅ์ด๋ค.
- ๋ํ ์ํฉ์ ๋ฐ๋ผ ์๋ฏธ๊ฐ ์๋ ๊ฒฝ์ ๋ ๋ง๋ค.
- ๋ ๋ช๋ฐฑ๋์ ์๋ฒ๋ฅผ ์ผ์ผํ ๊ด๋ฆฌํ๊ณ ๋ช
๋ น์ ์คํํ๋ค๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค.
2. ์ฝ๋๋ก ๊ด๋ฆฌ
- Infrastructure As Code : DevOps ์์ง๋์ด๊ฐ ๊ผญ ์์์ผํ๋ ๊ธฐ์
- ๋ฌธ์๋ณด๋ค๋ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ค.
- ๋ํํ ๋ช
๋ น๋ณด๋ค๋ ์๋ํ๋ ์คํฌ๋ฆฝํธ๋ก ํด๊ฒฐํ๋ค.
- ๋ค์์ ์๋ฒ๋ค์ ๋ช
๋ น์ ๋์ ์คํํด์ค๋ค.
- ๋ค์ํ ํด๋ค์ด ์์์ ธ ๋์จ๋ค.
- Chef
- Puppet
- Ansible
- Terraform
- ...
- ๋จ์
- Learning curve๊ฐ ๋๋ค.
- ์ค์น์ SW ์ถฉ๋ ๋ฌธ์ ์๋ ํฌ๊ฒ ๋์๋์ง ์๋๋ค.
3. VM ๋์
- SW ์ถฉ๋ ํด๊ฒฐ์ ์ํด VM์ ์ฌ์ฉ
- ํ Physical Server์ ๋ค์์ VM์ ์ฌ๋ฆฌ๊ณ ์๋น์ค๋ณ๋ก VM์ํ๋์ฉ ํ ๋น
- ๋จ์
- VM์ด ์ ๋ฐ์ ์ผ๋ก ๋ฆฌ์์ค ์๋น๊ฐ ํฌ๊ณ ๋๋ฆฌ๋ค.
- ๊ฒฐ์ ์ ์ผ๋ก ํน์ VM ๋ฒค๋ ํน์ ํด๋ผ์ฐ๋์๊ฒ ์ข
์๋์ด ๋ฒ๋ฆฐ๋ค.(Lock-in)
4. Docker์ ๋์
- ๋ชจ๋ SW๋ฅผ Docker Image๋ก ๋ง๋ค๋ฉด ๊ฐํธํ๊ฒ ์ด๋์๋ ๋์ ๊ฐ๋ฅํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ฆฌ๋
์ค ํ๊ฒฝ์ ์ต์ ํ ๋์ด์๋ค.
- VM์๋นํด ๋ฆฌ์์ค ๋ญ๋น๋ ์ ๊ณ ์คํ ์๊ฐ๋ ๋น ๋ฅด๋ค.
- ์คํ์์ค์ด๊ธฐ ๋๋ฌธ์ ํด๋ผ์ฐ๋๋ ํน์ ์
์ฒด Lock-in ์ด์๋ ์๋ค.
- ๋จ์ ์ ์ ๋ค.
- Docker Container์ ์๊ฐ ๋์ด๋๋ฉด ๊ด๋ฆฌ๊ฐ ์ด๋ ต๋ค.
์ ๋ฆฌ
1. Docker์ ์ฅ์
- Container ์์ฑ์ด ์ฝ๊ณ ๋น ๋ฅด๋ค.(VM๊ณผ ๋น๊ตํ์๋)
- Image๋ฅผ ํตํด ๋ฒ์ ๊ด๋ฆฌ, ๋ฐฐํฌํ๋ฉฐ ๋ฌธ์ ๋ฐ์์ ๋กค๋ฐฑ์ด ์ฉ์ดํ๋ค.
- ์ฌ์ฉ ์ธ์ด๋ฑ์ ํ๊ฒฝ์ ๋ฐ๋ฅธ ๊ด๋ฆฌ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค.
- ๊ฐ๋ฐ, ๋น๋, ๋ฑ๋ก, ์คํ ์ ์ฐจ๊ฐ์ผ๊ด๋๊ฒ ๋ง๋ค์ด์ก๋ค.(Dev, Test, Production)
- ์คํ ์์ค์ด๊ธฐ ๋๋ฌธ์ ํน์ ํด๋ผ์ฐ๋ ๋ฒค๋๋์
์ฒด์ ๋
๋ฆฝ์ ์ด๋ค.
2. Docker๋ ์๋น์ค ๋ฐฐํฌ์ ๊ธฐ๋ณธ์ด ๋์๋ค.
- ๋ง์ DevOps ์์ง๋์ด๋ค์ ๋ชจ๋ ์๋น์ค๋ฅผ Docker Image๋ก ๋ง๋ค์ด ์ด์ํ๋ค.
- ๋น๋ ํ๋ก์ธ์ค ์ถ๋ ฅ๋ฌผ์ Docker Image๊ฐ ๋๊ณ ์๋ค.
- Github์์ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋ณด๋ฉด docker image๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ๋ด๋ถ Registry์ ๋ฑ๋กํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
- ๋ค์์ Docker Image๋ค์ ๋ ๋ง์ ์์ Docker Container๋ก ์คํ/๊ด๋ฆฌ ํ๋๊ฒ์ด ํ์ํด์ก๋ค.
- ๋ชจ๋ ๊ฒ์ ์ปจํ
์ด๋ํ -> Containerization
๐ Container Orchestration
- Container Orchestration : ๋ค์์ Container๋ค์ ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
-> DevOps ํ์ ๋ถํ์ํ ์์
๋ค์ ์ค์ด๋ ๊ฒ์ด๋ค.
1. Container Orchestration ๊ธฐ๋ฅ - ์์ฝ
- ํ ํด๋ฌ์คํฐ ์์ ๋ค์ํ ์๋น์ค๋ค์ด ๊ณต์กด DB, Web Service, Backend. ...
- ์์ ์์ฒญ์ ๋ฐ์ ๋ง์คํฐ๊ฐ ์์์ ํ ๋นํ๋ค.
- ๋ค์ํ ๊ธฐ๋ฅ ์ ๊ณต : ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ๋คํธ์ํฌ, ์ธ์ฌ์ดํธ ๋ฑ๋ฑ
2. Container Orchestration ๊ธฐ๋ฅ - SW ๋ฐฐํฌ
3. Container Orchestration ๊ธฐ๋ฅ - ์ค์ผ์ผ๋ง
- ํน์ ์๋น์ค์ Container ์๋ฅผ ์ฝ๊ฒ ๋๋ฆฌ๊ณ ์ค์ด๋ ๊ฒ
- ์ด๋ ์๋ฒ์ Utilization๋ ๊ณ ๋ คํด์ผํ๋ค.
4. Container Orchestration ๊ธฐ๋ฅ - ๋คํธ์ํฌ
- ์๋น์ค๊ฐ ๋ค์์ ์ปจํ
์ด๋๋ก ๋๋ ์ง๋ฉด์ ์ด๋ค์ ๋ํํ๋ Load Balancer๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋ค.
- ์๋น์ค๋ค๊ฐ์ ์๋ก๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ด์ผํ๋ค.
- ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ
5. Container Orchestration ๊ธฐ๋ฅ - ์ธ์ฌ์ดํธ
- ๋
ธ๋/์ปจํ
์ด๋ ๋ฌธ์ ์ ํด๊ฒฐ
- ์๋ฒ 2์ F๊ฐ ๋ค์ด๋๋ฉด ์ด๋ฅผ ์๋ฒ 3์ ์ฌ์คํ
- F ๋ก๋๋ฐธ๋ฐ์ ์ ๋ณด๋ ๋ง๊ฒ ์์
- Logging/Analytics ๋ฑ๋ฑ์ ๊ธฐ๋ฅ ์ ๊ณต
- ์ธ๋ถ ์๋น์ค plug and play
- ์ ์ฒด ์๋น์ค ๋ถ์
- Mesos
- Marathon
- DEIS
- Rancher
- Nomad
- Docker Swarm
- K8s(Kubernetes)
๐ K8s
์ปจํ
์ด๋ ๊ธฐ๋ฐ ์๋น์ค ๋ฐฐํฌ/์ค์ผ์ผ/๊ด๋ฆฌ ์๋ํ๋ฅผํด์ฃผ๋ ์คํ์์ค ํ๋ ์์ํฌ
- ๊ตฌ๊ธ์์ ์ฌ์ฉํ๋ Borg ์๋น์ค๋ฅผ ์คํ์์คํํ ๊ฒ์ด๋ค (2015๋
)
- ํด๋ผ์ฐ๋๋ on-prem ๋ชจ๋์์ ์ ๋์ํ๋ค.
- ์ด๋ ์ปจํ
์ด๋์ด๋ ๊ฐ๋ฅํ์ง๋ง ์ฃผ๋ก Docker Container๋ค์ด ๋์์ด ๋๋ค.
- ๋ฌผ๋ฆฌ์๋ฒ๋ ๊ฐ์์๋ฒ ์์์ ๋ชจ๋ ๋์ํ๋ค.
- ์ง๊ธ์ Cloud Native Computing Foundation์ด๋ผ๋ ๋น์๋ฆฌ ๋จ์ฒด์์ ์ด์ํ๋ค.
- ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์ด๋ป๊ฒ SW๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ํจ์จ์ ์ผ๊น?
- ์ปจํ
์ด๋, ์๋น์ค๋ฉ์, ๋ง์ดํฌ๋ก์๋น์ค, API, DevOps, On-demand Infra
๊ฐ์ฅ๋ง์ด ์ฌ์ฉ๋๋ ์ปจํ
์ด๋ ๊ด๋ฆฌ (Orchestration) System
- ์ฌ์ฉํ์ฌ์ ์ปค๋ฎค๋ํฐ ํ๋์ด ๊ต์ฅํ ๋ง๊ณ ํ๋ฐํ๋ค.
- ์นด์นด์ค, ๋ค์ด๋ฒ, ๋ผ์ธ, ์ฟ ํก ๋ฑ์ ๊ตญ๋ด ์
์ฒด๋ ํ๋ฐํ ์ฌ์ฉํ๋ค.
- K8s์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ Container Orchestration ํด๋ค์ด ์๊ฒจ๋ฌ๋ค.
- ๋ชจ๋ ๊ธ๋ก๋ฒํด๋ผ์ฐ๋ ์
์ฒด๋ค์ด ์ง์ํ๋ค. : EKS, AKS, GKE
ํ์ฅ์ฑ์ด ์ข์์ ๋ค์ํ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ค.
- ML : Kubeflow
- CI/CD : Tekton
- Service Mesh : Istio
- Serverless : Kubeless
๋ค์์ ์๋ฒ์ ์ปจํ
์ด๋ ๊ธฐ๋ฐํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ๊ด๋ฆฌํ๋ค.
- ์ปจํ
์ด๋ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋จ == Docker Container
- ๋ณดํต Docker์ K8s๋ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
- Pod : ๊ฐ์ ๋์คํฌ์ ๋คํธ์ํฌ๋ฅผ ๊ณต์ ํ๋ 1+ ์ปจํ
์ด๋๋ค์ ์งํฉ
๐ K8s ์ํคํ
์ฒ
1. ๊ธฐ๋ณธ ๊ตฌ์กฐ : ๋ง์คํฐ - ๋
ธ๋
- ๋
ธ๋๋ ๋ฌผ๋ฆฌ์๋ฒ์ด๊ฑฐ๋ ๊ฐ์ ์๋ฒ์ด๋ค.
- ํด๋ฌ์คํฐ๋ 1+ ๋
ธ๋์ ์งํฉ์ด๋ค.
- ๋ง์คํฐ๋ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ์ญํ ์ ์ํํ๋ค.
- Kubelet : ๋ง์คํฐ์ ํต์ ํ๋ ์์ด์ ํธ
2. ๊ธฐ๋ณธ ๊ตฌ์กฐ : K8s ํ๋ก์ธ์ค
- Master ์์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ๋๊ณ ์๋ค.
- API Server(Container๋ก ๋์) : kube-apiserver
- Entrypoint of K8s cluster
- Web UI, CLI(kubectl), API
- Scheduler
- Pods ์์ฑ๊ณผ ํ ๋น(๋
ธ๋๋ค์ ์ํฉ์ ๊ณ ๋ ค - Utilization)
- Controller Manager
- ์ ์ฒด ์ํฉ์ ๋ชจ๋ํฐ๋งํ๊ณ fault tolerance ๋ณด์ฅ
- Master๋ High Availability๊ฐ ์ค์ํ๋ค.
- etcd
- K8s ํ๊ฒฝ ์ค์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ key/value ์คํ ์ด๋ก ๋ฐฑ์
๋๋ค.
- Controller runtime
- ๋๋ถ๋ถ Docker๊ฐ ์ฌ์ฉ๋๋ค.
3. Kubectl : ์ปค๋งจ๋๋ผ์ธ ํด
- kubectl run hello-minikube
- kubectl cluster-info
- kubectl get node
4. Pod๋?
- ๋ค์ ํ๋ฒ K8s ์ฌ์ฉ์ ์ปจํ
์ด๋๋ฅผ ๋ฐ๋ก ๋ค๋ฃจ์ง ์๋๋ค.
- Pod : K8s ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์์ ๋น๋ฉ ๋ธ๋ก
- 1 Pod : ๋ณดํต์ ํ๋์ Container๋ก ๊ตฌ์ฑ
- ํ๋๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ์๋ ๋ณดํต helper container๊ฐ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
- ๊ฐ์ pod ์์์๋ ๋์คํฌ์ ๋คํธ์ํฌ๊ฐ ๊ณต์ ๋๋ค.
- Fail-over๋ฅผ ์ํด์ replicas๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
- ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ณต์ ๋ณธ์ ์ ์งํ๋ค.
- Pod๋ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ๊ฐ๋ self-contained server
5. Yaml ํ๊ฒฝ ์ค์ ์์
apiVersion: apps/v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
6. Pod ์์ฑ ์์
- kubectl create -f pod-definition.yml
- kubectl get pods
- kubectl describe pod nginx
- kubectl run nginx --image nginx