์ธํฐ๋ท์๋ ๋ง์ ์ฐธ๊ณ ๋ฌธํ์ด ์์ง๋ง ๋๋ก๋ ๊ฐ์ฅ ๊ฐ๋จํ ์กฐ์ธ์ด ๊ฐ์ฅ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํ
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 ํด๋ฌ์คํฐ๊ฐ ์คํ๋ฉ๋๋ค.
๋น๊ฒฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ณ ํด๋น ํด๋ฌ์คํฐ์์ ๋ก์ปฌ๋ก ์คํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ํน๋ณํ ์ง์ํ์ง ์๋ ํ Docker ์ด๋ฏธ์ง๋ ํด๋ฌ์คํฐ๊ฐ ์๋ ์ปดํจํฐ์ ๊ตฌ์ถ๋ฉ๋๋ค.
Docker๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ก์ปฌ Kubernetes ํด๋ฌ์คํฐ์ ํธ์ํ๋๋ก ๊ฐ์ ํ๊ธฐ ์ํด docker ๋จธ์ ์ ๋ค์ ๋ช ๋ น์ด ์ ๊ณต๋ฉ๋๋ค.
eval $(minikube docker-env)
์ด์ ๋ก์ปฌ Kubernetes ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๋ชจ๋ ์ฌ๋์๊ฒ kubectl ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ์ง ๋ง์ธ์
์ด๋ ๋น์ฐํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ๋ฌ ํ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ผํ ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(Kubernetes๊ฐ ๋ง๋ค์ด์ง ์ด์ ) ๋ชจ๋ ์ฌ๋์๊ฒ ํด๋ฌ์คํฐ๋ฅผ ์ ๊ณตํด์๋ ์ ๋ฉ๋๋ค. kubectl
. ๋ช
๋ น์ ๋ถ๋ฆฌํ์ฌ ๊ฐ ๋ช
๋ น์ ๊ณ ์ ํ ๋ค์์คํ์ด์ค๋ฅผ ํ ๋นํ๊ณ RBAC ์ ์ฑ
์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ Pod์ ๋ํ ์ก์ธ์ค, ์ฝ๊ธฐ, ์์ฑ, ์ญ์ ๋ฐ ๊ธฐํ ์์ ์ ๋ํ ๊ถํ์ ํ ๋นํ๋ฉด ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋น๋ฐ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ํํ์ฌ ๊ด๋ฆฌ์์๊ฒ๋ง ํ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ์ฌ๋๊ณผ ํด๋ฌ์คํฐ์ ๋ฐฐํฌ๋ง ํ ์ ์๋ ์ฌ๋์ ๊ตฌ๋ณํ ๊ฒ์ ๋๋ค.
ํฌ๋ ์์ฐ ๊ด๋ฆฌ
Kubernetes ํด๋ฌ์คํฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ ์ค์ง ์๊ฐ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? PodDisruptionBudget ๋ฐ ๋ค์ PodDisruptionBudget.
ํด๋ฌ์คํฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๊ณ ๋ ธ๋๋ ๋น์์ง๋๋ค. ์๋ฌด๊ฒ๋ ๊ฐ๋งํ ์์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ด ํ์ค์ ๋๋ค. ์ธ์คํด์ค๊ฐ ๋ ๊ฐ ์ด์์ธ ๋ชจ๋ ๋ฐฐํฌ์๋ PDB(PodDisruptionBudget)๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ํด๋ฌ์คํฐ์ ์ ์ฉ๋๋ ๊ฐ๋จํ yaml ํ์ผ๋ก ์์ฑ๋ฉ๋๋ค. ํน์ 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 ์ฌ์ฉ์์๊ฒ ์ค ์ ์๋ ๊ฐ์ฅ ์ค์ํ ์กฐ์ธ์ผ ๊ฒ์ ๋๋ค.
๋ ๋ฌด์์ ์ฝ์ด์ผ ํ ๊น์?:
Kubernetes์ ์ธ ๊ฐ์ง ์์ค์ ์๋ ํ์ฅ ๋ฐ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ .Kubernetes ์์ ์ ๋ ธ๋: ์์ ๋ ธ๋๊ฐ ๋ง๊ฑฐ๋ ํฐ ๋ ธ๋๊ฐ ์ ์ ?์ฟ ๋ฒ๋คํฐ์ค ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ 25๊ฐ์ง ์ ์ฉํ ๋๊ตฌ .
์ถ์ฒ : habr.com