์ƒ์œ„ 10๊ฐ€์ง€ Kubernetes ์š”๋ น ๋ฐ ํŒ

์ƒ์œ„ 10๊ฐ€์ง€ Kubernetes ์š”๋ น ๋ฐ ํŒ

์ธํ„ฐ๋„ท์—๋Š” ๋งŽ์€ ์ฐธ๊ณ  ๋ฌธํ—Œ์ด ์žˆ์ง€๋งŒ ๋•Œ๋กœ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์กฐ์–ธ์ด ๊ฐ€์žฅ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ€ Mail.ru์˜ Kubernetes aaS ๋ฒˆ์—ญ XNUMX๊ฐ€์ง€ ํŠธ๋ฆญ๊ณผ ํŒ ์„ ํƒ, ๊ธฐ์‚ฌ ์ž‘์„ฑ์ž๊ฐ€ Kubernetes๋ฅผ XNUMX๋…„ ๋™์•ˆ ์ž‘์—…ํ•œ ํ›„ ์ˆ˜์ง‘ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ํŒ์€ ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ž์‹ ์—๊ฒŒ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ช…๋ น

์šฐ์„ , ์•„๋งˆ๋„ Kubernetes ์ž‘์—…์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ์œ ์šฉํ•œ ์ž‘์—…์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์€ ๋ช…๋ น ์™„์„ฑ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. kubectl Bash ์‰˜์—์„œ:

echo "source <(kubectl completion bash)" >> ~/.bashrc

์ž๋™ ์™„์„ฑ kubectl .bashrc ํŒŒ์ผ์— ๊ธฐ๋ก๋˜๋ฉฐ ์‰˜์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธด ๋ช…๋ น๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. all-namespaces. ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐ์‹œ ๋„์›€๋ง.

๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ CPU ์ œํ•œ

์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž˜๋ชป ์ž‘์„ฑ๋˜๋ฉด ๋งค์ดˆ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ƒˆ ์—ฐ๊ฒฐ์ด ์—ด๋ฆฌ์ง€๋งŒ ๊ฒฐ์ฝ” ๋‹ซํžˆ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฐํฌ ์ค‘์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๋…ธ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Kubernetes์—์„œ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ณ„๋กœ ๊ธฐ๋ณธ ์ œํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ yaml ํŒŒ์ผ์— ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ทธ๋Ÿฌํ•œ ํŒŒ์ผ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

์ด๋Ÿฌํ•œ yaml์„ ์ƒ์„ฑํ•˜๊ณ  ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— limit-example. ์ด์ œ ์ด ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ฐœ๋ณ„ ์ œํ•œ์ด ์ถ”๊ฐ€๋กœ ์„ค์ •๋˜์ง€ ์•Š๋Š” ํ•œ ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฐฐํฌ๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ์ œํ•œ์€ 512Mi์ž…๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์˜ Kubernetes์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘

Kubelet์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. var/lib/๋„์ปค ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„์˜ 90%๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Kubernetes 1.7๊นŒ์ง€๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์šฉ๋˜๋Š” inode ์ˆ˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ œํ•œ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ž ์žฌ์ ์œผ๋กœ ๊ท€ํ•˜์˜ ์ปจํ…Œ์ด๋„ˆ var/lib/๋„์ปค ๋””์Šคํฌ ๊ณต๊ฐ„์˜ 50%๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ inode๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์ž‘์—…์ž์—๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.4์—์„œ 1.6๊นŒ์ง€์˜ ์ด์ „ ๋ฒ„์ „์˜ kubelet์—์„œ๋Š” ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

1.7 ์ด์ƒ ๋ฒ„์ „์—์„œ๋Š” ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” inode ์ œํ•œ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Minikube... ์ž‘์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ๋กœ์ปฌ Kubernetes

Minikube๋Š” ๋กœ์ปฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

minikube start

์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ปดํ“จํ„ฐ์—์„œ ์‹ค์ œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ƒ์œ„ 10๊ฐ€์ง€ Kubernetes ์š”๋ น ๋ฐ ํŒ
์ผ๋Ÿฌ์ŠคํŠธ ์†Œ์Šค

๋น„๊ฒฐ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ณ  ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ ์ง€์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ Docker ์ด๋ฏธ์ง€๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์•„๋‹Œ ์ปดํ“จํ„ฐ์— ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

Docker๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๋กœ์ปฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ํ‘ธ์‹œํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ธฐ ์œ„ํ•ด docker ๋จธ์‹ ์— ๋‹ค์Œ ๋ช…๋ น์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

eval $(minikube docker-env)

์ด์ œ ๋กœ์ปฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ kubectl ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์ง€ ๋งˆ์„ธ์š”

์ด๋Š” ๋‹น์—ฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์—ฌ๋Ÿฌ ํŒ€์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(Kubernetes๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ์ด์œ ) ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. kubectl. ๋ช…๋ น์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ ๋ช…๋ น์— ๊ณ ์œ ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ  RBAC ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ Pod์— ๋Œ€ํ•œ ์•ก์„ธ์Šค, ์ฝ๊ธฐ, ์ƒ์„ฑ, ์‚ญ์ œ ๋ฐ ๊ธฐํƒ€ ์ž‘์—…์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ• ๋‹นํ•˜๋ฉด ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋น„๋ฐ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜์—ฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๊ณผ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์„ ๊ตฌ๋ณ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฌ๋“œ ์˜ˆ์‚ฐ ๊ด€๋ฆฌ

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? PodDisruptionBudget ๋ฐ ๋‹ค์‹œ PodDisruptionBudget.

ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋…ธ๋“œ๋Š” ๋น„์›Œ์ง‘๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€๋งŒํžˆ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ํ˜„์‹ค์ž…๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์ธ ๋ชจ๋“  ๋ฐฐํฌ์—๋Š” PDB(PodDisruptionBudget)๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉ๋˜๋Š” ๊ฐ„๋‹จํ•œ yaml ํŒŒ์ผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • PDB์˜ ์ ์šฉ ๋ฒ”์œ„๋Š” ๋ ˆ์ด๋ธ” ์„ ํƒ๊ธฐ์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  : PDB ์˜ˆ์‚ฐ์€ ์˜ˆ์‚ฐ ์œ„๋ฐ˜์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค(์ž๋ฐœ์  ๋ฐฉํ•ด). ํ•˜๋“œ์›จ์–ด ์˜ค๋ฅ˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š” PDB๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. matchLabels ะธ minAvailable. ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์˜ˆ์‚ฐ์ด ์ ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ๋ฐฐํฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ app: app-a ะธ app: app-b์ด๋ฉด ์ด PDB๋Š” ์ฒซ ๋ฒˆ์งธ PDB์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ ๋ณ€์ˆ˜ minAvailable ๋…ธ๋“œ๋ฅผ ๋น„์šธ(์ฒญ์†Œ) ๋•Œ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์˜ˆ์—์„œ๋Š” ๋น„์šฐ๋Š” ๋™์•ˆ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. app: app-a, ๋‘ ๊ฐœ๋งŒ ์ œ์™ธํ•˜๊ณ .

์ด๋ฅผ ํ†ตํ•ด ํŠน์ • ์‹œ๊ฐ„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง

์ด๋Ÿฌํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ์ค€๋น„ ๋˜๋Š” ํ™œ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ”„๋กœ๋ธŒ(์ค€๋น„ ์ƒํƒœ)๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ˆ˜์‹ ํ•  ์ปจํ…Œ์ด๋„ˆ์˜ ์ค€๋น„ ์ƒํƒœ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ(ํ™œ์„ฑ)๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ธ์ง€ ๋˜๋Š” ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ด€๋ จ ๊ตฌ์„ฑ์€ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด yaml์— ๊ฐ„๋‹จํžˆ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ, ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐ ์žฌ์‹œ๋„ ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ ๋ณด๊ธฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฌธ์„œ.

ํƒœ๊ทธ๋Š” ์–ด๋””์—๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋ผ๋ฒจ์€ Kubernetes์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ์ฒด๋Š” ์„œ๋กœ ์ž์œ ๋กญ๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ ˆ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ์ด๋™ํ•˜์—ฌ ํŠน์ • ํƒœ๊ทธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ข‹์€ ์˜ˆ๋Š” ๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. dev ะธ qa. ์ฆ‰, ์‹ ์ฒญ์„œ๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. app-a, ๋‘ ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์— ์ž‘์—… qa ะธ dev. ์ด ๊ฒฝ์šฐ ์ ์ ˆํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŠน์ • ํ™˜๊ฒฝ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค์— ๋ณ„๋„๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. environment. ์˜ˆ๋ฅผ ๋“ค์–ด, app: app-a ะธ environment: dev ํ•˜๋‚˜์˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด app: app-a ะธ environment: qa ๋‘ ๋ฒˆ์งธ๋กœ.

์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‘ ์ธ์Šคํ„ด์Šค์— ๋ชจ๋‘ ์•ก์„ธ์Šคํ•˜์—ฌ ๋™์‹œ์— ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ์งํ•˜๋‹ค

Kubernetes๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์‹œ์Šคํ…œ์ด์ง€๋งŒ ๋ชจ๋“  ์‹œ์Šคํ…œ์€ ๊ฒฐ๊ตญ ๋„ˆ๋ฌด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋กœ ์ธํ•ด ์ •์ฒด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubelet์€ ์ž์ฒด ํ”„๋กœ์„ธ์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์™€ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ํ•˜๋‚˜์˜ ๊ณ ์•„ ์„œ๋น„์Šค๋กœ ์ธํ•ด ์‹œ์Šคํ…œ ์†๋„๊ฐ€ ๋Š๋ ค์ง€์ง€๋Š” ์•Š์œผ๋ฉฐ Kubernetes๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ํ™•์žฅ๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ๋Œ€์‹  ๋ฐฑ๋งŒ ๊ฐœ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด kubelet์ด ์งˆ์‹ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์œ ๋กœ ๋ฐฐํฌ(์ปจํ…Œ์ด๋„ˆ, ์ด๋ฏธ์ง€ ๋“ฑ)๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ์ „์ฒด ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ๋‚˜๋ณด์„ธ์š”

๋งˆ์ง€๋ง‰์œผ๋กœ ์ฃผ์š” ์กฐ์–ธ์„ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. Go ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ฐฐ์›Œ๋ณด์„ธ์š”.

Kubernetes๋Š” Go๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ๋ชจ๋“  ํ™•์žฅ ๊ธฐ๋Šฅ์€ Go๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, client-go ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•˜๊ณ  ํฅ๋ฏธ๋กœ์šด ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kubernetes ์‹œ์Šคํ…œ์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž์ฒด ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Go ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ๊ณ  ํด๋ผ์ด์–ธํŠธ Go๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ์ƒˆ๋กœ์šด Kubernetes ์‚ฌ์šฉ์ž์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์กฐ์–ธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Mail.ru ํด๋ผ์šฐ๋“œ ์†”๋ฃจ์…˜์˜ ์ง€์›์œผ๋กœ ๋ฒˆ์—ญ๋จ

๋˜ ๋ฌด์—‡์„ ์ฝ์–ด์•ผ ํ• ๊นŒ์š”?:

  1. Kubernetes์˜ ์„ธ ๊ฐ€์ง€ ์ˆ˜์ค€์˜ ์ž๋™ ํ™•์žฅ ๋ฐ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•.
  2. Kubernetes ์ž‘์—…์ž ๋…ธ๋“œ: ์ž‘์€ ๋…ธ๋“œ๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ํฐ ๋…ธ๋“œ๊ฐ€ ์ ์Œ?
  3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ 25๊ฐ€์ง€ ์œ ์šฉํ•œ ๋„๊ตฌ.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€