์ฌํด ์ ๋ฝ์ ์ฃผ์ Kubernetes ์ปจํผ๋ฐ์ค์ธ KubeCon + CloudNativeCon Europe 2020์ ๊ฐ์์ผ๋ก ๊ฐ์ต๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํ์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ฐ๋ฆฌ๊ฐ ์ค๋ซ๋์ ๊ณํํ ๋ณด๊ณ ์ "Go?"๋ฅผ ์ ๋ฌํ๋ ๋ฐ ๋ฐฉํด๊ฐ ๋์ง๋ ์์์ต๋๋ค. ์ธ๊ฒ ๋๋ฆฌ๋ค! ์คํ์์ค ํ๋ก์ ํธ ์ ์ฉ Shell-operator๋ฅผ ๋ง๋๋ณด์ธ์โ
๊ฐ์ฐ์์ ์๊ฐ์ ๋ฐ์ ์์ฑ๋ ์ด ๊ธฐ์ฌ์์๋ Kubernetes์ฉ ์ฐ์ฐ์ ์์ฑ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ ์ํ๊ณ ์ ธ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ํ์ ๋ ธ๋ ฅ์ผ๋ก ์์ ๋ง์ ์ฐ์ฐ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์๊ฐ
Flant์์๋ ์ง์์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ ์ต์ ํํ๊ณ ์๋ํํฉ๋๋ค. ์ค๋ ์ฐ๋ฆฌ๋ ๋ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ๊ฐ๋ ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ๋ง๋๋ค: ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ ธ ์คํฌ๋ฆฝํ !
ํ์ง๋ง ์ด ๋ชจ๋ ์ผ์ด ์ผ์ด๋๋ ๋งฅ๋ฝ์ธ Kubernetes๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค.
Kubernetes API ๋ฐ ์ปจํธ๋กค๋ฌ
Kubernetes์ API๋ ๊ฐ ๊ฐ์ฒด ์ ํ์ ๋ํ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋ ์ผ์ข ์ ํ์ผ ์๋ฒ๋ก ํํ๋ ์ ์์ต๋๋ค. ์ด ์๋ฒ์ ๊ฐ์ฒด(๋ฆฌ์์ค)๋ YAML ํ์ผ๋ก ํ์๋ฉ๋๋ค. ๋ํ ์๋ฒ์๋ ๋ค์ ์ธ ๊ฐ์ง ์์ ์ ์ํํ ์ ์๋ ๊ธฐ๋ณธ API๊ฐ ์์ต๋๋ค.
- ~์ ๋ฐ๋ค ์ข ๋ฅ์ ์ด๋ฆ์ ๋ฐ๋ฅธ ์์;
- ๋ณํ ๋ฆฌ์์ค(์ด ๊ฒฝ์ฐ ์๋ฒ๋ "์ฌ๋ฐ๋ฅธ" ๊ฐ์ฒด๋ง ์ ์ฅํฉ๋๋ค. ์๋ชป ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์ฉ ๊ฐ์ฒด๋ ๋ชจ๋ ์ญ์ ๋ฉ๋๋ค.)
- ๋ฐ๋ฅด๋ค ๋ฆฌ์์ค์ ๋ํ ๊ฒ์ ๋๋ค(์ด ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์ฆ์ ํ์ฌ/์ ๋ฐ์ดํธ๋ ๋ฒ์ ์ ๋ฐ์ต๋๋ค).
๋ฐ๋ผ์ Kubernetes๋ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ผ์ข ์ ํ์ผ ์๋ฒ(YAML ๋งค๋ํ์คํธ์ฉ) ์ญํ ์ ํฉ๋๋ค(์, ์ค์ ๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์์ง๋ง ์ง๊ธ์ ์๋ตํ๊ฒ ์ต๋๋ค).
๋ฌธ์ ๋ ์๋ฒ๊ฐ ์ ๋ณด๋ง ์ ์ฅํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๊ฒ์ด ์๋ํ๋๋กํ๋ ค๋ฉด ๋ค์์ด ํ์ํฉ๋๋ค. ์ ์ด ์ฅ์น - Kubernetes ์ธ๊ณ์์ ๋ ๋ฒ์งธ๋ก ์ค์ํ๊ณ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
์
๋๋ค.
์ปจํธ๋กค๋ฌ์๋ ๋ ๊ฐ์ง ์ฃผ์ ์ ํ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ Kubernetes์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ค์ฒฉ๋ ๋ ผ๋ฆฌ์ ๋ฐ๋ผ ์ฒ๋ฆฌํ ํ K8s์ ๋ฐํํฉ๋๋ค. ๋ ๋ฒ์งธ ์ ํ์ Kubernetes์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค์ง๋ง ์ฒซ ๋ฒ์งธ ์ ํ๊ณผ ๋ฌ๋ฆฌ ์ผ๋ถ ์ธ๋ถ ๋ฆฌ์์ค์ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
Kubernetes์์ ๋ฐฐํฌ๋ฅผ ์์ฑํ๋ ํ๋ก์ธ์ค๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๋ฐฐํฌ ์ปจํธ๋กค๋ฌ(ํฌํจ๋จ
kube-controller-manager
)์ ๋ฐฐํฌ์ ๋ํ ์ ๋ณด๋ฅผ ์์ ํ๊ณ ReplicaSet์ ์์ฑํฉ๋๋ค. - ReplicaSet์ ์ด ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๊ฐ์ ๋ณต์ ๋ณธ(๋ ๊ฐ์ Pod)์ ์์ฑํ์ง๋ง ์ด๋ฌํ Pod๋ ์์ง ์์ฝ๋์ง ์์์ต๋๋ค.
- ์ค์ผ์ค๋ฌ๋ ํฌ๋๋ฅผ ์์ฝํ๊ณ ํด๋น YAML์ ๋ ธ๋ ์ ๋ณด๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- Kubelet์ ์ธ๋ถ ๋ฆฌ์์ค(์: Docker)๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ด ์ ์ฒด ์ํ์ค๊ฐ โโ์ญ์์ผ๋ก ๋ฐ๋ณต๋ฉ๋๋ค. kubelet์ ์ปจํ ์ด๋๋ฅผ ํ์ธํ๊ณ ํฌ๋์ ์ํ๋ฅผ ๊ณ์ฐํ ํ ๋ค์ ๋ณด๋ ๋๋ค. ReplicaSet ์ปจํธ๋กค๋ฌ๋ ์ํ๋ฅผ ์์ ํ๊ณ ๋ณต์ ๋ณธ ์ธํธ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ฐฐํฌ ์ปจํธ๋กค๋ฌ์์๋ ๋์ผํ ์ผ์ด ๋ฐ์ํ๋ฉฐ ์ฌ์ฉ์๋ ์ต์ข ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋(ํ์ฌ) ์ํ๋ฅผ ์ป์ต๋๋ค.
์ ์ฐ์ฐ์
Kubernetes๋ ๋ค์ํ ์ปจํธ๋กค๋ฌ์ ๊ณต๋ ์์
์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค(Kubernetes ์ด์์๋ ์ปจํธ๋กค๋ฌ์
๋๋ค). ์ต์ํ์ ๋
ธ๋ ฅ์ผ๋ก ์์ ๋ง์ ์ฐ์ฐ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง๋ฌธ์ด ์๊น๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ ๊ฒ์ด ๊ตฌ์ถ๋์์ต๋๋ค.
๊ฐ๋จํ ์: ๋น๋ฐ ๋ณต์ฌ
๊ฐ๋จํ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Kubernetes ํด๋ฌ์คํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ค์์คํ์ด์ค๊ฐ ์์ต๋๋ค. default
๋น๋ฐ์ด ์๋ mysecret
. ๋ํ ํด๋ฌ์คํฐ์๋ ๋ค๋ฅธ ๋ค์์คํ์ด์ค๋ ์์ต๋๋ค. ๊ทธ๋ค ์ค ์ผ๋ถ์๋ ํน์ ๋ผ๋ฒจ์ด ๋ถ์ฐฉ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ Secret์ ๋ผ๋ฒจ์ด ์๋ ๋ค์์คํ์ด์ค์ ๋ณต์ฌํ๋ ๊ฒ์
๋๋ค.
์ ๋ค์์คํ์ด์ค๊ฐ ํด๋ฌ์คํฐ์ ๋ํ๋ ์ ์๊ณ ๊ทธ ์ค ์ผ๋ถ์ ์ด ๋ ์ด๋ธ์ด ์์ ์ ์๋ค๋ ์ฌ์ค๋ก ์ธํด ์์ ์ด ๋ณต์กํด์ง๋๋ค. ๋ฐ๋ฉด, ๋ผ๋ฒจ์ด ์ญ์ ๋๋ฉด Secret๋ ํจ๊ป ์ญ์ ๋์ด์ผ ํฉ๋๋ค. ์ด ์ธ์๋ ๋น๋ฐ ์์ฒด๋ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ ๋น๋ฐ์ ๋ผ๋ฒจ์ด ์๋ ๋ชจ๋ ๋ค์์คํ์ด์ค์ ๋ณต์ฌ๋์ด์ผ ํฉ๋๋ค. ๋ค์์คํ์ด์ค์์ Secret์ด ์ค์๋ก ์ญ์ ๋ ๊ฒฝ์ฐ ์ด์์๋ ์ฆ์ ์ด๋ฅผ ๋ณต์ํด์ผ ํฉ๋๋ค.
์ด์ ์์ ์ด ๊ณต์ํ๋์์ผ๋ฏ๋ก ์ ธ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ์ ์์ํ ์ฐจ๋ก์ ๋๋ค. ํ์ง๋ง ๋จผ์ ์ ์คํผ๋ ์ดํฐ ์์ฒด์ ๋ํด ๋ช ๋ง๋ ๋งํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ ์คํผ๋ ์ดํฐ์ ์๋ ๋ฐฉ์
Kubernetes์ ๋ค๋ฅธ ์ํฌ๋ก๋์ ๋ง์ฐฌ๊ฐ์ง๋ก Shell-Operator๋ ์์ฒด ํฌ๋์์ ์คํ๋ฉ๋๋ค. ๋๋ ํฐ๋ฆฌ์ ์ด ํฌ๋์์ /hooks
์คํ ํ์ผ์ด ์ ์ฅ๋ฉ๋๋ค. Bash, Python, Ruby ๋ฑ์ ์คํฌ๋ฆฝํธ์ผ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์คํ ํ์ผ์ ํํฌ(hook)๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.ํํฌ).
Shell-operator๋ Kubernetes ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋
ํ๊ณ ํ์ํ ์ด๋ฒคํธ์ ๋ํ ์๋ต์ผ๋ก ์ด๋ฌํ ํํฌ๋ฅผ ์คํํฉ๋๋ค.
์ ์ด์์๋ ์ด๋ค ํํฌ๋ฅผ ์ธ์ ์คํํ ์ง ์ด๋ป๊ฒ ์ ์ ์๋์? ์์ ์ ๋ชจ๋ ํํฌ์๋ ๋ ๋จ๊ณ๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ์์ํ๋ ๋์ ์ ์ด์์๋ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํํฌ๋ฅผ ์คํํฉ๋๋ค. --config
๊ตฌ์ฑ ๋จ๊ณ์
๋๋ค. ๊ทธ ํ์ ํํฌ๋ ์ฐ๊ฒฐ๋ ์ด๋ฒคํธ์ ๋ํ ์๋ต์ผ๋ก ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก ์คํ๋ฉ๋๋ค. ํ์์ ๊ฒฝ์ฐ ํํฌ๋ ๋ฐ์ธ๋ฉ ์ปจํ
์คํธ(๋ฐ์ธ๋ฉ ์ปจํ
์คํธ) - JSON ํ์์ ๋ฐ์ดํฐ์
๋๋ค. ์ด์ ๋ํด์๋ ์๋์์ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
Bash์์ ์ฐ์ฐ์ ๋ง๋ค๊ธฐ
์ด์ ๊ตฌํ ์ค๋น๊ฐ ๋์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ ๊ฐ์ง ํจ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค(๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๋ ๋ค์์ ๊ถ์ฅํฉ๋๋ค). ๋์๊ด
- ์ฒซ ๋ฒ์งธ๋ ๊ตฌ์ฑ ๋จ๊ณ์ ํ์ํฉ๋๋ค. ๋ฐ์ธ๋ฉ ์ปจํ ์คํธ๋ฅผ ํ์ํฉ๋๋ค.
- ๋ ๋ฒ์งธ์๋ ํํฌ์ ์ฃผ์ ๋ ผ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
#!/bin/bash
source /shell_lib.sh
function __config__() {
cat << EOF
configVersion: v1
# BINDING CONFIGURATION
EOF
}
function __main__() {
# THE LOGIC
}
hook::run "$@"
๋ค์ ๋จ๊ณ๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ํ์ํ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ๋ค์์ ์ถ์ ํด์ผ ํฉ๋๋ค.
- ๋ณ๊ฒฝ์ ์ํ ์์ค ๋น๋ฐ;
- ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ค์์คํ์ด์ค๋ฅผ ํตํด ์ด๋ค ๋ค์์คํ์ด์ค์ ๋ ์ด๋ธ์ด ๋ถ์ด ์๋์ง ์ ์ ์์ต๋๋ค.
- ๋์ ๋น๋ฐ์ด ๋ชจ๋ ์์ค ๋น๋ฐ๊ณผ ๋๊ธฐํ๋์ด ์๋์ง ํ์ธํ์ธ์.
๋น๋ฐ ์์ค๋ฅผ ๊ตฌ๋ ํ์ธ์
์ด์ ๋ํ ๋ฐ์ธ๋ฉ ๊ตฌ์ฑ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฆ์ผ๋ก Secret์ ๊ด์ฌ์ด ์์์ ๋ํ๋
๋๋ค. mysecret
๋ค์์คํ์ด์ค์์ default
:
function __config__() {
cat << EOF
configVersion: v1
kubernetes:
- name: src_secret
apiVersion: v1
kind: Secret
nameSelector:
matchNames:
- mysecret
namespace:
nameSelector:
matchNames: ["default"]
group: main
EOF
๊ฒฐ๊ณผ์ ์ผ๋ก ์์ค ๋น๋ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ํํฌ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค(src_secret
) ๋ค์ ๋ฐ์ธ๋ฉ ์ปจํ
์คํธ๋ฅผ ์์ ํฉ๋๋ค.
๋ณด์๋ค์ํผ ์ด๋ฆ๊ณผ ์ ์ฒด ๊ฐ์ฒด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๋ค์์คํ์ด์ค ์ถ์
์ด์ ๋ค์์คํ์ด์ค๋ฅผ ๊ตฌ๋ ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ค์ ๋ฐ์ธ๋ฉ ๊ตฌ์ฑ์ ์ง์ ํฉ๋๋ค.
- name: namespaces
group: main
apiVersion: v1
kind: Namespace
jqFilter: |
{
namespace: .metadata.name,
hasLabel: (
.metadata.labels // {} |
contains({"secret": "yes"})
)
}
group: main
keepFullObjectsInMemory: false
๋ณด์๋ค์ํผ, ์ด๋ฆ์ด ๋ค์๊ณผ ๊ฐ์ ์ ํ๋๊ฐ ๊ตฌ์ฑ์ ๋ํ๋ฌ์ต๋๋ค. jqFilter. ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, jqFilter
๋ถํ์ํ ์ ๋ณด๋ฅผ ๋ชจ๋ ํํฐ๋งํ๊ณ ๊ด์ฌ ์๋ ํ๋๊ฐ ํฌํจ๋ ์ JSON ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค. ์ ์ฌํ ๊ตฌ์ฑ์ ๊ฐ์ง ํํฌ๋ ๋ค์ ๋ฐ์ธ๋ฉ ์ปจํ
์คํธ๋ฅผ ์์ ํฉ๋๋ค.
๋ฐฐ์ด์ด ํฌํจ๋์ด ์์ต๋๋ค. filterResults
ํด๋ฌ์คํฐ์ ๊ฐ ๋ค์์คํ์ด์ค์ ๋ํด. ๋ถ์ธ ๋ณ์ hasLabel
์ง์ ๋ ๋ค์์คํ์ด์ค์ ๋ ์ด๋ธ์ด ์ฐ๊ฒฐ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋
๋๋ค. ์ ํ์ keepFullObjectsInMemory: false
์์ ํ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ณด๊ดํ ํ์๊ฐ ์์์ ๋ํ๋
๋๋ค.
๋์ ๋น๋ฐ ์ถ์
์ฃผ์์ด ์ง์ ๋ ๋ชจ๋ ๋น๋ฐ์ ๊ตฌ๋
ํฉ๋๋ค. managed-secret: "yes"
(์ด๊ฒ ์ฐ๋ฆฌ ๋ชฉํ์ผ dst_secrets
):
- name: dst_secrets
apiVersion: v1
kind: Secret
labelSelector:
matchLabels:
managed-secret: "yes"
jqFilter: |
{
"namespace":
.metadata.namespace,
"resourceVersion":
.metadata.annotations.resourceVersion
}
group: main
keepFullObjectsInMemory: false
์ด ๊ฒฝ์ฐ jqFilter
๋ค์์คํ์ด์ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํํฐ๋งํฉ๋๋ค. resourceVersion
. ๋น๋ฐ์ ์์ฑํ ๋ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ์ฃผ์์ ์ ๋ฌ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋น๋ฐ์ ๋ฒ์ ์ ๋น๊ตํ๊ณ ์ต์ ์ํ๋ก ์ ์งํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ ํํฌ๋ ์คํ ์ ์์์ ์ค๋ช ํ ์ธ ๊ฐ์ง ๋ฐ์ธ๋ฉ ์ปจํ ์คํธ๋ฅผ ์์ ํฉ๋๋ค. ์ผ์ข ์ ์ค๋ ์ท(์ค๋ ์ฌ์ง) ๋ฌด๋ฆฌ.
์ด ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ค์์คํ์ด์ค๋ฅผ ๋ฐ๋ณตํ๊ณ ๋ค์์ ์ํํฉ๋๋ค.
- ๋ฉด
hasLabel
๋ฌธ์ true
ํ์ฌ ๋ค์์คํ์ด์ค์ ๊ฒฝ์ฐ:- ์ ์ญ ๋น๋ฐ์ ๋ก์ปฌ ๋น๋ฐ๊ณผ ๋น๊ตํฉ๋๋ค.
- ๋์ผํ๋ค๋ฉด ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
- ์๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ - ์คํ
kubectl replace
๋๋create
;
- ์ ์ญ ๋น๋ฐ์ ๋ก์ปฌ ๋น๋ฐ๊ณผ ๋น๊ตํฉ๋๋ค.
- ๋ฉด
hasLabel
๋ฌธ์ false
ํ์ฌ ๋ค์์คํ์ด์ค์ ๊ฒฝ์ฐ:- Secret์ด ์ง์ ๋ ๋ค์์คํ์ด์ค์ ์๋์ง ํ์ธํ์ธ์.
- ๋ก์ปฌ ๋น๋ฐ์ด ์์ผ๋ฉด ๋ค์์ ์ฌ์ฉํ์ฌ ์ญ์ ํ์ธ์.
kubectl delete
; - ๋ก์ปฌ ๋น๋ฐ์ด ๊ฐ์ง๋์ง ์์ผ๋ฉด ์๋ฌด ์์ ๋ ์ํํ์ง ์์ต๋๋ค.
- ๋ก์ปฌ ๋น๋ฐ์ด ์์ผ๋ฉด ๋ค์์ ์ฌ์ฉํ์ฌ ์ญ์ ํ์ธ์.
- Secret์ด ์ง์ ๋ ๋ค์์คํ์ด์ค์ ์๋์ง ํ์ธํ์ธ์.
์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ 35์ค์ YAML ๊ตฌ์ฑ๊ณผ ๊ฑฐ์ ๋์ผํ ์์ Bash ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ Kubernetes ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ ์ ์์๋ ๋ฐฉ๋ฒ์ ๋๋ค! ์ ์ด์์์ ์๋ฌด๋ ์ด๋ค์ ์๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋น๋ฐ ๋ณต์ฌ๊ฐ ์ ํธ๋ฆฌํฐ ์ ์ฉ์ ์ ์ผํ ์์ญ์ ์๋๋๋ค. ๊ทธ๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์๊ฐ ๋ ์์ต๋๋ค.
์์ 1: ConfigMap ๋ณ๊ฒฝ
์ธ ๊ฐ์ ํฌ๋๋ก ๊ตฌ์ฑ๋ ๋ฐฐํฌ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํฌ๋๋ ConfigMap์ ์ฌ์ฉํ์ฌ ์ผ๋ถ ๊ตฌ์ฑ์ ์ ์ฅํฉ๋๋ค. ํฌ๋๊ฐ ์์๋์์ ๋ ConfigMap์ ํน์ ์ํ์ ์์์ต๋๋ค(v.1์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค). ๋ฐ๋ผ์ ๋ชจ๋ Pod๋ ์ด ํน์ ๋ฒ์ ์ ConfigMap์ ์ฌ์ฉํฉ๋๋ค.
์ด์ ConfigMap์ด ๋ณ๊ฒฝ๋์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค(v.2). ๊ทธ๋ฌ๋ Pod๋ ์ด์ ๋ฒ์ ์ ConfigMap(v.1)์ ์ฌ์ฉํฉ๋๋ค.
์๋ก์ด ConfigMap(v.2)์ผ๋ก ์ ํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ๋๋ต์ ๊ฐ๋จํฉ๋๋ค. ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ธ์. ์น์
์ ์ฒดํฌ์ฌ ์ฃผ์์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. template
๋ฐฐํฌ ๊ตฌ์ฑ:
๊ฒฐ๊ณผ์ ์ผ๋ก ์ด ์ฒดํฌ์ฌ์ ๋ชจ๋ Pod์ ๋ฑ๋ก๋๋ฉฐ, ๋ฐฐํฌ์ ์ฒดํฌ์ฌ๊ณผ ๋์ผํ๊ฒ ๋ฉ๋๋ค. ์ด์ ConfigMap์ด ๋ณ๊ฒฝ๋ ๋ ์ฃผ์์ ์
๋ฐ์ดํธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์ฐ์ฐ์๊ฐ ์ ์ฉํฉ๋๋ค. ํ๋ก๊ทธ๋จ๋ง ํ๋ฉด ๋๋ค ConfigMap์ ๊ตฌ๋
ํ๊ณ ์ฒดํฌ์ฌ์ ์
๋ฐ์ดํธํ๋ ํํฌ.
์ฌ์ฉ์๊ฐ ConfigMap์ ๋ณ๊ฒฝํ๋ฉด ์ ์ด์์๋ ์ด๋ฅผ ์ธ์งํ๊ณ ์ฒดํฌ์ฌ์ ๋ค์ ๊ณ์ฐํฉ๋๋ค. ๊ทธ ํ์ Kubernetes์ ๋ง๋ฒ์ด ๋ฐํ๋ฉ๋๋ค. ์ค์ผ์คํธ๋ ์ดํฐ๋ ํฌ๋๋ฅผ ์ข
๋ฃํ๊ณ ์ ํฌ๋๋ฅผ ์์ฑํ ํ ํฌ๋๊ฐ ํ์ฑํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. Ready
, ๊ทธ๋ฆฌ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฐฐํฌ๋ ConfigMap์ ์ ๋ฒ์ ์ ๋๊ธฐํํ๊ณ ์ ํํฉ๋๋ค.
์ 2: ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ์ ์์
์์๋ค์ํผ Kubernetes๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์ ์ ์ ํ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ข
๋ฅ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. MysqlDatabase
. ์ด ์ ํ์ ๋ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. name
ะธ namespace.
apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
name: foo
namespace: bar
MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ ์ ์๋ ๋ค์ํ ๋ค์์คํ์ด์ค๋ฅผ ๊ฐ์ง Kubernetes ํด๋ฌ์คํฐ๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค. MysqlDatabase
, ์ด๋ฅผ MySQL ์๋ฒ์ ์ฐ๊ฒฐํ๊ณ ํด๋ฌ์คํฐ์ ์ํ๋ ์ํ์ ๊ด์ฐฐ๋ ์ํ๋ฅผ ๋๊ธฐํํฉ๋๋ค.
์ 3: ํด๋ฌ์คํฐ ๋คํธ์ํฌ ๋ชจ๋ํฐ๋ง
์์๋ค์ํผ ping์ ์ฌ์ฉํ๋ ๊ฒ์ ๋คํธ์ํฌ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ์์์๋ shell-operator๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋ชจ๋ํฐ๋ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ฐ์ , ๋ ธ๋๋ฅผ ๊ตฌ๋ ํด์ผ ํฉ๋๋ค. ์ ์ด์์๋ ๊ฐ ๋ ธ๋์ ์ด๋ฆ๊ณผ IP ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ๋์์ ๋ฐ์ ๊ทธ๋ ์ด๋ฌํ ๋ ธ๋์ ํ์ ๋ณด๋ผ ๊ฒ์ ๋๋ค.
configVersion: v1
kubernetes:
- name: nodes
apiVersion: v1
kind: Node
jqFilter: |
{
name: .metadata.name,
ip: (
.status.addresses[] |
select(.type == "InternalIP") |
.address
)
}
group: main
keepFullObjectsInMemory: false
executeHookOnEvent: []
schedule:
- name: every_minute
group: main
crontab: "* * * * *"
๋งค๊ฐ ๋ณ์ executeHookOnEvent: []
์ด๋ฒคํธ์ ๋ํ ์๋ต(์ฆ, ๋
ธ๋ ๋ณ๊ฒฝ, ์ถ๊ฐ, ์ญ์ ์ ๋ํ ์๋ต)์ผ๋ก ํํฌ๊ฐ ์คํ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ๋ฌ๋ฆด ๊ฒ์ด๋ค (๊ทธ๋ฆฌ๊ณ ๋
ธ๋ ๋ชฉ๋ก์ ์
๋ฐ์ดํธํฉ๋๋ค) ์์ ๋๋ก - ํ์ฅ์์ ๊ท์ ํ ๋๋ก XNUMX๋ถ๋ง๋ค schedule
.
์ด์ ์ง๋ฌธ์ด ์๊น๋๋ค. ํจํท ์์ค๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ ํํ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น? ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
function __main__() {
for i in $(seq 0 "$(context::jq -r '(.snapshots.nodes | length) - 1')"); do
node_name="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.name')"
node_ip="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.ip')"
packets_lost=0
if ! ping -c 1 "$node_ip" -t 1 ; then
packets_lost=1
fi
cat >> "$METRICS_PATH" <<END
{
"name": "node_packets_lost",
"add": $packets_lost,
"labels": {
"node": "$node_name"
}
}
END
done
}
์ฐ๋ฆฌ๋ ๋
ธ๋ ๋ชฉ๋ก์ ๋ฐ๋ณตํ๊ณ , ๋
ธ๋์ ์ด๋ฆ๊ณผ IP ์ฃผ์๋ฅผ ์ป์ ํ, ํ์ ๋ณด๋ด๊ณ ๊ฒฐ๊ณผ๋ฅผ Prometheus๋ก ๋ณด๋
๋๋ค. Shell-operator๋ ๋ฉํธ๋ฆญ์ Prometheus๋ก ๋ด๋ณด๋ผ ์ ์์ต๋๋ค., ํ๊ฒฝ ๋ณ์์ ์ง์ ๋ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์์นํ ํ์ผ์ ์ ์ฅํฉ๋๋ค. $METRICS_PATH
.
๋๊ธฐ์ด ๋ฉ์ปค๋์ฆ
์ด ๊ธฐ์ฌ๋ ์ ์คํผ๋ ์ดํฐ์ ๋ด์ฅ๋ ๋ ๋ค๋ฅธ ์ค์ํ ๋ฉ์ปค๋์ฆ์ ์ค๋ช ํ์ง ์์ผ๋ฉด ๋ถ์์ ํ ๊ฒ์ ๋๋ค. ํด๋ฌ์คํฐ์ ์ด๋ฒคํธ์ ๋ํ ์๋ต์ผ๋ก ์ผ์ข ์ ํํฌ๋ฅผ ์คํํ๋ค๊ณ ์์ํด ๋ณด์ธ์.
- ๋์์ ํด๋ฌ์คํฐ์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ํ๋ ๋ ์ด๋ฒคํธ?
- ์ ์ด์์๊ฐ ํํฌ์ ๋ค๋ฅธ ์ธ์คํด์ค๋ฅผ ์คํํฉ๋๊น?
- ์๋ฅผ ๋ค์ด ํด๋ฌ์คํฐ์์ ๋์์ XNUMX๊ฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
- ์ ์ด์์๊ฐ ์ด๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํฉ๋๊น?
- ๋ฉ๋ชจ๋ฆฌ, CPU ๋ฑ ์๋น๋๋ ๋ฆฌ์์ค๋ ์ด๋ป๊ฒ ๋๋์?
๋คํ์ค๋ฝ๊ฒ๋ shell-operator์๋ ๋๊ธฐ์ด ๋ฉ์ปค๋์ฆ์ด ๋ด์ฅ๋์ด ์์ต๋๋ค. ๋ชจ๋ ์ด๋ฒคํธ๋ ๋๊ธฐ์ด์ ์ถ๊ฐ๋์ด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ด๋ฅผ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ ๊ฐ์ ํํฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ฒซ ๋ฒ์งธ ์ด๋ฒคํธ๋ ์ฒซ ๋ฒ์งธ ํํฌ๋ก ์ด๋ํฉ๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด ๋๊ธฐ์ด์ด ์์ผ๋ก ์ด๋ํฉ๋๋ค. ๋ค์ ์ธ ๊ฐ์ ์ด๋ฒคํธ๋ ๋ ๋ฒ์งธ ํํฌ๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค. ๋๊ธฐ์ด์์ ์ ๊ฑฐ๋์ด "๋ฒ๋ค"์ ์ ๋ ฅ๋ฉ๋๋ค. ๊ทธ๊ฑด ํํฌ๋ ์ผ๋ จ์ ์ด๋ฒคํธ๋ฅผ ์์ ํฉ๋๋ค. โ ๋๋ ๋ ์ ํํ๊ฒ๋ ๋ฐ์ธ๋ฉ ์ปจํ ์คํธ์ ๋ฐฐ์ด์ ๋๋ค.
๋ํ ์ด๋ค ์ด๋ฒคํธ๋ ํ๋์ ํฐ ์ด๋ฒคํธ๋ก ๊ฒฐํฉ๋ ์ ์์ต๋๋ค.. ๋งค๊ฐ๋ณ์๊ฐ ์ด๋ฅผ ๋ด๋นํฉ๋๋ค. group
๋ฐ์ธ๋ฉ ๊ตฌ์ฑ์์.
์ํ๋ ๋งํผ์ ๋๊ธฐ์ด/ํํฌ์ ๋ค์ํ ์กฐํฉ์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋์ ๋๊ธฐ์ด์ด ๋ ๊ฐ์ ํํฌ์ ์๋ํ ์ ์์ผ๋ฉฐ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
๊ทธ์ ๋ฐ๋ผ ํ๋๋ฅผ ๊ตฌ์ฑํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. queue
๋ฐ์ธ๋ฉ ๊ตฌ์ฑ์์. ํ ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด ํํฌ๋ ๊ธฐ๋ณธ ํ(default
). ์ด ํ์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ํํฌ ์์
์ ๋ชจ๋ ๋ฆฌ์์ค ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ฐ๋ฆฌ๋ ์ ธ ์ฐ์ฐ์๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํ๊ณ , ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ณ ์ฝ๊ฒ Kubernetes ์ฐ์ฐ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ณ , ๊ทธ ์ฌ์ฉ์ ๋ํ ๋ช ๊ฐ์ง ์๋ฅผ ์ ์ํ์ต๋๋ค.
์ ์ฐ์ฐ์์ ๋ํ ์์ธํ ์ ๋ณด์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ๋น ๋ฅธ ํํ ๋ฆฌ์ผ์ ํด๋น ํญ๋ชฉ์์ ํ์ธํ ์ ์์ต๋๋ค.
๋ง์์ ๋์
จ๋ค๋ฉด GitHub์์ ์๋ก์ด ์ด์/ํ๋ณด/์คํ๋ฅผ ๋ง๋๋ณด์ค ์ ์์ด ๊ธฐ์ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ ๊ฒ์๋ฌผ๋ ์ฐพ์๋ณด์ค ์ ์์ต๋๋ค.
๋น๋์ค ๋ฐ ์ฌ๋ผ์ด๋
๊ณต์ฐ ์์(~23๋ถ):
๋ณด๊ณ ์ ๋ฐํ:
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Shell-Operator๋ฅผ ์ฌ์ฉํ์ฌ Kubernetes ์ฐ์ฐ์๋ฅผ ์ฝ๊ฒ ์์ฑ: ์ฐ๊ฐ ํ๋ก์ ํธ ์งํ "; - ยซ
Shell-Operator ์๊ฐ: Kubernetes์ฉ ์ฐ์ฐ์ ์์ฑ์ด ๋์ฑ ์ฌ์์ก์ต๋๋ค. "; - ยซ
Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์ค๋นํ๋ ๊ฒ์ด ์ฝ๊ณ ํธ๋ฆฌํฉ๋๊น? ์ ๋์จ ์ด์์ ๋ฐํ "; - ยซ
Kubernetes ํ์ฅ ๋ฐ ๋ณด์"(๋ฆฌ๋ทฐ ๋ฐ ์์ ๋ณด๊ณ ) .
์ถ์ฒ : habr.com