์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ ์ดํ•ดํ•˜๊ธฐ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API์—์„œ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„๋˜๊ณ , ๊ทธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ .yaml ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ ์ดํ•ดํ•˜๊ธฐ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์Šคํ…œ์—์„œ ์˜์†์„ฑ์„ ๊ฐ€์ง€๋Š” ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์ด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ด์šฉํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด, ๋‹ค์Œ๊ฐ™์ด ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ ์ค‘์ธ์ง€ (๊ทธ๋ฆฌ๊ณ  ์–ด๋А ๋…ธ๋“œ์—์„œ ๋™์ž‘ ์ค‘์ธ์ง€)
  • ๊ทธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค
  • ๊ทธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ์žฌ๊ตฌ๋™ ์ •์ฑ…, ์—…๊ทธ๋ ˆ์ด๋“œ, ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ณ ์žฅ์„ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์— ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •์ฑ…

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

์ƒ์„ฑ์ด๋“ , ์ˆ˜์ •์ด๋“ , ๋˜๋Š” ์‚ญ์ œ๋“  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋™์ž‘์‹œํ‚ค๋ ค๋ฉด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, kubectl ์ปค๋งจ๋“œ-๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ, CLI๋Š” ์—ฌ๋Ÿฌ๋ถ„ ๋Œ€์‹  ํ•„์š”ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋ฅผ ํ˜ธ์ถœํ•ด ์ค€๋‹ค. ๋˜ํ•œ, ์—ฌ๋Ÿฌ๋ถ„์€ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋ฅผ ์ง์ ‘ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์˜ค๋ธŒ์ ํŠธ ๋ช…์„ธ(spec)์™€ ์ƒํƒœ(status)

๊ฑฐ์˜ ๋ชจ๋“  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ๊ตฌ์„ฑ์„ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ๋‘ ๊ฐœ์˜ ์ค‘์ฒฉ๋œ ์˜ค๋ธŒ์ ํŠธ ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š”๋ฐ ์˜ค๋ธŒ์ ํŠธ spec ๊ณผ ์˜ค๋ธŒ์ ํŠธ status ์ด๋‹ค. spec์„ ๊ฐ€์ง„ ์˜ค๋ธŒ์ ํŠธ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฆฌ์†Œ์Šค์— ์›ํ•˜๋Š” ํŠน์ง•(์˜๋„ํ•œ ์ƒํƒœ)์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ด์„œ ์„ค์ •ํ•œ๋‹ค.

status ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์Šคํ…œ๊ณผ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ•ด ์ œ๊ณต๋˜๊ณ  ์—…๋ฐ์ดํŠธ๋œ ์˜ค๋ธŒ์ ํŠธ์˜ ํ˜„์žฌ ์ƒํƒœ ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์€ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ์˜ ์‹ค์ œ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•œ ์ƒํƒœ์™€ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋Š์ž„์—†์ด ๊ทธ๋ฆฌ๊ณ  ๋Šฅ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋™์ž‘ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ‘œํ˜„ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ๋””ํ”Œ๋กœ์ด๋จผํŠธ spec์— 3๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ ๋™์ž‘๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์Šคํ…œ์€ ๊ทธ ๋””ํ”Œ๋กœ์ด๋จผํŠธ spec์„ ์ฝ์–ด spec์— ์ผ์น˜๋˜๋„๋ก ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ 3๊ฐœ์˜ ์˜๋„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ๋™์‹œํ‚จ๋‹ค. ๋งŒ์•ฝ, ๊ทธ ์ธ์Šคํ„ด์Šค๋“ค ์ค‘ ์–ด๋А ํ•˜๋‚˜๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ฉˆ์ถ˜๋‹ค๋ฉด(์ƒํƒœ ๋ณ€ํ™” ๋ฐœ์ƒ), ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์Šคํ…œ์€ ๋ณด์ •(์ด ๊ฒฝ์šฐ์—๋Š” ๋Œ€์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ)์„ ํ†ตํ•ด spec๊ณผ status๊ฐ„์˜ ์ฐจ์ด์— ๋Œ€์‘ํ•œ๋‹ค.

์˜ค๋ธŒ์ ํŠธ ๋ช…์„ธ, ์ƒํƒœ, ๊ทธ๋ฆฌ๊ณ  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋Š”, Kubernetes API Conventions ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ ๊ธฐ์ˆ ํ•˜๊ธฐ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, (์ด๋ฆ„๊ณผ ๊ฐ™์€)์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ •๋ณด์™€ ๋”๋ถˆ์–ด, ์˜๋„ํ•œ ์ƒํƒœ๋ฅผ ๊ธฐ์ˆ ํ•œ ์˜ค๋ธŒ์ ํŠธ spec์„ ์ œ์‹œํ•ด ์ค˜์•ผ๋งŒ ํ•œ๋‹ค. ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด (์ง์ ‘์ด๋“  ๋˜๋Š” kubectl์„ ํ†ตํ•ด์„œ๋“ ) ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋ฅผ ์ด์šฉํ•  ๋•Œ, API ์š”์ฒญ์€ ์š”์ฒญ ๋‚ด์šฉ ์•ˆ์— JSON ํ˜•์‹์œผ๋กœ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œ์ผœ ์ค˜์•ผ๋งŒ ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ •๋ณด๋ฅผ .yaml ํŒŒ์ผ๋กœ kubectl์— ์ œ๊ณตํ•œ๋‹ค. kubectl์€ API ์š”์ฒญ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ, JSON ํ˜•์‹์œผ๋กœ ์ •๋ณด๋ฅผ ๋ณ€ํ™˜์‹œ์ผœ ์ค€๋‹ค.

์—ฌ๊ธฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์œ„ํ•œ ํ•„์ˆ˜ ํ•„๋“œ์™€ ์˜ค๋ธŒ์ ํŠธ spec์„ ๋ณด์—ฌ์ฃผ๋Š” .yaml ํŒŒ์ผ ์˜ˆ์‹œ๊ฐ€ ์žˆ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

์œ„ ์˜ˆ์‹œ์™€ ๊ฐ™์ด .yaml ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ ๋ฐฉ์‹์œผ๋กœ๋Š” kubectl ์ปค๋งจ๋“œ-๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค์— ์ธ์ž๊ฐ’์œผ๋กœ .yaml ํŒŒ์ผ์„ ๊ฑด๋„ค kubectl apply ์ปค๋งจ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์™€ ๊ฐ™๋‹ค.

kubectl apply -f https://k8s.io/examples/application/deployment.yaml

๊ทธ ์ถœ๋ ฅ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

deployment.apps/nginx-deployment created

์š”๊ตฌ๋˜๋Š” ํ•„๋“œ

์ƒ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ .yaml ํŒŒ์ผ ๋‚ด, ๋‹ค์Œ ํ•„๋“œ๋ฅผ ์œ„ํ•œ ๊ฐ’๋“ค์„ ์„ค์ •ํ•ด ์ค˜์•ผํ•œ๋‹ค.

  • apiVersion - ์ด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ๋ฒ„์ „์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€
  • kind - ์–ด๋–ค ์ข…๋ฅ˜์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š”์ง€
  • metadata - ์ด๋ฆ„ ๋ฌธ์ž์—ด, UID, ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ์ ์ธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ถ„์ง€์–ด ์ค„ ๋ฐ์ดํ„ฐ
  • spec - ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์–ด๋–ค ์ƒํƒœ๋ฅผ ์˜๋„ํ•˜๋Š”์ง€

์˜ค๋ธŒ์ ํŠธ spec์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ํฌ๋งท์€ ๋ชจ๋“  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ๋งˆ๋‹ค ๋‹ค๋ฅด๊ณ , ๊ทธ ์˜ค๋ธŒ์ ํŠธ ํŠน์œ ์˜ ์ค‘์ฒฉ๋œ ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ๋ ˆํผ๋Ÿฐ์Šค ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  spec ํฌ๋งท์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ๋“œ API ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ณด๋ ค๋ฉด spec ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ๊ฐ ํŒŒ๋“œ์— ๋Œ€ํ•ด, .spec ํ•„๋“œ๋Š” ํŒŒ๋“œ ๋ฐ ํŒŒ๋“œ์˜ ์›ํ•˜๋Š” ์ƒํƒœ(desired state)๋ฅผ ๊ธฐ์ˆ ํ•œ๋‹ค(์˜ˆ: ํŒŒ๋“œ์˜ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€). ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ธ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋Š” ์Šคํ…Œ์ดํŠธํ’€์…‹ API์˜ spec ํ•„๋“œ์ด๋‹ค. ์Šคํ…Œ์ดํŠธํ’€์…‹์˜ ๊ฒฝ์šฐ, .spec ํ•„๋“œ๋Š” ์Šคํ…Œ์ดํŠธํ’€์…‹ ๋ฐ ์Šคํ…Œ์ดํŠธํ’€์…‹์˜ ์›ํ•˜๋Š” ์ƒํƒœ(desired state)๋ฅผ ๊ธฐ์ˆ ํ•œ๋‹ค. ์Šคํ…Œ์ดํŠธํ’€์…‹์˜ .spec์—๋Š” ํŒŒ๋“œ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ํ…œํ”Œ๋ฆฟ์ด ์กด์žฌํ•œ๋‹ค. ์ด ํ…œํ”Œ๋ฆฟ์€ ์Šคํ…Œ์ดํŠธํ’€์…‹ ๋ช…์„ธ๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์Šคํ…Œ์ดํŠธํ’€์…‹ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•  ํŒŒ๋“œ์— ๋Œ€ํ•œ ์ƒ์„ธ ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•œ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์˜ค๋ธŒ์ ํŠธ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ .status๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๋งํ•˜์ž๋ฉด, ๊ฐ API ๋ ˆํผ๋Ÿฐ์Šค ํŽ˜์ด์ง€๋Š” ๊ฐ ์˜ค๋ธŒ์ ํŠธ ํƒ€์ž…์— ๋Œ€ํ•ด ํ•ด๋‹น .status ํ•„๋“œ์˜ ๊ตฌ์กฐ์™€ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•œ๋‹ค.

๋‹ค์Œ ๋‚ด์šฉ

์ตœ์ข… ์ˆ˜์ • April 27, 2023 at 10:18 AM PST: [ko] Update outdated files in dev-1.26-ko.1 (M34-M41) (09724a67e6)