CKA-4์ผ์ฐจ

YeJi Kimยท2023๋…„ 2์›” 15์ผ
0

CKA

๋ชฉ๋ก ๋ณด๊ธฐ
4/15

๐Ÿ“ CKA 4์ผ์ฐจ
๐Ÿ“ Udemy-Certified Kubernetes Administrator (CKA) with Practice Tests 36-48




36. Service Cluster IP

์„œ๋น„์Šค๋‚˜ ๊ณ„์ธต ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ™•๋ฆฝํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ?
ํŒŒ๋“œ๋Š” ๋ชจ๋‘ ํ• ๋‹น๋œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค. ํ•˜์ง€๋งŒ ์ด IP๋“ค์€ ์ •์ ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“  ์ฒ ๊ฑฐ๋  ์ˆ˜ ์žˆ๊ณ  ์ƒˆ๋กœ์šด ํŒŒ๋“œ๋Š” ๊ณ„์† ๋งŒ๋“ค์–ด์ง€๋‹ˆ ๋‚ด๋ถ€ ํ†ต์‹ ์— ์ด IP ์ฃผ์†Œ์—๋งŒ ์˜์กดํ•  ์ˆ˜๋Š” ์—†๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ  ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋‹จ์ฒด ํŒŒ๋“œ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค. ์š”์ฒญ์€ ๋ฌด์ž‘์œ„์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํŒŒ๋“œ์— ์ „๋‹ฌ๋œ๋‹ค.
๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๊ฐ ๊ณ„์ธต์€ ํ•„์š”ํ•œ ๋Œ€๋กœ ํ™•์žฅ ๋˜๋Š” ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ IP์™€ ๊ทธ์— ํ• ๋‹น๋œ ์ด๋ฆ„์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๋‹ค๋ฅธ ํŒŒ๋“œ๊ฐ€ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
์ด๋Ÿฌํ•œ ์„œ๋น„์Šค ์œ ํ˜•์ด ClusterIP์ด๋‹ค.


์ •์  ํŒŒ์ผ์„ ํ†ตํ•ด ClusterIP๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
type์€ ClusterIP์ด๋‹ค. ์‚ฌ์‹ค ClusterIP๋Š” ๊ธฐ๋ณธ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€์ •ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ž๋™์œผ๋กœ ClusterIP๋กœ ์ถ”์ •๋œ๋‹ค.
targetPort๋Š” ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ํฌํŠธ์ด๋‹ค.
port๋Š” ์„œ๋น„์Šค๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ํฌํŠธ์ด๋‹ค.
์„œ๋น„์Šค๋ฅผ ports์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด selector๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.




37. Services - LoadBalancer

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


์ด๋ฅผ ์œ„ํ•œ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋ถ€ํ•˜๋ถ„์‚ฐ๊ธฐ ๋ชฉ์ ์œผ๋กœ ์ƒˆ VM์„ ๋งŒ๋“ค๊ณ  ์ ์ ˆํ•œ LoadBalancer๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


๋ชจ๋“  ์™ธ๋ถ€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์„ค์ •ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์€ ์ž‘์—…์ด๋‹ค.
๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ, AWS, Azure์™€ ๊ฐ™์ด ์ง€์›๋˜๋Š” ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์— ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์˜ ๋„ค์ดํ‹ฐ๋ธŒ LoadBalancer์™€์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•œ๋‹ค.
์„œ๋น„์Šค์˜ type์„ LoadBalancer๋กœ ์„ค์ •ํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ๋ถ€ํ•˜๋ถ„์‚ฐ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ LoadBalancer type์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ ์„ค์ •ํ•œ๋‹ค๋ฉด NodePort๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.




38. Practice Test - Services

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ๋งŒ๋“  ๊ธฐ๋ณธ ClusterIP ์„œ๋น„์Šค๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.




40. Namsepaces

์ด ์ง‘๋“ค์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์ผ์น˜ํ•œ๋‹ค.


ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ฒ˜์Œ ์„ค์ •๋˜๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ž๋™์œผ๋กœ Default Namespace๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์‚ฌ์šฉ์ž๋“ค๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ค์ˆ˜๋กœ ์ด ์„œ๋น„์Šค๋“ค์ด ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์ž‘ ๋•Œ kube-system์ด๋ž€ ์ด๋ฆ„์˜ Namespace๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋‚ด๋ถ€ ๋ชฉ์ ์„ ์œ„ํ•œ, ๋„คํŠธ์›Œํ‚น ์†”๋ฃจ์…˜์ด๋‚˜ DNS ์„œ๋น„์Šค์— ์š”๊ตฌ๋˜๋Š” ํŒŒ๋“œ์™€ ์„œ๋น„์Šค ์„ธํŠธ๋“ค์ด ์กด์žฌํ•œ๋‹ค.
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ๋งŒ๋“  ๋˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” kube-public์ด๋‹ค. kube-public ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.


์ƒˆ๋กœ์šด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ๊ฐ ๋‹ค๋ฅธ ์ด๋ฆ„ ๊ณต๊ฐ„ ๋•๋ถ„์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹ค์ˆ˜๋กœ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•œ๋‹ค.


์ด๋Ÿฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ์ •์ฑ…(๋ˆ„๊ฐ€ ๋ญ˜ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •์˜)์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ๊ฐ์— ๋ฆฌ์†Œ์Šค ํ• ๋‹น๋Ÿ‰์„ ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


  • db-service: ๊ฐ™์€ ๋„ค์ž„์„œ๋น„์Šค ๋‚ด์—์„œ db-service ์ด๋ฆ„ ๋งŒ์œผ๋กœ ์„œ๋น„์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • db-service.dev.svc.cluster.local: dev ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” db-service์— ์ ‘๊ทผ.

์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ DNS ํ•ญ๋ชฉ์ด ์ž๋™์œผ๋กœ ์ด ํฌ๋ฉง์— ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์„œ๋น„์Šค์˜ DNS ์ด๋ฆ„์„ ์ž์„ธํžˆ ๋ณด๋ฉด, cluster.local์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ ์ด๋ฆ„์ด๋‹ค.
svc๋Š” ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ํ•˜์œ„ ๋„๋ฉ”์ธ์ด๋ฉฐ ์„œ๋น„์Šค ์ด๋ฆ„๊ณผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‹ค์Œ์— ์œ„์น˜ํ•œ๋‹ค.


์ด์ œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์šด์˜ ์ธก๋ฉด์„ ์‚ดํŽด๋ณด์ž.
kubectl get pods๋Š” ๋ชจ๋“  ํŒŒ๋“œ๋ฅผ ์—ด๊ฑฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ default namespace์— ์žˆ๋Š” ๊ฒƒ๋งŒ ์—ด๊ฑฐํ•œ๋‹ค.
๋˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” ํŒŒ๋“œ๋ฅผ ์—ด๊ฑฐํ•˜๋ ค๋ฉด ๋ช…๋ น ์•ˆ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
kubectl get pods --namespace=kube-system ์ด ๊ฒฝ์šฐ์—๋Š” kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ–ˆ๋‹ค.


ํŒŒ๋“œ ์ •์˜ ํŒŒ์ผ์„ ์ด์šฉํ•ด ํŒŒ๋“œ๋ฅผ ๋งŒ๋“ค ๋•Œ ํŒŒ๋“œ๋Š” default namespace์— ์ƒ์„ฑ๋œ๋‹ค.
๋˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์ด ํŒŒ๋“œ๊ฐ€ ํ•ญ์ƒ dev ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ƒ์„ฑ๋˜๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ปค๋งจ๋“œ๋ผ์ธ์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์ •์˜๋ฅผ ํŒŒ๋“œ ์ •์˜ ํŒŒ์ผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
์ด ๊ฒฝ์šฐ, metadata ์˜์—ญ ์•„๋ž˜์— namespace: dev๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.


๋‹ค๋ฅธ ๊ฐœ์ฒด์ฒ˜๋Ÿผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—ญ์‹œ ์ •์˜ ํŒŒ์ผ์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ kubectl ๋ช…๋ น์„ ํ†ตํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๊ฐœ์ฒด๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๊ฐœ์ฒด๋“ค์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์˜๊ตฌ์ ์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” kubectl config set-context ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ปค๋งจ๋“œ๋ฅผ ์ž์„ธํžˆ ๋ณด๋ฉด ์ด ์ปค๋งจ๋“œ๋Š” ๋จผ์ € ํ˜„์žฌ context๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์›ํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ˜„์žฌ context์— ์„ค์ •ํ•œ๋‹ค.
context๋Š” ๊ฐ™์€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์™€ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.


๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œํ•˜๋ ค๋ฉด ๋ฆฌ์†Œ์Šค ํ• ๋‹น๋Ÿ‰(Resource Quota)๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.
Resource Quota๋„ ์ •์˜ ํŒŒ์ผ์„ ํ†ตํ•ด ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
์ •์˜ ํŒŒ์ผ์— ํ• ๋‹น๋Ÿ‰์„ ์ƒ์„ฑํ•  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œํ•˜๊ณ  ํ•œ๋„๋ฅผ ์„ค์ •ํ•œ๋‹ค. 10๊ฐœ์˜ ํŒŒ๋“œ, CPU ์œ ๋‹›, 10GB ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.




41. Practice Test - Namespaces








42. Solution - Namespaces

๋‹จ์ถ•ํ‚ค๋ฅผ ๊ธฐ์–ตํ•˜์ž!





43. Imperative vs Declarative

IaC(Infrastructure as Code) ์„ธ๊ณ„์—์„œ๋Š” ๋ช…๋ น์  ์ ‘๊ทผ๋ฒ•(Imperative)๊ณผ ์„ ์–ธ์  ์ ‘๊ทผ๋ฒ•(Declarative)์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

IaC์—์„œ ์ธํ”„๋ผ ํ”„๋กœ๋น„์ €๋‹์—์„œ ์ ‘๊ทผ๋ฒ•์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
๋ช…๋ น์  ์ ‘๊ทผ๋ฒ•์—์„œ๋Š” ๋ฌด์—‡์ด ์š”๊ตฌ๋˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋‚˜์™€ ์žˆ๋‹ค.

์„ ์–ด์  ์ ‘๊ทผ๋ฒ•์—์„œ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ ์–ธํ•œ๋‹ค. ์ธํ”„๋ผ๋ฅผ ๊ฐ–์ถ”๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—…์€ ์‹œ์Šคํ…œ์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ๊ทผ์ฐจ๊ทผ ์„ค๋ช…ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ansible, chef, puppet, terraform๊ณผ ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋Š” ์ด ๋ฒ”์ฃผ์— ์†ํ•œ๋‹ค.


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

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


์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž๋ฉด, ๋ช…๋ น์  ์ ‘๊ทผ์—๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
์ฒซ๋ฒˆ์งธ๋Š” Imperative Commands๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ƒˆ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์‹คํ–‰, ์ƒ์„ฑ, ๋…ธ์ถœ ๋ช…๋ น๊ณผ ๊ธฐ์กด ๊ฐœ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ํŽธ์ง‘, ์Šค์ผ€์ผ, ์…‹ ๋ช…๋ น ๊ฐ™์€ ๊ฒƒ์ด๋‹ค.
YAML ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ฒด ์ƒ์„ฑ๊ณผ ์ˆ˜์ •์„ ์‹ ์†ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด ๊ณ ๊ธ‰ ์œ ์Šค์ผ€์ด์Šค๋ฅผ ์œ„ํ•ด ๊ธธ๊ณ  ๋ณต์žกํ•œ ๋ช…๋ น์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
๋˜ํ•œ ์ด ๋ช…๋ น์€ ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๊ณ  ์žŠํ˜€์ง„๋‹ค. ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ํžˆ์Šคํ† ๋ฆฌ์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


๊ทธ๋ž˜์„œ ํฌ๊ณ  ๋ณต์žกํ•œ ํ™˜๊ฒฝ์—์„œ Imperative Commands๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค.
์ด๋Ÿฐ ๊ฒฝ์šฐ, Imperative Object Configuration File๋กœ ๊ฐœ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋„์›€๋œ๋‹ค.
๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ ์ƒ์„ฑ ๋˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ ๋˜๋Š” manifest file์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์ด ํŒŒ์ผ๋“ค์€ YAML ํฌ์บฃ์—์„œ ๊ฐœ์ฒด๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ ๋Š”๋ฐ ๋„์›€์„ ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด kubectl ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ kubectl edit ๋ช…๋ น์„ ์ด์šฉํ•ด ๊ฐœ์ฒด ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ช…๋ น์ด ์‹คํ–‰๋˜๋ฉด YAML ์ •์˜ ํŒŒ์ผ์ด ์—ด๋ฆฐ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ๊ฒƒ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์ƒํƒœ ํ•„๋“œ ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค. ์ƒํƒœ ํ•„๋“œ๋Š” ํŒŒ๋“œ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค. ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ ํŒŒ์ผ์ด ์•„๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ํŒŒ๋“œ ์„ค์ • ํŒŒ์ผ๊ณผ ์œ ์‚ฌํ•˜๋‹ค. ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•˜๋ฉด ํŒŒ์ผ์˜ ๋ณ€ํ™”๊ฐ€ ๋ผ์ด๋ธŒ ๊ฐœ์ฒด์— ์ ์šฉ๋  ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ kubectl edit ๋ช…๋ น์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๊ฑด ์–ด๋””์—๋„ ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š”๋‹ค. ์ˆ˜์ •์ด ์ ์šฉ๋˜๊ณ  ๋‚˜๋ฉด ๋ณ€๊ฒฝ ์ „๊ณผ ๋™์ผํ•œ ๋กœ์ปฌ ์ •์˜ ํŒŒ์ผ๋งŒ ๋‚จ๋Š”๋‹ค.

๋”ฐ๋ผ์„œ, kubectl edit ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์ด ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— kubectl edit ๋ช…๋ น์€ ์•ž์œผ๋กœ ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์˜ ๋กœ์ปฌ ๋ฒ„์ „์„ ํŽธ์ง‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๊ณ  kubectl replace ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฐœ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ธฐ๋ก๋˜๊ณ  ๋ณ€๊ฒฝ ์‹ฌ์‚ฌ ๊ณผ์ •์˜ ์ผ๋ถ€๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๊ฐœ์ฒด๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๊ณ  ์žฌ์ƒ์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, --force ์˜ต์…˜์ด ์ ์šฉ๋œ ๊ฐ™์€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
์ด๊ฑด ์—ฌ์ „ํžˆ ๋ช…๋ น์ ์ธ ์ ‘๊ทผ๋ฒ•์ด๋‹ค. ๊ฐœ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—๊ฒŒ ์ง€์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งŒ์•ฝ ์ƒ์„ฑ ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๊ฐœ์ฒด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋Š” ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•  ๊ฒƒ์ด๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐœ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋Š” ๊ฐœ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
๊ฐœ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋กœ kubectl replace ๋ช…๋ น์ด ์‹คํŒจํ•œ๋‹ค.
๋ช…๋ น์  ์ ‘๊ทผ์€ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋งค์šฐ ๊นŒ๋‹ค๋กญ๋‹ค. ํ•ญ์ƒ ํ˜„์žฌ ํ™˜๊ฒฝ์„ค์ •์„ ์ธ์ง€ํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


์„ ์–ธ์  ์ ‘๊ทผ์€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ๋™์ผํ•œ ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค.
kubectl create, kubectl replace ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  kubectl apply ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค.
kubectl appply ๋ช…๋ น์€ ์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค ๋งŒํผ ์˜๋ฆฌํ•˜๋‹ค.
๋˜ํ•œ ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ, ๋‹จ์ผ ํŒŒ์ผ ๋Œ€์‹  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๋ชจ๋“  ๊ฐœ์ฒด๋“ค์ด ํ•œ ๋ฒˆ์— ๋งŒ๋“ค์–ด์ง„๋‹ค.
๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  kubectl apply ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ฒˆ์—๋Š” ๊ฐœ์ฒด๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ๊ฐœ์ฒด๋งŒ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐœ์ฒด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๋ฅผ ๋‚ด์ง€ ์•Š๋Š”๋‹ค.
๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  kubectl apply ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด kubectl apply ๋ช…๋ น์ด ์•Œ์•„์„œ ๋‚˜๋จธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.



๋‹ค์Œ์€ ์‹œํ—™์— ๋Œ€ํ•œ ๋ช‡๊ฐ€์ง€ ํŒ์ด๋‹ค.
์‹œํ—˜์  ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋ช…๋ น์  ์ ‘๊ทผ์„ ์จ์„œ ์ตœ๋Œ€ํ•œ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ด์•ผ ํ•œ๋‹ค.
๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  kubectl apply ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.




44. Certification Tips - Imperative Commands with Kubectl

Imperative commands๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • --dry-run=client ์˜ต์…˜: ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ ๋ช…๋ น์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ค€๋‹ค.
  • -o yaml ์˜ต์…˜: ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ YAML ํ˜•์‹์œผ๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

์œ„์˜ ๋‘ ์˜ต์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ •์˜ ํŒŒ์ผ ํ…œํ”Œ๋ฆฟ์„ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.


<์˜ˆ์‹œ>

POD

Generate POD Manifest YAML file (-o yaml). Don't create it(--dry-run)
kubectl run nginx --image=nginx --dry-run=client -o yaml


Deployment

Generate Deployment YAML file (-o yaml). Don't create it(--dry-run)
kubectl create deployment --image=nginx nginx --dry-run=client -o yaml

Generate Deployment with 4 Replicas

kubectl create deployment nginx --image=nginx --replicas=4

๋˜๋Š” kubectl scale ๋ช…๋ น์„ ํ†ตํ•ด์„œ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
kubectl scale deployment nginx --replicas=4

Another way to do this is to save the YAML definition to a file and modify
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > nginx-deployment.yaml


Service

Create a Service named redis-service of type ClusterIP to expose pod redis on port 6379

kubectl expose pod redis --port=6379 --name redis-service --dry-run=client -o yaml
์œ„์˜ ๋ฐฉ๋ฒ•์€ ์ž๋™์œผ๋กœ pod์˜ label์„ selector๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๋˜๋Š”

kubectl create service clusterip redis --tcp=6379:6379 --dry-run=client -o yaml
์œ„์˜ ๋ฐฉ๋ฒ•์€ pod์˜ label์„ selector๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋Œ€์‹  ์„ ํƒ์ž๋ฅผ app=redis๋กœ ๊ฐ€์ •ํ•œ๋‹ค. selector๋ฅผ ์˜ต์…˜์œผ๋กœ ์ €๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ, pod์— ๋‹ค๋ฅธ label์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ๊ฒฝ์šฐ, ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์„œ๋น„์Šค ์ •์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ selector๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

Create a Service named nginx of type NodePort to expose pod nginx's port 80 on port 30080 on the nodes
kubectl expose pod nginx --type=NodePort --port=80 --name=nginx-service --dry-run=client -o yaml
์œ„์˜ ๋ฐฉ๋ฒ•์€ ์ž๋™์œผ๋กœ pod์˜ label์„ selector๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ node port๋ฅผ ๋ช…์‹œํ•  ์ˆ˜ ์—†๋‹ค. node port๋ฅผ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์„œ๋น„์Šค ์ •์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  node port๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

๋˜๋Š”

kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=client -o yaml
์œ„์˜ ๋ฐฉ๋ฒ•์€ pod์˜ label์„ selector๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ, ์œ„์˜ ๋‘ ๋ฐฉ๋ฒ•์€ ๋‘˜ ๋‹ค ์–ด๋ ค์›€์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. kubectl expose๋Š” node port๋ฅผ ๋ช…์‹œํ•  ์ˆ˜ ์—†๊ณ  kubectl create๋Š” pod์˜ label์„ ์„ ํƒํ•  ์ˆ˜ ์—†๋‹ค.
ํ•„์ž์˜ ๊ฒฝ์šฐ, kubectl expose ๋ช…๋ น์„ ์ถ”์ฒœํ•œ๋‹ค. node port๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ •์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ node port๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.




45. Practice Test - Imperative commands




46. Solution - Imperative Commands



kubectl expose ๋ช…๋ น์„ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ label 'tier=db'๋ฅผ ์ž๋™์œผ๋กœ ํƒ์ง€ํ•˜๊ณ  selector๋กœ ์ง€์ •ํ–ˆ๋‹ค.




--expose ์˜ต์…˜ ์‚ฌ์šฉ ์‹œ, ์ฃผ์˜์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

--expose=true๋กœ ์„ค์ •ํ–ˆ๋”๋‹ˆ pod์™€ ํ•จ๊ป˜ service๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.




47. Kubectl Apply Command

kubectl apply ๋ช…๋ น์˜ ์ ์šฉ ์›๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
kubectl apply ๋ช…๋ น์€ local file๊ณผ last applied configuration, kubernetes live object configuration๋ฅผ ๊ณ ๋ คํ•œ๋‹ค.
๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋“ ์ง€ ์ƒ๊ด€์—†์ง€๋งŒ kubectl apply ๋ช…๋ น์„ ์ ์šฉํ•˜๋ฉด ๊ทธ ์ด์ƒ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ YAML ํ˜•์‹์˜ ๋กœ์ปฌ ๊ฐœ์ฒด ์ •์˜ ํŒŒ์ผ์€ json ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์šฉ๋œ ๊ตฌ์„ฑ(last applied configuration)์œผ๋กœ ์ €์žฅ๋œ๋‹ค.

์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋Š” ์„ธ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๋น„๊ตํ•˜์—ฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ผ์ด๋ธŒ ๊ฐœ์ฒด์— ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, nginx ์ด๋ฏธ์ง€๋ฅผ 1.19๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  kubectl apply ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋กœ์ปฌ ํŒŒ์ผ์˜ 1.19 ๊ฐ’์€ ๋ผ์ด๋ธŒ ๊ฐœ์ฒด ์„ค์ • ๊ฐ’๊ณผ ๋น„๊ต๋œ๋‹ค.
์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ผ์ด๋ธŒ ๊ฐœ์ฒด ์„ค์ •๊ฐ’์€ ์ƒˆ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.

์–ด๋– ํ•œ ๋ณ€ํ™”๊ฐ€ ์žˆ๋”๋ผ๋„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์šฉ๋˜๋Š” json ํ˜•์‹์˜ ํ™˜๊ฒฝ ์„ค์ •(last applied configuration)์€ ํ•ญ์ƒ ์ตœ์‹ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.
๊ทธ๋ž˜์„œ ํ•ญ์ƒ '์ตœ์‹ '์ด๋‹ค.

๊ทธ๋Ÿผ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์šฉ๋œ ํ™˜๊ฒฝ ์„ค์ •(last applied configuration)์ด ์™œ ํ•„์š”ํ• ๊นŒ?
ํ•„๋“œ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด, ์˜ˆ๋ฅผ ๋“ค์–ด 'type' label์ด ์‚ญ์ œ๋˜๋ฉด kubectl apply ๋ช…๋ น์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์šฉ๋œ ํ™˜๊ฒฝ ์„ค์ •(last applied configuration)์— label์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋กœ์ปฌ ํŒŒ์ผ์—์„œ ์ด๋ฏธ label์„ ์‚ญ์ œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ์ •์˜ ํŒŒ์ผ์—๋Š” label์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด์— ๋”ฐ๋ผ, live object configuration์—์„œ 'type' label์ด ์ œ๊ฑฐ๋œ๋‹ค.
์ฆ‰, ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์šฉ๋œ ํ™˜๊ฒฝ ์„ค์ •(last applied configuration)์—๋งŒ ํ•ด๋‹น label์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์ด์ „ ๋‹จ๊ณ„์—์„œ ํ˜น์€ ๋งˆ์ง€๋ง‰์œผ๋กœ kubectl apply ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๊ทธ ํŠน์ • ํ•„๋“œ๊ฐ€ ๊ฑฐ๊ธฐ ์žˆ์—ˆ๊ณ  ์ง€๊ธˆ์€ ์ œ๊ฑฐ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์šฉ๋œ ํ™˜๊ฒฝ ์„ค์ •(last applied configuration) ํŒŒ์ผ์€ ๋กœ์ปฌ ํŒŒ์ผ์—์„œ ์–ด๋–ค ํ•„๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์„ ๋•๋Š”๋‹ค.
์ด ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ƒ์„ธํžˆ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ ๊ฒƒ์€ local file์ด๋‹ค. Live Object configuration์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. last applied configuration์ด ์ €์žฅ๋œ json ํŒŒ์ผ์€ live object configuration์˜ annotation ์˜์—ญ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

kubectl apply ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๋•Œ์—๋งŒ last applied configuration์— ์ €์žฅ๋œ๋‹ค. kubectl create๋‚˜ kubectl replace ๋“ฑ ๋‹ค๋ฅธ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” last applied configuration์— ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰, imperative(๋ช…๋ น์ ) ์ ‘๊ทผ(kubectl apply ์ด์™ธ์˜ ๋ช…๋ น์–ด)์—์„œ๋Š” last applied configuration์ด ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ๊ฐœ์ฒด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•˜์ง€ ์•Š์•„์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด์—, declarative(์„ ์–ธ์ ) ์ ‘๊ทผ(kubectl apply ๋ช…๋ น์–ด)์—์„œ๋Š” last applied configuration์ด ์ €์žฅ๋˜๊ณ , ๊ฐœ์ฒด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

profile
์ด์ „์˜ ๊ธฐ๋ก๋“ค ๐Ÿ‘‰ https://blog.naver.com/reviewerkyj

0๊ฐœ์˜ ๋Œ“๊ธ€