๋ ํผ๋ฐ์ค ์ฟ ๋ฒ๋คํฐ์ค ๋ฌธ์์ ๋ณธ ์น์
์์๋ ๋ ํผ๋ฐ์ค๋ฅผ ๋ค๋ฃฌ๋ค.
API ๋ ํผ๋ฐ์ค ๊ณต์์ ์ผ๋ก ์ง์๋๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ํธ์ถํ๊ธฐ ์ํด์,
ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ณต์์ ์ผ๋ก ์ง์๋๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
CLI kubectl - ๋ช
๋ น์ด๋ฅผ ์คํํ๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฃผ๋ CLI ๋๊ตฌ.kubeadm - ์์ ์ ์ธ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ฝ๊ฒ ํ๋ก๋น์ ํ๊ธฐ ์ํ CLI ๋๊ตฌ.์ปดํฌ๋ํธ kubelet - ๊ฐ
๋
ธ๋์์ ๊ตฌ๋๋๋ ์ฃผ์ํ ์์ด์ ํธ. kubelet์ PodSpecs ์งํฉ์ ๊ฐ์ง๋ฉฐ
๊ธฐ์ ๋ ์ปจํ
์ด๋๊ฐ ๊ตฌ๋๋๊ณ ์๋์ง, ์ ์ ์๋ํ๋์ง๋ฅผ ๋ณด์ฅํ๋ค.
kube-apiserver -
ํ๋, ์๋น์ค, ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ์ ๊ฐ์ API ์ค๋ธ์ ํธ์ ๋ํ ๊ฒ์ฆ๊ณผ ๊ตฌ์ฑ์
์ํํ๋ REST API.
kube-controller-manager - ์ฟ ๋ฒ๋คํฐ์ค์ ํ์ฌ๋ ํต์ฌ ์ ์ด ๋ฃจํ๋ฅผ ํฌํจํ๋ ๋ฐ๋ชฌ.
kube-proxy - ๊ฐ๋จํ
TCP/UDP ์คํธ๋ฆผ ํฌ์๋ฉ์ด๋ ๋ฐฑ-์๋ ์งํฉ์ ๊ฑธ์ณ์ ๋ผ์ด๋-๋ก๋น TCP/UDP ํฌ์๋ฉ์
ํ ์ ์๋ค.
kube-scheduler - ๊ฐ์ฉ์ฑ, ์ฑ๋ฅ ๋ฐ ์ฉ๋์ ๊ด๋ฆฌํ๋ ์ค์ผ์ค๋ฌ.
์ปจํธ๋กค ํ๋ ์ธ๊ณผ ์์ปค ๋
ธ๋์์ ๊ผญ ์ด์ด์ผ ํ๋
ํฌํธ์ ํ๋กํ ์ฝ ๋ฆฌ์คํธ
API ์ค์ ์ด ์น์
์ ์ฟ ๋ฒ๋คํฐ์ค ๊ตฌ์ฑ์์ ๋๋ ๋๊ตฌ๋ฅผ ํ๊ฒฝ์ค์ ํ๋ ๋ฐ์ ์ฌ์ฉ๋๋
"๋ฏธ๋ฐํ๋" API๋ฅผ ๋ค๋ฃฌ๋ค. ์ด API๋ค์ ์ฌ์ฉ์๋ ๊ด๋ฆฌ์๊ฐ ํด๋ฌ์คํฐ๋ฅผ
์ฌ์ฉ/๊ด๋ฆฌํ๋ ๋ฐ์ ์ค์ํ์ง๋ง, ์ด๋ค API์ ๋๋ถ๋ถ์ ์์ง API ์๋ฒ๊ฐ
์ ๊ณตํ์ง ์๋๋ค.
kubeadm์ ์ํ API ์ค์ ์ค๊ณ ๋ฌธ์ ์ฟ ๋ฒ๋คํฐ์ค ๊ธฐ๋ฅ์ ๋ํ ์ค๊ณ ๋ฌธ์์ ์์นด์ด๋ธ.
์ฟ ๋ฒ๋คํฐ์ค ์ํคํ
์ฒ ์
์ฟ ๋ฒ๋คํฐ์ค ๋์์ธ ๊ฐ์ ๋ถํฐ ์ฝ์ด๋ณด๋ ๊ฒ์ด ์ข๋ค.
1 - ์ฉ์ด์ง 2 - API ๊ฐ์ ์ด ์น์
์ ์ฟ ๋ฒ๋คํฐ์ค API์ ๋ํ ์ฐธ์กฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
REST API๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๊ทผ๋ณธ์ ์ธ ๊ตฌ์กฐ์ด๋ค. ๋ชจ๋ ์กฐ์,
์ปดํฌ๋ํธ ๊ฐ์ ํต์ ๊ณผ ์ธ๋ถ ์ฌ์ฉ์์ ๋ช
๋ น์ API ์๋ฒ์์ ์ฒ๋ฆฌํ ์ ์๋
REST API ํธ์ถ์ด๋ค. ๋ฐ๋ผ์, ์ฟ ๋ฒ๋คํฐ์ค ํ๋ซํผ ์์ ๋ชจ๋ ๊ฒ์
API ์ค๋ธ์ ํธ๋ก ์ทจ๊ธ๋๊ณ ,
API ์ ์์ํ๋ ํญ๋ชฉ์ด ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค API ์ฐธ์กฐ ๋
์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ v1.34์ ๋ํ API๊ฐ ๋์ด๋์ด ์๋ค.
์ผ๋ฐ์ ์ธ ๋ฐฐ๊ฒฝ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด,
์ฟ ๋ฒ๋คํฐ์ค API ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค API์ ๋ํ ์ ๊ทผ ์ ์ด ๋
ํด๋ผ์ด์ธํธ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ์ ์ธ์ฆํ๋ ๋ฐฉ๋ฒ๊ณผ
์์ฒญ์ด ์น์ธ๋๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ค.
API ๋ฒ์ ๊ท์น JSON๊ณผ Protobuf ์ง๋ ฌํ ์คํค๋ง ๋ชจ๋ ์คํค๋ง ๋ณ๊ฒฝ์ ๋ํด์
๋์ผํ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ฅธ๋ค. ์ดํ ์ค๋ช
์์๋ ์ด ํ์ ๋ชจ๋๋ฅผ ๋ค๋ฃฌ๋ค.
API ๋ฒ์ ๊ท์น๊ณผ ์ํํธ์จ์ด ๋ฒ์ ๊ท์น์ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ด๋๋ค.
API์ ๋ฆด๋ฆฌ์ค ๋ฒ์ ๋ถ์ฌ์ ๊ดํ ์ ์ ์๋
API ๋ฒ์ ๊ท์น๊ณผ ์ํํธ์จ์ด ๋ฒ์ ๊ท์น ๊ฐ์ ๊ด๊ณ๊ฐ ๊ธฐ์ ๋์ด ์๋ค.
API ๋ฒ์ ์ ์ฐจ์ด๋ ์์ค์ ์์ ์ฑ๊ณผ ์ง์์ ์ฐจ์ด๋ฅผ ๋ํ๋ธ๋ค.
API ๋ณ๊ฒฝ ๋ฌธ์ ์์
๊ฐ ์์ค์ ๊ธฐ์ค์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๋ค.
์๋๋ ๊ฐ ์์ค์ ๊ธฐ์ค์ ๋ํ ์์ฝ์ด๋ค.
API ๊ทธ๋ฃน API ๊ทธ๋ฃน ์
์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ๋ ์ฝ๊ฒ ํ์ฅํ ์ ์๋๋ก ํด ์ค๋ค.
API ๊ทธ๋ฃน์ REST ๊ฒฝ๋ก์ ์ง๋ ฌํ๋ ์ค๋ธ์ ํธ์ apiVersion
ํ๋์
๋ช
์๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค์๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ API ๊ทธ๋ฃน์ด ์๋ค.
ํต์ฌ (๋๋ ๋ ๊ฑฐ์ ๋ผ๊ณ ๋ถ๋ฆฌ๋) ๊ทธ๋ฃน์ REST ๊ฒฝ๋ก /api/v1
์ ์๋ค.
ํต์ฌ ๊ทธ๋ฃน์ apiVersion
ํ๋์ ์ผ๋ถ๋ก ๋ช
์๋์ง ์๋๋ค. ์๋ฅผ
๋ค์ด, apiVersion: v1
๊ณผ ๊ฐ๋ค.์ด๋ฆ์ด ์๋ ๊ทธ๋ฃน์ REST ๊ฒฝ๋ก /apis/$GROUP_NAME/$VERSION
์ ์์ผ๋ฉฐ
apiVersion: $GROUP_NAME/$VERSION
์ ์ฌ์ฉํ๋ค(์๋ฅผ ๋ค์ด, apiVersion: batch/v1
).
์ง์๋๋ API ๊ทธ๋ฃน ์ ์ฒด์ ๋ชฉ๋ก์
์ฟ ๋ฒ๋คํฐ์ค API ์ฐธ์กฐ ๋ฌธ์ ์์ ํ์ธํ ์ ์๋ค. API ๊ทธ๋ฃน ํ์ฑํ ๋๋ ๋นํ์ฑํ ํน์ ๋ฆฌ์์ค ๋ฐ API ๊ทธ๋ฃน์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋๋ค. API ์๋ฒ์์
--runtime-config
๋ฅผ ์ค์ ํ์ฌ ํ์ฑํ ๋๋ ๋นํ์ฑํํ ์ ์๋ค.
--runtime-config
ํ๋๊ทธ๋ API ์๋ฒ์ ๋ฐํ์ ๊ตฌ์ฑ์ ์ค๋ช
ํ๋
์ผํ๋ก ๊ตฌ๋ถ๋ <key>=<value>
์์ ํ์ฉํ๋ค. ๋ง์ฝ =<value>
๋ถ๋ถ์ ์๋ตํ๋ฉด, =true
๊ฐ ๋ช
์๋ ๊ฒ์ฒ๋ผ ์ทจ๊ธํ๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
batch/v1
์ ๋นํ์ฑํํ๋ ค๋ฉด, --runtime-config=batch/v1=false
๋ก ์ค์ batch/v2alpha1
์ ํ์ฑํํ๋ ค๋ฉด, --runtime-config=batch/v2alpha1
์ผ๋ก ์ค์ ์๋ฅผ ๋ค์ด storage.k8s.io/v1beta1/csistoragecapacities
์ ๊ฐ์ด ํน์ ๋ฒ์ ์ API๋ฅผ ํ์ฑํํ๋ ค๋ฉด, --runtime-config=storage.k8s.io/v1beta1/csistoragecapacities
์ ๊ฐ์ด ์ค์
์ฐธ๊ณ : ๊ทธ๋ฃน์ด๋ ๋ฆฌ์์ค๋ฅผ ํ์ฑํ ๋๋ ๋นํ์ฑํํ๋ ค๋ฉด, apiserver์ controller-manager๋ฅผ ์ฌ์์ํ์ฌ
--runtime-config
๋ณ๊ฒฝ์ ๋ฐ์ํด์ผ ํ๋ค.์ง์์ฑ ์ฟ ๋ฒ๋คํฐ์ค๋ etcd ์ ๊ธฐ๋กํ์ฌ API ๋ฆฌ์์ค ์ธก๋ฉด์์
์ง๋ ฌํ๋ ์ํ๋ฅผ ์ ์ฅํ๋ค.
๋ค์ ๋ด์ฉ 2.1 - ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด ํ์ด์ง๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ
ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ฐ์๋ฅผ ํฌํจํ๊ณ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค REST API ๋ฅผ ์ฌ์ฉํด ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๊ธฐ ์ํด
API ํธ์ถ ๋๋ ์์ฒญ/์๋ต ํ์
์ ์ง์ ๊ตฌํํ ํ์๋ ์๋ค.
์ฌ์ฉํ๊ณ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋์ฒด๋ก ์ธ์ฆ๊ณผ ๊ฐ์ ๊ณตํต์ ํ์คํฌ๋ฅผ ์ฒ๋ฆฌํ๋ค.
๋๋ถ๋ถ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ API ํด๋ผ์ด์ธํธ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋ด๋ถ์์ ๋์ํ๋ ๊ฒฝ์ฐ ์ธ์ฆ
๋๋ kubeconfig ํ์ผ ํฌ๋งท์ ํตํด
์๊ฒฉ์ฆ๋ช
๊ณผ API ์๋ฒ ์ฃผ์๋ฅผ ์ฝ์ ์ ์๊ฒ
์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ์ด์นด์ดํธ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
๊ณต์์ ์ผ๋ก ์ง์๋๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์
์ฟ ๋ฒ๋คํฐ์ค SIG API Machinery ์์ ๊ณต์์ ์ผ๋ก ๊ด๋ฆฌ๋๋ค.
์ปค๋ฎค๋ํฐ์ ์ํด ๊ด๋ฆฌ๋๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐธ๊ณ : โ์ด ์น์
์ ์ฟ ๋ฒ๋คํฐ์ค์ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์จ๋ํํฐ ํ๋ก์ ํธ์ ๊ด๋ จ์ด ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํ๋ก์ ํธ ์์ฑ์๋ ์จ๋ํํฐ ํ๋ก์ ํธ์ ์ฑ
์์ด ์๋ค. ์ด ํ์ด์ง๋
CNCF ์น์ฌ์ดํธ ๊ฐ์ด๋๋ผ์ธ ์ ๋ฐ๋ผ ํ๋ก์ ํธ๋ฅผ ์ํ๋ฒณ ์์ผ๋ก ๋์ดํ๋ค. ์ด ๋ชฉ๋ก์ ํ๋ก์ ํธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ณ๊ฒฝ์ฌํญ์ ์ ์ถํ๊ธฐ ์ ์
์ฝํ
์ธ ๊ฐ์ด๋ ๋ฅผ ์ฝ์ด๋ณธ๋ค.
๋ค์์ ์ฟ ๋ฒ๋คํฐ์ค API ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ์ด ์๋
๊ฐ๊ฐ์ ์ ์๋ค์ด ์ ๊ณตํ๊ณ ๊ด๋ฆฌํ๋ค.
2.2 - ์ฟ ๋ฒ๋คํฐ์ค API ํฌ์ค(health) ์๋ํฌ์ธํธ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ ๋ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ API ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํ๋ค.
์ด ํ์ด์ง์์๋ API ์๋ํฌ์ธํธ๋ค์ ๋ํด ์ค๋ช
ํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃฌ๋ค.
ํฌ์ค๋ฅผ ์ํ API ์๋ํฌ์ธํธ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๋ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ ์ธ ๊ฐ์ง API ์๋ํฌ์ธํธ(healthz
, livez
์ readyz
)๋ฅผ ์ ๊ณตํ๋ค.
healthz
์๋ํฌ์ธํธ๋ ์ฌ์ฉ ์ค๋จ(deprecated)๋์ผ๋ฉฐ (์ฟ ๋ฒ๋คํฐ์ค v1.16 ๋ฒ์ ์ดํ), ๋์ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ livez
์ readyz
์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
livez
์๋ํฌ์ธํธ๋ --livez-grace-period
ํ๋๊ทธ ์ต์
์ ์ฌ์ฉํ์ฌ ์์ ๋๊ธฐ ์๊ฐ์ ์ง์ ํ ์ ์๋ค.
/readyz
์๋ํฌ์ธํธ๋ --shutdown-delay-duration
ํ๋๊ทธ ์ต์
์ ์ฌ์ฉํ์ฌ ์ ์์ (graceful)์ผ๋ก ์
ง๋ค์ดํ ์ ์๋ค.
API ์๋ฒ์ healthz
/livez
/readyz
๋ฅผ ์ฌ์ฉํ๋ ๋จธ์ ์ HTTP ์ํ ์ฝ๋์ ์์กดํด์ผ ํ๋ค.
์ํ ์ฝ๋ 200์ ํธ์ถ๋ ์๋ํฌ์ธํธ์ ๋ฐ๋ผ API ์๋ฒ์ healthy
/live
/ready
์ํ๋ฅผ ๋ํ๋ธ๋ค.
์๋ ํ์๋ ๋ ์์ธํ ์ต์
์ ์ด์์๊ฐ ํด๋ฌ์คํฐ๋ฅผ ๋๋ฒ๊น
ํ๊ฑฐ๋ ํน์ API ์๋ฒ์ ์ํ๋ฅผ ์ดํดํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
๋ค์์ ์์๋ ํฌ์ค API ์๋ํฌ์ธํธ์ ์ํธ ์์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค.
๋ชจ๋ ์๋ํฌ์ธํธ์ ๋ํด, verbose
ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ฌ ํญ๋ชฉ๊ณผ ์ํ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
์ด๋ ์ด์์๊ฐ ๋จธ์ ์ฌ์ฉ์ ์ํ ๊ฒ์ด ์๋, API ์๋ฒ์ ํ์ฌ ์ํ๋ฅผ ๋๋ฒ๊น
ํ๋๋ฐ ์ ์ฉํ๋ค.
curl -k https://localhost:6443/livez?verbose
์ธ์ฆ์ ์ฌ์ฉํ๋ ์๊ฒฉ ํธ์คํธ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ํํ๋ค.
kubectl get --raw= '/readyz?verbose'
์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
[+]ping ok
[+]log ok
[+]etcd ok
[+]poststarthook/start-kube-apiserver-admission-initializer ok
[+]poststarthook/generic-apiserver-start-informers ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
[+]poststarthook/crd-informer-synced ok
[+]poststarthook/bootstrap-controller ok
[+]poststarthook/rbac/bootstrap-roles ok
[+]poststarthook/scheduling/bootstrap-system-priority-classes ok
[+]poststarthook/start-cluster-authentication-info-controller ok
[+]poststarthook/start-kube-aggregator-informers ok
[+]poststarthook/apiservice-registration-controller ok
[+]poststarthook/apiservice-status-available-controller ok
[+]poststarthook/kube-apiserver-autoregistration ok
[+]autoregister-completion ok
[+]poststarthook/apiservice-openapi-controller ok
healthz check passed
๋ํ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๋ ํน์ ์ฒดํฌ๋ฅผ ์ ์ธํ ์ ์๋ค.
์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ ๋ค์ ์์ ๊ฐ์ด ์กฐํฉ๋ ์ ์๋ค.
curl -k 'https://localhost:6443/readyz?verbose&exclude=etcd'
์ถ๋ ฅ์์ etcd ์ฒดํฌ๊ฐ ์ ์ธ๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค.
[+]ping ok
[+]log ok
[+]etcd excluded: ok
[+]poststarthook/start-kube-apiserver-admission-initializer ok
[+]poststarthook/generic-apiserver-start-informers ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
[+]poststarthook/crd-informer-synced ok
[+]poststarthook/bootstrap-controller ok
[+]poststarthook/rbac/bootstrap-roles ok
[+]poststarthook/scheduling/bootstrap-system-priority-classes ok
[+]poststarthook/start-cluster-authentication-info-controller ok
[+]poststarthook/start-kube-aggregator-informers ok
[+]poststarthook/apiservice-registration-controller ok
[+]poststarthook/apiservice-status-available-controller ok
[+]poststarthook/kube-apiserver-autoregistration ok
[+]autoregister-completion ok
[+]poststarthook/apiservice-openapi-controller ok
[+]shutdown ok
healthz check passed
๊ฐ๋ณ ํฌ์ค ์ฒดํฌ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.34 [alpha]
๊ฐ ๊ฐ๋ณ ํฌ์ค ์ฒดํฌ๋ HTTP ์๋ํฌ์ธํธ๋ฅผ ๋
ธ์ถํ๋ฉฐ ๊ฐ๋ณ์ ์ผ๋ก ์ฒดํฌํ ์ ์๋ค.
๊ฐ๋ณ ์ฒดํฌ๋ฅผ ์ํ ์คํค๋ง๋ /livez/<healthcheck-name>
์ด๊ณ , ์ฌ๊ธฐ์ livez
์ readyz
๋ API ์๋ฒ์ ํ์ฑ ์ํ ๋๋ ์ค๋น ์ํ์ธ์ง๋ฅผ ํ์ธํ ๋ ์ฌ์ฉํ๋ค.
<healthcheck-name>
๊ฒฝ๋ก ์์์ ์ค๋ช
ํ verbose
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํด์ ์ฐพ์ ์ ์๊ณ , [+]
์ ok
์ฌ์ด์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ฌํ ๊ฐ๋ณ ํฌ์ค ์ฒดํฌ๋ ๋จธ์ ์์ ์ฌ์ฉ๋์๋ ์๋๋ฉฐ, ์ด์์๊ฐ ์์คํ
์ ํ์ฌ ์ํ๋ฅผ ๋๋ฒ๊น
ํ๋๋ฐ ์ ์ฉํ๋ค.
curl -k https://localhost:6443/livez/etcd
3 - API ์ ๊ทผ ์ ์ด ์ฟ ๋ฒ๋คํฐ์ค๊ฐ API ์ ๊ทผ์ ๊ตฌํ ๋ฐ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์
์ฟ ๋ฒ๋คํฐ์ค API์ ๋ํ ์ ๊ทผ ์ ์ด ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ฐธ์กฐ ๋ฌธํ
3.1 - ๋ถํธ์คํธ๋ฉ ํ ํฐ์ ์ฌ์ฉํ ์ธ์ฆ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.18 [stable]
๋ถํธ์คํธ๋ฉ ํ ํฐ์ ์ ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ ๋
ธ๋๋ฅผ ๊ธฐ์กด ํด๋ฌ์คํฐ์ ๊ฒฐํฉํ ๋
์ฌ์ฉ๋๋ ๊ฐ๋จํ ์ ๋ฌ์ ํ ํฐ์ด๋ค.
kubeadm ์ ์ง์ํ๋๋ก ๊ตฌ์ถ๋์์ง๋ง
kubeadm
์์ด ํด๋ฌ์คํฐ๋ฅผ ์์ํ๋ ค๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋ค๋ฅธ ์ปจํ
์คํธ์์ ์ฌ์ฉํ ์ ์๋ค.
๋ํ RBAC ์ ์ฑ
์ ํตํด Kubelet TLS ๋ถํธ์คํธ๋ํ
์์คํ
๊ณผ ํจ๊ป ๋์ํ๋๋ก ๊ตฌ์ถ๋์๋ค.
๋ถํธ์คํธ๋ฉ ํ ํฐ ๊ฐ์ ๋ถํธ์คํธ๋ฉ ํ ํฐ์ kube-system
๋ค์์คํ์ด์ค์ ์๋
ํน์ ์ ํ(bootstrap.kubernetes.io/token
)์ ์ํฌ๋ฆฟ(Secret)์ผ๋ก ์ ์๋๋ค.
API ์๋ฒ์ ๋ถํธ์คํธ๋ฉ ์ธ์ฆ์๊ฐ ์ด๋ฌํ ์ํฌ๋ฆฟ์ ์ฝ๋๋ค.
๋ง๋ฃ๋ ํ ํฐ์ ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์๊ฐ TokenCleaner ์ปจํธ๋กค๋ฌ๋ก ์ ๊ฑฐํ๋ค.
ํ ํฐ์ BootstrapSigner ์ปจํธ๋กค๋ฌ๋ฅผ ํตํด
"discovery" ํ๋ก์ธ์ค์ ์ฌ์ฉ๋๋ ํน์ ์ปจํผ๊ทธ๋งต(ConfigMap)์ ๋ํ
์๋ช
์ ๋ง๋๋ ๋ฐ๋ ์ฌ์ฉ๋๋ค.
ํ ํฐ ํ์ ๋ถํธ์คํธ๋ฉ ํ ํฐ์ abcdef.0123456789abcdef
ํ์์ ์ทจํ๋ค. ๋ ๊ณต์์ ์ผ๋ก๋
์ ๊ท์ [a-z0-9]{6}\.[a-z0-9]{16}
์ ์ผ์นํด์ผ ํ๋ค.
ํ ํฐ์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ "Token ID" ์ด๋ฉฐ ๊ณต๊ฐ ์ ๋ณด๋ก ๊ฐ์ฃผ๋๋ค.
์ธ์ฆ์ ์ฌ์ฉํ๋ ์ํฌ๋ฆฟ์ ์ผ๋ถ๋ฅผ ๋
ธ์ถํ์ง ์๊ณ ํ ํฐ์ ์ฐธ์กฐํ ๋ ์ฌ์ฉํ๋ค.
๋ ๋ฒ์งธ ๋ถ๋ถ์ "Token Secret"์ด๋ฉฐ
์ ๋ขฐํ ์ ์๋ ๋น์ฌ์์๋ง ๊ณต์ ํด์ผ ํ๋ค.
๋ถํธ์คํธ๋ฉ ํ ํฐ ์ธ์ฆ ํ์ฑํ API ์๋ฒ์์ ๋ค์ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํธ์คํธ๋ฉ ํ ํฐ ์ธ์ฆ์๋ฅผ
ํ์ฑํํ ์ ์๋ค.
--enable-bootstrap-token-auth
ํ์ฑํ๋๋ฉด ๋ถํธ์คํธ๋ฉ ํ ํฐ์ API ์๋ฒ์ ๋ํ ์์ฒญ์ ์ธ์ฆํ๊ธฐ ์ํ
์ ๋ฌ์ ํ ํฐ ์๊ฒฉ ์ฆ๋ช
์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
Authorization: Bearer 07401b.f395accd246ae52d
ํ ํฐ์ ์ฌ์ฉ์ ์ด๋ฆ system:bootstrap:<token id>
๋ก ์ธ์ฆ๋๋ฉฐ system:bootstrappers
๊ทธ๋ฃน์ ๊ตฌ์ฑ์์ด๋ค.
ํ ํฐ์ ์ํฌ๋ฆฟ์ ์ถ๊ฐ ๊ทธ๋ฃน์
์ง์ ํ ์ ์๋ค.
๋ง๋ฃ๋ ํ ํฐ์ ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์์์ tokencleaner
์ปจํธ๋กค๋ฌ๋ฅผ ํ์ฑํํ์ฌ ์๋์ผ๋ก ์ญ์ ํ ์ ์๋ค.
--controllers=*,tokencleaner
๋ถํธ์คํธ๋ฉ ํ ํฐ ์ํฌ๋ฆฟ ํ์ ๊ฐ๊ฐ์ ์ ํจํ ํ ํฐ์ kube-system
๋ค์์คํ์ด์ค์ ์ํฌ๋ฆฟ์ ์ํด ์ง์๋๋ค.
์ ์ฒด ๋์์ธ ๋ฌธ์๋
์ฌ๊ธฐ ์์ ์ฐพ์ ์ ์๋ค.
์ํฌ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion : v1
kind : Secret
metadata :
# Name MUST be of form "bootstrap-token-<token id>"
name : bootstrap-token-07401b
namespace : kube-system
# Type MUST be 'bootstrap.kubernetes.io/token'
type : bootstrap.kubernetes.io/token
stringData :
# Human readable description. Optional.
description : "The default bootstrap token generated by 'kubeadm init'."
# Token ID and secret. Required.
token-id : 07401b
token-secret : f395accd246ae52d
# Expiration. Optional.
expiration : 2017-03-10T03:22:11Z
# Allowed usages.
usage-bootstrap-authentication : "true"
usage-bootstrap-signing : "true"
# Extra groups to authenticate the token as. Must start with "system:bootstrappers:"
auth-extra-groups : system:bootstrappers:worker,system:bootstrappers:ingress
์ํฌ๋ฆฟ ์ ํ์ bootstrap.kubernetes.io/token
์ด์ด์ผ ํ๊ณ
์ด๋ฆ์ bootstrap-token-<token id>
์ฌ์ผ ํ๋ค. ๋ฐ๋์ kube-system
๋ค์์คํ์ด์ค์๋ ์กด์ฌํด์ผ ํ๋ค.
usage-bootstrap-*
๋ฉค๋ฒ๋ ์ด ์ํฌ๋ฆฟ์ ์ฉ๋๋ฅผ ๋ํ๋ธ๋ค.
ํ์ฑํํ๋ ค๋ฉด ๊ฐ์ true
๋ก ์ค์ ํด์ผ ํ๋ค.
usage-bootstrap-authentication
์ ํ ํฐ์ API ์๋ฒ์
๋ฒ ์ด๋ฌ ํ ํฐ์ผ๋ก ์ธ์ฆํ๋๋ฐ ์ฌ์ฉํ ์ ์์์ ๋ํ๋ธ๋ค.usage-bootstrap-signing
์ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์๋์ ์ค๋ช
๋
cluster-info
์ปจํผ๊ทธ๋งต์ ์๋ช
ํ ์ ์์์ ๋ํ๋ธ๋ค.expiration
ํ๋๋ ํ ํฐ์ ๋ง๋ฃ๋ฅผ ์ ์ดํ๋ค. ๋ง๋ฃ๋ ํ ํฐ์
์ธ์ฆ์ ์ฌ์ฉ๋ ๋ ๊ฑฐ๋ถ๋๊ณ ์ปจํผ๊ทธ๋งต์๋ช
์ค์ ๋ฌด์๋๋ค.
๋ง๋ฃ๋ ๊ฐ์ RFC3339๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ UTC ์๊ฐ์ผ๋ก ์ธ์ฝ๋ฉ๋๋ค.
๋ง๋ฃ๋ ํ ํฐ์ ์๋์ผ๋ก ์ญ์ ํ๋ ค๋ฉด tokencleaner
์ปจํธ๋กค๋ฌ๋ฅผ ํ์ฑํํ๋ค.
kubeadm์ ์ฌ์ฉํ ํ ํฐ ๊ด๋ฆฌ kubeadm
ํด์ ์ฌ์ฉํ์ฌ ์คํ์ค์ธ ํด๋ฌ์คํฐ์์ ํ ํฐ์ ๊ด๋ฆฌํ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ kubeadm token docs ์์ ์ฐพ์ ์ ์๋ค.
์ปจํผ๊ทธ๋งต ์๋ช
ํ ํฐ์ ์ธ์ฆ ์ธ์๋ ์ปจํผ๊ทธ๋งต์ ์๋ช
ํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค.
์ด๊ฒ์ ํด๋ผ์ด์ธํธ๊ฐ API ์๋ฒ๋ฅผ ์ ๋ขฐํ๊ธฐ ์ ์ ํด๋ฌ์คํฐ ๋ถํธ์คํธ๋ฉ ํ๋ก์ธ์ค์ ์ด๊ธฐ์ ์ฌ์ฉ๋๋ค.
์๋ช
๋ ์ปจํผ๊ทธ๋งต์ ๊ณต์ ํ ํฐ์ผ๋ก ์ธ์ฆํ ์ ์๋ค.
์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์์์ bootstrapsigner
์ปจํธ๋กค๋ฌ๋ฅผ ํ์ฑํํ์ฌ
์ปจํผ๊ทธ๋งต์๋ช
์ ํ์ฑํ ํ๋ค.
--controllers=*,bootstrapsigner
์๋ช
๋ ์ปจํผ๊ทธ๋งต์ kube-public
๋ค์์คํ์ด์ค์ ์๋ cluster-info
์ด๋ค.
์ผ๋ฐ์ ์ธ ํ๋ฆ์ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ๋์ง ์๊ณ TLS ์ค๋ฅ๋ฅผ ๋ฌด์ํ๋ ๋์
์ปจํผ๊ทธ๋งต์ ์ฝ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ ๋ค์ ์ปจํผ๊ทธ๋งต์ ํฌํจ๋ ์๋ช
์ ํ์ธํ์ฌ
์ปจํผ๊ทธ๋งต์ ํ์ด๋ก๋๋ฅผ ํ์ธํ๋ค.
์ปจํผ๊ทธ๋งต์ ๋ค์๊ณผ ๊ฐ์ ์ ์๋ค.
apiVersion : v1
kind : ConfigMap
metadata :
name : cluster-info
namespace : kube-public
data :
jws-kubeconfig-07401b : eyJhbGciOiJIUzI1NiIsImtpZCI6IjA3NDAxYiJ9..tYEfbo6zDNo40MQE07aZcQX2m3EB2rO3NuXtxVMYm9U
kubeconfig : |
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <really long certificate data>
server: https://10.138.0.2:6443
name: ""
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
์ปจํผ๊ทธ๋งต์ kubeconfig
๋ฉค๋ฒ๋ ํด๋ฌ์คํฐ ์ ๋ณด๋ง ์
๋ ฅ๋ ๊ตฌ์ฑ ํ์ผ์ด๋ค.
์ฌ๊ธฐ์ ์ ๋ฌ๋๋ ํต์ฌ์ certificate-authority-data
์ด๋ค. ์ด๋ ํฅํ ํ๋๋ ์ ์๋ค.
์๋ช
์ "detached" ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ JWS ์๋ช
์ด๋ค. ์๋ช
์ ๊ฒ์ฆํ๋ ค๋ฉด
์ฌ์ฉ์๋ JWS ๊ท์น(๋ค๋ก ์ค๋ =
๋ฅผ ์ญ์ ํ๋ ๋์ ์ธ์ฝ๋ฉ๋ base64)์ ๋ฐ๋ผ
kubeconfig
ํ์ด๋ก๋๋ฅผ ์ธ์ฝ๋ฉํด์ผ ํ๋ค. ๊ทธ๋ฐ ๋ค์ ์ธ์ฝ๋ฉ๋ ํ์ด๋ก๋๋
๋ ๊ฐ์ ์ ์ฌ์ด์ ์ฝ์
ํ์ฌ ์ ์ฒด JWS๋ฅผ ํ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ ์ฒด ํ ํฐ(์:07401b.f395accd246ae52d
)์ ๊ณต์ ์ํฌ๋ฆฟ์ผ๋ก ์ฌ์ฉํ์ฌ
HS256
๋ฐฉ์(HMAC-SHA256)์ ์ฌ์ฉํจ์ผ๋ก JWS๋ฅผ ํ์ธํ ์ ์๋ค.
์ฌ์ฉ์๋ ๋ฐ๋์ HS256์ด ์ฌ์ฉ๋๊ณ ์๋์ง ํ์ธํด์ผ ํ๋ค.
๊ฒฝ๊ณ : ๋ถํธ์คํธ๋ํ ํ ํฐ์ ๊ฐ์ง ๋ชจ๋ ๋น์ฌ์๋ ํด๋น ํ ํฐ์ ๋ํ ์ ํจํ ์๋ช
์ ๋ง๋ค ์ ์๋ค.
์ปจํผ๊ทธ๋งต ์๋ช
์ ์ฌ์ฉํ ๋ ๋ง์ ํด๋ผ์ด์ธํธ์ ๋์ผํ ํ ํฐ์ ๊ณต์ ํ๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์๋๋ค.
์์๋ ํด๋ผ์ด์ธํธ๋ ์ ์ฌ์ ์ผ๋ก ์๋ช
์ ์์กดํ์ฌ
TLS ํธ๋ฌ์คํธ๋ฅผ ๋ถํธ์คํธ๋ฉํ๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ฅผ ๋์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.์์ธํ ๋ด์ฉ์ kubeadm implementation details
์น์
์ ์ฐธ์กฐํ๋ฉด ๋๋ค.
3.2 - ์๋น์ค ์ด์นด์ดํธ ๊ด๋ฆฌํ๊ธฐ ์๋น์ค์ด์นด์ดํธ(ServiceAccount) ๋ ํ๋์์ ์คํ๋๋ ํ๋ก์ธ์ค์ ๋ํ ์๋ณ์๋ฅผ ์ ๊ณตํ๋ค.
ํ๋ ๋ด๋ถ์ ํ๋ก์ธ์ค๋, ์์ ์๊ฒ ๋ถ์ฌ๋ ์๋น์ค ์ด์นด์ดํธ์ ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ
ํด๋ฌ์คํฐ์ API ์๋ฒ์ ์ธ์ฆํ ์ ์๋ค.
์๋น์ค ์ด์นด์ดํธ์ ๋ํ ์๊ฐ๋, ์๋น์ค ์ด์นด์ดํธ ๊ตฌ์ฑํ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ด ๊ฐ์ด๋๋ ์๋น์ค์ด์นด์ดํธ์ ๊ด๋ จ๋ ๊ฐ๋
์ค ์ผ๋ถ๋ฅผ ์ค๋ช
ํ๋ฉฐ,
์๋น์ค์ด์นด์ดํธ๋ฅผ ๋ํ๋ด๋ ํ ํฐ์ ์ป๊ฑฐ๋ ์ทจ์ํ๋
๋ฐฉ๋ฒ์ ๋ํด์๋ ์ค๋ช
ํ๋ค.
์์ํ๊ธฐ ์ ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์
ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋
ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ
์์ง ์๋ค๋ฉด,
minikube ๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋
๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์๋ ๋ด์ฉ๋ค์ ๋ฐ๋ผํ๊ธฐ ์ํด์๋
examplens
๋ผ๋ ๋ค์์คํ์ด์ค๊ฐ ํ์ํ๋ค.
์์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋ค.
kubectl create namespace examplens
์ฌ์ฉ์ ์ด์นด์ดํธ์ ์๋น์ค ์ด์นด์ดํธ ๋น๊ต ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ฌ์ฉ์ ์ด์นด์ดํธ์ ์๋น์ค ์ด์นด์ดํธ์ ๊ฐ๋
์
๊ตฌ๋ถํ๋ค.
์ฌ์ฉ์ ์ด์นด์ดํธ๋ ์ฌ๋์ ์ํ ๊ฒ์ด์ง๋ง, ์๋น์ค ์ด์นด์ดํธ๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๊ฒฝ์ฐ ํ๋์ ์ผ๋ถ ์ปจํ
์ด๋์์ ์คํ๋๋
์ ํ๋ฆฌ์ผ์ด์
ํ๋ก์ธ์ค๋ฅผ ์ํ ๊ฒ์ด๋ค. ์ฌ์ฉ์ ์ด์นด์ดํธ๋ ์ ์ญ์ ์ผ๋ก ๊ณ ๋ ค๋๊ธฐ ๋๋ฌธ์,
ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ค์์คํ์ด์ค์ ๊ฑธ์ณ ์ด๋ฆ์ด ๊ณ ์ ํด์ผ ํ๋ค. ์ด๋ค ๋ค์์คํ์ด์ค๋ฅผ ํ์ธํ๋ ์ง ๊ฐ์,
ํน์ ์ฌ์ฉ์๋ช
์ ํด๋น ์ ์ ๋ง์ ๋ํ๋ธ๋ค.
์ฟ ๋ฒ๋คํฐ์ค์์ ์๋น์ค ์ด์นด์ดํธ๋ ๋ค์์คํ์ด์ค๋ณ๋ก ๊ตฌ๋ถ๋๋ค. ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ค์์คํ์ด์ค๋
๋์ผํ ์ด๋ฆ์ ์๋น์ค์ด์นด์ดํธ๋ฅผ ๊ฐ์ ๊ฐ์ง ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ํด๋ฌ์คํฐ์ ์ฌ์ฉ์ ์ด์นด์ดํธ๋ ๊ธฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋๊ธฐํ๋ ์ ์์ผ๋ฉฐ,
์ฌ๊ธฐ์ ์๋ก์ด ์ฌ์ฉ์ ์ด์นด์ดํธ๋ฅผ ์์ฑํ๋ ค๋ฉด ํน๋ณํ ๊ถํ์ด ํ์ํ๋ฉฐ ๋ณต์กํ ๋น์ฆ๋์ค ํ๋ก์ธ์ค์ ์ฐ๊ฒฐ๋๋ค.
๋ฐ๋ฉด์ ์๋น์ค ์ด์นด์ดํธ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ๋,
ํด๋ฌ์คํฐ ์ฌ์ฉ์๊ฐ ์ต์ ๊ถํ ์์น์ ๋ฐ๋ผ ํน์ ์์
์ ์ํ ์๋น์ค ์ด์นด์ดํธ๋ฅผ ๋ง๋ค ์ ์๋๋ก
๋ณด๋ค ๊ฐ๋ณ๊ฒ ๋ง๋ค์ด์ก๋ค.
์ค ์ฌ์ฉ์๋ฅผ ์จ๋ณด๋ฉํ๋ ๋จ๊ณ์ ์๋น์ค์ด์นด์ดํธ๋ฅผ ์์ฑํ๋ ๋จ๊ณ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์,
์ํฌ๋ก๋๊ฐ ์ต์ ๊ถํ ์์น์ ๋ฐ๋ฅด๊ธฐ ์ฌ์์ง๊ฒ ํ๋ค. ์ฌ๋๊ณผ ์๋น์ค ์ด์นด์ดํธ์ ๋ํ ๊ฐ์ฌ ๊ณ ๋ ค ์ฌํญ์ ๋ค๋ฅผ ์ ์๋ค. ์ด ๋์ ๋ฐ๋ก ๊ด๋ฆฌํจ์ผ๋ก์จ
๋์ฑ ์ฝ๊ฒ ๊ฐ์ฌ๋ฅผ ์ํํ ์ ์๋ค. ๋ณต์กํ ์์คํ
์ ์ค์ ๋ค์ ๊ทธ ์์คํ
์ ๊ตฌ์ฑ์์์ ๋ํ ๋ค์ํ ์๋น์ค ์ด์นด์ดํธ ์ ์๋ฅผ ํฌํจํ ์ ์๋ค.
์๋น์ค ์ด์นด์ดํธ๋ ๋ง์ ์ ์ฝ์์ด ๋ง๋ค ์ ์๊ณ
๋ค์์คํ์ด์ค์ ํ ๋น๋ ์ด๋ฆ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์
์ด๋ฌํ ์ค์ ์ ์ด์์ฑ์ด ์ข๋ค. ๋ฐ์ธ๋ฉ๋ ์๋น์ค ์ด์นด์ดํธ ํ ํฐ ๋ณผ๋ฅจ ๋ฉ์ปค๋์ฆ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.22 [stable]
๊ธฐ๋ณธ์ ์ผ๋ก,
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ(๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด ์๋น์ค์ด์นด์ดํธ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ )์
ํ๋ก์ ํฐ๋ ๋ณผ๋ฅจ ์ ํ๋์ ์ถ๊ฐํ๋ฉฐ,
์ด ๋ณผ๋ฅจ์ ์ฟ ๋ฒ๋คํฐ์ค API์ ์ ๊ทผํ ์ ์๋ ํ ํฐ์ ํฌํจํ๋ค.
๋ค์์ ์คํ๋ ํ๋์์ ํด๋น ํ ํฐ์ด ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ํ ์์์ด๋ค.
...
- name : kube-api-access-<random-suffix>
projected :
sources :
- serviceAccountToken :
path : token # ์ ํ๋ฆฌ์ผ์ด์
์ด ์๊ณ ์๋ ๊ฒฝ๋ก์ ์ผ์นํด์ผ ํ๋ค.
- configMap :
items :
- key : ca.crt
path : ca.crt
name : kube-root-ca.crt
- downwardAPI :
items :
- fieldRef :
apiVersion : v1
fieldPath : metadata.namespace
path : namespace
์์ ๋งค๋ํ์คํธ๋ ์ธ ๊ฐ์ง ์ ๋ณด๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ํฐ๋ ๋ณผ๋ฅจ์ ์ ์ํ๋ค.
์ด ๊ฒฝ์ฐ, ๊ฐ ์ ๋ณด๋ ํด๋น ๋ณผ๋ฅจ ๋ด์ ๋จ์ผ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๊ธฐ๋ ํ๋ค. ์ธ ๊ฐ์ง ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
์๋น์ค์ด์นด์ดํธํ ํฐ(serviceAccountToken)
์ ๋ณด๋ kubelet์ด kube-apiserver๋ก๋ถํฐ ์ทจ๋ํ ํ ํฐ์ ํฌํจํ๋ค.
kubelet์ TokenRequest API๋ฅผ ํตํด ์ผ์ ์๊ฐ ๋์ ์ฌ์ฉํ ์ ์๋ ํ ํฐ์ ๋ฐ๊ธ ๋ฐ๋๋ค.
์ด๋ ๊ฒ ์ทจ๋ํ ํ ํฐ์ ํ๋๊ฐ ์ญ์ ๋๊ฑฐ๋ ์ง์ ๋ ์๋ช
์ฃผ๊ธฐ ์ดํ์ ๋ง๋ฃ๋๋ค(๊ธฐ๋ณธ๊ฐ์ 1์๊ฐ์ด๋ค).
์ด ํ ํฐ์ ํน์ ํ ํ๋์ ๋ฐ์ธ๋ฉ๋๋ฉฐ kube-apiserver๋ฅผ ๊ทธ ๋์์ผ๋ก ํ๋ค.
์ด ๋ฉ์ปค๋์ฆ์ ์ํฌ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณผ๋ฅจ์ ์ถ๊ฐํ๋ ์ด์ ๋ฉ์ปค๋์ฆ์ ๋์ฒดํ ๊ฒ์ด๋ค.
ํด๋น ์ํฌ๋ฆฟ์ ํ๋์ ์๋น์ค์ด์นด์ดํธ๋ฅผ ๋ํ๋์๋๋ฐ, ์ด๋ ํ ํฐ๊ณผ๋ ๋ฌ๋ฆฌ ๋ง๋ฃ๊ฐ ๋์ง ์๋ ๊ฒ์ด์๋ค.์ปจํผ๊ทธ๋งต(ConfigMap)
์ ๋ณด๋ ์ธ์ฆ ๋ฐ ์ธ๊ฐ์ ๊ดํ ๋ฒ๋ค์ ํฌํจํ๋ค.
ํ๋๋ค์ ์ด๋ฌํ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํด๋ฌ์คํฐ์ kube-apiserver(๋ฏธ๋ค๋ฐ์ค๋ ์ค์๋ก ์๋ชป ๊ตฌ์ฑ๋ ํผ์ด๊ฐ ์๋)
์ ๋ํ ์ฐ๊ฒฐ์ ํ์ธํ ์ ์๋ค.DownwardAPI
์ ๋ณด๋ ํ๋๊ฐ ํฌํจ๋ ๋ค์์คํ์ด์ค๋ฅผ ๊ฒ์ํ๊ณ ,
ํด๋น ์ ๋ณด๋ฅผ ํ๋ ๋ด๋ถ์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.์ด๋ฌํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ์ปจํ
์ด๋๋ ์์ ์ ๋ณด๋ค์ ์ ๊ทผํ ์ ์๋ค.
์ฐธ๊ณ : TokenRequest๋ฅผ ํตํด ๋ฐ๊ธ๋ ํ ํฐ์ ๋ฌดํจํํ๋ ๋ฉ์ปค๋์ฆ์ ์๋ค.
๋ง์ฝ ํ๋์ ๋ฐ์ธ๋ฉ๋ ์๋น์ค ์ด์นด์ดํธ ํ ํฐ์ ๋ ์ด์ ์ ๋ขฐํ์ง ๋ชปํ๊ฒ ๋๋ค๋ฉด, ํ๋๋ฅผ ์ญ์ ํ๋ค.
ํ๋๋ฅผ ์ญ์ ํ๋ฉด ๋ฐ์ธ๋ฉ ๋์ด์๋ ์๋น์ค ์ด์นด์ดํธ ํ ํฐ ์ญ์ ๋ง๋ฃ๋๋ค.์๋น์ค์ด์นด์ดํธ์ ๋ํด ์๋์ผ๋ก ์ํฌ๋ฆฟ ๊ด๋ฆฌํ๊ธฐ ์ฟ ๋ฒ๋คํฐ์ค v1.22 ์ด์ ์ ๋ฒ์ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค API์ ์ ๊ทผํ๊ธฐ ์ํ ์๊ฒฉ ์ฆ๋ช
๋ค์ ์๋์ผ๋ก ์์ฑํ๋ค.
์ด๋ฌํ ์ ๋ฉ์ปค๋์ฆ๋ค์, ์คํ ์ค์ธ ํ๋์ ๋ง์ดํธ ๋ ์ ์๋
ํ ํฐ ์ํฌ๋ฆฟ์ ๋ง๋๋ ๊ฒ์ ๊ธฐ๋ฐ์ ๋์๋ค.
์ฟ ๋ฒ๋คํฐ์ค v1.34์ ํฌํจํ ์ต์ ๋ฒ์ ์์๋,
API ์๊ฒฉ ์ฆ๋ช
๋ค์ TokenRequest API๋ฅผ ์ฌ์ฉํ์ฌ
์ง์ ์ป์ ์ ์์ผ๋ฉฐ ,
ํ๋ก์ ํฐ๋ ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ํ๋์ ๋ง์ดํธํ ์ ์๋ค.
์ด ๋ฐฉ๋ฒ์ผ๋ก ์ทจ๋ํ ํ ํฐ์ ์๊ฐ ์ ํ์ด ์์ผ๋ฉฐ,
๋ง์ดํธ ๋์๋ ํ๋๊ฐ ์ญ์ ๋๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ง๋ฃ๋๋ค.
์๋ฅผ ๋ค์ด ํ์ ๋ง๋ฃ๋์ง ์๋ ํ ํฐ์ด ํ์ํ ๊ฒฝ์ฐ, ์๋น์ค ์ด์นด์ดํธ ํ ํฐ์ ์ ์งํ๊ธฐ ์ํ ์ํฌ๋ฆฟ์ ์๋์ผ๋ก ์์ฑ ํ ์ ์๋ค.
ํ ๋ฒ ์ํฌ๋ฆฟ์ ์๋์ผ๋ก ์์ฑํ์ฌ ์๋น์ค์ด์นด์ดํธ์ ์ฐ๊ฒฐํ๋ค๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์ ์๋์ผ๋ก ํด๋น ์ํฌ๋ฆฟ์ ํ ํฐ์ ์ฑ์ด๋ค.
์ฐธ๊ณ : ์ฅ๊ธฐ๊ฐ ์ฌ์ฉํ ์๋น์ค์ด์นด์ดํธ ํ ํฐ์ ์๋์ผ๋ก ์์ฑํ๋ ๋ฉ์ปค๋์ฆ์ด ์กด์ฌํ์ง๋ง,
๋จ๊ธฐ๊ฐ ๋์์๋ง ์ฌ์ฉํ ํ ํฐ์ ์ทจ๋ํ๋ ๊ฒฝ์ฐ
TokenRequest ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ์ ์ธ๋ถ ์ฌํญ๋ค ํ ํฐ ์ปจํธ๋กค๋ฌ ํ ํฐ ์ปจํธ๋กค๋ฌ๋ kube-controller-manager
์ ์ผ๋ถ๋ก์จ ์คํ๋๋ฉฐ,
๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ค.
์๋น์ค์ด์นด์ดํธ์ ๋ํ ์ญ์ ๋ฅผ ๊ฐ์ํ๊ณ , ํด๋นํ๋ ๋ชจ๋ ์๋น์ค์ด์นด์ดํธ
ํ ํฐ ์ํฌ๋ฆฟ์ ๊ฐ์ด ์ญ์ ํ๋ค. ์๋น์ค์ด์นด์ดํธ ํ ํฐ ์ํฌ๋ฆฟ์ ๋ํ ์ถ๊ฐ๋ฅผ ๊ฐ์ํ๊ณ , ์ฐธ์กฐ๋ ์๋น์ค์ด์นด์ดํธ๊ฐ
์กด์ฌํ๋์ง ํ์ธํ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ์ํฌ๋ฆฟ์ ํ ํฐ์ ์ถ๊ฐํ๋ค. ์ํฌ๋ฆฟ์ ๋ํ ์ญ์ ๋ฅผ ๊ฐ์ํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ํด๋น ์๋น์ค์ด์นด์ดํธ์์
์ฐธ์กฐ ์ค์ธ ํญ๋ชฉ๋ค์ ์ ๊ฑฐํ๋ค. ์๋น์ค ์ด์นด์ดํธ ๊ฐ์ธํค ํ์ผ์ --service-account-private-key-file
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ kube-controller-manager
์ ํ ํฐ ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํด์ผ
ํ๋ค. ๊ฐ์ธํค๋ ์์ฑ๋ ์๋น์ค ์ด์นด์ดํธ ํ ํฐ์ ์๋ช
ํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ฒ์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก --service-account-key-file
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๊ณต๊ฐํค๋ฅผ
kube-apiserver
์ ์ ๋ฌํด์ผ ํ๋ค. ๊ณต๊ฐํค๋ ์ธ์ฆ ๊ณผ์ ์์ ํ ํฐ์
๊ฒ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ฒ์ด๋ค.
์๋น์ค์ด์นด์ดํธ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ ํ๋ ์์ ์ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ ๋ผ๋
ํ๋ฌ๊ทธ์ธ์ ํตํด ๊ตฌํ๋๋ค.
์ด๊ฒ์ API ์๋ฒ์ ์ผ๋ถ์ด๋ฉฐ,
ํ๋๊ฐ ์์ฑ๋ ๋ ํ๋๋ฅผ ์์ ํ๊ธฐ ์ํด ๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ค.
์ด ํ๋ฌ๊ทธ์ธ์ด ํ์ฑ ์ํ(๋๋ถ๋ถ์ ๋ฐฐํฌ์์ ๊ธฐ๋ณธ๊ฐ)์ธ ๊ฒฝ์ฐ,
์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ํ๋์ ์์ฑ ์์ ์ ๋ค์ ์์
๋ค์ ์ํํ๋ค.
ํ๋์ .spce.serviceAccountName
ํญ๋ชฉ์ด ์ง์ ๋์ง ์์๋ค๋ฉด, ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋
์คํํ๋ ค๋ ํ๋์ ์๋น์ค์ด์นด์ดํธ ์ด๋ฆ์ default
๋ก ์ค์ ํ๋ค. ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ์คํ๋๋ ํ๋๊ฐ ์ฐธ์กฐํ๋ ์๋น์ค์ด์นด์ดํธ๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
๋ง์ฝ ํด๋นํ๋ ์ด๋ฆ์ ์๋น์ค์ด์นด์ดํธ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ํ๋๋ฅผ ์คํ์ํค์ง ์๋๋ค.
์ด๋ default
์๋น์ค์ด์นด์ดํธ์ ๋ํด์๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค. ์๋น์ค์ด์นด์ดํธ์ automountServiceAccountToken
๋๋ ํ๋์ automountServiceAccountToken
์ค
์ด๋ ๊ฒ๋ false
๋ก ์ค์ ๋์ด ์์ง ์๋ค๋ฉด,์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ์คํํ๋ ค๋ ํ๋์
API์ ์ ๊ทผํ ์ ์๋ ํ ํฐ์ ํฌํจํ๋
๋ณผ๋ฅจ ์ ์ถ๊ฐํ๋ค. ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ํ๋์ ๊ฐ ์ปจํ
์ด๋์ volumeMount
๋ฅผ ์ถ๊ฐํ๋ค.
์ด๋ฏธ /var/run/secrets/kubernetes.io/serviceaccount
๊ฒฝ๋ก์ ๋ณผ๋ฅจ์ด ๋ง์ดํธ ๋์ด์๋
์ปจํ
์ด๋์ ๋ํด์๋ ์ถ๊ฐํ์ง ์๋๋ค.
๋ฆฌ๋
์ค ์ปจํ
์ด๋์ ๊ฒฝ์ฐ, ํด๋น ๋ณผ๋ฅจ์ /var/run/secrets/kubernetes.io/serviceaccount
์์น์ ๋ง์ดํธ๋๋ฉฐ,
์๋์ฐ ๋
ธ๋ ์ญ์ ๋์ผํ ๊ฒฝ๋ก์ ๋ง์ดํธ๋๋ค. ํ๋์ spec์ imagePullSecrets
์ด ์๋ ๊ฒฝ์ฐ,
์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ServiceAccount
์ imagePullSecrets
์ ๋ณต์ฌํ์ฌ ์ถ๊ฐ๋๋ค. TokenRequest API ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.22 [stable]
์๋น์ค์ด์นด์ดํธ์ ํ์ ๋ฆฌ์์ค์ธ TokenRequest ๋ฅผ ์ฌ์ฉํ์ฌ
์ผ์ ์๊ฐ ๋์ ํด๋น ์๋น์ค์ด์นด์ดํธ์์ ์ฌ์ฉํ ์ ์๋ ํ ํฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ปจํ
์ด๋ ๋ด์์ ์ฌ์ฉํ๊ธฐ ์ํ API ํ ํฐ์ ์ป๊ธฐ ์ํด ์ด ์์ฒญ์ ์ง์ ํธ์ถํ ํ์๋ ์๋๋ฐ,
kubelet์ด ํ๋ก์ ํฐ๋ ๋ณผ๋ฅจ ์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ค์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
kubectl
์์ TokenRequest API๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด,
์๋น์ค์ด์นด์ดํธ๋ฅผ ์ํ API ํ ํฐ์ ์๋์ผ๋ก ์์ฑํ๊ธฐ ๋ฅผ ํ์ธํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ(๊ตฌ์ฒด์ ์ผ๋ก๋ ์๋น์ค์ด์นด์ดํธ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ)์
ํ๋์ ํ๋ก์ ํฐ๋ ๋ณผ๋ฅจ์ ์ถ๊ฐํ๊ณ , kubelet์ ์ปจํ
์ด๋๊ฐ ์ฌ๋ฐ๋ฅธ ์๋น์ค์ด์นด์ดํธ๋ก ์ธ์ฆํ ์ ์๋๋ก
ํด๋น ๋ณผ๋ฅจ์ด ํ ํฐ์ ํฌํจํ๋๊ณ ์๋์ง ํ์ธํ๋ค.
(์ด ๋ฉ์ปค๋์ฆ์ ์ํฌ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณผ๋ฅจ์ ์ถ๊ฐํ๋ ์ด์ ๋ฉ์ปค๋์ฆ์ ๋์ฒดํ ๊ฒ์ด๋ค.
ํด๋น ์ํฌ๋ฆฟ์ ํ๋์ ์๋น์ค์ด์นด์ดํธ๋ฅผ ๋ํ๋์๋๋ฐ, ์ด๋ ๋ง๋ฃ๊ฐ ๋์ง ์๋ ๊ฒ์ด์๋ค.)
์๋๋ ์คํ ์ค์ธ ํ๋์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ํ ์์์ด๋ค.
...
- name : kube-api-access-<random-suffix>
projected :
defaultMode : 420 # 8์ง์ 0644์ ๋ํ 10์ง์ ๊ฐ
sources :
- serviceAccountToken :
expirationSeconds : 3607
path : token
- configMap :
items :
- key : ca.crt
path : ca.crt
name : kube-root-ca.crt
- downwardAPI :
items :
- fieldRef :
apiVersion : v1
fieldPath : metadata.namespace
path : namespace
์์ ๋งค๋ํ์คํธ๋ ์ธ ๊ฐ์ง ์ ๋ณด๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ํฐ๋ ๋ณผ๋ฅจ์ ์ ์ํ๋ค.
์๋น์ค์ด์นด์ดํธํ ํฐ(serviceAccountToken)
์ ๋ณด๋ kubelet์ด kube-apiserver๋ก๋ถํฐ ์ทจ๋ํ ํ ํฐ์ ํฌํจํ๋ค.
kubelet์ TokenRequest API๋ฅผ ํตํด ์ผ์ ์๊ฐ ๋์ ์ฌ์ฉํ ์ ์๋ ํ ํฐ์ ๋ฐ๊ธ ๋ฐ๋๋ค.
์ด๋ ๊ฒ ์ทจ๋ํ ํ ํฐ์ ํ๋๊ฐ ์ญ์ ๋๊ฑฐ๋ ์ง์ ๋ ์๋ช
์ฃผ๊ธฐ ์ดํ์ ๋ง๋ฃ๋๋ค(๊ธฐ๋ณธ๊ฐ์ 1์๊ฐ์ด๋ค).
์ด ํ ํฐ์ ํน์ ํ ํ๋์ ๋ฐ์ธ๋ฉ๋๋ฉฐ kube-apiserver๋ฅผ ๊ทธ ๋์์ผ๋ก ํ๋ค.์ปจํผ๊ทธ๋งต(ConfigMap)
์ ๋ณด๋ ์ธ์ฆ ๋ฐ ์ธ๊ฐ์ ๊ดํ ๋ฒ๋ค์ ํฌํจํ๋ค.
ํ๋๋ค์ ์ด๋ฌํ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํด๋ฌ์คํฐ์ kube-apiserver(๋ฏธ๋ค๋ฐ์ค๋ ์ค์๋ก ์๋ชป ๊ตฌ์ฑ๋ ํผ์ด๊ฐ ์๋)
์ ๋ํ ์ฐ๊ฒฐ์ ํ์ธํ ์ ์๋ค.DownwardAPI
์ ๋ณด๋ ํ๋๊ฐ ํฌํจ๋ ๋ค์์คํ์ด์ค๋ฅผ ๊ฒ์ํ๊ณ ,
ํด๋น ์ ๋ณด๋ฅผ ํ๋ ๋ด๋ถ์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.์ด๋ฌํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ์ปจํ
์ด๋๋ ์์ ์ ๋ณด๋ค์ ์ ๊ทผํ ์ ์๋ค.
์ถ๊ฐ์ ์ธ API ํ ํฐ ์์ฑํ๊ธฐ ์ฃผ์: ํ ํฐ ์์ฒญ ๋ฉ์ปค๋์ฆ์ด ์ ํฉํ์ง ์์ ๊ฒฝ์ฐ์๋ง ์๋ช
์ด ๊ธด API ํ ํฐ์ ์์ฑํ๋ค.
ํ ํฐ ์์ฒญ ๋ฉ์ปค๋์ฆ์ ์๊ฐ ์ ํ์ด ์๋ ํ ํฐ๋ง์ ์ ๊ณตํ๋ฉฐ,
ํ ํฐ์ด ๋ง๋ฃ๋๊ธฐ ๋๋ฌธ์ ๋ณด์์ ๋ํ ์ํ์ด ์ ๋ค.
์๋น์ค์ด์นด์ดํธ๋ฅผ ์ํ ๋ง๋ฃ๋์ง ์๋ API ํ ํฐ์ ์์ฑํ๋ ค๋ฉด,
ํด๋น ์๋น์ค์ด์นด์ดํธ๋ฅผ ์ฐธ์กฐํ๋ ์ด๋
ธํ
์ด์
์ ๊ฐ๋ kubernetes.io/service-account-token
ํ์
์ ์ํฌ๋ฆฟ์ ์์ฑํ๋ค.
๊ทธ๋ฌ๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์ ์ฅ๊ธฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ํ ํฐ์ ๋ฐ๊ธํ์ฌ
์ํฌ๋ฆฟ์ ๊ฐฑ์ ํ ๊ฒ์ด๋ค.
์๋๋ ์ํฌ๋ฆฟ์ ์ํ ์์ ๋งค๋ํ์คํธ์ด๋ค.
apiVersion : v1
kind : Secret
type : kubernetes.io/service-account-token
metadata :
name : mysecretname
annotations :
kubernetes.io/service-account.name : myserviceaccount
์ด ์์ ์ ๊ธฐ๋ฐํ ์ํฌ๋ฆฟ์ ์์ฑํ๋ ค๋ฉด, ์๋์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
kubectl -n examplens create -f https://k8s.io/examples/secret/serviceaccount/mysecretname.yaml
์ํฌ๋ฆฟ์ ๋ํ ์์ธํ ์ฌํญ์ ํ์ธํ๋ ค๋ฉด, ์๋์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
kubectl -n examplens describe secret mysecretname
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Name: mysecretname
Namespace: examplens
Labels: <none>
Annotations: kubernetes.io/service-account.name=myserviceaccount
kubernetes.io/service-account.uid=8a85c4c4-8483-11e9-bc42-526af7764f64
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1362 bytes
namespace: 9 bytes
token: ...
๋ง์ฝ examplens
๋ค์์คํ์ด์ค์ ์๋ก์ด ํ๋๋ฅผ ์คํํ๋ค๋ฉด, ํด๋น ํ๋๋ ๋ฐฉ๊ธ ์์ฑํ myserviceaccount
์๋น์ค ์ด์นด์ดํธ ํ ํฐ ์ํฌ๋ฆฟ์ ์ฌ์ฉํ ์ ์๋ค.
์๋น์ค์ด์นด์ดํธ ํ ํฐ ์ํฌ๋ฆฟ ์ญ์ /๋ฌดํจํ ๋ง์ฝ ์ ๊ฑฐํ๋ ค๋ ํ ํฐ์ ํฌํจํ๋ ์ํฌ๋ฆฟ์ ์ด๋ฆ์ ์๊ณ ์๋ค๋ฉด, ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
kubectl delete secret name-of-secret
๊ทธ๊ฒ ์๋๋ผ๋ฉด, ๋จผ์ ์ํฌ๋ฆฟ์ ํ์ธํ๋ค.
# ์๋ ๋ช
๋ น์ด๋ 'examplens' ๋ค์์คํ์ด์ค๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๋ค.
kubectl -n examplens get serviceaccount/example-automated-thing -o yaml
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion : v1
kind : ServiceAccount
metadata :
annotations :
kubectl.kubernetes.io/last-applied-configuration : |
{"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"example-automated-thing","namespace":"examplens"}}
creationTimestamp : "2019-07-21T07:07:07Z"
name : example-automated-thing
namespace : examplens
resourceVersion : "777"
selfLink : /api/v1/namespaces/examplens/serviceaccounts/example-automated-thing
uid : f23fd170-66f2-4697-b049-e1e266b7f835
secrets :
- name : example-automated-thing-token-zyxwv
์ด์ ์ํฌ๋ฆฟ์ ์ด๋ฆ์ ์์์ผ๋, ์ญ์ ํ๋ค.
kubectl -n examplens delete secret/example-automated-thing-token-zyxwv
์ปจํธ๋กค ํ๋ ์ธ์ ์๋น์ค์ด์นด์ดํธ์ ์ํฌ๋ฆฟ์ด ๋๋ฝ๋์์์ ๊ฐ์งํ๊ณ ,
์๋ก์ด ๊ฒ์ผ๋ก ๋์ฒดํ๋ค.
kubectl -n examplens get serviceaccount/example-automated-thing -o yaml
apiVersion : v1
kind : ServiceAccount
metadata :
annotations :
kubectl.kubernetes.io/last-applied-configuration : |
{"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"example-automated-thing","namespace":"examplens"}}
creationTimestamp : "2019-07-21T07:07:07Z"
name : example-automated-thing
namespace : examplens
resourceVersion : "1026"
selfLink : /api/v1/namespaces/examplens/serviceaccounts/example-automated-thing
uid : f23fd170-66f2-4697-b049-e1e266b7f835
secrets :
- name : example-automated-thing-token-4rdrh
์ ๋ฆฌํ๊ธฐ ์์ ๋ฅผ ์ํด examplens
๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ์๋ค๋ฉด, ์๋์ ๋ช
๋ น์ด๋ก ์ ๊ฑฐํ ์ ์๋ค.
kubectl delete namespace examplens
์ปจํธ๋กค ํ๋ ์ธ์ ์ธ๋ถ ์ฌํญ๋ค ์๋น์ค์ด์นด์ดํธ ์ปจํธ๋กค๋ฌ ์๋น์ค์ด์นด์ดํธ ์ปจํธ๋กค๋ฌ๋ ๋ค์์คํ์ด์ค ๋ด์ ์๋น์ค์ด์นด์ดํธ๋ค์ ๊ด๋ฆฌํ๋ฉฐ,
ํ์ฑํ๋ ๋ชจ๋ ๋ค์์คํ์ด์ค์ "default"๋ผ๋ ์ด๋ฆ์ ์๋น์ค์ด์นด์ดํธ๊ฐ ์กด์ฌํ๋๋ก ํ๋ค.
ํ ํฐ ์ปจํธ๋กค๋ฌ ํ ํฐ ์ปจํธ๋กค๋ฌ๋ kube-controller-manager
์ ์ผ๋ถ๋ก์จ ์คํ๋๋ฉฐ,
๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ค.
์๋น์ค์ด์นด์ดํธ์ ๋ํ ์์ฑ์ ๊ฐ์ํ๊ณ , ํด๋น ์๋น์ค์ด์นด์ดํธ ํ ํฐ ์ํฌ๋ฆฟ์ ์์ฑํ์ฌ
API์ ๋ํ ์ ๊ทผ์ ํ์ฉํ๋ค. ์๋น์ค์ด์นด์ดํธ์ ๋ํ ์ญ์ ๋ฅผ ๊ฐ์ํ๊ณ , ํด๋นํ๋ ๋ชจ๋ ์๋น์ค์ด์นด์ดํธ
ํ ํฐ ์ํฌ๋ฆฟ์ ๊ฐ์ด ์ญ์ ํ๋ค. ์๋น์ค์ด์นด์ดํธ ํ ํฐ ์ํฌ๋ฆฟ์ ๋ํ ์ถ๊ฐ๋ฅผ ๊ฐ์ํ๊ณ , ์ฐธ์กฐ๋ ์๋น์ค์ด์นด์ดํธ๊ฐ
์กด์ฌํ๋์ง ํ์ธํ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ์ํฌ๋ฆฟ์ ํ ํฐ์ ์ถ๊ฐํ๋ค. ์ํฌ๋ฆฟ์ ๋ํ ์ญ์ ๋ฅผ ๊ฐ์ํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ํด๋น ์๋น์ค์ด์นด์ดํธ์์
์ฐธ์กฐ ์ค์ธ ํญ๋ชฉ๋ค์ ์ ๊ฑฐํ๋ค. ์๋น์ค ์ด์นด์ดํธ ๊ฐ์ธํค ํ์ผ์ --service-account-private-key-file
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ kube-controller-manager
์ ํ ํฐ ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํด์ผ
ํ๋ค. ๊ฐ์ธํค๋ ์์ฑ๋ ์๋น์ค ์ด์นด์ดํธ ํ ํฐ์ ์๋ช
ํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ฒ์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก --service-account-key-file
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๊ณต๊ฐํค๋ฅผ
kube-apiserver
์ ์ ๋ฌํด์ผ ํ๋ค. ๊ณต๊ฐํค๋ ์ธ์ฆ ๊ณผ์ ์์ ํ ํฐ์
๊ฒ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ฒ์ด๋ค.
๋ค์ ๋ด์ฉ 3.3 - ์ธ๊ฐ ๊ฐ์ ์ง์๋๋ ์ธ๊ฐ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ ์ฑ
์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ํฌํจํ
์ฟ ๋ฒ๋คํฐ์ค ์ธ๊ฐ์ ๋ํด ์์ธํ ์์๋ณด์.
์ฟ ๋ฒ๋คํฐ์ค์์๋ ์ฌ์ฉ์์ ์์ฒญ์ด ์ธ๊ฐ(์ ๊ทผ ๊ถํ์ ๋ถ์ฌ) ๋ฐ๊ธฐ ์ ์ ์ฌ์ฉ์๊ฐ ์ธ์ฆ(๋ก๊ทธ์ธ)๋์ด์ผ ํ๋ค.
์ธ์ฆ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฟ ๋ฒ๋คํฐ์ค API ์ ๊ทผ ์ ์ดํ๊ธฐ ๋ฅผ
์ฐธ๊ณ ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ REST API ์์ฒญ์ ๊ณตํต์ ์ธ ์์ฑ์ ์๊ตฌํ๋ค.
์ด๋ ์ฟ ๋ฒ๋คํฐ์ค ์ธ๊ฐ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค API ์ด์ธ์ ๋ค๋ฅธ API๋ฅผ ์ฒ๋ฆฌํ ์ ์๋
๊ธฐ์กด ์กฐ์ง ์ ์ฒด ๋๋ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ ์ฒด์ ์ ๊ทผ ์ ์ด ์์คํ
๊ณผ
์ฐ๋๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์์ฒญ ํ์ฉ ๋๋ ๊ฑฐ๋ถ ๊ฒฐ์ ์ฟ ๋ฒ๋คํฐ์ค๋ API ์๋ฒ๋ฅผ ์ด์ฉํ์ฌ API ์์ฒญ์ ์ธ๊ฐํ๋ค.
๋ชจ๋ ์ ์ฑ
๊ณผ ๋น๊ตํ์ฌ ๋ชจ๋ ์์ฒญ ์์ฑ์ ํ๊ฐํ๊ณ ์์ฒญ์ ํ์ฉํ๊ฑฐ๋ ๊ฑฐ๋ถํ๋ค.
๊ณ์ ์งํํ๋ ค๋ฉด API ์์ฒญ์ ๋ชจ๋ ๋ถ๋ถ์ด ์ผ๋ถ ์ ์ฑ
์ ์ํด ๋ฐ๋์ ํ์ฉ๋์ด์ผ ํ๋ค.
์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์น์ธ์ด ๊ฑฐ๋ถ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
(์ฟ ๋ฒ๋คํฐ์ค๋ API ์๋ฒ๋ฅผ ์ฌ์ฉํ์ง๋ง,
ํน์ ์ค๋ธ์ ํธ์ ํน์ ํ๋์ ์์กดํ๋ ์ ๊ทผ ์ ์ด ๋ฐ ์ ์ฑ
์
์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ์ ์ํด ์ฒ๋ฆฌ๋๋ค.)
์ฌ๋ฌ ๊ฐ์ ์ธ๊ฐ ๋ชจ๋์ด ๊ตฌ์ฑ๋๋ฉด ๊ฐ ๋ชจ๋์ด ์์๋๋ก ํ์ธ๋๋ค.
์ด๋ ์ธ๊ฐ ๋ชจ๋์ด ์์ฒญ์ ์น์ธํ๊ฑฐ๋ ๊ฑฐ๋ถํ ๊ฒฝ์ฐ, ๊ทธ ๊ฒฐ์ ์ ์ฆ์ ๋ฐํ๋๋ฉฐ ๋ค๋ฅธ ์ธ๊ฐ ๋ชจ๋์ด ์ฐธ๊ณ ๋์ง ์๋๋ค.
๋ชจ๋ ๋ชจ๋์์ ์์ฒญ์ ๋ํ ํ๊ฐ๊ฐ ์์ผ๋ฉด ์์ฒญ์ด ๊ฑฐ๋ถ๋๋ค.
์์ฒญ ๊ฑฐ๋ถ๋ HTTP ์ํ ์ฝ๋ 403์ ๋ฐํํ๋ค.
์์ฒญ ์์ฑ ๊ฒํ ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ค์ API ์์ฒญ ์์ฑ๋ง ๊ฒํ ํ๋ค.
user - ์ธ์ฆ ์ค์ ์ ๊ณต๋ user
๋ฌธ์์ด.group - ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ์ํ ๊ทธ๋ฃน ์ด๋ฆ ๋ชฉ๋ก.extra - ์ธ์ฆ ๊ณ์ธต์์ ์ ๊ณตํ๋ ๋ฌธ์์ด ๊ฐ์ ๋ํ ์์์ ๋ฌธ์์ด ํค ๋งต.API - ์์ฒญ์ด API ๋ฆฌ์์ค์ ๋ํ ๊ฒ์ธ์ง ์ฌ๋ถ.Request path - /api
๋๋ /healthz
์ ๊ฐ์ด ๋ค์ํ ๋ฆฌ์์ค๊ฐ ์๋ ์๋ํฌ์ธํธ์ ๊ฒฝ๋ก.API request verb - get
, list
, create
, update
, patch
, watch
, delete
, deletecollection
๊ณผ ๊ฐ์ ๋ฆฌ์์ค ์์ฒญ์ ์ฌ์ฉํ๋ API ๋์ฌ. ๋ฆฌ์์ค API ์๋ํฌ์ธํธ์ ์์ฒญ ๋์ฌ๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด ์์ฒญ ๋์ฌ ๊ฒฐ์ ์ ์ฐธ๊ณ ํ๋ค.HTTP request verb - get
, post
, put
, delete
์ฒ๋ผ ์๋ฌธ์ HTTP ๋ฉ์๋๋ ๋ฆฌ์์ค๊ฐ ์๋ ์์ฒญ์ ์ฌ์ฉํ๋ค.Resource - ์ ๊ทผ ์ค์ธ ๋ฆฌ์์ค์ ID ๋๋ ์ด๋ฆ(๋ฆฌ์์ค ์์ฒญ๋ง ํด๋น) -- get
, update
, patch
, delete
๋์ฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฆฌ์์ค ์์ฒญ์ ๊ฒฝ์ฐ ๋ฆฌ์์ค ์ด๋ฆ์ ์ง์ ํด์ผ ํ๋ค.Subresource - ์ ๊ทผ ์ค์ธ ํ์ ๋ฆฌ์์ค(๋ฆฌ์์ค ์์ฒญ๋ง ํด๋น).Namespace - ์ ๊ทผ ์ค์ธ ์ค๋ธ์ ํธ์ ๋ค์์คํ์ด์ค(๋ค์์คํ์ด์ค์ ํ ๋น๋ ๋ฆฌ์์ค ์์ฒญ๋ง ํด๋น)API group - ์ ๊ทผ ์ค์ธ API ๊ทธ๋ฃน (๋ฆฌ์์ค ์์ฒญ์๋ง ํด๋น). ๋น ๋ฌธ์์ด์ ํต์ฌ(core) API ๊ทธ๋ฃน ์ ์ง์ ํ๋ค.์์ฒญ ๋์ฌ ๊ฒฐ์ ๋ฆฌ์์ค๊ฐ ์๋ ์์ฒญ
/api/v1/...
๋๋ /apis/<group>/<version>/...
์ด์ธ์ ๋ค๋ฅธ ์๋ํฌ์ธํธ์ ๋ํ ์์ฒญ์
"๋ฆฌ์์ค๊ฐ ์๋ ์์ฒญ"์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ, ์์ฒญ์ ์๋ฌธ์ HTTP ๋ฉ์๋๋ฅผ ๋์ฌ๋ก ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด, /api
๋๋ /healthz
์ ๊ฐ์ ์๋ํฌ์ธํธ์ ๋ํ GET
์์ฒญ์ get
์ ๋์ฌ๋ก ์ฌ์ฉํ ๊ฒ์ด๋ค.
๋ฆฌ์์ค ์์ฒญ
๋ฆฌ์์ค API ์๋ํฌ์ธํธ์ ๋ํ ์์ฒญ ๋์ฌ๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด
์ฌ์ฉ๋ HTTP ๋์ฌ์ ํด๋น ์์ฒญ์ด ๊ฐ๋ณ ๋ฆฌ์์ค ๋๋ ๋ฆฌ์์ค ๋ชจ์์ ์ ์ฉ๋๋์ง ์ฌ๋ถ๋ฅผ
๊ฒํ ํ๋ค.
HTTP ๋์ฌ ์์ฒญ ๋์ฌ POST create GET, HEAD get(๊ฐ๋ณ ๋ฆฌ์์ค), list(์ ์ฒด ์ค๋ธ์ ํธ ๋ด์ฉ์ ํฌํจํ ๋ฆฌ์์ค ๋ชจ์), watch(๊ฐ๋ณ ๋ฆฌ์์ค ๋๋ ๋ฆฌ์์ค ๋ชจ์์ ์ฃผ์) PUT update PATCH patch DELETE delete(๊ฐ๋ณ ๋ฆฌ์์ค), deletecollection(๋ฆฌ์์ค ๋ชจ์)
์ฃผ์: get
, list
, watch
์์ฒญ์ ๋ชจ๋ ๋ฆฌ์์ค์ ์ ์ฒด ์ธ๋ถ ๋ด์ฉ์ ๋ฐํํ ์ ์๋ค. ๋ฐํ๋ ๋ฐ์ดํฐ์ ๊ด์ ์ผ๋ก ๋ชจ๋ ๋์ผํ๋ค. ์๋ฅผ ๋ค์ด secrets
์ ๋ํด list
์์ฒญ์ ๋ฐํ๋ ๋ฆฌ์์ค์ data
์์ฑ์ ์ฌ์ ํ ๋๋ฌ๋ผ ๊ฒ์ด๋ค.์ฟ ๋ฒ๋คํฐ์ค๋ ์ข
์ข
์ ๋ฌธ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๊ฐ์ ์ธ ๊ถํ ์ธ๊ฐ๋ฅผ ํ์ธํ๋ค. ์๋ฅผ ๋ค๋ฉด,
RBAC rbac.authorization.k8s.io
API ๊ทธ๋ฃน์ roles
๋ฐ clusterroles
๋ฆฌ์์ค์ ๋ํ bind
๋์ฌ.์ธ์ฆ ํต์ฌ API ๊ทธ๋ฃน์ users
, groups
, serviceaccounts
์ authentication.k8s.io
API ๊ทธ๋ฃน์ userextras
๋์ฌ. ์ธ๊ฐ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๋ ๋ช ๊ฐ์ง ์ธ๊ฐ ๋ชจ๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์น์ธํ ์ ์๋ค.
Node - ์คํ๋๋๋ก ์ค์ผ์ค๋ ํ๋์ ๋ฐ๋ผ kubelet์๊ฒ ๊ถํ์ ๋ถ์ฌํ๋ ํน์ ๋ชฉ์ ์ธ๊ฐ ๋ชจ๋. Node ์ธ๊ฐ ๋ชจ๋ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ Node ์ธ๊ฐ ๋ฅผ ์ฐธ์กฐํ๋ค.ABAC - ์์ฑ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด (ABAC, Attribute-based access control)๋ ์์ฑ๊ณผ ๊ฒฐํฉํ ์ ์ฑ
์ ์ฌ์ฉ์ ํตํด ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ์ ๊ทผ ์ ์ด ํจ๋ฌ๋ค์์ ๋งํ๋ค. ์ด ์ ์ฑ
์ ๋ชจ๋ ์ ํ์ ์์ฑ(์ฌ์ฉ์ ์์ฑ, ๋ฆฌ์์ค ์์ฑ, ์ค๋ธ์ ํธ, ํ๊ฒฝ ์์ฑ ๋ฑ)์ ์ฌ์ฉํ ์ ์๋ค. ABAC ๋ชจ๋ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ABAC ๋ชจ๋ ๋ฅผ ์ฐธ์กฐํ๋ค.RBAC - ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(RBAC, Role-based access control)๋ ๊ธฐ์
๋ด ๊ฐ๋ณ ์ฌ์ฉ์์ ์ญํ ์ ๊ธฐ๋ฐ์ผ๋ก ์ปดํจํฐ๋ ๋คํธ์ํฌ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ ๊ท์ ํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋งฅ๋ฝ์์ ์ ๊ทผ์ ๊ฐ๋ณ ์ฌ์ฉ์๊ฐ ํ์ผ์ ๋ณด๊ฑฐ๋ ๋ง๋ค๊ฑฐ๋ ์์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ํน์ ์์
์ ์ํํ ์ ์๋ ๋ฅ๋ ฅ์ด๋ค. RBAC ๋ชจ๋ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ RBAC ๋ชจ๋ ๋ฅผ ์ฐธ์กฐํ๋ค.์ง์ ๋ RBAC(์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด)์ด ์ธ๊ฐ ๊ฒฐ์ ์ ์ํด rbac.authorization.k8s.io
API ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด, ๊ด๋ฆฌ์๊ฐ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ํตํด ๊ถํ ์ ์ฑ
์ ๋์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค. RBAC์ ํ์ฑํํ๋ ค๋ฉด --authorization-mode=RBAC
๋ก API ์๋ฒ๋ฅผ ์์ํ๋ค. Webhook - WebHook์ HTTP ์ฝ๋ฐฑ์ด๋ค(์ด๋ค ์ผ์ด ์ผ์ด๋ ๋ ๋ฐ์ํ๋ HTTP POST์ HTTP POST๋ฅผ ํตํ ๊ฐ๋จํ ์ด๋ฒคํธ ์๋ฆผ). WebHook์ ๊ตฌํํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํน์ ํ ์ผ์ด ๋ฐ์ํ ๋ URL์ ๋ฉ์์ง๋ฅผ POST ํ ๊ฒ์ด๋ค. Webhook ๋ชจ๋ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ Webhook ๋ชจ๋ ๋ฅผ ์ฐธ์กฐํ๋ค.API ์ ๊ทผ ํ์ธ kubectl
์ API ์ธ์ฆ ๊ณ์ธต์ ์ ์ํ๊ฒ ์ฟผ๋ฆฌํ๊ธฐ ์ํ auth can-i
ํ์ ๋ช
๋ น์ด๋ฅผ ์ ๊ณตํ๋ค.
์ด ๋ช
๋ น์ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ง์ ๋ ์์
์ ์ํํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ์์๋ด๊ธฐ ์ํด SelfSubjectAccessReview
API๋ฅผ ์ฌ์ฉํ๋ฉฐ,
์ฌ์ฉ๋๋ ์ธ๊ฐ ๋ชจ๋์ ๊ด๊ณ์์ด ์๋ํ๋ค.
kubectl auth can-i create deployments --namespace dev
๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
yes
kubectl auth can-i create deployments --namespace prod
๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
no
๊ด๋ฆฌ์๋ ์ด๋ฅผ ์ฌ์ฉ์ ๊ฐ์ฅ(impersonation) ๊ณผ
๋ณํํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ํํ ์ ์๋ ์์
์ ๊ฒฐ์ ํ ์ ์๋ค.
kubectl auth can-i list secrets --namespace dev --as dave
๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
no
์ ์ฌํ๊ฒ, dev
๋ค์์คํ์ด์ค์ dev-sa
์๋น์ค์ด์นด์ดํธ๊ฐ
target
๋ค์์คํ์ด์ค์ ํ๋ ๋ชฉ๋ก์ ๋ณผ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์คํํ๋ค.
kubectl auth can-i list pods \
--namespace target \
--as system:serviceaccount:dev:dev-sa
๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
yes
SelfSubjectAccessReview
๋ authorization.k8s.io
API ๊ทธ๋ฃน์ ์ผ๋ถ๋ก์
API ์๋ฒ ์ธ๊ฐ๋ฅผ ์ธ๋ถ ์๋น์ค์ ๋
ธ์ถ์ํจ๋ค.
์ด ๊ทธ๋ฃน์ ๊ธฐํ ๋ฆฌ์์ค์๋ ๋ค์์ด ํฌํจ๋๋ค.
SubjectAccessReview
- ํ์ฌ ์ฌ์ฉ์๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ฌ์ฉ์์ ๋ํ ์ ๊ทผ ๊ฒํ . API ์๋ฒ์ ์ธ๊ฐ ๊ฒฐ์ ์ ์์ํ๋ ๋ฐ ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, kubelet ๋ฐ ํ์ฅ(extension) API ์๋ฒ๋ ์์ ์ API์ ๋ํ ์ฌ์ฉ์ ์ ๊ทผ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ํด๋น ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค.LocalSubjectAccessReview
- SubjectAccessReview
์ ๋น์ทํ์ง๋ง ํน์ ๋ค์์คํ์ด์ค๋ก ์ ํ๋๋ค.SelfSubjectRulesReview
- ์ฌ์ฉ์๊ฐ ๋ค์์คํ์ด์ค ์์์ ์ํํ ์ ์๋ ์์
์งํฉ์ ๋ฐํํ๋ ๊ฒํ . ์ฌ์ฉ์๊ฐ ์์ ์ ์ ๊ทผ์ ๋น ๋ฅด๊ฒ ์์ฝํด์ ๋ณด๊ฑฐ๋ UI๊ฐ ์์
์ ์จ๊ธฐ๊ฑฐ๋ ํ์ํ๋ ๋ฐ ์ ์ฉํ๋ค.์ด๋ฌํ API๋ ๋ฐํ๋ ์ค๋ธ์ ํธ์ ์๋ต "status" ํ๋๊ฐ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ์ธ
์ผ๋ฐ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ฅผ ์์ฑํ์ฌ ์ฟผ๋ฆฌํ ์ ์๋ค.
kubectl create -f - -o yaml << EOF
apiVersion: authorization.k8s.io/v1
kind: SelfSubjectAccessReview
spec:
resourceAttributes:
group: apps
resource: deployments
verb: create
namespace: dev
EOF
์์ฑ๋ SelfSubjectAccessReview
๋ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion : authorization.k8s.io/v1
kind : SelfSubjectAccessReview
metadata :
creationTimestamp : null
spec :
resourceAttributes :
group : apps
resource : deployments
namespace : dev
verb : create
status :
allowed : true
denied : false
์ธ๊ฐ ๋ชจ๋์ ํ๋๊ทธ ์ฌ์ฉ ์ ์ฑ
์ ํฌํจ๋ ์ธ๊ฐ ๋ชจ๋์ ๋ํ๋ด๊ธฐ ์ํด
์ ์ฑ
์ ํ๋๊ทธ๋ฅผ ํฌํจ์์ผ์ผ ํ๋ค.
๋ค์ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
--authorization-mode=ABAC
์์ฑ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(ABAC) ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก์ปฌ ํ์ผ์ ์ฌ์ฉํ์ฌ ์ ์ฑ
์ ๊ตฌ์ฑํ ์ ์๋ค.--authorization-mode=RBAC
์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด(RBAC) ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฑ
์ ๋ง๋ค๊ณ ์ ์ฅํ ์ ์๋ค.--authorization-mode=Webhook
WebHook์ ์๊ฒฉ REST ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ HTTP ์ฝ๋ฐฑ ๋ชจ๋๋ค.--authorization-mode=Node
๋
ธ๋ ์ธ๊ฐ๋ kubelet์ด ์์ฑํ API ์์ฒญ์ ํน๋ณํ ์ธ๊ฐ์ํค๋ ํน์ ๋ชฉ์ ์ธ๊ฐ ๋ชจ๋๋ค.--authorization-mode=AlwaysDeny
์ด ํ๋๊ทธ๋ ๋ชจ๋ ์์ฒญ์ ์ฐจ๋จํ๋ค. ์ด ํ๋๊ทธ๋ ํ
์คํธ์๋ง ์ฌ์ฉํ๋ค.--authorization-mode=AlwaysAllow
์ด ํ๋๊ทธ๋ ๋ชจ๋ ์์ฒญ์ ํ์ฉํ๋ค. API ์์ฒญ์ ๋ํ ์ธ๊ฐ๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ง ์ด ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.ํ๋ ์ด์์ ์ธ๊ฐ ๋ชจ๋์ ์ ํํ ์ ์๋ค. ๋ชจ๋์ด ์์๋๋ก ํ์ธ๋๊ธฐ ๋๋ฌธ์
์ฐ์ ์์๊ฐ ๋ ๋์ ๋ชจ๋์ด ์์ฒญ์ ํ์ฉํ๊ฑฐ๋ ๊ฑฐ๋ถํ ์ ์๋ค.
์ํฌ๋ก๋ ์์ฑ ๋ฐ ์์ ์ ํตํ ๊ถํ ํ๋ ๋ค์์คํ์ด์ค์์ ํ๋๋ฅผ ์ง์ , ๋๋ ์คํผ๋ ์ดํฐ์ ๊ฐ์ ์ปจํธ๋กค๋ฌ ๋ฅผ ํตํด ์์ฑ/์์ ํ ์ ์๋ ์ฌ์ฉ์๋
ํด๋น ๋ค์์คํ์ด์ค ์์์ ์์ ์ ๊ถํ์ ํ๋ํ ์ ์๋ค.
์ฃผ์: ์์คํ
๊ด๋ฆฌ์๋ ํ๋ ์์ฑ/์์ ์ ๋ํ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ๋ ์ฃผ์ํ๋ค.
๊ถํ ํ๋ ๊ฒฝ๋ก ์์ ์ ๊ทผ ๊ถํ์ด ์๋ชป ์ฌ์ฉ๋์์ ๋์ ์์ธ์ฌํญ์ ํ์ธํ ์ ์๋ค.
๊ถํ ํ๋ ๊ฒฝ๋ก ๋ค์์คํ์ด์ค ๋ด์ ์์์ ์ํฌ๋ฆฟ์ ๋ง์ดํธ๋ค๋ฅธ ์ํฌ๋ก๋๋ฅผ ์ํ ์ํฌ๋ฆฟ์ผ๋ก์ ์ ๊ทผ์ ์ฌ์ฉ๋ ์ ์์ ๋ ๊ถํ์ด ๋ง์ ์๋น์ค ์ด์นด์ดํธ์ ์๋น์ค ์ด์นด์ดํธ ํ ํฐ ํ๋์ ์ฌ์ฉ๋ ์ ์์ ๋ค์์คํ์ด์ค ๋ด์ ์์์ ์๋น์ค ์ด์นด์ดํธ๋ฅผ ์ฌ์ฉ๋ค๋ฅธ ์ํฌ๋ก๋์ธ๊ฒ์ฒ๋ผ ์ฌ์นญํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค API ์ก์
์ ์ํํ ์ ์์ ์๋น์ค ์ด์นด์ดํธ๊ฐ ๊ฐ๊ณ ์๋ '๊ถํ์ด ํ์ํ ์ก์
'์ ์ํํ ์ ์์ ๋ค์์คํ์ด์ค ๋ด์ ๋ค๋ฅธ ์ํฌ๋ก๋๋ฅผ ์ํ ์ปจํผ๊ทธ๋งต์ ๋ง์ดํธ๋ค๋ฅธ ์ํฌ๋ก๋๋ฅผ ์ํ ์ ๋ณด(์: DB ํธ์คํธ ์ด๋ฆ) ํ๋์ ์ฌ์ฉ๋ ์ ์์ ๋ค์์คํ์ด์ค ๋ด์ ๋ค๋ฅธ ์ํฌ๋ก๋๋ฅผ ์ํ ๋ณผ๋ฅจ์ ๋ง์ดํธ๋ค๋ฅธ ์ํฌ๋ก๋๋ฅผ ์ํ ์ ๋ณด์ ํ๋ ๋ฐ ์์ ์ ์ฌ์ฉ๋ ์ ์์
์ฃผ์: ์์คํ
๊ด๋ฆฌ์๋ ์์ ๊ฐ์ ์์ญ์ ์์ ํ๋ CRD๋ฅผ ๋ฐฐํฌํ ๋ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํ๋ค.
์ด๋ค์ ์๋ํ์ง ์์ ๊ถํ ํ๋ ๊ฒฝ๋ก๋ฅผ ๋
ธ์ถํ ์ ์๋ค.
RBAC ์ ์ด์ ๋ํด ๊ฒฐ์ ํ ๋ ์ด์ ๊ฐ์ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํ๋ค.๋ค์ ๋ด์ฉ 3.4 - Kubelet ์ธ์ฆ/์ธ๊ฐ ๊ฐ์ kubelet์ HTTPS ์๋ํฌ์ธํธ๋ ๋ค์ํ ๋ฏผ๊ฐ๋์ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ๋ API๋ฅผ ๋
ธ์ถํ๋ฉฐ,
๋
ธ๋์ ์ปจํ
์ด๋ ๋ด์์ ๋ค์ํ ์์ค์ ๊ถํ์ผ๋ก ์์
์ ์ํํ ์ ์๋๋ก ํ์ฉํ๋ค.
์ด ๋ฌธ์๋ kubelet์ HTTPS ์๋ํฌ์ธํธ์ ๋ํ ์ ๊ทผ์ ์ธ์ฆํ๊ณ ์ธ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ค.
Kubelet ์ธ์ฆ ๊ธฐ๋ณธ์ ์ผ๋ก, ๋ค๋ฅธ ๊ตฌ์ฑ์ ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ํด ๊ฑฐ๋ถ๋์ง ์์ kubelet์ HTTPS ์๋ํฌ์ธํธ์ ๋ํ ์์ฒญ์
์ต๋ช
์ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, system:anonymous
์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ system:unauthenticated
์ ๊ทธ๋ฃน์ด ๋ถ์ฌ๋๋ค.
์ต๋ช
์ ์ ๊ทผ์ ๋นํ์ฑํํ๊ณ ์ธ์ฆ๋์ง ์์ ์์ฒญ์ 401 Unauthorized
์๋ต์ ๋ณด๋ด๋ ค๋ฉด ์๋๋ฅผ ์ฐธ๊ณ ํ๋ค.
--anonymous-auth=false
ํ๋๊ทธ๋ก kubelet์ ์์kubelet์ HTTPS ์๋ํฌ์ธํธ์ ๋ํ X509 ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ธ์ฆ์ ํ์ฑํํ๋ ค๋ฉด ์๋๋ฅผ ์ฐธ๊ณ ํ๋ค.
--client-ca-file
ํ๋๊ทธ๋ก kubelet์ ์์ํ๋ฉด ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ํ์ธํ ์ ์๋ CA ๋ฒ๋ค์ ์ ๊ณต--kubelet-client-certificate
๋ฐ --kubelet-client-key
ํ๋๊ทธ๋ก apiserver๋ฅผ ์์์์ธํ ๋ด์ฉ์ apiserver ์ธ์ฆ ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ API bearer ํ ํฐ(์๋น์ค ๊ณ์ ํ ํฐ ํฌํจ)์ kubelet์ HTTPS ์๋ํฌ์ธํธ ์ธ์ฆ์ ์ฌ์ฉํ๋ ค๋ฉด ์๋๋ฅผ ์ฐธ๊ณ ํ๋ค.
API ์๋ฒ์์ authentication.k8s.io/v1beta1
API ๊ทธ๋ฃน์ด ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธ --authentication-token-webhook
๋ฐ --kubeconfig
ํ๋๊ทธ๋ก kubelet์ ์์kubelet์ ๊ตฌ์ฑ๋ API ์๋ฒ์ TokenReview
API๋ฅผ ํธ์ถํ์ฌ bearer ํ ํฐ์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฒฐ์ Kubelet ์น์ธ ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ๋ ๋ชจ๋ ์์ฒญ(์ต๋ช
์์ฒญ ํฌํจ)์ด ์น์ธ๋๋ค. ๊ธฐ๋ณธ ์ธ๊ฐ ๋ชจ๋๋ ๋ชจ๋ ์์ฒญ์ ํ์ฉํ๋ AlwaysAllow
์ด๋ค.
kubelet API์ ๋ํ ์ ๊ทผ์ ์ธ๋ถํํ๋ ๋ฐ๋ ๋ค์ํ ์ด์ ๊ฐ ์๋ค.
์ต๋ช
์ธ์ฆ์ ์ฌ์ฉํ ์ ์์ง๋ง, ์ต๋ช
์ฌ์ฉ์์ kubelet API ํธ์ถ ๊ธฐ๋ฅ์ ์ ํ๋์ด์ผ ํจ bearer ํ ํฐ ์ธ์ฆ์ ์ฌ์ฉํ ์ ์์ง๋ง, ์์์ API ์ฌ์ฉ์(API ๊ณ์ )์ kubelet API ํธ์ถ ๊ธฐ๋ฅ์ ์ ํ๋์ด์ผ ํจ ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ตฌ์ฑ๋ CA์์ ์๋ช
ํ ์ผ๋ถ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ง kubelet API๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉํด์ผ ํจ kubelet API์ ๋ํ ์ ๊ทผ์ ์ธ๋ถํํ๋ ค๋ฉด API ์๋ฒ์ ๊ถํ์ ์์ํ๋ค.
authorization.k8s.io/v1beta1
API ๊ทธ๋ฃน์ด API ์๋ฒ์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธ--authorization-mode=Webhook
๋ฐ --kubeconfig
ํ๋๊ทธ๋ก kubelet์ ์์kubelet์ ๊ตฌ์ฑ๋ API ์๋ฒ์ SubjectAccessReview
API๋ฅผ ํธ์ถํ์ฌ ๊ฐ๊ฐ์ ์์ฒญ์ด ์น์ธ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธ kubelet์ API ์์ฒญ์ apiserver์ ๋์ผํ ์์ฒญ ์์ฑ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์น์ธํ๋ค.
๋์ฌ๋ ๋ค์ด์ค๋ ์์ฒญ์ HTTP ๋์ฌ๋ก๋ถํฐ ๊ฒฐ์ ๋๋ค.
HTTP ๋์ฌ ์์ฒญ ๋์ฌ POST create GET, HEAD get PUT update PATCH patch DELETE delete
๋ฆฌ์์ค ๋ฐ ํ์ ๋ฆฌ์์ค๋ ๋ค์ด์ค๋ ์์ฒญ์ ๊ฒฝ๋ก๋ก๋ถํฐ ๊ฒฐ์ ๋๋ค.
Kubelet API ๋ฆฌ์์ค ํ์ ๋ฆฌ์์ค /stats/* nodes stats /metrics/* nodes metrics /logs/* nodes log /spec/* nodes spec all others nodes proxy
๋ค์์คํ์ด์ค์ API ๊ทธ๋ฃน ์์ฑ์ ํญ์ ๋น ๋ฌธ์์ด์ด๋ฉฐ,
๋ฆฌ์์ค ์ด๋ฆ์ ํญ์ kubelet์ Node
API ์ค๋ธ์ ํธ ์ด๋ฆ์ด๋ค.
์ด ๋ชจ๋๋ก ์คํํ ๋, --kubelet-client-certificate
๋ฐ --kubelet-client-key
ํ๋๊ทธ๋ก ์๋ณ๋ ์ฌ์ฉ์์๊ฒ
๋ค์ ์์ฑ์ ๋ํ ๊ถํ์ด ์๋์ง ํ์ธํ๋ค.
verb=*, resource=nodes, subresource=proxy verb=*, resource=nodes, subresource=stats verb=*, resource=nodes, subresource=log verb=*, resource=nodes, subresource=spec verb=*, resource=nodes, subresource=metrics 4 - ์ ์๋ ค์ง ๋ ์ด๋ธ, ์ด๋
ธํ
์ด์
, ํ
์ธํธ(Taint) ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ชจ๋ ๋ ์ด๋ธ๊ณผ ์ด๋
ธํ
์ด์
์ kubernetes.io
์ k8s.io
๋ค์์คํ์ด์ค ์๋์ ์ ์ํด ๋์๋ค.
์ด ๋ฌธ์๋ ๊ฐ ๊ฐ์ ๋ํ ๋ ํผ๋ฐ์ค๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ฐ์ ํ ๋นํ๊ธฐ ์ํ ํ๋ ฅ ํฌ์ธํธ๋ ์ ๊ณตํ๋ค.
API ์ค๋ธ์ ํธ์์ ์ฌ์ฉ๋๋ ๋ ์ด๋ธ, ์ด๋
ธํ
์ด์
, ํ
์ธํธ app.kubernetes.io/component ์์: app.kubernetes.io/component: "database"
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ (์ผ๋ฐ์ ์ผ๋ก ์ํฌ๋ก๋ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋จ)
์ํคํ
์ฒ ๋ด์ ์ปดํฌ๋ํธ.
์ถ์ฒํ๋ ๋ ์ด๋ธ ์ ํ์ธํ๋ค.
app.kubernetes.io/created-by (์ฌ์ฉ ์ค๋จ๋จ) ์์: app.kubernetes.io/created-by: "controller-manager"
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ (์ผ๋ฐ์ ์ผ๋ก ์ํฌ๋ก๋ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋จ)
๋ฆฌ์์ค๋ฅผ ์์ฑํ ์ปจํธ๋กค๋ฌ/์ฌ์ฉ์.
์ฐธ๊ณ : v1.9๋ถํฐ ์ด ๋ ์ด๋ธ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค.app.kubernetes.io/instance ์์: app.kubernetes.io/instance: "mysql-abcxzy"
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ (์ผ๋ฐ์ ์ผ๋ก ์ํฌ๋ก๋ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋จ)
์ ํ๋ฆฌ์ผ์ด์
์ธ์คํด์ค๋ฅผ ์๋ณํ๊ธฐ ์ํ ๊ณ ์ ํ ์ด๋ฆ. ๊ณ ์ ํ์ง ์์ ์ด๋ฆ์ ํ ๋นํ๋ ค๋ฉด, app.kubernetes.io/name ๋ฅผ ์ฌ์ฉํ๋ค.
์ถ์ฒํ๋ ๋ ์ด๋ธ ์ ํ์ธํ๋ค.
app.kubernetes.io/managed-by ์์: app.kubernetes.io/managed-by: "helm"
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ (์ผ๋ฐ์ ์ผ๋ก ์ํฌ๋ก๋ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋จ)
์ ํ๋ฆฌ์ผ์ด์
์ ์์
์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋๊ตฌ.
์ถ์ฒํ๋ ๋ ์ด๋ธ ์ ํ์ธํ๋ค.
app.kubernetes.io/name ์์: app.kubernetes.io/name: "mysql"
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ (์ผ๋ฐ์ ์ผ๋ก ์ํฌ๋ก๋ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋จ)
์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฆ.
์ถ์ฒํ๋ ๋ ์ด๋ธ ์ ํ์ธํ๋ค.
app.kubernetes.io/part-of ์์: app.kubernetes.io/part-of: "wordpress"
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ (์ผ๋ฐ์ ์ผ๋ก ์ํฌ๋ก๋ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋จ)
ํด๋น ์ ํ๋ฆฌ์ผ์ด์
์ด ์ํ ์์ ๋ ๋ฒจ์ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ.
์ถ์ฒํ๋ ๋ ์ด๋ธ ์ ํ์ธํ๋ค.
app.kubernetes.io/version ์์: app.kubernetes.io/version: "5.7.21"
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ (์ผ๋ฐ์ ์ผ๋ก ์ํฌ๋ก๋ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋จ)
์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฌ ๋ฒ์ .
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํํ์ ๊ฐ๋ค์ ํฌํจํ๋ค.
์ถ์ฒํ๋ ๋ ์ด๋ธ ์ ํ์ธํ๋ค.
cluster-autoscaler.kubernetes.io/safe-to-evict ์์: cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
์ ์ฉ ๋์: ํ๋
์ด ์ด๋
ธํ
์ด์
์ด "true"
๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ํ๋ ์ถ์ถ์ ๋ง๋ ๋ค๋ฅธ ๊ท์น์ด ์๋ ๊ฒฝ์ฐ์๋
ํด๋ฌ์คํฐ ์คํ ์ค์ผ์ผ๋ฌ๊ฐ ํ๋๋ฅผ ์ถ์ถํ ์ ์๋ค.
ํด๋ฌ์คํฐ ์คํ ์ค์ผ์ผ๋ฌ๋ ๋ช
์์ ์ผ๋ก ์ด ์ด๋
ธํ
์ด์
์ด "false"
๋ก ์ค์ ๋ ํ๋๋ฅผ ์ ๋ ์ถ์ถํ์ง ์๋๋ค.
๋ฐ๋ผ์, ๊ณ์ํด์ ์คํ์ ์ ์งํ๊ณ ์ ํ๋ ์ค์ํ ํ๋์ ์ค์ ํ ์ ์๋ค.
์ด ์ด๋
ธํ
์ด์
์ด ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ, ํด๋ฌ์คํฐ ์คํ ์ค์ผ์ผ๋ฌ๋ ํ๋ ์์ค(Pod-level) ๋์์ ๋ฐ๋ฅธ๋ค.
kubernetes.io/arch ์์: kubernetes.io/arch=amd64
์ ์ฉ ๋์: ๋
ธ๋
Go์ ์ํด ์ ์๋ runtime.GOARCH
๊ฐ์ kubelet์ด ์ฝ์ด์ ์ด ๋ ์ด๋ธ์ ๊ฐ์ผ๋ก ์ฑ์ด๋ค. arm ๋
ธ๋์ x86 ๋
ธ๋๋ฅผ ํผํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ฉํ ์ ์๋ค.
kubernetes.io/os ์์: kubernetes.io/os=linux
์ ์ฉ ๋์: ๋
ธ๋
Go์ ์ํด ์ ์๋ runtime.GOOS
๊ฐ์ kubelet์ด ์ฝ์ด์ ์ด ๋ ์ด๋ธ์ ๊ฐ์ผ๋ก ์ฑ์ด๋ค. ํด๋ฌ์คํฐ์์ ์ฌ๋ฌ ์ด์์ฒด์ ๋ฅผ ํผํฉํ์ฌ ์ฌ์ฉ(์: ๋ฆฌ๋
์ค ๋ฐ ์๋์ฐ ๋
ธ๋)ํ๋ ๊ฒฝ์ฐ ์ ์ฉํ ์ ์๋ค.
์์: kubernetes.io/metadata.name=mynamespace
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
(์ปจํธ๋กค ํ๋ ์ธ ์ ์ผ๋ถ์ธ)
์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๊ฐ ์ด ๋ ์ด๋ธ์ ๋ชจ๋ ๋ค์์คํ์ด์ค์ ์ค์ ํ๋ค.
๋ ์ด๋ธ์ ๊ฐ์ ๋ค์์คํ์ด์ค์ ์ด๋ฆ์ผ๋ก ์ ์ฉ๋๋ค. ์ด ๋ ์ด๋ธ์ ๊ฐ์ ๋ณ๊ฒฝํ ์๋ ์๋ค.
๋ ์ด๋ธ ์
๋ ํฐ ๋ฅผ ์ด์ฉํ์ฌ ํน์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ๊ณ ์ถ๋ค๋ฉด
์ด ๋ ์ด๋ธ์ด ์ ์ฉํ ์ ์๋ค.
kubernetes.io/limit-ranger ์์: kubernetes.io/limit-ranger: "LimitRanger plugin set: cpu, memory request for container nginx; cpu, memory limit for container nginx"
์ ์ฉ ๋์: ํ๋
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ ํ ๋ฆฌ์์ค ํ๋๋ ์ค์ ํ์ง ์๋๋ค. ๋ช
์์ ์ผ๋ก ํ๋๋ฅผ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ,
์ปจํ
์ด๋๋ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฌด์ ํ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค.
๋ค์์คํ์ด์ค์ ๋ฆฌ๋ฐ๋ ์ธ์ง๋ฅผ ์์ฑํจ์ผ๋ก์จ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ์ด๋ ํ๋ ๊ธฐ๋ณธ๊ฐ์ ํ๋์ ์ค์ ํ ์ ์๋ค.
๋ฆฌ๋ฐ๋ ์ธ์ง๋ฅผ ์ ์ํ ๋ค์ ๋ฐฐํฌ๋ ํ๋๋ค์ ์ด๋ฌํ ํ๋๊ฐ ์ ์ฉ๋๋ค.
kubernetes.io/limit-ranger
์ด๋
ธํ
์ด์
์ ํ๋์ ๋ํด ๋ฆฌ์์ค ๊ธฐ๋ณธ๊ฐ์ด
์ฑ๊ณต์ ์ผ๋ก ์ ์ฉ๋์๋ค๊ณ ๊ธฐ๋กํ๋ค.
์์ธํ ๋ด์ฉ์ ๋ฆฌ๋ฐ๋ ์ธ์ง ๋ฅผ ํ์ธํ๋ค.
beta.kubernetes.io/arch (์ฌ์ฉ ์ค๋จ๋จ) ์ด ๋ ์ด๋ธ์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ kubernetes.io/arch
์ ์ฌ์ฉํ๋ค.
beta.kubernetes.io/os (์ฌ์ฉ ์ค๋จ๋จ) ์ด ๋ ์ด๋ธ์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ kubernetes.io/os
์ ์ฌ์ฉํ๋ค.
kubernetes.io/hostname ์์: kubernetes.io/hostname=ip-172-20-114-199.ec2.internal
์ ์ฉ ๋์: ๋
ธ๋
kubelet์ด ํธ์คํธ๋ค์์ ์ฝ์ด์ ์ด ๋ ์ด๋ธ์ ๊ฐ์ผ๋ก ์ฑ์ด๋ค. kubelet
์ --hostname-override
ํ๋๊ทธ๋ฅผ ์ ๋ฌํ์ฌ ์ค์ ํธ์คํธ๋ค์๊ณผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ค์ ํ ์๋ ์๋ค.
์ด ๋ ์ด๋ธ์ ํ ํด๋ก์ง ๊ณ์ธต์ ์ผ๋ถ๋ก๋ ์ฌ์ฉ๋๋ค. topology.kubernetes.io/zone
์์ ์ธ๋ถ ์ฌํญ์ ํ์ธํ๋ค.
kubernetes.io/change-cause ์์: kubernetes.io/change-cause=kubectl edit --record deployment foo
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ
์ด ์ด๋
ธํ
์ด์
์ ์ด๋ค ์ค๋ธ์ ํธ๊ฐ ์ ๋ณ๊ฒฝ๋์๋์ง ๊ทธ ์ด์ ๋ฅผ ๋ด๋๋ค.
์ด๋ค ์ค๋ธ์ ํธ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์๋ kubectl
๋ช
๋ น์ --record
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ ์ด๋ธ์ด ์ถ๊ฐ๋๋ค.
kubernetes.io/description ์์: kubernetes.io/description: "Description of K8s object."
์ ์ฉ ๋์: ๋ชจ๋ ์ค๋ธ์ ํธ
์ด ์ด๋
ธํ
์ด์
์ ์ฃผ์ด์ง ์ค๋ธ์ ํธ์ ํน์ ์ํ๋ฅผ ํํํ๋๋ฐ ์ฌ์ฉํ๋ค.
kubernetes.io/enforce-mountable-secrets ์์: kubernetes.io/enforce-mountable-secrets: "true"
์ ์ฉ ๋์: ์๋น์ค์ด์นด์ดํธ(ServiceAccount)
์ด ์ด๋
ธํ
์ด์
์ ๊ฐ์ true ๋ก ์ค์ ๋์ด์ผ๋ง ์๋ํ๋ค. ์ด ์ด๋
ธํ
์ด์
์, ํด๋น ์๋น์ค์ด์นด์ดํธ๋ก ๋์์ค์ธ ํ๋๊ฐ ๊ทธ ์๋น์ค์ด์นด์ดํธ์ secrets
ํญ๋ชฉ์ ๋ช
์๋ Secret API ์ค๋ธ์ ํธ๋ง์ ์ฐธ์กฐํ๋ค๋ ๋ป์ด๋ค.
node.kubernetes.io/exclude-from-external-load-balancer ์์: node.kubernetes.io/exclude-from-external-load-balancer
์ ์ฉ ๋์: ๋
ธ๋
์ฟ ๋ฒ๋คํฐ์ค๋ ํด๋ฌ์คํฐ์ ServiceNodeExclusion
๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ์๋์ผ๋ก ํ์ฑํํ๋ค. ํด๋น ๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ํด๋ฌ์คํฐ์ ํ์ฑํ๋์ด ์์ผ๋ฉด,
๋ฐฑ์๋ ์๋ฒ๋ค๋ก๋ถํฐ ํน์ ์์ปค ๋
ธ๋๋ฅผ ์ ์ธ์ํค๋๋ก ๋ ์ด๋ธ์ ์ถ๊ฐํ ์ ์๋ค.
๋ค์ ๋ช
๋ น์ด๋ ๋ฐฑ์๋ ๋ชฉ๋ก์์ ์์ปค ๋
ธ๋๋ฅผ ์ ์ธ์ํค๋ ๋ช
๋ น์ด์ด๋ค.
kubectl label nodes <node-name> node.kubernetes.io/exclude-from-external-load-balancers=true
controller.kubernetes.io/pod-deletion-cost ์์: controller.kubernetes.io/pod-deletion-cost=10
์ ์ฉ ๋์: ํ๋
์ด ์ด๋
ธํ
์ด์
์ ๋ ํ๋ฆฌ์นด์
(ReplicaSet) ๋ค์ด์ค์ผ์ผ ์์๋ฅผ ์กฐ์ ํ ์ ์๋ ์์์ธ ํ๋ ์ญ์ ๋น์ฉ ์
์ค์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๋ช
์๋ ๊ฐ์ int32
ํ์
์ผ๋ก ํ์ฑ๋๋ค.
cluster-autoscaler.kubernetes.io/enable-ds-eviction ์์: cluster-autoscaler.kubernetes.io/enable-ds-eviction: "true"
์ ์ฉ ๋์: Pod
์ด ์ด๋
ธํ
์ด์
์ ํด๋ฌ์คํฐ ์คํ ์ค์ผ์ผ๋ฌ๊ฐ ๋ฐ๋ชฌ์
ํ๋๋ฅผ ์ถ์ถํ ๊ฒ์ธ์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ค.
์ด ์ด๋
ธํ
์ด์
์ ๋ฐ๋ชฌ์
๋งค๋ํ์คํธ ๋ด ๋ฐ๋ชฌ์
ํ๋์ ๋ช
์๋์ด์ผ ํ๋ค.
์ด ์ด๋
ธํ
์ด์
์ด "true"
๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ํ๋ ์ถ์ถ์ ๋ง๋ ๋ค๋ฅธ ๊ท์น์ด ์๋ ๊ฒฝ์ฐ์๋
ํด๋ฌ์คํฐ ์คํ ์ค์ผ์ผ๋ฌ๊ฐ ํ๋๋ฅผ ์ถ์ถํ ์ ์๋ค. ํด๋ฌ์คํฐ ์คํ ์ค์ผ์ผ๋ฌ๊ฐ ๋ฐ๋ชฌ์
ํ๋๋ฅผ ์ถ์ถํ๋ ๊ฒ์ ํ์ฉํ์ง ์๊ธฐ ์ํด์๋,
์ค์ํ ๋ฐ๋ชฌ์
ํ๋์ ์ด ์ด๋
ธํ
์ด์
์ "false"
๋ก ์ค์ ํ๋ค.
์ด ์ด๋
ธํ
์ด์
์ด ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ, ํด๋ฌ์คํฐ ์คํ ์ค์ผ์ผ๋ฌ๋ ์ ์ฒด ๋์์ ๋ฐ๋ฅธ๋ค. ์ฆ, ํด๋น ๊ตฌ์ฑ์ ๋ฐ๋ผ์ ๋ฐ๋ชฌ์
์ ์ถ์ถํ๋ค.
์ฐธ๊ณ : ์ด ์ด๋
ธํ
์ด์
์ ๋ฐ๋ชฌ์
ํ๋์๋ง ์ ์ฉ๋๋ค.kubernetes.io/ingress-bandwidth
์ฐธ๊ณ : ์ธ๊ทธ๋ ์ค ํธ๋ํฝ ์กฐ์ ์ด๋
ธํ
์ด์
์ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ค.
๋ง์ฝ ํธ๋ํฝ ์กฐ์ ๊ธฐ๋ฅ์ ํ์ฑํ์ํค๊ณ ์ถ๋ค๋ฉด, CNI ์ค์ ํ์ผ(๊ธฐ๋ณธ์ ์ผ๋ก /etc/cni/net.d
)์ bandwidth
ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํด์ผ ํ๋ฉฐ,
์คํํ์ผ์ด CNI์ ์คํํ์ผ ๊ฒฝ๋ก(๊ธฐ๋ณธ์ ์ผ๋ก /opt/cni/bin
) ์๋์ ํฌํจ๋์ด์๋์ง๋ ํ์ธํ์.์์: kubernetes.io/ingress-bandwidth: 10M
์ ์ฉ ๋์: ํ๋
ํ๋์ QoS(quality-of-service)๋ฅผ ์ ์ฉํจ์ผ๋ก์จ ๊ฐ์ฉํ ๋์ญํญ์ ํจ๊ณผ์ ์ผ๋ก ์ ํํ ์ ์๋ค.
์ธ๊ทธ๋ ์ค ํธ๋ํฝ(ํ๋๋ก ํฅํ๋)์ ํจ๊ณผ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋๊ธฐ ์ค์ธ ํจํท์ ํ๋ก ๊ด๋ฆฌํ๋ค.
ํ๋์ ๋์ญํญ์ ์ ํํ๊ธฐ ์ํด์๋, ์ค๋ธ์ ํธ๋ฅผ ์ ์ํ๋ JSON ํ์ผ์ ์์ฑํ๊ณ
kubernetes.io/ingress-bandwidth
์ด๋
ธํ
์ด์
์ ํตํด ๋ฐ์ดํฐ ํธ๋ํฝ์ ์๋๋ฅผ ๋ช
์ํ๋ค. ์ธ๊ทธ๋ ์ค ์๋๋ฅผ ๋ช
์ํ ๋ ์ฌ์ฉ๋๋ ๋จ์๋
์ด๋น ๋นํธ(์๋ )์ด๋ค.
์๋ฅผ ๋ค์ด, 10M
์ ์ด๋น 10 ๋ฉ๊ฐ๋นํธ๋ฅผ ์๋ฏธํ๋ค.
kubernetes.io/egress-bandwidth
์ฐธ๊ณ : ์ด๊ทธ๋ ์ค ํธ๋ํฝ ์กฐ์ ์ด๋
ธํ
์ด์
์ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ค.
๋ง์ฝ ํธ๋ํฝ ์กฐ์ ๊ธฐ๋ฅ์ ํ์ฑํ์ํค๊ณ ์ถ๋ค๋ฉด, CNI ์ค์ ํ์ผ(๊ธฐ๋ณธ์ ์ผ๋ก /etc/cni/net.d
)์ bandwidth
ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํด์ผ ํ๋ฉฐ,
์คํํ์ผ์ด CNI์ ์คํํ์ผ ๊ฒฝ๋ก(๊ธฐ๋ณธ์ ์ผ๋ก /opt/cni/bin
) ์๋์ ํฌํจ๋์ด์๋์ง๋ ํ์ธํ์.์์: kubernetes.io/egress-bandwidth: 10M
์ ์ฉ ๋์: ํ๋
์ด๊ทธ๋ ์ค ํธ๋ํฝ(ํ๋๋ก๋ถํฐ์)์ ์ค์ ๋ ์๋๋ฅผ ์ด๊ณผํ๋ ํจํท์ ์ญ์ ํ๋ ์ ์ฑ
์ ์ํด ์ฒ๋ฆฌ๋๋ฉฐ,
ํ๋์ ๊ฑฐ๋ ์ ํ์ ๋ค๋ฅธ ํ๋์ ๋์ญํญ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
ํ๋์ ๋์ญํญ์ ์ ํํ๊ธฐ ์ํด์๋, ์ค๋ธ์ ํธ๋ฅผ ์ ์ํ๋ JSON ํ์ผ์ ์์ฑํ๊ณ
kubernetes.io/egress-bandwidth
์ด๋
ธํ
์ด์
์ ํตํด ๋ฐ์ดํฐ ํธ๋ํฝ์ ์๋๋ฅผ ๋ช
์ํ๋ค. ์ด๊ทธ๋ ์ค ์๋๋ฅผ ๋ช
์ํ ๋ ์ฌ์ฉ๋๋ ๋จ์๋
์ด๋น ๋นํธ(์๋ )์ด๋ค.
์๋ฅผ ๋ค์ด, 10M
์ ์ด๋น 10 ๋ฉ๊ฐ๋นํธ๋ฅผ ์๋ฏธํ๋ค.
beta.kubernetes.io/instance-type (์ฌ์ฉ ์ค๋จ๋จ) node.kubernetes.io/instance-type ์์: node.kubernetes.io/instance-type=m3.medium
์ ์ฉ ๋์: ๋
ธ๋
ํด๋ผ์ฐ๋ ์ ๊ณต์
์ ์ํด ์ ์๋ ์ธ์คํด์ค ํ์
์ ๊ฐ์ kubelet์ด ์ฝ์ด์ ์ด ๋ ์ด๋ธ์ ๊ฐ์ผ๋ก ์ฑ์ด๋ค.
ํด๋ผ์ฐ๋ ์ ๊ณต์
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ์ด ๋ ์ด๋ธ์ด ์ค์ ๋๋ค.
ํน์ ์ํฌ๋ก๋๋ฅผ ํน์ ์ธ์คํด์ค ํ์
์ ํ ๋นํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ ์ด๋ธ์ด ์ ์ฉํ ์ ์๋ค.
ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก๋ ์์ ๊ธฐ๋ฐ ์ค์ผ์ค๋ง์ ์ํํ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค์ผ์ค๋ฌ๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค. ์ธ์คํด์ค ํ์
๋ณด๋ค๋ ํน์ฑ์ ๊ธฐ์ค์ผ๋ก ์ค์ผ์ค๋ง์ ๊ณ ๋ คํด์ผ ํ๋ค(์: g2.2xlarge
๋ฅผ ์๊ตฌํ๊ธฐ๋ณด๋ค๋, GPU๊ฐ ํ์ํ๋ค๊ณ ์๊ตฌํ๋ค).
failure-domain.beta.kubernetes.io/region (์ฌ์ฉ ์ค๋จ๋จ) topology.kubernetes.io/region
์ ํ์ธํ๋ค.
failure-domain.beta.kubernetes.io/zone (์ฌ์ฉ ์ค๋จ๋จ) topology.kubernetes.io/zone
์ ํ์ธํ๋ค.
statefulset.kubernetes.io/pod-name ์์:
statefulset.kubernetes.io/pod-name=mystatefulset-7
์คํ
์ดํธํ์
(StatefulSet) ์ปจํธ๋กค๋ฌ๊ฐ ํ๋๋ฅผ ์ํ ์คํ
์ดํธํ์
์ ์์ฑํ๋ฉด, ์ปจํธ๋กค ํ๋ ์ธ์ด ํ๋์ ์ด ๋ ์ด๋ธ์ ์ค์ ํ๋ค.
์์ฑ๋๋ ํ๋์ ์ด๋ฆ์ ์ด ๋ ์ด๋ธ์ ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
์คํ
์ดํธํ์
๋ฌธ์์ ํ๋ ์ด๋ฆ ๋ ์ด๋ธ ์์
์์ธ ์ฌํญ์ ํ์ธํ๋ค.
scheduler.alpha.kubernetes.io/node-selector ์์: scheduler.alpha.kubernetes.io/node-selector: "name-of-node-selector"
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
ํ๋-๋
ธ๋ ์
๋ ํฐ(PodNodeSelector) ๋ ์ด ์ด๋
ธํ
์ด์
์ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค์ ํ๋๋ค์ ๋
ธ๋ ์
๋ ํฐ๋ฅผ ํ ๋นํ๋ค.
topology.kubernetes.io/region ์์:
topology.kubernetes.io/region=us-east-1
topology.kubernetes.io/zone
์ ํ์ธํ๋ค.
topology.kubernetes.io/zone ์์:
topology.kubernetes.io/zone=us-east-1c
์ ์ฉ ๋์: ๋
ธ๋, ํผ์์คํดํธ๋ณผ๋ฅจ(PersistentVolume)
๋
ธ๋์ ๊ฒฝ์ฐ: ํด๋ผ์ฐ๋ ์ ๊ณต์
๊ฐ ์ ๊ณตํ๋ ๊ฐ์ ์ด์ฉํ์ฌ kubelet
๋๋ ์ธ๋ถ cloud-controller-manager
๊ฐ ์ด ์ด๋
ธํ
์ด์
์ ๊ฐ์ ์ค์ ํ๋ค. ํด๋ผ์ฐ๋ ์ ๊ณต์
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ์ด ๋ ์ด๋ธ์ด ์ค์ ๋๋ค. ํ์ง๋ง, ํ ํด๋ก์ง ๋ด์์ ์๋ฏธ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ์ด ๋ ์ด๋ธ์ ๋
ธ๋์ ์ค์ ํด์ผ ํ๋ค.
ํผ์์คํดํธ๋ณผ๋ฅจ์ ๊ฒฝ์ฐ: ํ ํด๋ก์ง ์ด์จ์ด ๋ณผ๋ฅจ ํ๋ก๋น์ ๋๊ฐ ์๋์ผ๋ก ํผ์์คํดํธ๋ณผ๋ฅจ์ ๋
ธ๋ ์ดํผ๋ํฐ ์ ์ฝ์ ์ค์ ํ๋ค.
์์ญ(zone)์ ๋
ผ๋ฆฌ์ ๊ณ ์ฅ ๋๋ฉ์ธ์ ๋ํ๋ธ๋ค. ๊ฐ์ฉ์ฑ ํฅ์์ ์ํด ์ผ๋ฐ์ ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ์ฌ๋ฌ ์์ญ์ ๊ฑธ์ณ ๊ตฌ์ฑ๋๋ค. ์์ญ์ ๋ํ ์ ํํ ์ ์๋ ์ฌ์
์ ๋ณ ์ธํ๋ผ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์์ญ์ '์์ญ ๋ด ๋งค์ฐ ๋ฎ์ ๋คํธ์ํฌ ์ง์ฐ์๊ฐ, ์์ญ ๋ด ๋คํธ์ํฌ ํธ๋ํฝ ๋น์ฉ ์์, ๋ค๋ฅธ ์์ญ์ ๊ณ ์ฅ์ ๋
๋ฆฝ์ ์' ๋ฑ์ ๊ณตํต์ ์ธ ํน์ฑ์ ๊ฐ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ ์์ญ ๋ด์ ๋
ธ๋๋ ํ๋์ ๋คํธ์ํฌ ์ค์์น๋ฅผ ๊ณต์ ํ์ฌ ํ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฐ๋๋ก ๋ค๋ฅธ ์์ญ์ ์๋ ๋
ธ๋๋ ํ๋์ ๋คํธ์ํฌ ์ค์์น๋ฅผ ๊ณต์ ํด์๋ ์ ๋๋ค.
์ง์ญ(region)์ ํ๋ ์ด์์ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ ๋ ํฐ ๋๋ฉ์ธ์ ๋ํ๋ธ๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ์ฌ๋ฌ ์ง์ญ์ ๊ฑธ์ณ ์๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค. ์์ญ์ด๋ ์ง์ญ์ ๋ํ ์ ํํ ์ ์๋ ์ฌ์
์ ๋ณ ์ธํ๋ผ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ง์ญ์ '์ง์ญ ๋ด ๋คํธ์ํฌ ์ง์ฐ์๊ฐ๋ณด๋ค ์ง์ญ ๊ฐ ๋คํธ์ํฌ ์ง์ฐ์๊ฐ์ด ํผ, ์ง์ญ ๊ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋น์ฉ์ด ๋ฐ์ํจ, ๋ค๋ฅธ ์์ญ/์ง์ญ์ ๊ณ ์ฅ์ ๋
๋ฆฝ์ ์' ๋ฑ์ ๊ณตํต์ ์ธ ํน์ฑ์ ๊ฐ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ ์ง์ญ ๋ด์ ๋
ธ๋๋ ์ ๋ ฅ ์ธํ๋ผ(์: UPS ๋๋ ๋ฐ์ ๊ธฐ)๋ฅผ ๊ณต์ ํ์ฌ ํ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฐ๋๋ก ๋ค๋ฅธ ์ง์ญ์ ์๋ ๋
ธ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฅ ์ธํ๋ผ๋ฅผ ๊ณต์ ํ์ง ์๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์์ญ๊ณผ ์ง์ญ์ ๊ตฌ์กฐ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํ๋ค.
์ง์ญ๊ณผ ์์ญ์ ๊ณ์ธต์ ์ด๋ค. ์์ญ์ ์ง์ญ์ ์๊ฒฉํ ๋ถ๋ถ์งํฉ(strict subset)์ด๋ฉฐ, ํ๋์ ์์ญ์ด ๋ ๊ฐ์ ์ง์ญ์ ์ํ ์๋ ์๋ค. ์์ญ ์ด๋ฆ์ ๋ชจ๋ ์ง์ญ์ ๊ฑธ์ณ์ ์ ์ผํ๋ค. ์๋ฅผ ๋ค์ด, "africa-east-1" ๋ผ๋ ์ง์ญ์ "africa-east-1a" ์ "africa-east-1b" ๋ผ๋ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค. ํ ํด๋ก์ง ๋ ์ด๋ธ์ด ๋ณ๊ฒฝ๋๋ ์ผ์ ์๋ค๊ณ ๊ฐ์ ํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ ์ด๋ธ์ ๊ฐ์ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง, ํน์ ๋
ธ๋๊ฐ ์ญ์ ํ ์ฌ์์ฑ๋์ง ์๊ณ ์๋ ๋ค๋ฅธ ์์ญ์ผ๋ก ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์ด ์ ๋ณด๋ฅผ ๋ค์ํ ๋ฐฉ์์ผ๋ก ํ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋จ์ผ ์์ญ ํด๋ฌ์คํฐ์์๋ ์ค์ผ์ค๋ฌ๊ฐ ์๋์ผ๋ก ๋ ํ๋ฆฌ์นด์
์ ํ๋๋ฅผ ์ฌ๋ฌ ๋
ธ๋์ ํผ๋จ๋ฆฐ๋ค(๋
ธ๋ ๊ณ ์ฅ์ ์ํฅ์ ์ค์ด๊ธฐ ์ํด - kubernetes.io/hostname
์ฐธ๊ณ ). ๋ณต์ ์์ญ ํด๋ฌ์คํฐ์์๋, ์ฌ๋ฌ ์์ญ์ ํผ๋จ๋ฆฐ๋ค(์์ญ ๊ณ ์ฅ์ ์ํฅ์ ์ค์ด๊ธฐ ์ํด). ์ด๋ SelectorSpreadPriority ๋ฅผ ํตํด ์คํ๋๋ค.
SelectorSpreadPriority ๋ ์ต์ ๋
ธ๋ ฅ(best effort) ๋ฐฐ์น ๋ฐฉ๋ฒ์ด๋ค. ํด๋ฌ์คํฐ๊ฐ ์์นํ ์์ญ๋ค์ ํน์ฑ์ด ์๋ก ๋ค๋ฅด๋ค๋ฉด(์: ๋
ธ๋ ์ซ์๊ฐ ๋ค๋ฆ, ๋
ธ๋ ํ์
์ด ๋ค๋ฆ, ํ๋ ์์ ์๊ตฌ์ฌํญ์ด ๋ค๋ฆ), ํ๋ ์ซ์๋ฅผ ์์ญ๋ณ๋ก ๋ค๋ฅด๊ฒ ํ์ฌ ๋ฐฐ์นํ ์ ์๋ค. ํ์ํ๋ค๋ฉด, ์์ญ๋ค์ ํน์ฑ(๋
ธ๋ ์ซ์/ํ์
)์ ์ผ์น์์ผ ๋ถ๊ท ํ ๋ฐฐ์น์ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์๋ค.
์ค์ผ์ค๋ฌ๋ (VolumeZonePredicate ํ์์๋ฅผ ์ด์ฉํ์ฌ) 'ํ๋๊ฐ ์์ฒญํ๋ ๋ณผ๋ฅจ'์ด ์์นํ๋ ์์ญ๊ณผ ๊ฐ์ ์์ญ์ ํ๋๋ฅผ ๋ฐฐ์นํ๋ค. ์ฌ๋ฌ ์์ญ์์ ๋ณผ๋ฅจ์ ์ ๊ทผํ ์๋ ์๋ค.
PersistentVolumeLabel
์ด ํผ์์คํดํธ๋ณผ๋ฅจ์ ์๋ ๋ ์ด๋ธ๋ง์ ์ง์ํ์ง ์๋๋ค๋ฉด, ๋ ์ด๋ธ์ ์๋์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋ PersistentVolumeLabel
์ด ๋์ํ๋๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
PersistentVolumeLabel
์ด ์ค์ ๋์ด ์์ผ๋ฉด, ์ค์ผ์ค๋ฌ๋ ํ๋๊ฐ ๋ค๋ฅธ ์์ญ์ ์๋ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋ ๊ฒ์ ๋ง๋๋ค. ๋ง์ฝ ์ฌ์ฉ ์ค์ธ ์ธํ๋ผ์ ์ด๋ฌํ ์ ์ฝ์ด ์๋ค๋ฉด, ๋ณผ๋ฅจ์ ์์ญ ๋ ์ด๋ธ์ ์ถ๊ฐํ ํ์๊ฐ ์ ํ ์๋ค.
volume.beta.kubernetes.io/storage-provisioner (์ฌ์ฉ ์ค๋จ๋จ) ์์: volume.beta.kubernetes.io/storage-provisioner: k8s.io/minikube-hostpath
์ ์ฉ ๋์: ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์(PersistentVolumeClaim)
์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉ ์ค๋จ๋์๋ค.
volume.beta.kubernetes.io/mount-options (์ฌ์ฉ ์ค๋จ) ์์ : volume.beta.kubernetes.io/mount-options: "ro,soft"
์ ์ฉ ๋์: ํผ์์คํดํธ๋ณผ๋ฅจ
์ฟ ๋ฒ๋คํฐ์ค ๊ด๋ฆฌ์๋, ๋
ธ๋์ ํผ์์คํดํธ๋ณผ๋ฅจ์ด ๋ง์ดํธ๋ ๊ฒฝ์ฐ ์ถ๊ฐ์ ์ธ ๋ง์ดํธ ์ต์
์ ๋ช
์ธํ ์ ์๋ค.
์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉ ์ค๋จ๋์๋ค.
volume.kubernetes.io/storage-provisioner ์ ์ฉ ๋์: ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์
์ด ์ด๋
ธํ
์ด์
์ ๋์ ํ๋ก๋น์ ๋์ด ์๊ตฌ๋๋ PVC์ ์ถ๊ฐ๋ ์์ ์ด๋ค.
node.kubernetes.io/windows-build ์์: node.kubernetes.io/windows-build=10.0.17763
์ ์ฉ ๋์: ๋
ธ๋
kubelet์ด Microsoft ์๋์ฐ์์ ์คํ๋๊ณ ์๋ค๋ฉด, ์ฌ์ฉ ์ค์ธ Windows Server ๋ฒ์ ์ ๊ธฐ๋กํ๊ธฐ ์ํด kubelet์ด ๋
ธ๋์ ์ด ๋ ์ด๋ธ์ ์ถ๊ฐํ๋ค.
์ด ๋ ์ด๋ธ์ ๊ฐ์ "MajorVersion.MinorVersion.BuildNumber"์ ํํ๋ฅผ ๊ฐ๋๋ค.
service.kubernetes.io/headless ์์: service.kubernetes.io/headless=""
์ ์ฉ ๋์: ์๋น์ค
์๋น์ค๊ฐ ํค๋๋ฆฌ์ค(headless)์ด๋ฉด, ์ปจํธ๋กค ํ๋ ์ธ์ด ์๋ํฌ์ธํธ(Endpoints) ์ค๋ธ์ ํธ์ ์ด ๋ ์ด๋ธ์ ์ถ๊ฐํ๋ค.
kubernetes.io/service-name ์์: kubernetes.io/service-name="my-website"
์ ์ฉ ๋์: ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค(EndpointSlices)
์ฟ ๋ฒ๋คํฐ์ค๋ ์ด ๋ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ์
์๋น์ค ๋ฅผ ๊ฒฐํฉํ๋ค.
์ด ๋ ์ด๋ธ์ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค๊ฐ ์ง์ํ๋ ์๋น์ค์ ์ด๋ฆ ์ ๊ธฐ๋กํ๋ค.
๋ชจ๋ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค๋ ์ด ๋ ์ด๋ธ์
์์ ๊ณผ ์ฐ๊ฒฐ๋ ์๋น์ค์ ์ด๋ฆ์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
kubernetes.io/service-account.name ์์: kubernetes.io/service-account.name: "sa-name"
์ ์ฉ ๋์: ์ํฌ๋ฆฟ(Secret)
์ด ์ด๋
ธํ
์ด์
์๋ ํ ํฐ(kubernetes.io/service-account-token
ํ์
์ ์ํฌ๋ฆฟ์ ์ ์ฅ๋๋)์ด ๋ํ๋ด๋
์๋น์ค์ด์นด์ดํธ์ ์ด๋ฆ ์ ๊ธฐ๋กํ๋ค.
kubernetes.io/service-account.uid ์์: kubernetes.io/service-account.uid: da68f9c6-9d26-11e7-b84e-002dc52800da
์ ์ฉ ๋์: ์ํฌ๋ฆฟ
์ด ์ด๋
ธํ
์ด์
์๋ ํ ํฐ(kubernetes.io/service-account-token
ํ์
์ ์ํฌ๋ฆฟ์ ์ ์ฅ๋๋)์ด ๋ํ๋ด๋
์๋น์ค์ด์นด์ดํธ์ ๊ณ ์ ID ๋ฅผ ๊ธฐ๋กํ๋ค.
kubernetes.io/legacy-token-last-used ์์: kubernetes.io/legacy-token-last-used: 2022-10-24
์ ์ฉ ๋์: ์ํฌ๋ฆฟ
์ปจํธ๋กค ํ๋ ์ธ์ kubernetes.io/service-account-token
ํ์
์ ๊ฐ๋ ์ํฌ๋ฆฟ์ ๋ํด์๋ง ์ด ๋ ์ด๋ธ์ ์ถ๊ฐํ๋ค.
์ด ๋ ์ด๋ธ์ ๊ฐ์, ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค์ด์นด์ดํธ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ธ์ฆํ ์์ฒญ์
์ปจํธ๋กค ํ๋ ์ธ์ด ๋ง์ง๋ง์ผ๋ก ํ์ธํ ๋ ์ง(ISO 8601 ํ์, UTC ์๊ฐ๋)๋ฅผ ๊ธฐ๋กํ๋ค.
ํด๋ฌ์คํฐ๊ฐ ํด๋น ๊ธฐ๋ฅ์ ์ป๊ธฐ ์ ์ ๊ธฐ์กด์ ํ ํฐ์ ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ(์ฟ ๋ฒ๋คํฐ์ค v1.26์ ์ถ๊ฐ๋จ),
์ด ๋ ์ด๋ธ์ ์ค์ ๋์ง ์๋๋ค.
endpointslice.kubernetes.io/managed-by ์์: endpointslice.kubernetes.io/managed-by="controller"
์ ์ฉ ๋์: ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค
์ด ๋ ์ด๋ธ์ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค(EndpointSlice)๋ฅผ ์ด๋ค ์ปจํธ๋กค๋ฌ๋ ์ํฐํฐ๊ฐ ๊ด๋ฆฌํ๋์ง๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์ด ๋ ์ด๋ธ์ ์ฌ์ฉํจ์ผ๋ก์จ ํ ํด๋ฌ์คํฐ ๋ด์์ ์ฌ๋ฌ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ์ค๋ธ์ ํธ๊ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ๋ ์ํฐํฐ์ ์ํด ๊ด๋ฆฌ๋ ์ ์๋ค.
endpointslice.kubernetes.io/skip-mirror ์์: endpointslice.kubernetes.io/skip-mirror="true"
์ ์ฉ ๋์: ์๋ํฌ์ธํธ(Endpoints)
ํน์ ์์์ ์ด ๋ ์ด๋ธ์ "true"
๋ก ์ค์ ํ์ฌ, EndpointSliceMirroring ์ปจํธ๋กค๋ฌ๊ฐ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค๋ฅผ ์ด์ฉํ์ฌ ํด๋น ์์์ ๋ฏธ๋ฌ๋งํ์ง ์๋๋ก ์ง์ํ ์ ์๋ค.
service.kubernetes.io/service-proxy-name ์์: service.kubernetes.io/service-proxy-name="foo-bar"
์ ์ฉ ๋์: ์๋น์ค
kube-proxy ์๋ ์ปค์คํ
ํ๋ก์๋ฅผ ์ํ ์ด์ ๊ฐ์ ๋ ์ด๋ธ์ด ์์ผ๋ฉฐ, ์ด ๋ ์ด๋ธ์ ์๋น์ค ์ปจํธ๋กค์ ์ปค์คํ
ํ๋ก์์ ์์ํ๋ค.
experimental.windows.kubernetes.io/isolation-type (์ฌ์ฉ ์ค๋จ) ์์: experimental.windows.kubernetes.io/isolation-type: "hyperv"
์ ์ฉ ๋์: ํ๋
Hyper-V ๊ฒฉ๋ฆฌ(isolation)๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ฐ ์ปจํ
์ด๋๋ฅผ ์คํํ๋ ค๋ฉด ์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ค. Hyper-V ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฑํํ๊ณ Hyper-V ๊ฒฉ๋ฆฌ๊ฐ ์ ์ฉ๋ ์ปจํ
์ด๋๋ฅผ ์์ฑํ๊ธฐ ์ํด, kubelet์ ๊ธฐ๋ฅ ๊ฒ์ดํธ HyperVContainer=true
๋ก ์ค์ ํ์ฌ ์คํ๋์ด์ผ ํ๋ฉฐ, ํ๋์๋ experimental.windows.kubernetes.io/isolation-type=hyperv
์ด๋
ธํ
์ด์
์ด ์ค์ ๋์ด ์์ด์ผ ํ๋ค.
์ฐธ๊ณ : ์ด ์ด๋
ธํ
์ด์
์ ํ๋์ ์ปจํ
์ด๋๋ก ๊ตฌ์ฑ๋ ํ๋์๋ง ์ค์ ํ ์ ์๋ค.
v1.20๋ถํฐ ์ด ์ด๋
ธํ
์ด์
์ ๋์ด์ ์ฌ์ฉ๋์ง ์๋๋ค. ์คํ์ ์ธ Hyper-V ์ง์์ 1.21๋ฒ์ ์์ ์ ๊ฑฐ๋์๋ค.ingressclass.kubernetes.io/is-default-class ์์: ingressclass.kubernetes.io/is-default-class: "true"
์ ์ฉ ๋์: ์ธ๊ทธ๋ ์คํด๋์ค(IngressClass)
ํ๋์ ์ธ๊ทธ๋ ์คํด๋์ค ๋ฆฌ์์ค์ ์ด ์ด๋
ธํ
์ด์
์ด "true"
๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ํด๋์ค๊ฐ ๋ช
์๋์ง ์์ ์๋ก์ด ์ธ๊ทธ๋ ์ค(Ingress) ๋ฆฌ์์ค๋ ํด๋น ๊ธฐ๋ณธ ํด๋์ค๋ก ํ ๋น๋ ๊ฒ์ด๋ค.
kubernetes.io/ingress.class (์ฌ์ฉ ์ค๋จ๋จ)
์ฐธ๊ณ : v1.18๋ถํฐ, spec.ingressClassName
์ผ๋ก ๋์ฒด๋์๋ค.storageclass.kubernetes.io/is-default-class ์์: storageclass.kubernetes.io/is-default-class=true
์ ์ฉ ๋์: ์คํ ๋ฆฌ์งํด๋์ค(StorageClass)
ํ๋์ ์คํ ๋ฆฌ์งํด๋์ค(StorageClass) ๋ฆฌ์์ค์ ์ด ์ด๋
ธํ
์ด์
์ด "true"
๋ก ์ค์ ๋ ๊ฒฝ์ฐ,
ํด๋์ค๊ฐ ๋ช
์๋์ง ์์ ์๋ก์ด ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์ ๋ฆฌ์์ค๋ ํด๋น ๊ธฐ๋ณธ ํด๋์ค๋ก ํ ๋น๋ ๊ฒ์ด๋ค.
alpha.kubernetes.io/provided-node-ip ์์: alpha.kubernetes.io/provided-node-ip: "10.0.0.1"
์ ์ฉ ๋์: ๋
ธ๋
kubelet์ด ๋
ธ๋์ ํ ๋น๋ IPv4 ์ฃผ์๋ฅผ ๋ช
์ํ๊ธฐ ์ํด ์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ ์ ์๋ค.
kubelet์ด --cloud-provider
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ๊ฐ์ ๊ฐ๊ฒ ๋์๋ค๋ฉด (์ธ๋ถ ๋๋ ๋ ๊ฑฐ์ ํธ๋ฆฌ ๋ด(in-tree) ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ๋ชจ๋ ํฌํจ), kubelet์ ์ด ์ด๋
ธํ
์ด์
์ ๋
ธ๋์ ์ค์ ํ์ฌ ๋ช
๋ น์ค ํ๋๊ทธ(--node-ip
)๋ฅผ ํตํด ์ค์ ๋ IP ์ฃผ์๋ฅผ ๋ช
์ํ๋ค. cloud-controller-manager๋ ํด๋ผ์ฐ๋ ์ ๊ณต์์๊ฒ ์ด IP ์ฃผ์๊ฐ ์ ํจํ์ง๋ฅผ ๊ฒ์ฆํ๋ค.
batch.kubernetes.io/job-completion-index ์์: batch.kubernetes.io/job-completion-index: "3"
์ ์ฉ ๋์: ํ๋
kube-controller-manager์ ์ก(Job) ์ปจํธ๋กค๋ฌ๋
Indexed
์๋ฃ ๋ชจ๋ ๋ก ์์ฑ๋ ํ๋์ ์ด ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋ค.
kubectl.kubernetes.io/default-container ์์: kubectl.kubernetes.io/default-container: "front-end-app"
ํ๋์ ๊ธฐ๋ณธ ์ปจํ
์ด๋๋ก ์ฌ์ฉํ ์ปจํ
์ด๋ ์ด๋ฆ์ ์ง์ ํ๋ ์ด๋
ธํ
์ด์
์ด๋ค. ์๋ฅผ ๋ค์ด, kubectl logs
๋๋ kubectl exec
๋ช
๋ น์ ์ฌ์ฉํ ๋ -c
๋๋ --container
ํ๋๊ทธ๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, ์ด ์ด๋
ธํ
์ด์
์ผ๋ก ๋ช
์๋ ๊ธฐ๋ณธ ์ปจํ
์ด๋๋ฅผ ๋์์ผ๋ก ์คํ๋ ๊ฒ์ด๋ค.
endpoints.kubernetes.io/over-capacity ์์: endpoints.kubernetes.io/over-capacity:truncated
์ ์ฉ ๋์: ์๋ํฌ์ธํธ(Endpoints)
์ปจํธ๋กค ํ๋ ์ธ ์, ์ฐ๊ฒฐ๋ ์๋น์ค ์ 1000๊ฐ ์ด์์ ์๋ํฌ์ธํธ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด ์ด๋
ธํ
์ด์
์ ์๋ํฌ์ธํธ ์ค๋ธ์ ํธ์ ์ถ๊ฐํ๋ค. ์ด ์ด๋
ธํ
์ด์
์ ์๋ํฌ์ธํธ์ ์ฉ๋์ด ์ด๊ณผ๋์๊ฑฐ๋ ์๋ํฌ์ธํธ์ ์๊ฐ 1000๊ฐ๋ก ์๋ ธ์์ ๋ํ๋ธ๋ค.
๋ฐฑ์๋ ์๋ํฌ์ธํธ์ ์๊ฐ 1000๊ฐ ๋ฏธ๋ง์ด๋ฉด, ์ปจํธ๋กค ํ๋ ์ธ์ ์ด ์ด๋
ธํ
์ด์
์ ์ ๊ฑฐํ๋ค.
batch.kubernetes.io/job-tracking (์ฌ์ฉ ์ค๋จ) ์์: batch.kubernetes.io/job-tracking: ""
์ ์ฉ ๋์: ์ก
์ก์ ์ด ์ด๋
ธํ
์ด์
์ด ์๋ ๊ฒฝ์ฐ, ์ปจํธ๋กค ํ๋ ์ธ์ด
ํ์ด๋๋ผ์ด์ (finalizer)๋ฅผ ์ด์ฉํ์ฌ ์ก ์ํ๋ฅผ ์ถ์ ํ๊ณ ์์์ ๋ํ๋ธ๋ค.
์ปจํธ๋กค ํ๋ ์ธ์ ์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ, ์์ง ๊ธฐ๋ฅ์ด ๊ฐ๋ฐ ์ค์ธ ๋์
ํ์ด๋๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ ์ถ์ ํ๋๋ก ์์ ํ๊ฒ ์ ํํ๋ค.
์ด ์ด๋
ธํ
์ด์
์ ์๋์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํด์๋ ์ ๋๋ค .
์ฐธ๊ณ : ์ฟ ๋ฒ๋คํฐ์ค 1.26 ๋ถํฐ, ์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉ๋์ง ์๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค 1.27 ๊ณผ ๊ทธ ์ด์์ ๋ฒ์ ๋ค์ ์ด ์ด๋
ธํ
์ด์
์ ๋ฌด์ํ ๊ฒ์ด๋ฉฐ,
ํญ์ ํ์ด๋๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ ์ถ์ ํ ๊ฒ์ด๋ค..scheduler.alpha.kubernetes.io/defaultTolerations ์์: scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Equal", "value": "value1", "effect": "NoSchedule", "key": "dedicated-node"}]'
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
์ด ์ด๋
ธํ
์ด์
์ PodTolerationRestriction ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๊ฐ ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค. ์ด๋
ธํ
์ด์
์ ํค๋ ๋ค์์คํ์ด์ค์ ํจ๋ฌ๋ ์ด์
(toleration)์ ํ ๋นํ๋ ๊ฒ์ ํ์ฉํ๋ฉฐ, ํด๋น ๋ค์์คํ์ด์ค์ ์์ฑ๋๋ ๋ชจ๋ ํ๋๋ค์ ์ด ํจ๋ฌ๋ ์ด์
์ด ๋ถ์ฌ๋๋ค.
scheduler.alpha.kubernetes.io/preferAvoidPods (์ฌ์ฉ ์ค๋จ) ์ ์ฉ ๋์: ๋
ธ๋
์ด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ ค๋ฉด NodePreferAvoidPods ์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ ์ด ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค.
ํด๋น ํ๋ฌ๊ทธ์ธ์ ์ฟ ๋ฒ๋คํฐ์ค 1.22์์ ์ฌ์ฉ ์ค๋จ๋์๋ค.
๋์ ํ
์ธํธ์ ํจ๋ฌ๋ ์ด์
์ ์ฌ์ฉํ๋ค.
์ด ์ดํ๋ก ๋์ค๋ ํ
์ธํธ๋ ๋ชจ๋ '์ ์ฉ ๋์: ๋
ธ๋' ์ด๋ค.
node.kubernetes.io/not-ready ์์: node.kubernetes.io/not-ready:NoExecute
๋
ธ๋ ์ปจํธ๋กค๋ฌ๋ ๋
ธ๋์ ํฌ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ๋
ธ๋๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ์ธ์ง๋ฅผ ๊ฐ์งํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ด ํ
์ธํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ค.
node.kubernetes.io/unreachable ์์: node.kubernetes.io/unreachable:NoExecute
๋
ธ๋ ์ปจํธ๋กค๋ฌ๋ ๋
ธ๋ ์ปจ๋์
์ด Ready
์์ Unknown
์ผ๋ก ๋ณ๊ฒฝ๋ ๋
ธ๋์ ์ด ํ
์ธํธ๋ฅผ ์ถ๊ฐํ๋ค.
node.kubernetes.io/unschedulable ์์: node.kubernetes.io/unschedulable:NoSchedule
๊ฒฝ์ ์ํ(race condition) ๋ฐ์์ ๋ง๊ธฐ ์ํด, ์์ฑ ์ค์ธ ๋
ธ๋์ ์ด ํ
์ธํธ๊ฐ ์ถ๊ฐ๋๋ค.
node.kubernetes.io/memory-pressure ์์: node.kubernetes.io/memory-pressure:NoSchedule
kubelet์ ๋
ธ๋์ memory.available
์ allocatableMemory.available
์ ๊ด์ธกํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ ๊ฐ์งํ๋ค. ๊ทธ ๋ค, ๊ด์ธกํ ๊ฐ์ kubelet์ ์ค์ ๋ ๋ฌธํฑ๊ฐ(threshold)๊ณผ ๋น๊ตํ์ฌ ๋
ธ๋ ์ปจ๋์
๊ณผ ํ
์ธํธ์ ์ถ๊ฐ/์ญ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
node.kubernetes.io/disk-pressure ์์: node.kubernetes.io/disk-pressure:NoSchedule
kubelet์ ๋
ธ๋์ imagefs.available
, imagefs.inodesFree
, nodefs.available
, nodefs.inodesFree
(๋ฆฌ๋
์ค์ ๋ํด์๋ง)๋ฅผ ๊ด์ธกํ์ฌ ๋์คํฌ ์๋ฐ์ ๊ฐ์งํ๋ค. ๊ทธ ๋ค, ๊ด์ธกํ ๊ฐ์ kubelet์ ์ค์ ๋ ๋ฌธํฑ๊ฐ(threshold)๊ณผ ๋น๊ตํ์ฌ ๋
ธ๋ ์ปจ๋์
๊ณผ ํ
์ธํธ์ ์ถ๊ฐ/์ญ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
node.kubernetes.io/network-unavailable ์์: node.kubernetes.io/network-unavailable:NoSchedule
์ฌ์ฉ ์ค์ธ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ถ๊ฐ ๋คํธ์ํฌ ํ๊ฒฝ์ค์ ์ ํ์๋ก ํ๋ค๊ณ ๋ช
์ํ๋ฉด, kubelet์ด ์ด ํ
์ธํธ๋ฅผ ์ค์ ํ๋ค. ํด๋ผ์ฐ๋ ์์ ๋คํธ์ํฌ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด์ผ, ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ด ํ
์ธํธ๋ฅผ ์ ๊ฑฐํ ๊ฒ์ด๋ค.
node.kubernetes.io/pid-pressure ์์: node.kubernetes.io/pid-pressure:NoSchedule
kubelet์ '/proc/sys/kernel/pid_max
์ ํฌ๊ธฐ์ D-๊ฐ'๊ณผ ๋
ธ๋์์ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ฌ์ฉ ์ค์ธ PID๋ฅผ ํ์ธํ์ฌ, pid.available
์งํ๋ผ๊ณ ๋ถ๋ฆฌ๋ '์ฌ์ฉ ๊ฐ๋ฅํ PID ์'๋ฅผ ๊ฐ์ ธ์จ๋ค. ๊ทธ ๋ค, ๊ด์ธกํ ์งํ๋ฅผ kubelet์ ์ค์ ๋ ๋ฌธํฑ๊ฐ(threshold)๊ณผ ๋น๊ตํ์ฌ ๋
ธ๋ ์ปจ๋์
๊ณผ ํ
์ธํธ์ ์ถ๊ฐ/์ญ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
node.kubernetes.io/out-of-service ์์: node.kubernetes.io/out-of-service:NoExecute
์ฌ์ฉ์๋ ๋
ธ๋์ ํ
์ธํธ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํจ์ผ๋ก์จ ์๋น์ค ์ค์ด ์๋๋ผ๊ณ ํ์ํ ์ ์๋ค. ๋ง์ฝ NodeOutOfServiceVolumeDetach
๊ธฐ๋ฅ ๊ฒ์ดํธ ๊ฐ kube-controller-manager
์ ํ์ฑํ๋์ด ์์ผ๋ฉฐ
๋
ธ๋๊ฐ ์ด ํ
์ธํธ๋ก ์ธํด ์๋น์ค ์ค์ด ์๋๋ผ๊ณ ํ์๋์ด์์ ๊ฒฝ์ฐ, ๋
ธ๋์์ ์คํ๋๋ ๋งค์นญ๋๋ ํจ๋ฌ๋ ์ด์
์ด ์๋ ํ๋๋ค์ ๊ฐ์ ๋ก ์ญ์ ๋จ๊ณผ ๋์์ ๋ณผ๋ฅจ์ด ๋ถ๋ฆฌ๋๋ค. ์ด๋ ์๋น์ค ์ค์ด ์๋ ๋
ธ๋์ ํ๋๋ค์ด ๋ค๋ฅธ ๋
ธ๋์์ ๋น ๋ฅด๊ฒ ๋ณต๊ตฌ๋ ์ ์๋๋ก ํด์ค๋ค.
node.cloudprovider.kubernetes.io/uninitialized ์์: node.cloudprovider.kubernetes.io/uninitialized:NoSchedule
kubelet์ด "์ธ๋ถ" ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ์ํด ์คํ๋์๋ค๋ฉด ๋
ธ๋๊ฐ '์ฌ์ฉ ๋ถ๊ฐ๋ฅ'ํ ์ํ๋ผ๊ณ ํ์ํ๊ธฐ ์ํด ์ด ํ
์ธํธ๊ฐ ์ถ๊ฐ๋๋ฉฐ, ์ถํ cloud-controller-manager๊ฐ ์ด ๋
ธ๋๋ฅผ ์ด๊ธฐํํ๊ณ ์ด ํ
์ธํธ๋ฅผ ์ ๊ฑฐํ๋ค.
node.cloudprovider.kubernetes.io/shutdown ์์: node.cloudprovider.kubernetes.io/shutdown:NoSchedule
๋
ธ๋์ ์ํ๊ฐ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ ์ํ 'shutdown' ์ํ์ด๋ฉด, ์ด์ ๋ฐ๋ผ ๋
ธ๋์ node.cloudprovider.kubernetes.io/shutdown
ํ
์ธํธ๊ฐ NoSchedule
๊ฐ์ผ๋ก ์ค์ ๋๋ค.
pod-security.kubernetes.io/enforce ์์: pod-security.kubernetes.io/enforce: baseline
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
๊ฐ์ ๋ฐ๋์ ํ๋ ๋ณด์ ํ์ค ๋ ๋ฒจ๊ณผ ์์ํ๋
privileged
, baseline
, ๋๋ restricted
์ค ํ๋์ฌ์ผ ํ๋ค.
ํนํ enforce
๋ ์ด๋ธ์ ํ์๋ ์์ค์ ์ ์๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋
๋ ์ด๋ธ ๋ค์์คํ์ด์ค์ ๋ชจ๋ ํ๋์ ์์ฑ์ ๊ธ์งํ๋ค.
๋ ๋ง์ ์ ๋ณด๋ ๋ค์์คํ์ด์ค์์ ํ๋ ๋ณด์ ์ ์ฉ ์
์ฐธ๊ณ ํ๋ค.
pod-security.kubernetes.io/enforce-version ์์: pod-security.kubernetes.io/enforce-version: 1.34
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
๊ฐ์ ๋ฐ๋์ latest
์ด๊ฑฐ๋ v<MAJOR>.<MINOR>
ํ์์ ์ ํจํ ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ ์ด์ด์ผ ํ๋ค.
์ค์ ๋ ํ๋์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ๋ ์ ์ฉํ ํ๋ ๋ณด์ ํ์ค
์ ์ฑ
์ ๋ฒ์ ์ด ๊ฒฐ์ ๋๋ค.
๋ ๋ง์ ์ ๋ณด๋ ๋ค์์คํ์ด์ค์์ ํ๋ ๋ณด์ ์ ์ฉ ์
์ฐธ๊ณ ํ๋ค.
pod-security.kubernetes.io/audit ์์: pod-security.kubernetes.io/audit: baseline
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
๊ฐ์ ๋ฐ๋์ ํ๋ ๋ณด์ ํ์ค ๋ ๋ฒจ๊ณผ ์์ํ๋
privileged
, baseline
, ๋๋ restricted
์ค ํ๋์ฌ์ผ ํ๋ค.
ํนํ audit
๋ ์ด๋ธ์ ํ์๋ ์์ค์ ์ ์๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ๋ ์ด๋ธ ๋ค์์คํ์ด์ค์ ํ๋๋ฅผ ์์ฑํ๋ ๊ฒ์
๋ฐฉ์งํ์ง ์์ง๋ง, ํด๋น ํ๋์ audit ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋ค.
๋ ๋ง์ ์ ๋ณด๋ ๋ค์์คํ์ด์ค์์ ํ๋ ๋ณด์ ์ ์ฉ ์
์ฐธ๊ณ ํ๋ค.
pod-security.kubernetes.io/audit-version ์์: pod-security.kubernetes.io/audit-version: 1.34
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
๊ฐ์ ๋ฐ๋์ latest
์ด๊ฑฐ๋ v<MAJOR>.<MINOR>
ํ์์ ์ ํจํ ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ ์ด์ด์ผ ํ๋ค.
์ค์ ๋ ํ๋์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ๋ ์ ์ฉํ ํ๋ ๋ณด์ ํ์ค
์ ์ฑ
์ ๋ฒ์ ์ด ๊ฒฐ์ ๋๋ค.
๋ ๋ง์ ์ ๋ณด๋ ๋ค์์คํ์ด์ค์์ ํ๋ ๋ณด์ ์ ์ฉ ์
์ฐธ๊ณ ํ๋ค.
pod-security.kubernetes.io/warn ์์: pod-security.kubernetes.io/warn: baseline
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
๊ฐ์ ๋ฐ๋์ ํ๋ ๋ณด์ ํ์ค ๋ ๋ฒจ๊ณผ ์์ํ๋
privileged
, baseline
, ๋๋ restricted
์ค ํ๋์ฌ์ผ ํ๋ค.
ํนํ warn
๋ ์ด๋ธ์ ํด๋น ๋ ์ด๋ธ์ด ๋ฌ๋ฆฐ ๋ค์์คํ์ด์ค์, ํ์๋ ๋ ๋ฒจ์ ๋ช
์๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ํ๋๋ฅผ ์์ฑํ๋ ๊ฒ์
๋ฐฉ์งํ์ง๋ ์์ง๋ง, ๊ทธ๋ฌํ ํ๋๊ฐ ์์ฑ๋๋ฉด ์ฌ์ฉ์์๊ฒ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ๋ค.
๋ํ๋ก์ด๋จผํธ, ์ก, ์คํ
์ดํธํ์
๋ฑ๊ณผ ๊ฐ์ ํ๋ ํ
ํ๋ฆฟ์ ํฌํจํ๋
๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ฑฐ๋ ์
๋ฐ์ดํธํ ๋์๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ค.
๋ ๋ง์ ์ ๋ณด๋ ๋ค์์คํ์ด์ค์์ ํ๋ ๋ณด์ ์ ์ฉ ์
์ฐธ๊ณ ํ๋ค.
pod-security.kubernetes.io/warn-version ์์: pod-security.kubernetes.io/warn-version: 1.34
์ ์ฉ ๋์: ๋ค์์คํ์ด์ค
๊ฐ์ ๋ฐ๋์ latest
์ด๊ฑฐ๋ v<MAJOR>.<MINOR>
ํ์์ ์ ํจํ ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ ์ด์ด์ผ ํ๋ค.
์ค์ ๋ ํ๋์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ๋ ์ ์ฉํ ํ๋ ๋ณด์ ํ์ค
์ ์ฑ
์ ๋ฒ์ ์ด ๊ฒฐ์ ๋๋ค. ๋ํ๋ก์ด๋จผํธ, ์ก, ์คํ
์ดํธํ์
๋ฑ๊ณผ ๊ฐ์ ํ๋ ํ
ํ๋ฆฟ์ ํฌํจํ๋
๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ฑฐ๋ ์
๋ฐ์ดํธํ ๋์๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ค.
๋ ๋ง์ ์ ๋ณด๋ ๋ค์์คํ์ด์ค์์ ํ๋ ๋ณด์ ์ ์ฉ ์
์ฐธ๊ณ ํ๋ค.
kubernetes.io/psp (์ฌ์ฉ ์ค๋จ๋จ) ์์: kubernetes.io/psp: restricted
์ ์ฉ ๋์: ํ๋
์ด ์ด๋
ธํ
์ด์
์ ํ๋์ํ๋ฆฌํฐํด๋ฆฌ์(PodSecurityPolicy)PodSecurityPolicies ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ๊ด๋ จ์ด ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค v1.34์ ํ๋์ํ๋ฆฌํฐํด๋ฆฌ์ API๋ฅผ ์ง์ํ์ง ์๋๋ค.
ํ๋์ํ๋ฆฌํฐํด๋ฆฌ์ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๊ฐ ํ๋๋ฅผ ์น์ธํ์ ๋,
์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ํ๋๊ฐ ์ด ์ด๋
ธํ
์ด์
์ ๊ฐ๋๋ก ์์ ํ๋ค.
์ด ์ด๋
ธํ
์ด์
๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ์์ ์ฌ์ฉ๋ ํ๋์ํ๋ฆฌํฐํด๋ฆฌ์์ ์ด๋ฆ์ด์๋ค.
seccomp.security.alpha.kubernetes.io/pod (์ฌ์ฉ ์ค๋จ๋จ) ์ด ์ด๋
ธํ
์ด์
์ ์ฟ ๋ฒ๋คํฐ์ค v1.19๋ถํฐ ์ฌ์ฉ ์ค๋จ๋์์ผ๋ฉฐ ํฅํ ๋ฆด๋ฆฌ์ค์์๋ ์๋ํ์ง ์์ ๊ฒ์ด๋ค.
๋์ ํด๋น ํ๋ ๋๋ ์ปจํ
์ด๋์ securityContext.seccompProfile
ํ๋๋ฅผ ์ฌ์ฉํ๋ค.
ํ๋์ ๋ณด์ ์ค์ ์ ์ง์ ํ๋ ค๋ฉด, ํ๋ ์คํ์ securityContext
ํ๋๋ฅผ ์ถ๊ฐํ๋ค.
ํ๋์ .spec
๋ด์ securityContext
ํ๋๋ ํ๋ ์์ค ๋ณด์ ์์ฑ์ ์ ์ํ๋ค.
ํ๋์ ๋ณด์ ์ปจํ
์คํธ๋ฅผ ์ค์ ํ๋ฉด,
ํด๋น ์ค์ ์ด ํ๋ ๋ด์ ๋ชจ๋ ์ปจํ
์ด๋์ ์ ์ฉ๋๋ค.
container.seccomp.security.alpha.kubernetes.io/[์ด๋ฆ] ์ด ์ด๋
ธํ
์ด์
์ ์ฟ ๋ฒ๋คํฐ์ค v1.19๋ถํฐ ์ฌ์ฉ ์ค๋จ๋์์ผ๋ฉฐ ํฅํ ๋ฆด๋ฆฌ์ค์์๋ ์๋ํ์ง ์์ ๊ฒ์ด๋ค.
๋์ ํด๋น ํ๋ ๋๋ ์ปจํ
์ด๋์ securityContext.seccompProfile
ํ๋๋ฅผ ์ฌ์ฉํ๋ค.
seccomp๋ฅผ ์ด์ฉํ์ฌ ์ปจํ
์ด๋์ syscall ์ ํํ๊ธฐ ํํ ๋ฆฌ์ผ์์
seccomp ํ๋กํ์ผ์ ํ๋ ๋๋ ํ๋ ๋ด ์ปจํ
์ด๋์ ์ ์ฉํ๋ ๋จ๊ณ๋ฅผ ํ์ธํ๋ค.
ํํ ๋ฆฌ์ผ์์๋ ์ฟ ๋ฒ๋คํฐ์ค์ seccomp๋ฅผ ์ค์ ํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ฉฐ,
์ด๋ ํ๋์ .spec
๋ด์ securityContext
๋ฅผ ์ค์ ํจ์ผ๋ก์จ ๊ฐ๋ฅํ๋ค.
snapshot.storage.kubernetes.io/allowVolumeModeChange ์์: snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"
์ ์ฉ ๋์: VolumeSnapshotContent
๊ฐ์ true
ํน์ false
๋ง์ ๋ฐ๋๋ค.
ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์ ์ด
๋ณผ๋ฅจ์ค๋
์ท(VolumeSnapshot)์ผ๋ก๋ถํฐ ์์ฑ๋ ๊ฒฝ์ฐ,
์ฌ์ฉ์๊ฐ ์์ค ๋ณผ๋ฅจ์ ๋ชจ๋๋ฅผ ์์ ํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
์์ธํ ์ฌํญ์ ์ค๋
์ท์ ๋ณผ๋ฅจ ๋ชจ๋ ๋ณํํ๊ธฐ ์
์ฟ ๋ฒ๋คํฐ์ค CSI ๊ฐ๋ฐ์์ฉ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ๋ค.
Audit์ ์ํ ์ด๋
ธํ
์ด์
๋ค ์์ธํ ์ฌํญ์ Audit ์ด๋
ธํ
์ด์
ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ๋ค.
kubeadm kubeadm.alpha.kubernetes.io/cri-socket ์์: kubeadm.alpha.kubernetes.io/cri-socket: unix:///run/containerd/container.sock
์ ์ฉ ๋์: ๋
ธ๋
kubeadm init
/join
์ ์ฃผ์ด์ง๋ CRI ์์ผ ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ด๋
ธํ
์ด์
.
kubeadm์ ๋
ธ๋ ์ค๋ธ์ ํธ๋ฅผ ์ด ์ ๋ณด๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ๋ค. ์ด์์ ์ผ๋ก๋ KubeletConfiguration์ ํญ๋ชฉ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์,
์ด๋
ธํ
์ด์
์ "alpha" ์ํ๋ก ๋จ์์๋ค.
kubeadm.kubernetes.io/etcd.advertise-client-urls ์์: kubeadm.kubernetes.io/etcd.advertise-client-urls: https://172.17.0.18:2379
์ ์ฉ ๋์: ํ๋
etcd ํด๋ผ์ด์ธํธ๋ค์ด ์ ๊ทผํ ์ ์๋ URL ๋ชฉ๋ก์ ์ถ์ ํ๊ธฐ ์ํด, ๋ก์ปฌ์์ ๊ด๋ฆฌ๋๋ etcd ํ๋์ ๋ฐฐ์น๋๋ ์ด๋
ธํ
์ด์
.
์ฃผ๋ก etcd ํด๋ฌ์คํฐ์ ํฌ์ค ์ฒดํฌ์ ์ฌ์ฉํ๋ค.
kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint ์์: kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: https://172.17.0.18:6443
์ ์ฉ ๋์: ํ๋
์ธ๋ถ๋ก ๋
ธ์ถ์ํฌ API ์๋ฒ์ ์๋ํฌ์ธํธ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด,
๋ก์ปฌ์์ ๊ด๋ฆฌ๋๋ kube-apiserver ํ๋์ ๋ฐฐ์น๋๋ ์ด๋
ธํ
์ด์
.
kubeadm.kubernetes.io/component-config.hash ์์: kubeadm.kubernetes.io/component-config.hash: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae
์ ์ฉ ๋์: ์ปจํผ๊ทธ๋งต(ConfigMap)
์ปดํฌ๋ํธ ์ค์ ์ ๊ด๋ฆฌํ๋ ์ปจํผ๊ทธ๋งต์ ๋ฐฐ์น๋๋ ์ด๋
ธํ
์ด์
.
์ฌ์ฉ์๊ฐ ํน์ ์ปดํฌ๋ํธ์ ๋ํด์ kubeadm ๊ธฐ๋ณธ๊ฐ๊ณผ ๋ค๋ฅธ ์ค์ ๊ฐ์ ์ ์ฉํ๋์ง ํ๋จํ๊ธฐ ์ํ ํด์(SHA-256)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
node-role.kubernetes.io/control-plane ์ ์ฉ ๋์: ๋
ธ๋
kubeadm์ด ๊ด๋ฆฌํ๋ ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋์ ์ ์ฉ๋๋ ๋ ์ด๋ธ.
node-role.kubernetes.io/control-plane ์์: node-role.kubernetes.io/control-plane:NoSchedule
์ ์ฉ ๋์: ๋
ธ๋
์ค์ํ ์ํฌ๋ก๋๋ง ์ค์ผ์ค๋งํ ์ ์๋๋ก ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋์ ์ ์ฉ์ํค๋ ํ
์ธํธ.
node-role.kubernetes.io/master (์ฌ์ฉ ์ค๋จ) ์ ์ฉ ๋์: Node
์์: node-role.kubernetes.io/master:NoSchedule
์ด์ ๋ฒ์ ์์ kubeadm์ด ์ปจํธ๋กค ํ๋ ์ธ์ ์ค์ํ ์ํฌ๋ก๋๋ง ์ค์ผ์ค๋งํ๊ธฐ ์ํด ์ ์ฉํ๋ ํ
์ธํธ.
node-role.kubernetes.io/control-plane
๋ก ๋์ฒด๋์๋ค.
kubeadm์ ๋ ์ด์ ํด๋น ํ
์ธํธ๋ฅผ ์ค์ ํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋๋ค.
5 - ๋
ธ๋ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ ๋
ธ๋, ๋ณผ๋ฅจ, ํ๋, ์ปจํ
์ด๋ ๋ ๋ฒจ์์ kubelet์ด ๋ณด๋ ๊ฒ๊ณผ ๋์ผํ ๋ฉํธ๋ฆญ์ ์ ๊ทผํ๋ ๋ฉ์ปค๋์ฆ
kubelet ์
๋
ธ๋, ๋ณผ๋ฅจ, ํ๋, ์ปจํ
์ด๋ ์์ค์ ํต๊ณ๋ฅผ ์์งํ๋ฉฐ,
์ด ํต๊ณ๋ฅผ
์์ฝ API(Summary API) ์ ๊ธฐ๋กํ๋ค.
ํต๊ณ ์์ฝ API์ ๋ํ ์์ฒญ์
์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ๋ฅผ ํตํด ํ๋ก์ํ์ฌ ์ ์กํ ์ ์๋ค.
๋ค์์ minikube
๋ผ๋ ์ด๋ฆ์ ๋
ธ๋์ ๋ํ ์์ฝ API ์์ฒญ ์์์ด๋ค.
kubectl get --raw "/api/v1/nodes/minikube/proxy/stats/summary"
๋ค์์ curl
์ ์ด์ฉํ์ฌ ๋์ผํ API ํธ์ถ์ ํ๋ ๋ช
๋ น์ด๋ค.
# ๋จผ์ "kubectl proxy"๋ฅผ ์คํํด์ผ ํ๋ค.
# 8080 ๋ถ๋ถ์ "kubectl proxy" ๋ช
๋ น์ด ํ ๋นํด ์ค ํฌํธ๋ก ์นํํ๋ค.
curl http://localhost:8080/api/v1/nodes/minikube/proxy/stats/summary
์ฐธ๊ณ : metrics-server
0.6.x ๋ฒ์ ๋ถํฐ, metrics-server
๋ /stats/summary
๊ฐ ์๋
/metrics/resource
kubelet ์๋ํฌ์ธํธ์ ๋ํด ์ง์ํ๋ค.์์ฝ ๋ฉํธ๋ฆญ API ์์ค ๊ธฐ๋ณธ์ ์ผ๋ก, ์ฟ ๋ฒ๋คํฐ์ค๋ kubelet ๋ด๋ถ์์ ์คํ๋๋
๋ด์ฅ cAdvisor ๋ฅผ ์ฌ์ฉํ์ฌ ๋
ธ๋ ์์ฝ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
CRI๋ฅผ ํตํด ์์ฝ API ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.23 [alpha]
ํด๋ฌ์คํฐ์ PodAndContainerStatsFromCRI
๊ธฐ๋ฅ ๊ฒ์ดํธ ๋ฅผ ํ์ฑํํ๊ณ ,
์ปจํ
์ด๋ ๋ฐํ์ ์ธํฐํ์ด์ค(CRI) ๋ฅผ
ํตํ ํต๊ณ ์ ๋ณด ์ ๊ทผ์ ์ง์ํ๋ ์ปจํ
์ด๋ ๋ฐํ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ,
kubelet์ cAdvisor๊ฐ ์๋ CRI๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ๋ฐ ์ปจํ
์ด๋ ์์ค์ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
๋ค์ ๋ด์ฉ ํด๋ฌ์คํฐ ํธ๋ฌ๋ธ์ํ
ํ๊ธฐ ํ์คํฌ ํ์ด์ง์์
์ด๋ฌํ ๋ฐ์ดํฐ์ ์์กดํ๋ ๋ฉํธ๋ฆญ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค.
6 - ์ฟ ๋ฒ๋คํฐ์ค ์ด์์ ๋ณด์ 6.1 - ์ฟ ๋ฒ๋คํฐ์ค ์ด์ ํธ๋์ปค ๋ณด์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ๋ ค๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ๊ณต๊ฐ ํ๋ก์ธ์ค ๋ฅผ ๋ฐ๋ฅธ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ฝ๋ ์์
๋ฐ ๊ณต๊ฐ ์ด์๋ ๊นํ๋ธ ์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ ๋๋ค.
๋ณด์์ ๊ด๋ จ๋ ๊ณต์ง์ฌํญ์ kubernetes-security-announce@googlegroups.com ๋ฉ์ผ ๋ฆฌ์คํธ๋ก ์ ์ก๋๋ค.
6.2 - ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์๊ณผ ๊ณต๊ฐ ์ ๋ณด ์ด ํ์ด์ง๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ๋ฐ ๊ณต๊ฐ ์ ๋ณด๋ฅผ ์ค๋ช
ํ๋ค.
๋ณด์ ๊ณต์ง ๋ณด์ ๋ฐ ์ฃผ์ API ๊ณต์ง์ ๋ํ ์ด๋ฉ์ผ์ ์ํด์๋ kubernetes-security-announce ) ๊ทธ๋ฃน์ ๊ฐ์
ํ๋ค.
์ทจ์ฝ์ ๋ณด๊ณ ์ฐ๋ฆฌ๋ ์ฟ ๋ฒ๋คํฐ์ค ์คํ์์ค ์ปค๋ฎค๋ํฐ์ ์ทจ์ฝ์ ์ ๋ณด๊ณ ํ๋ ๋ณด์ ์ฐ๊ตฌ์๋ค๊ณผ ์ฌ์ฉ์๋ค์๊ฒ ๋งค์ฐ ๊ฐ์ฌํ๊ณ ์๋ค. ๋ชจ๋ ๋ณด๊ณ ์๋ ์ปค๋ฎค๋ํฐ ์์ ๋ด์ฌ์๋ค์ ์ํด ์ฒ ์ ํ ์กฐ์ฌ๋๋ค.
๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ ค๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ๊ทธ ํ์๊ธ ํ๋ก๊ทธ๋จ ์ ์ทจ์ฝ์ ์ ์ ์ถํ๋ค. ์ด๋ฅผ ํตํด ํ์คํ๋ ์๋ต์๊ฐ์ผ๋ก ์ทจ์ฝ์ ์ ๋ถ๋ฅํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ํ, ๋ณด์ ์ธ๋ถ ๋ด์ฉ๊ณผ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ๊ทธ ๋ณด๊ณ ์ ๋ก ๋ถํฐ ์์๋๋ ์ธ๋ถ์ฌํญ์ security@kubernetes.io ๋ก ์ด๋ฉ์ผ์ ๋ณด๋ธ๋ค.
๋ณด์ ๋์ ์์ํ(Security Response Committee) ๊ตฌ์ฑ์ ์ GPG ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ชฉ๋ก์ผ๋ก ์ด๋ฉ์ผ์ ์ํธํํ ์ ์๋ค. GPG๋ฅผ ์ฌ์ฉํ ์ํธํ๋ ๊ณต๊ฐํ ํ์๊ฐ ์๋ค.
์ธ์ ์ทจ์ฝ์ ์ ๋ณด๊ณ ํด์ผ ํ๋๊ฐ? ์ฟ ๋ฒ๋คํฐ์ค์์ ์ ์ฌ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ๋ค๊ณ ์๊ฐํ๋ ๊ฒฝ์ฐ ์ทจ์ฝ์ฑ์ด ์ฟ ๋ฒ๋คํฐ์ค์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์ ํ ์ ์๋ ๊ฒฝ์ฐ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์์กดํ๋ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ์์ฒด ์ทจ์ฝ์ฑ ๋ณด๊ณ ๋ฐ ๊ณต๊ฐ ํ๋ก์ธ์ค๊ฐ ์๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ง์ ๋ณด๊ณ ํ๋ค. ์ธ์ ์ทจ์ฝ์ ์ ๋ณด๊ณ ํ์ง ๋ง์์ผ ํ๋๊ฐ? ๋ณด์์ ์ํด ์ฟ ๋ฒ๋คํฐ์ค ๊ตฌ์ฑ์์๋ฅผ ์กฐ์ ํ๋๋ฐ ๋์์ด ํ์ํ ๊ฒฝ์ฐ ๋ณด์ ๊ด๋ จ ์
๋ฐ์ดํธ๋ฅผ ์ ์ฉํ๋ ๋ฐ ๋์์ด ํ์ํ ๊ฒฝ์ฐ ๋ณด์ ๊ด๋ จ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณด์ ์ทจ์ฝ์ ๋์ ๊ฐ ๋ณด๊ณ ์๋ ๋ณด์ ๋์ ์์ํ ์์๋ค์ ์ํด ์์
์ผ 3์ผ ์ด๋ด์ ์ธ์ ๋๊ณ ๋ถ์๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ณด์ ๋ฆด๋ฆฌ์ค ํ๋ก์ธ์ค ๊ฐ ์์๋๋ค.
๋ณด์ ๋์ ์์ํ์ ๊ณต์ ํ๋ ๋ชจ๋ ์ทจ์ฝ์ฑ ์ ๋ณด๋ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ก์ ํธ ๋ด์ ์์ผ๋ฉฐ, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ์๊ฐ ์๋ ํ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ ํ๋์ง ์๋๋ค.
๋ณด์ ๋ฌธ์ ๊ฐ ์ฌ์ฌ์์ ํ์ธ๋ ์์ , ๋ฆด๋ฆฌ์ค ๊ณํ์ผ๋ก ์ด๋ํจ์ ๋ฐ๋ผ ๋ฆฌํฌํฐ๋ฅผ ๊ณ์ ์
๋ฐ์ดํธํ ๊ฒ์ด๋ค.
๊ณต๊ฐ ์๊ธฐ ๊ณต๊ฐ ๋ ์ง๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ๋์ ์์ํ์ ๋ฒ๊ทธ ์ ์ถ์๊ฐ ํ์ํ๋ค. ์ฌ์ฉ์ ์ํ๊ฐ ๊ฐ๋ฅํด์ง๋ฉด ๊ฐ๋ฅํ ๋นจ๋ฆฌ ๋ฒ๊ทธ๋ฅผ ์์ ํ ๊ณต๊ฐํ๋ ๊ฒ์ด ์ข๋ค. ๋ฒ๊ทธ ๋๋ ํฝ์ค๊ฐ ์์ง ์์ ํ ์ดํด๋์ง ์์๊ฑฐ๋ ์๋ฃจ์
์ด ์ ๋๋ก ํ
์คํธ๋์ง ์์๊ฑฐ๋ ๋ฒค๋ ํ๋ ฅ์ ์ํด ๊ณต๊ฐ๋ฅผ ์ง์ฐ์ํค๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ค. ๊ณต๊ฐ ๊ธฐ๊ฐ์ ์ฆ์(ํนํ ์ด๋ฏธ ๊ณต๊ฐ์ ์ผ๋ก ์๋ ค์ง ๊ฒฝ์ฐ)๋ถํฐ ๋ช ์ฃผ๊น์ง๋ค. ๊ฐ๋จํ ์ํ ๊ธฐ๋ฅ์ด ์๋ ์ทจ์ฝ์ ์ ๊ฒฝ์ฐ ๋ณด๊ณ ๋ ์ง๋ถํฐ ๊ณต๊ฐ ๋ ์ง๊น์ง๋ 7์ผ ์ ๋ ์์๋ ๊ฒ์ผ๋ก ์์๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค ๋ณด์ ๋์ ์์ํ๋ ๊ณต๊ฐ ๋ ์ง๋ฅผ ์ค์ ํ ๋ ์ต์ข
๊ฒฐ์ ๊ถ์ ๊ฐ๋๋ค.
7 - ๋
ธ๋ ๋ ํผ๋ฐ์ค ์ ๋ณด ์ด ์น์
์์๋ ๋
ธ๋์ ๊ดํ ๋ค์์ ๋ ํผ๋ฐ์ค ์ฃผ์ ๋ฅผ ๋ค๋ฃฌ๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ๋ฌธ์์์๋
๋
ธ๋ ๋ ํผ๋ฐ์ค ์์ธ์ ๋ํด ์ฝ์ด๋ณผ ์ ์๋ค.
7.1 - kubelet ์ฒดํฌํฌ์ธํธ API ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.25 [alpha]
์ปจํ
์ด๋ ์ฒดํฌํฌ์ธํธ๋ ์คํ ์ค์ธ ์ปจํ
์ด๋์ ์คํ
์ดํธํ(stateful) ๋ณต์ฌ๋ณธ์ ์์ฑํ๋ ๊ธฐ๋ฅ์ด๋ค.
์ปจํ
์ด๋์ ์คํ
์ดํธํ ๋ณต์ฌ๋ณธ์ด ์์ผ๋ฉด,
๋๋ฒ๊น
๋๋ ๋ค๋ฅธ ๋ชฉ์ ์ ์ํด ์ด๋ฅผ ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ด๋ํ ์ ์๋ค.
์ฒดํฌํฌ์ธํธ ์ปจํ
์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ ์ ์๋ ์ปดํจํฐ๋ก ์ด๋ํ๋ฉด,
๋ณต์๋ ์ปจํ
์ด๋๋ ์ฒดํฌํฌ์ธํธ๋ ์ง์ ๊ณผ
์ ํํ ๋์ผํ ์ง์ ์์ ๊ณ์ ์คํ๋๋ค. ์ ์ ํ ๋๊ตฌ๊ฐ ์๋ค๋ฉด,
์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฌํด ๋ณผ ์๋ ์๋ค.
์ปจํ
์ด๋ ์ฒดํฌํฌ์ธํธ ์์ฑ ์์๋ ์ ์ํด์ผ ํ ๋ณด์ ์ฌํญ์ด ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ฐ ์ฒดํฌํฌ์ธํธ๋ ์ฒดํฌํฌ์ธํธ๋ ์ปจํ
์ด๋์ ๋ชจ๋ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ํฌํจํ๋ค.
์ด๋ ๊ณง ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ก์ปฌ ๋์คํฌ์ ์ ์ฅ๋์ด ์ด๋์ด ๊ฐ๋ฅํจ์ ์๋ฏธํ๋ค.
์ด ์์นด์ด๋ธ(archive)์๋ ๋ชจ๋ ๊ฐ์ธ ๋ฐ์ดํฐ์ ์ํธํ ํค๊ฐ ํฌํจ๋๋ค.
๋ฐ๋ผ์, ๋ด๋ถ CRI ๊ตฌํ์ฒด(๋
ธ๋์ ์ปจํ
์ด๋ ๋ฐํ์)๋
์ฒดํฌํฌ์ธํธ ์์นด์ด๋ธ๋ฅผ ์์ฑ ์ root
์ฌ์ฉ์๋ง ์ก์ธ์ค ๊ฐ๋ฅํ๋๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
๊ทธ๋ผ์๋ ์ฌ์ ํ ์ฃผ์๊ฐ ํ์ํ๋ฐ, ์ฒดํฌํฌ์ธํธ ์์นด์ด๋ธ๋ฅผ ๋ค๋ฅธ ์์คํ
์ผ๋ก ์ ์กํ๊ฒ ๋๋ฉด ํด๋น ์์คํ
์ ์ฒดํฌํฌ์ธํธ ์์นด์ด๋ธ ์์ ์๊ฐ
๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ POST
ํน์ ์ปจํ
์ด๋์ ์ฒดํฌํฌ์ธํธ ์์ฑ์ง์ ๋ ํ๋์ ํน์ ์ปจํ
์ด๋๋ฅผ ์ฒดํฌํฌ์ธํธํ๋๋ก kubelet์ ์ง์ํ๋ค.
kubelet ์ฒดํฌํฌ์ธํธ ์ธํฐํ์ด์ค๋ก์ ์ ๊ทผ์ด ์ด๋ป๊ฒ ์ ์ด๋๋์ง์ ๋ํ ์์ธํ ๋ด์ฉ์
Kubelet ์ธ์ฆ/์ธ๊ฐ ๋ ํผ๋ฐ์ค
๋ฅผ ์ฐธ๊ณ ํ๋ค.
kubelet์ ๋ด๋ถ CRI ๊ตฌํ์ฒด์
์ฒดํฌํฌ์ธํธ๋ฅผ ์์ฒญํ๋ค.
์ฒดํฌํฌ์ธํธ ์์ฒญ ์, kubelet์ ์ฒดํฌํฌ์ธํธ ์์นด์ด๋ธ์ ์ด๋ฆ์
checkpoint-<podFullName>-<containerName>-<timestamp>.tar
๋ก ์ง์ ํ๊ณ
๋ฃจํธ ๋๋ ํ ๋ฆฌ(--root-dir
๋ก ์ง์ ๊ฐ๋ฅ) ์๋์ checkpoints
๋๋ ํ ๋ฆฌ์
์ฒดํฌํฌ์ธํธ ์์นด์ด๋ธ๋ฅผ ์ ์ฅํ๋๋ก ์์ฒญํ๋ค.
๊ธฐ๋ณธ๊ฐ์ /var/lib/kubelet/checkpoints
์ด๋ค.
์ฒดํฌํฌ์ธํธ ์์นด์ด๋ธ๋ tar ํ์์ด๋ฉฐ
tar
์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์กฐํํด ๋ณผ ์ ์๋ค.
์์นด์ด๋ธ์ ๋ด์ฉ์ ๋ด๋ถ CRI ๊ตฌํ์ฒด(๋
ธ๋์ ์ปจํ
์ด๋ ๋ฐํ์)์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
HTTP ์์ฒญ POST /checkpoint/{namespace}/{pod}/{container}
ํ๋ผ๋ฏธํฐ namespace (๊ฒฝ๋ก ๋ด ํ๋ผ๋ฏธํฐ ): ๋ฌธ์์ด(string), ํ์
๋ค์์คํ์ด์ค(Namespace) pod (๊ฒฝ๋ก ๋ด ํ๋ผ๋ฏธํฐ ): ๋ฌธ์์ด(string), ํ์
ํ๋(Pod) container (๊ฒฝ๋ก ๋ด ํ๋ผ๋ฏธํฐ ): ๋ฌธ์์ด(string), ํ์
์ปจํ
์ด๋(Container) timeout (์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ): ์ ์(integer)
์ฒดํฌํฌ์ธํธ ์์ฑ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํ ์๊ฐ์ ํ(์ด)์ด๋ค.
์๊ฐ ์ ํ์ด 0 ๋๋ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ
๊ธฐ๋ณธ CRI ์๊ฐ ์ ํ ๊ฐ์ด ์ฌ์ฉ๋ ๊ฒ์ด๋ค.
์ฒดํฌํฌ์ธํธ ์์ฑ ์๊ฐ์ ์ปจํ
์ด๋๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
์ปจํ
์ด๋๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์์๋ก ํด๋น ์ฒดํฌํฌ์ธํธ๋ฅผ ์์ฑํ๋ ๋ฐ
๋ ๋ง์ ์๊ฐ์ด ํ์ํ๋ค.
์๋ต 200: OK
401: Unauthorized
404: Not Found (ContainerCheckpoint
๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ๋นํ์ฑํ๋ ๊ฒฝ์ฐ)
404: Not Found (๋ช
์ํ namespace
, pod
๋๋ container
๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ)
500: Internal Server Error (CRI ๊ตฌํ์ฒด๊ฐ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ํํ๋ ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ (์์ธํ ๋ด์ฉ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ธํ๋ค.))
500: Internal Server Error (CRI ๊ตฌํ์ฒด๊ฐ ์ฒดํฌํฌ์ธํธ CRI API๋ฅผ ๊ตฌํํ์ง ์์ ๊ฒฝ์ฐ (์์ธํ ๋ด์ฉ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ธํ๋ค.))
7.2 - ๋์ปค์ฌ ์ ๊ฑฐ ๋ฐ CRI ํธํ ๋ฐํ์ ์ฌ์ฉ์ ๋ํ ๊ธฐ์ฌ ์ด ๋ฌธ์๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๋์ปค์ฌ
์ฌ์ฉ ์ค๋จ(deprecation) ๋ฐ ์ ๊ฑฐ, ๋๋
ํด๋น ์ ๊ฑฐ๋ฅผ ๊ณ ๋ คํ CRI ํธํ ์ปจํ
์ด๋ ๋ฐํ์
์ฌ์ฉ์ ๊ดํ ๊ธฐ์ฌ ๋ฐ ๊ธฐํ ํ์ด์ง ๋ชฉ๋ก์ ์ ๊ณตํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํ๋ก์ ํธ GitHub ์ด์๋ฅผ ํตํด ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์๋ค. ๋์ปค์ฌ ์ ๊ฑฐ ํผ๋๋ฐฑ ๋ฐ ์ด์ . (k/kubernetes/#106917 )
์ธ๋ถ ์์ค 8 - ๋คํธ์ํน ๋ ํผ๋ฐ์ค ์ด ์น์
์์๋
์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํน์ ๋ ํผ๋ฐ์ค ์์ธ๋ฅผ ์ ๊ณตํ๋ค.
8.1 - ์๋น์ค๊ฐ ์ง์ํ๋ ํ๋กํ ์ฝ ์๋น์ค ๋ฅผ ๊ตฌ์ฑํ์ฌ,
์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ง์ํ๋ ๋คํธ์ํฌ ํ๋กํ ์ฝ ์ค ํ๋๋ฅผ ์ ํํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์๋น์ค์ ๋ํด ๋ค์์ ํ๋กํ ์ฝ์ ์ง์ํ๋ค.
์๋น์ค๋ฅผ ์ ์ํ ๋, ์๋น์ค๊ฐ ์ฌ์ฉํ
์ ํ๋ฆฌ์ผ์ด์
ํ๋กํ ์ฝ ์
์ง์ ํ ์๋ ์๋ค.
์ด ๋ฌธ์์์๋ ๋ช ๊ฐ์ง ํน์ ์ฌ๋ก์ ๋ํด ์ค๋ช
ํ๋ฉฐ,
์ด๋ค ๋ชจ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ก ํ๋กํ ์ฝ(transport protocol)๋ก TCP๋ฅผ ์ฌ์ฉํ๋ค.
์ง์ํ๋ ํ๋กํ ์ฝ ์๋น์ค ํฌํธ์ protocol
์ ๋ํด ๋ค์ 3๊ฐ์ ๊ฐ์ด ์ ํจํ๋ค.
SCTP
๊ธฐ๋ฅ ์ํ:
Kubernetes v1.20 [stable]
SCTP ํธ๋ํฝ์ ์ง์ํ๋ ๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋๋ถ๋ถ์ ์๋น์ค์
SCTP๋ฅผ ์ฌ์ฉํ ์ ์๋ค. type: LoadBalancer
์๋น์ค์ ๊ฒฝ์ฐ SCTP ์ง์ ์ฌ๋ถ๋
์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. (๋๋ถ๋ถ ์ง์ํ์ง ์์)
SCTP๋ ์๋์ฐ ๋
ธ๋์์๋ ์ง์๋์ง ์๋๋ค.
๋ฉํฐํ(multihomed) SCTP ์ฐ๊ฒฐ ์ง์ ๋ฉํฐํ SCTP ์ฐ๊ฒฐ ์ง์์ ์ํด์๋ CNI ํ๋ฌ๊ทธ์ธ์ด ํ๋์ ๋ณต์๊ฐ์ ์ธํฐํ์ด์ค ๋ฐ IP ์ฃผ์๋ฅผ ํ ๋นํ๋ ๊ธฐ๋ฅ์ ์ง์ํด์ผ ํ๋ค.
๋ฉํฐํ SCTP ์ฐ๊ฒฐ์์์ NAT๋ ์์ํ๋ ์ปค๋ ๋ชจ๋ ๋ด์ ํน์ํ ๋ก์ง์ ํ์๋ก ํ๋ค.
TCP
๋ชจ๋ ์ข
๋ฅ์ ์๋น์ค์ TCP๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ธฐ๋ณธ ๋คํธ์ํฌ ํ๋กํ ์ฝ์ด๋ค.
UDP
๋๋ถ๋ถ์ ์๋น์ค์ UDP๋ฅผ ์ฌ์ฉํ ์ ์๋ค. type: LoadBalancer
์๋น์ค์ ๊ฒฝ์ฐ,
UDP ์ง์ ์ฌ๋ถ๋ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
ํน์ ์ผ์ด์ค HTTP ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ด๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ,
LoadBalancer ๋ชจ๋์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ,
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ธ๋ถ์, HTTP / HTTPS ๋ฆฌ๋ฒ์ค ํ๋ก์ฑ์ ํตํด
ํด๋น ์๋น์ค์ ๋ฐฑ์๋ ์๋ํฌ์ธํธ๋ก ํธ๋ํฝ์ ์ ๋ฌํ๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก, ํธ๋ํฝ์ HTTP ์์ค์์ ์ ์ดํ๋ ค๋ฉด
ํด๋น ์๋น์ค์ ํ๋กํ ์ฝ์ TCP
๋ก ์ง์ ํ๊ณ
๋ก๋๋ฐธ๋ฐ์๋ฅผ ๊ตฌ์ฑํ๋
์ด๋
ธํ
์ด์
(๋ณดํต
ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ง๋ค ๋ค๋ฆ)์ ์ถ๊ฐํ๋ค.
์ด ๊ตฌ์ฑ์ ์ํฌ๋ก๋๋ก์ HTTPS (HTTP over TLS) ์ง์ ๋ฐ ํ๋ฌธ HTTP ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ํฌํจํ ์ ์๋ค.
์ฐธ๊ณ : ์๋น์ค ๋์
์ธ๊ทธ๋ ์ค ๋ฅผ ์ฌ์ฉํ์ฌ
HTTP/HTTPS ์๋น์ค๋ฅผ ๋
ธ์ถํ ์๋ ์๋ค.
ํน์ ์ฐ๊ฒฐ์
์ ํ๋ฆฌ์ผ์ด์
ํ๋กํ ์ฝ ์
http
๋๋ https
๋ก ์ถ๊ฐ์ ์ผ๋ก ๋ช
์ํ๊ณ ์ถ์ ์๋ ์๋ค.
๋ก๋๋ฐธ๋ฐ์์์ ์ํฌ๋ก๋๋ก ๊ฐ๋ ์ธ์
์ด HTTP without TLS์ด๋ฉด http
๋ฅผ ์ฌ์ฉํ๊ณ ,
๋ก๋๋ฐธ๋ฐ์์์ ์ํฌ๋ก๋๋ก ๊ฐ๋ ์ธ์
์ด TLS ์ํธํ๋ฅผ ์ฌ์ฉํ๋ฉด https
๋ฅผ ์ฌ์ฉํ๋ค.
PROXY ํ๋กํ ์ฝ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ง์ํ๋ ๊ฒฝ์ฐ์,
type: LoadBalancer
๋ก ์ค์ ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ,
์ฟ ๋ฒ๋คํฐ์ค ์ธ๋ถ์ ์กด์ฌํ๋ฉด์ ์ฐ๊ฒฐ๋ค์
PROXY ํ๋กํ ์ฝ ๋ก ๊ฐ์ธ ์ ๋ฌํ๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
์ด๋ฌํ ๋ก๋ ๋ฐธ๋ฐ์๋ ๋ค์ด์ค๋ ์ฐ๊ฒฐ์ ์ค๋ช
ํ๋ ์ด๊ธฐ ์ผ๋ จ์ ์ฅํ
(octets)์ ์ ์กํ๋ฉฐ,
์ด๋ ๋ค์์ ์์(PROXY ํ๋กํ ์ฝ v1)์ ์ ์ฌํ๋ค.
PROXY TCP4 192.0.2.202 10.0.42.7 12345 7\r\n
ํ๋ก์ ํ๋กํ ์ฝ ํ๋ฆฌ์ฐ๋ธ(preamble) ๋ค์ ์ค๋ ๋ฐ์ดํฐ๋
ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ ์๋ณธ ๋ฐ์ดํฐ์ด๋ค.
์์ชฝ ์ค ํ์ชฝ์์ ์ฐ๊ฒฐ์ ๋ซ์ผ๋ฉด,
๋ก๋๋ฐธ๋ฐ์๋ ์ฐ๊ฒฐ ์ข
๋ฃ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ฉฐ ๋จ์์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ๊ฐ๋ฅํ ์ชฝ์ผ๋ก ๋ณด๋ธ๋ค.
์ผ๋ฐ์ ์ผ๋ก๋, ํ๋กํ ์ฝ์ TCP
๋ก ์ค์ ํ ์๋น์ค๋ฅผ ์ ์ํ๋ค.
๋ํ, ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ณ๋ก ์์ดํ ์ด๋
ธํ
์ด์
์ ์ค์ ํ์ฌ
๋ก๋๋ฐธ๋ฐ์๊ฐ ๊ฐ ์ธ์ปค๋ฐ ์ฐ๊ฒฐ์ PROXY ํ๋กํ ์ฝ๋ก ๊ฐ์ธ๋๋ก ๊ตฌ์ฑํ ์๋ ์๋ค.
TLS ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ง์ํ๋ ๊ฒฝ์ฐ์,
type: LoadBalancer
๋ก ์ค์ ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ,
์ฟ ๋ฒ๋คํฐ์ค ์ธ๋ถ์ ์กด์ฌํ๋ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ๊ตฌ์ถํ ์ ์์ผ๋ฉฐ,
์ด ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ก๋๋ฐธ๋ฐ์๊น์ง์ ์ฐ๊ฒฐ์ TLS ์ํธํ๋๊ณ ๋ก๋๋ฐธ๋ฐ์๋ TLS ์๋ฒ ํผ์ด๊ฐ ๋๋ค.
๋ก๋๋ฐธ๋ฐ์๋ก๋ถํฐ ์ํฌ๋ก๋๊น์ง์ ์ฐ๊ฒฐ์ TLS์ผ ์๋ ์์ผ๋ฉฐ, ํ๋ฌธ์ผ ์๋ ์๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ์ ํํ ์ต์
์ ๋ฒ์๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ๋๋ ์ปค์คํ
์๋น์ค ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก๋, ํ๋กํ ์ฝ์ TCP
๋ก ์ค์ ํ๊ณ
์ด๋
ธํ
์ด์
(๋ณดํต ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ณ๋ก ์์ดํจ)์ ์ค์ ํ์ฌ
๋ก๋๋ฐธ๋ฐ์๊ฐ TLS ์๋ฒ๋ก ์๋ํ๋๋ก ๊ตฌ์ฑํ๋ค.
ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ณ๋ก ์์ดํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ
TLS ์์ด๋ดํฐํฐ(์๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ํฌ๋ก๋๋ก ์ฐ๊ฒฐํ๋ ํด๋ผ์ด์ธํธ๋ ๊ฐ๋ฅ)๋ฅผ ๊ตฌ์ฑํ ์๋ ์๋ค.
8.2 - ํฌํธ์ ํ๋กํ ์ฝ ๋ฌผ๋ฆฌ์ ๋คํธ์ํฌ ๋ฐฉํ๋ฒฝ์ด ์๋ ์จํ๋ ๋ฏธ์ค ๋ฐ์ดํฐ ์ผํฐ ๋๋
ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋์ ๊ฐ์ ๋คํธ์ํฌ์ ๊ฐ์ด ๋คํธ์ํฌ ๊ฒฝ๊ณ๊ฐ ์๊ฒฉํ ํ๊ฒฝ์์
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์คํํ ๋, ์ฟ ๋ฒ๋คํฐ์ค ๊ตฌ์ฑ ์์์์
์ฌ์ฉํ๋ ํฌํธ์ ํ๋กํ ์ฝ์ ์๊ณ ์๋ ๊ฒ์ด ์ ์ฉํ๋ค.
์ปจํธ๋กค ํ๋ ์ธ ํ๋กํ ์ฝ ๋ฐฉํฅ ํฌํธ ๋ฒ์ ์ฉ๋ ์ฌ์ฉ ์ฃผ์ฒด TCP ์ธ๋ฐ์ด๋ 6443 ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ ์ ๋ถ TCP ์ธ๋ฐ์ด๋ 2379-2380 etcd ์๋ฒ ํด๋ผ์ด์ธํธ API kube-apiserver, etcd TCP ์ธ๋ฐ์ด๋ 10250 Kubelet API Self, ์ปจํธ๋กค ํ๋ ์ธ TCP ์ธ๋ฐ์ด๋ 10259 kube-scheduler Self TCP ์ธ๋ฐ์ด๋ 10257 kube-controller-manager Self
etcd ํฌํธ๊ฐ ์ปจํธ๋กค ํ๋ ์ธ ์น์
์ ํฌํจ๋์ด ์์ง๋ง, ์ธ๋ถ ๋๋ ์ฌ์ฉ์ ์ง์ ํฌํธ์์ ์์ฒด
etcd ํด๋ฌ์คํฐ๋ฅผ ํธ์คํ
ํ ์๋ ์๋ค.
์์ปค ๋
ธ๋ ํ๋กํ ์ฝ ๋ฐฉํฅ ํฌํธ ๋ฒ์ ์ฉ๋ ์ฌ์ฉ ์ฃผ์ฒด TCP ์ธ๋ฐ์ด๋ 10250 Kubelet API Self, ์ปจํธ๋กค ํ๋ ์ธ TCP ์ธ๋ฐ์ด๋ 30000-32767 NodePort ์๋น์คโ ์ ๋ถ
โ ๋
ธ๋ํฌํธ(NodePort) ์๋น์ค ์ ๊ธฐ๋ณธ ํฌํธ ๋ฒ์.
๋ชจ๋ ๊ธฐ๋ณธ ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ ์ํ ์ ์๋ค. ์ฌ์ฉ์ ์ง์ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ฌ๊ธฐ์ ์ธ๊ธ๋ ๊ธฐ๋ณธ๊ฐ ๋์ ํด๋น ํฌํธ๋ฅผ ์ด์ด์ผ ํ๋ค.
์ข
์ข
๋ฐ์ํ๋ ํ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์๋ API ์๋ฒ ํฌํธ๋ฅผ 443์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ์ด๋ค.
๋๋, API ์๋ฒ์ ๊ธฐ๋ณธ ํฌํธ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๊ณ ,
443 ํฌํธ์์ ์์ ๋๊ธฐํ๋ ๋ก๋ ๋ฐธ๋ฐ์ ๋ค์ API ์๋ฒ๋ฅผ ๋๊ณ ,
๋ก๋ ๋ฐธ๋ฐ์์์ API ์๋ฒ๋ก ๊ฐ๋ ์์ฒญ์ API ์๋ฒ์ ๊ธฐ๋ณธ ํฌํธ๋ก ๋ผ์ฐํ
ํ ์๋ ์๋ค.
8.3 - ๊ฐ์ IP ๋ฐ ์๋น์ค ํ๋ก์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋ ๋
kube-proxy
๋ฅผ
์คํํ๋ค(kube-proxy
๋ฅผ ๋์ฒดํ๋ ๊ตฌ์ฑ์์๋ฅผ ์ง์ ๋ฐฐํฌํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด).
kube-proxy
๋
ExternalName
์ธ์ type
์
์๋น์ค ๋ฅผ ์ํ
๊ฐ์ IP ๋ฉ์ปค๋์ฆ์ ๊ตฌํ์ ๋ด๋นํ๋ค.
ํญ์ ๋ฐ์ํ๋ ์ง๋ฌธ์,
์ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ธ๋ฐ์ด๋ ํธ๋ํฝ์ ๋ฐฑ์๋๋ก ์ ๋ฌํ๊ธฐ ์ํด
ํ๋ก์์ ์์กดํ๋๊ฐ ํ๋ ์ ์ด๋ค.
๋ค๋ฅธ ์ ๊ทผ๋ฒ์ด ์๋๊ฐ? ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ A ๊ฐ (๋๋ IPv6์ ๊ฒฝ์ฐ AAAA)์ ๊ฐ์ง DNS ๋ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ณ ,
๋ผ์ด๋-๋ก๋น ์ด๋ฆ ํ์ธ ๋ฐฉ์์ ์ทจํ ์ ์๋๊ฐ?
There are a few reasons for using proxying for Services:
๋ ์ฝ๋ TTL์ ๊ณ ๋ คํ์ง ์๊ณ , ๋ง๋ฃ๋ ์ด๋ฆ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๋
DNS ๊ตฌํ์ ๋ํ ์ค๋๋ ์ญ์ฌ๊ฐ ์๋ค. ์ผ๋ถ ์ฑ์ DNS ๊ฒ์์ ํ ๋ฒ๋ง ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฌด๊ธฐํ์ผ๋ก ์บ์ํ๋ค. ์ฑ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ ํ ์ฌ-ํ์ธ์ ํ๋ค๊ณ ํ๋๋ผ๋,
DNS ๋ ์ฝ๋์ TTL์ด ๋ฎ๊ฑฐ๋ 0์ด๋ฉด
DNS์ ๋ถํ๊ฐ ๋์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง ์ ์๋ค. ๋ณธ ํ์ด์ง์ ๋ท ๋ถ๋ถ์์ ๋ค์ํ kube-proxy ๊ตฌํ์ด ๋์ํ๋ ๋ฐฉ์์ ๋ํด ์ฝ์ ์ ์๋ค.
์ฐ์ ์์๋์ด์ผ ํ ๊ฒ์, kube-proxy
๋ฅผ ๊ตฌ๋ํ ๋,
์ปค๋ ์์ค์ ๊ท์น์ด ์์ (์๋ฅผ ๋ค์ด, iptables ๊ท์น์ด ์์ฑ๋ ์ ์์)๋ ์ ์๊ณ ,
์ด๋ ๋๋ก๋ ๋ฆฌ๋ถํธ ์ ๊น์ง ์ ๋ฆฌ๋์ง ์์ ์๋ ์๋ค.
๊ทธ๋์, kube-proxy๋ ์ปดํจํฐ์์ ์ ์์ค์, ํน๊ถ์ ๊ฐ์ง(privileged) ๋คํธ์ํน ํ๋ก์ ์๋น์ค๊ฐ ๊ตฌ๋๋จ์ผ๋ก์จ ๋ฐ์ํ๋
๊ฒฐ๊ณผ๋ฅผ ์ดํดํ๊ณ ์๋ ๊ด๋ฆฌ์์ ์ํด์๋ง ๊ตฌ๋๋์ด์ผ ํ๋ค.
๋น๋ก kube-proxy
์คํ ํ์ผ์ด cleanup
๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ๋ ํ์ง๋ง,
์ด ๊ธฐ๋ฅ์ ๊ณต์์ ์ธ ๊ธฐ๋ฅ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ตฌํ๋ ๊ทธ๋๋ก๋ง ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, 3๊ฐ์ ๋ ํ๋ฆฌ์นด๋ก ์คํ๋๋ ์คํ
์ดํธ๋ฆฌ์ค ์ด๋ฏธ์ง-์ฒ๋ฆฌ ๋ฐฑ์๋๋ฅผ ์๊ฐํด๋ณด์.
์ด๋ฌํ ๋ ํ๋ฆฌ์นด๋ ๋์ฒด ๊ฐ๋ฅํ๋ค.
์ฆ, ํ๋ก ํธ์๋๋ ๊ทธ๊ฒ๋ค์ด ์ฌ์ฉํ๋ ๋ฐฑ์๋๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๋๋ค.
๋ฐฑ์๋ ์ธํธ๋ฅผ ๊ตฌ์ฑํ๋ ์ค์ ํ๋๋ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง,
ํ๋ก ํธ์๋ ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ ์ธ์ํ ํ์๊ฐ ์์ผ๋ฉฐ, ๋ฐฑ์๋ ์ธํธ ์์ฒด๋ฅผ ์ถ์ ํด์ผ ํ ํ์๋ ์๋ค.
ํ๋ก์ ๋ชจ๋๋ค kube-proxy๋ ์ฌ๋ฌ ๋ชจ๋ ์ค ํ๋๋ก ๊ธฐ๋๋ ์ ์์ผ๋ฉฐ, ์ด๋ ํ๊ฒฝ ์ค์ ์ ๋ฐ๋ผ ๊ฒฐ์ ๋จ์ ์ ์ํ๋ค.
kube-proxy์ ๊ตฌ์ฑ์ ์ปจํผ๊ทธ๋งต(ConfigMap)์ ํตํด ์ด๋ฃจ์ด์ง๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น kube-proxy๋ฅผ ์ํ ์ปจํผ๊ทธ๋งต์ ์คํจ์ฑ์๊ฒ
๊ฑฐ์ ๋๋ถ๋ถ์ kube-proxy์ ํ๋๊ทธ์ ํ์๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ค. kube-proxy๋ฅผ ์ํ ํด๋น ์ปจํผ๊ทธ๋งต์ ๊ธฐ๋ ์ค ๊ตฌ์ฑ์ ์ฌ์ ์ฉ(live reloading)์ ์ง์ํ์ง ์๋๋ค. kube-proxy๋ฅผ ์ํ ์ปจํผ๊ทธ๋งต ํ๋ผ๋ฏธํฐ๋ ๊ธฐ๋ ์์ ๊ฒ์ฆ์ด๋ ํ์ธ์ ํ์ง ์๋๋ค.
์๋ฅผ ๋ค์ด, ์ด์ ์ฒด๊ณ๊ฐ iptables ๋ช
๋ น์ ํ์ฉํ์ง ์์ ๊ฒฝ์ฐ,
ํ์ค ์ปค๋ kube-proxy ๊ตฌํ์ฒด๋ ์๋ํ์ง ์์ ๊ฒ์ด๋ค. iptables
ํ๋ก์ ๋ชจ๋์ด ๋ชจ๋์์๋, kube-proxy๋ ์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์
์๋น์ค, ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ์ค๋ธ์ ํธ์ ์ถ๊ฐ์ ์ ๊ฑฐ๋ฅผ ๊ฐ์ํ๋ค.
๊ฐ ์๋น์ค์ ๋ํด, ์๋น์ค์ clusterIP
๋ฐ port
์ ๋ํ ํธ๋ํฝ์ ์บก์ฒํ๊ณ
ํด๋น ํธ๋ํฝ์ ์๋น์ค์ ๋ฐฑ์๋ ์ธํธ ์ค ํ๋๋ก ๋ฆฌ๋ค์ด๋ ํธ(redirect)ํ๋
iptables ๊ท์น์ ์ค์นํ๋ค.
๊ฐ ์๋ํฌ์ธํธ ์ค๋ธ์ ํธ์ ๋ํด, ๋ฐฑ์๋ ํ๋๋ฅผ ์ ํํ๋ iptables ๊ท์น์ ์ค์นํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, iptables ๋ชจ๋์ kube-proxy๋ ๋ฐฑ์๋๋ฅผ ์์๋ก ์ ํํ๋ค.
ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด iptables๋ฅผ ์ฌ์ฉํ๋ฉด ์์คํ
์ค๋ฒํค๋๊ฐ ์ค์ด๋๋๋ฐ,
์ ์ ์คํ์ด์ค์ ์ปค๋ ์คํ์ด์ค ์ฌ์ด๋ฅผ ์ ํํ ํ์์์ด ๋ฆฌ๋
์ค ๋ทํํฐ(netfilter)๊ฐ
ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ์ ๋ขฐํ ์ ์๊ธฐ๋ ํ๋ค.
kube-proxy๊ฐ iptables ๋ชจ๋์์ ์คํ ์ค์ด๊ณ ์ ํ๋ ์ฒซ ๋ฒ์งธ ํ๋๊ฐ ์๋ตํ์ง ์์ผ๋ฉด, ์ฐ๊ฒฐ์ด ์คํจํ๋ค.
์ด๋ ์ด์ ์ userspace
๋ชจ๋์ ๋ค๋ฅด๋ค.
์ด์ ์ userspace
์๋๋ฆฌ์ค์์๋,
kube-proxy๋ ์ฒซ ๋ฒ์งธ ํ๋์ ๋ํ ์ฐ๊ฒฐ์ด ์คํจํ์์ ๊ฐ์งํ๊ณ ๋ค๋ฅธ ๋ฐฑ์๋ ํ๋๋ก ์๋์ผ๋ก ์ฌ์๋ํ๋ค.
ํ๋ ์ค๋น์ฑ ํ๋ก๋ธ(readiness probe) ๋ฅผ ์ฌ์ฉํ์ฌ
๋ฐฑ์๋ ํ๋๊ฐ ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ผ๋ฏ๋ก,
iptables ๋ชจ๋์ kube-proxy๋ ์ ์์ผ๋ก ํ
์คํธ๋ ๋ฐฑ์๋๋ง ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํธ๋ํฝ์ด kube-proxy๋ฅผ ํตํด ์คํจํ ๊ฒ์ผ๋ก ์๋ ค์ง ํ๋๋ก ์ ์ก๋๋ ๊ฒ์ ๋ง์ ์ ์๋ค.
iptables ํ๋ก์์ ๋ํ ์๋น์ค ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ ์์ ๋ค์ ํ๋ฒ, ์ ์์ ์ค๋ช
ํ
์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ณ ๋ คํ๋ค.
๋ฐฑ์๋ ์๋น์ค๊ฐ ์์ฑ๋๋ฉด,
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์ ๊ฐ์ IP ์ฃผ์(์ : 10.0.0.1)๋ฅผ ํ ๋นํ๋ค.
์๋น์ค ํฌํธ๋ฅผ 1234๋ผ๊ณ ๊ฐ์ ํ์.
ํด๋ฌ์คํฐ์ ๋ชจ๋ kube-proxy ์ธ์คํด์ค๋
์ ์๋น์ค์ ์์ฑ์ ๊ด์ฐฐํ ์ ์๋ค.
ํ๋ก์๊ฐ ์๋ก์ด ์๋น์ค๋ฅผ ๋ฐ๊ฒฌํ๋ฉด,
๊ฐ์ IP ์ฃผ์์์ ์๋น์ค-๋ณ ๊ท์น์ผ๋ก ๋ฆฌ๋ค์ด๋ ์
๋๋ ์ผ๋ จ์ iptables ๊ท์น์ ์ค์นํ๋ค.
์๋น์ค-๋ณ ๊ท์น์ ํธ๋ํฝ์ (๋ชฉ์ ์ง NAT๋ฅผ ์ฌ์ฉํ์ฌ) ๋ฐฑ์๋๋ก ๋ฆฌ๋ค์ด๋ ์
ํ๋
์๋ํฌ์ธํธ-๋ณ ๊ท์น์ ์ฐ๊ฒฐํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค์ ๊ฐ์ IP ์ฃผ์์ ์ฐ๊ฒฐํ๋ฉด iptables ๊ท์น์ด ์์ํ๋ค.
(์ธ์
์ดํผ๋ํฐ(Affinity)์ ๋ฐ๋ผ ๋๋ ๋ฌด์์๋ก) ๋ฐฑ์๋๊ฐ ์ ํ๋๊ณ ,
ํจํท์ ํด๋ผ์ด์ธํธ IP ์ฃผ์๋ฅผ ๋ฎ์ด์ฐ์ง ์๊ณ ๋ฐฑ์๋๋ก ๋ฆฌ๋ค์ด๋ ์
๋๋ค.
ํธ๋ํฝ์ด ๋
ธ๋-ํฌํธ ๋๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ๋ค์ด์ค๋ ๊ฒฝ์ฐ์๋,
์ด์ ๋์ผํ ๊ธฐ๋ณธ ํ๋ฆ์ด ์คํ๋์ง๋ง, ํด๋ผ์ด์ธํธ IP๋ ๋ณ๊ฒฝ๋๋ค.
IPVS ํ๋ก์ ๋ชจ๋ ipvs
๋ชจ๋์์, kube-proxy๋ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค์ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค๋ฅผ ๊ฐ์ํ๊ณ ,
netlink
์ธํฐํ์ด์ค๋ฅผ ํธ์ถํ์ฌ ๊ทธ์ ๋ฐ๋ผ IPVS ๊ท์น์ ์์ฑํ๊ณ
IPVS ๊ท์น์ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ๋ฐ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๊ธฐํํ๋ค.
์ด ์ ์ด ๋ฃจํ๋ IPVS ์ํ๊ฐ ์ํ๋ ์ํ์ ์ผ์นํ๋๋ก
๋ณด์ฅํ๋ค.
์๋น์ค์ ์ ๊ทผํ๋ฉด, IPVS๋ ํธ๋ํฝ์ ๋ฐฑ์๋ ํ๋ ์ค ํ๋๋ก ๋ณด๋ธ๋ค.
IPVS ํ๋ก์ ๋ชจ๋๋ iptables ๋ชจ๋์ ์ ์ฌํ ๋ทํํฐ ํํฌ ๊ธฐ๋ฅ์
๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง, ํด์ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฌ์ฉํ๊ณ
์ปค๋ ์คํ์ด์ค์์ ๋์ํ๋ค.
์ด๋ IPVS ๋ชจ๋์ kube-proxy๋ iptables ๋ชจ๋์ kube-proxy๋ณด๋ค
์ง์ฐ ์๊ฐ์ด ์งง์ ํธ๋ํฝ์ ๋ฆฌ๋ค์ด๋ ์
ํ๊ณ , ํ๋ก์ ๊ท์น์ ๋๊ธฐํํ ๋ ์ฑ๋ฅ์ด
ํจ์ฌ ํฅ์๋จ์ ์๋ฏธํ๋ค. ๋ค๋ฅธ ํ๋ก์ ๋ชจ๋์ ๋น๊ตํ์ ๋, IPVS ๋ชจ๋๋
๋์ ๋คํธ์ํฌ ํธ๋ํฝ ์ฒ๋ฆฌ๋๋ ์ง์ํ๋ค.
IPVS๋ ํธ๋ํฝ์ ๋ฐฑ์๋ ํ๋๋ก ๋ฐธ๋ฐ์ฑํ๊ธฐ ์ํ ์ถ๊ฐ ์ต์
์ ์ ๊ณตํ๋ฉฐ,
๊ทธ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ๋ค.
rr
: ๋ผ์ด๋-๋ก๋นlc
: ์ต์ ์ฐ๊ฒฐ (๊ฐ์ฅ ์ ์ ์์ ์ด๋ ค์๋ ์ฐ๊ฒฐ)dh
: ๋ชฉ์ ์ง ํด์ฑsh
: ์์ค ํด์ฑsed
: ์ต๋จ ์์ ์ง์ฐ (shortest expected delay)nq
: ํ ๋ฏธ์ฌ์ฉ (never queue)์ฐธ๊ณ : IPVS ๋ชจ๋์์ kube-proxy๋ฅผ ์คํํ๋ ค๋ฉด, kube-proxy๋ฅผ ์์ํ๊ธฐ ์ ์ ๋
ธ๋์์ IPVS๋ฅผ
์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํด์ผ ํ๋ค.
kube-proxy๊ฐ IPVS ํ๋ก์ ๋ชจ๋๋ก ์์๋ ๋, IPVS ์ปค๋ ๋ชจ๋์ด
์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํ๋ค. IPVS ์ปค๋ ๋ชจ๋์ด ๊ฐ์ง๋์ง ์์ผ๋ฉด, kube-proxy๋
iptables ํ๋ก์ ๋ชจ๋๋ก ๋ค์ ์คํ๋๋ค.
IPVS ํ๋ก์์ ๋ํ ์๋น์ค ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ ์ธ์
์ดํผ๋ํฐ ์ด๋ฌํ ํ๋ก์ ๋ชจ๋ธ์์,
ํด๋ผ์ด์ธํธ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค/์๋น์ค/ํ๋์ ๋ํด ์ ํ ๋ชจ๋ฅด๋๋ผ๋
์๋น์ค์ IP:ํฌํธ๋ก ํฅํ๋ ํธ๋ํฝ์ ์ ์ ํ ๋ฐฑ์๋๋ก ํ๋ก์๋๋ค.
ํน์ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ๋งค๋ฒ ๋์ผํ ํ๋๋ก
์ ๋ฌ๋๋๋ก ํ๋ ค๋ฉด, ์๋น์ค์ .spec.sessionAffinity
๋ฅผ ClientIP
๋ก ์ค์ ํ์ฌ
ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์
์ดํผ๋ํฐ๋ฅผ ์ ํํ ์ ์๋ค.
(๊ธฐ๋ณธ๊ฐ์ None
)
์ธ์
๊ณ ์ (Session stickiness) ํ์์์ ์๋น์ค์ .spec.sessionAffinityConfig.clientIP.timeoutSeconds
๋ฅผ ์ ์ ํ ์ค์ ํ์ฌ
์ต๋ ์ธ์
๊ณ ์ ์๊ฐ์ ์ค์ ํ ์๋ ์๋ค.
(๊ธฐ๋ณธ๊ฐ์ 10800์ผ๋ก, ์ด๋ 3์๊ฐ์ ํด๋น๋จ)
์ฐธ๊ณ : ์๋์ฐ์์๋, ์๋น์ค์ ์ต๋ ์ธ์
๊ณ ์ ์๊ฐ(maximum session sticky time)์ ์ค์ ํ๋ ๊ฒ์ด ์ง์๋์ง ์๋๋ค.์๋น์ค์ IP ์ฃผ์ ํ ๋น ๊ณ ์ ๋ ๋ชฉ์ ์ง๋ก ์ค์ ๋ก ๋ผ์ฐํ
๋๋ ํ๋ IP ์ฃผ์์ ๋ฌ๋ฆฌ,
์๋น์ค IP๋ ์ค์ ๋ก๋ ๋จ์ผ ํธ์คํธ์์ ์๋ตํ์ง ์๋๋ค.
๋์ ์, kube-proxy๋ ํจํท ์ฒ๋ฆฌ ๋ก์ง(์: ๋ฆฌ๋
์ค์ iptables)์ ์ฌ์ฉํ์ฌ,
ํ์์ ๋ฐ๋ผ ํฌ๋ช
ํ๊ฒ ๋ฆฌ๋ค์ด๋ ์
๋๋ ๊ฐ์ IP ์ฃผ์๋ฅผ ์ ์ํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ VIP์ ์ฐ๊ฒฐํ๋ฉด, ํธ๋ํฝ์ด ์๋์ผ๋ก ์ ์ ํ ์๋ํฌ์ธํธ๋ก ์ ์ก๋๋ค.
ํ๊ฒฝ ๋ณ์์ ์๋น์ค ์ฉ DNS๋
์ค์ ๋ก๋ ์๋น์ค์ ๊ฐ์ IP ์ฃผ์ (๋ฐ ํฌํธ)๋ก ์ฑ์์ง๋ค.
์ถฉ๋ ๋ฐฉ์งํ๊ธฐ ์ฟ ๋ฒ๋คํฐ์ค์ ์ฃผ์ ์ฒ ํ ์ค ํ๋๋,
์ฌ์ฉ์๊ฐ ์๋ชปํ ๊ฒ์ด ์๋ ๊ฒฝ์ฐ์๋ ์คํจํ ์ ์๋ ์ํฉ์ ๋
ธ์ถ๋์ด์๋ ์๋๋ค๋ ๊ฒ์ด๋ค.
์๋น์ค ๋ฆฌ์์ค ์ค๊ณ ์,
๋ค๋ฅธ ์ฌ๋์ ํฌํธ ์ ํ๊ณผ ์ถฉ๋ํ ๊ฒฝ์ฐ์ ๋๋นํด ์์ ์ ํฌํธ ๋ฒํธ๋ฅผ ์ ํํ์ง ์์๋ ๋๋ค.
๋ง์ฝ ๊ทธ๋ฌํ ์ผ์ด ๋ฐ์ํ๋ค๋ฉด ๊ทธ๊ฒ์ ๊ฒฉ๋ฆฌ ์คํจ์ด๋ค.
์๋น์ค์ ๋ํ ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉ์๊ฐ ์ ํํ ์ ์๋๋ก ํ๋ ค๋ฉด,
๋ ๊ฐ์ ์๋น์ค๊ฐ ์ถฉ๋ํ์ง ์๋๋ก ํด์ผ ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ API ์๋ฒ์ ์ค์ ๋์ด ์๋ service-cluster-ip-range
CIDR ๋ฒ์์์
๊ฐ ์๋น์ค์ ๊ณ ์ ํ IP ์ฃผ์๋ฅผ ํ ๋นํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ๋ค.
๊ฐ ์๋น์ค๊ฐ ๊ณ ์ ํ IP๋ฅผ ๋ฐ๋๋ก ํ๊ธฐ ์ํด, ๊ฐ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ๋ด๋ถ ํ ๋น๊ธฐ๊ฐ
etcd ์์
๊ธ๋ก๋ฒ ํ ๋น ๋งต์ ์์์ ์ผ๋ก(atomically) ์
๋ฐ์ดํธํ๋ค.
์๋น์ค๊ฐ IP ์ฃผ์ ํ ๋น์ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ ์ง์คํธ๋ฆฌ์ ๋งต ์ค๋ธ์ ํธ๊ฐ ์์ด์ผ ํ๋๋ฐ,
๊ทธ๋ ์ง ์์ผ๋ฉด IP ์ฃผ์๋ฅผ ํ ๋นํ ์ ์๋ค๋ ๋ฉ์์ง์ ํจ๊ป ์์ฑ์ ์คํจํ๋ค.
์ปจํธ๋กค ํ๋ ์ธ์์, ๋ฐฑ๊ทธ๋ผ์ด๋ ์ปจํธ๋กค๋ฌ๋ ํด๋น ๋งต์ ์์ฑํด์ผ
ํ๋ค(์ธ-๋ฉ๋ชจ๋ฆฌ ์ ๊ธ์ ์ฌ์ฉํ๋ ์ด์ ๋ฒ์ ์ ์ฟ ๋ฒ๋คํฐ์ค์์์ ๋ง์ด๊ทธ๋ ์ด์
์ง์์ ์ํด ํ์ํจ).
์ฟ ๋ฒ๋คํฐ์ค๋ ๋ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํจํ์ง ์์
ํ ๋น(์: ๊ด๋ฆฌ์ ๊ฐ์
์ ์ํ)์ ์ฒดํฌํ๊ณ
๋ ์ด์ ์ด๋ ํ ์๋น์ค๋ ์ฌ์ฉํ์ง ์๋ ํ ๋น๋ IP ์ฃผ์๋ฅผ ์ ๋ฆฌํ๋ค.
์๋น์ค ๊ฐ์ IP ์ฃผ์์ IP ์ฃผ์ ๋ฒ์ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.25 [beta]
์ฟ ๋ฒ๋คํฐ์ค๋ min(max(16, cidrSize / 16), 256)
๊ณต์์ ์ฌ์ฉํ์ฌ ์ป์ด์ง
service-cluster-ip-range
์ ํฌ๊ธฐ์ ๊ธฐ๋ฐํ์ฌ ClusterIP
๋ฒ์๋ฅผ ๋ ๋์ญ์ผ๋ก ๋๋๋ฉฐ,
์ฌ๊ธฐ์ ์ด ๊ณต์์ 16 ์ด์ 256 ์ดํ์ด๋ฉฐ,
๊ทธ ์ฌ์ด์ ๊ณ๋จ ํจ์๊ฐ ์์ ์ผ๋ก ์ค๋ช
ํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ์๋น์ค์ ๋ํ ๋์ IP ํ ๋น ์ ์์ ๋์ญ์์ ์ฐ์ ์ ์ผ๋ก ์ ํํ๋ฉฐ,
์ด๋ ๊ณง ๋ง์ฝ ์ฌ์ฉ์๊ฐ type: ClusterIP
์๋น์ค์ ํน์ IP ์ฃผ์๋ฅผ ํ ๋นํ๊ณ ์ถ๋ค๋ฉด
ํ์ ๋์ญ์์ ๊ณจ๋ผ์ผ ํจ์ ์๋ฏธํ๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ํ ๋น ์ ์ถฉ๋์ ์ํ์ ์ค์ผ ์ ์๋ค.
๋ง์ฝ ServiceIPStaticSubrange
๊ธฐ๋ฅ ๊ฒ์ดํธ ๋ฅผ ๋นํ์ฑํํ๋ฉด
์ฟ ๋ฒ๋คํฐ์ค๋ type: ClusterIP
์๋น์ค์ ๋ํด
์๋ ๋ฐ ๋์ ํ ๋น IP ์ฃผ์๋ฅผ ์ํ ํ๋์ ๊ณต์ ๋๋ ํ์ ์ฌ์ฉํ๋ค.
ํธ๋ํฝ ํด๋ฆฌ์ .spec.internalTrafficPolicy
๋ฐ .spec.externalTrafficPolicy
ํ๋๋ฅผ ์ค์ ํ์ฌ
์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํธ๋ํฝ์ ์ด๋ป๊ฒ ์ ์(healthy, โreadyโ) ๋ฐฑ์๋๋ก ๋ผ์ฐํ
ํ ์ง๋ฅผ ์ ์ดํ ์ ์๋ค.
๋ด๋ถ ํธ๋ํฝ ํด๋ฆฌ์ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.22 [beta]
spec.internalTrafficPolicy
ํ๋๋ฅผ ์ค์ ํ์ฌ ๋ด๋ถ ์์ค์์ ์ค๋ ํธ๋ํฝ์ด ์ด๋ป๊ฒ ๋ผ์ฐํธ๋ ์ง๋ฅผ ์ ์ดํ ์ ์๋ค.
์ด ํ๋๋ Cluster
๋๋ Local
๋ก ์ค์ ํ ์ ์๋ค.
ํ๋๋ฅผ Cluster
๋ก ์ค์ ํ๋ฉด ๋ด๋ถ ํธ๋ํฝ์ ์ค๋น ์ํ์ ๋ชจ๋ ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํธํ๋ฉฐ,
Local
๋ก ์ค์ ํ๋ฉด ์ค๋น ์ํ์ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๋ก๋ง ๋ผ์ฐํธํ๋ค.
๋ง์ฝ ํธ๋ํฝ ์ ์ฑ
์ด Local
๋ก ์ค์ ๋์ด ์๋๋ฐ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ํ๋๋ ์๋ ๊ฒฝ์ฐ, kube-proxy๋ ํธ๋ํฝ์ ๋๋กญ์ํจ๋ค.
์ธ๋ถ ํธ๋ํฝ ํด๋ฆฌ์ spec.externalTrafficPolicy
ํ๋๋ฅผ ์ค์ ํ์ฌ ์ธ๋ถ ์์ค์์ ์ค๋ ํธ๋ํฝ์ด ์ด๋ป๊ฒ ๋ผ์ฐํธ๋ ์ง๋ฅผ ์ ์ดํ ์ ์๋ค.
์ด ํ๋๋ Cluster
๋๋ Local
๋ก ์ค์ ํ ์ ์๋ค.
ํ๋๋ฅผ Cluster
๋ก ์ค์ ํ๋ฉด ์ธ๋ถ ํธ๋ํฝ์ ์ค๋น ์ํ์ ๋ชจ๋ ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํธํ๋ฉฐ,
Local
๋ก ์ค์ ํ๋ฉด ์ค๋น ์ํ์ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๋ก๋ง ๋ผ์ฐํธํ๋ค.
๋ง์ฝ ํธ๋ํฝ ์ ์ฑ
์ด Local
๋ก ์ค์ ๋์ด ์๋๋ฐ ๋
ธ๋-๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ํ๋๋ ์๋ ๊ฒฝ์ฐ,
kube-proxy๋ ์ฐ๊ด๋ ์๋น์ค๋ก์ ํธ๋ํฝ์ ํฌ์๋ํ์ง ์๋๋ค.
์ข
๋ฃ ์ค์ธ ์๋ํฌ์ธํธ๋ก ๊ฐ๋ ํธ๋ํฝ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.26 [beta]
kube-proxy์ ๋ํด ProxyTerminatingEndpoints
๊ธฐ๋ฅ ๊ฒ์ดํธ ๊ฐ ํ์ฑํ๋์ด ์๊ณ
ํธ๋ํฝ ํด๋ฆฌ์๊ฐ Local
์ด๋ฉด,
ํด๋น ๋
ธ๋์ kube-proxy๋ ์๋น์ค์ ๋ํ ์๋ํฌ์ธํธ๋ฅผ ์ ํํ ๋ ์ข ๋ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ์ด ํ์ฑํ๋์ด ์์ผ๋ฉด, kube-proxy๋ ๋
ธ๋๊ฐ ๋ก์ปฌ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ๊ณ ์๋์ง,
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ '์ข
๋ฃ ์ค'์ผ๋ก ํ์๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
๋ง์ฝ ๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ์กด์ฌํ๊ณ ๋ชจ๋ ๋ก์ปฌ ์๋ํฌ์ธํธ๊ฐ ์ข
๋ฃ ์ค์ด๋ฉด,
kube-proxy๋ ์ข
๋ฃ ์ค์ธ ํด๋น ์๋ํฌ์ธํธ๋ก ํธ๋ํฝ์ ์ ๋ฌํ๋ค.
์ด์ธ์ ๊ฒฝ์ฐ, kube-proxy๋ ์ข
๋ฃ ์ค์ด ์๋ ์๋ํฌ์ธํธ๋ก ํธ๋ํฝ์ ์ ๋ฌํ๋ ํธ์ ์ ํธํ๋ค.
์ข
๋ฃ ์ค์ธ ์๋ํฌ์ธํธ์ ๋ํ ์ด๋ฌํ ํฌ์๋ฉ ์ ์ฑ
๋๋ถ์, externalTrafficPolicy: Local
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์
NodePort
๋ฐ LoadBalancer
์๋น์ค๊ฐ ์ฐ๊ฒฐ๋ค์ ์๋น๋กญ๊ฒ(gracefully) ์ข
๋ฃ์ํฌ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ๊ฐ ๋กค๋ง ์
๋ฐ์ดํธ๋ ๋, ๋ก๋๋ฐธ๋ฐ์ ๋ค์ ์๋ ๋
ธ๋๊ฐ ํด๋น ๋ํ๋ก์ด๋จผํธ์ ๋ ํ๋ฆฌ์นด๋ฅผ N๊ฐ์์ 0๊ฐ ๊ฐ๋๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค.
์ผ๋ถ ๊ฒฝ์ฐ์, ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ํฌ์ค ์ฒดํฌ ํ๋ก๋ธ ์ฌ์ด์ ๊ธฐ๊ฐ์ ๋ ํ๋ฆฌ์นด 0๊ฐ๋ฅผ ๊ฐ๋ ๋
ธ๋๋ก ํธ๋ํฝ์ ์ ์กํ ์ ์๋ค.
์ข
๋ฃ ์ค์ธ ์๋ํฌ์ธํธ๋ก์ ํธ๋ํฝ ๋ผ์ฐํ
๊ธฐ๋ฅ์ ํตํด
ํ๋๋ฅผ ์ค์ผ์ผ ๋ค์ด ์ค์ธ ๋
ธ๋๊ฐ ํด๋น ์ข
๋ฃ ์ค์ธ ํ๋๋ก์ ํธ๋ํฝ์ ์๋น๋กญ๊ฒ ์์ ๋ฐ ๋๋ ์ธํ ์ ์๋ค.
ํ๋ ์ข
๋ฃ๊ฐ ์๋ฃ๋๋ฉด, ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ ์ด๋ฏธ ๋
ธ๋์ ํฌ์ค ์ฒดํฌ๊ฐ ์คํจํ์์ ํ์ธํ๊ณ
ํด๋น ๋
ธ๋๋ฅผ ๋ฐฑ์๋ ํ์์ ์์ ํ ์ ๊ฑฐํ์ ๊ฒ์ด๋ค.
๋ค์ ๋ด์ฉ ์๋น์ค์ ๋ํด ๋ ์์๋ณด๋ ค๋ฉด,
์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ฐ๊ฒฐ ์ ์ฝ์ด ๋ณธ๋ค.
๋ํ,
9 - ์ค์น ๋๊ตฌ 9.1 - Kubeadm Kubeadm์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์์ฑ์ ์ํ "๋น ๋ฅธ ๊ฒฝ๋ก"์ ๋ชจ๋ฒ ์ฌ๋ก๋ก kubeadm init
๋ฐ kubeadm join
์ ์ ๊ณตํ๋๋ก ๋ง๋ค์ด์ง ๋๊ตฌ์ด๋ค.
kubeadm์ ์คํ ๊ฐ๋ฅํ ์ต์ ํด๋ฌ์คํฐ๋ฅผ ์์ํ๊ณ ์คํํ๋ ๋ฐ ํ์ํ ์์
์ ์ํํ๋ค. ์ค๊ณ ์, ์์คํ
ํ๋ก๋น์ ๋์ด ์๋ ๋ถํธ์คํธ๋ฉ(bootstrapping)๋ง ๋ค๋ฃฌ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฟ ๋ฒ๋คํฐ์ค ๋์๋ณด๋, ๋ชจ๋ํฐ๋ง ์๋ฃจ์
๋ฐ ํด๋ผ์ฐ๋๋ณ ์ ๋์จ๊ณผ ๊ฐ์ ๋ค์ํ ์์ผ๋ฉด ์ข์(nice-to-have) ์ ๋์จ์ ์ค์นํ๋ ๊ฒ์ ๋ฒ์์ ํฌํจ๋์ง ์๋๋ค.
๋์ , ์ฐ๋ฆฌ๋ ๋ ๋์ ์์ค์ ๋ง์ถคํ ๋๊ตฌ๊ฐ kubeadm ์์ ๊ตฌ์ถ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ฉฐ, ์ด์์ ์ผ๋ก๋, ๋ชจ๋ ๋ฐฐํฌ์ ๊ธฐ๋ฐ์ผ๋ก kubeadm์ ์ฌ์ฉํ๋ฉด ๊ท๊ฒฉ์ ๋ฐ๋ฅด๋ ํด๋ฌ์คํฐ๋ฅผ ๋ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
์ค์น ๋ฐฉ๋ฒ kubeadm์ ์ค์นํ๋ ค๋ฉด, ์ค์น ๊ฐ์ด๋ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
๋ค์ ๋ด์ฉ kubeadm init : ์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋๋ฅผ ๋ถํธ์คํธ๋ฉํ๋ค.kubeadm join : ์ฟ ๋ฒ๋คํฐ์ค ์์ปค(worker) ๋
ธ๋๋ฅผ ๋ถํธ์คํธ๋ฉํ๊ณ ํด๋ฌ์คํฐ์ ์กฐ์ธ์ํจ๋ค.kubeadm upgrade : ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์๋ก์ด ๋ฒ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ํ๋ค.kubeadm config : kubeadm v1.7.x ์ดํ์ ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ์ด๊ธฐํํ ๊ฒฝ์ฐ, kubeadm upgrade
๋ฅผ ์ํด ์ฌ์ฉ์์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ค.kubeadm token : kubeadm join
์ ์ํ ํ ํฐ์ ๊ด๋ฆฌํ๋ค.kubeadm reset : kubeadm init
๋๋ kubeadm join
์ ์ํ ํธ์คํธ์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฐ๋ค.kubeadm certs : ์ฟ ๋ฒ๋คํฐ์ค ์ธ์ฆ์๋ฅผ ๊ด๋ฆฌํ๋ค.kubeadm kubeconfig : kubeconfig ํ์ผ์ ๊ด๋ฆฌํ๋ค.kubeadm version : kubeadm ๋ฒ์ ์ ์ถ๋ ฅํ๋ค.kubeadm alpha : ์ปค๋ฎค๋ํฐ์์ ํผ๋๋ฐฑ์ ์์งํ๊ธฐ ์ํด์ ๊ธฐ๋ฅ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํ๋ค.
9.1.1 - Kubeadm Generated 10 - ๋ช
๋ น์ค ๋๊ตฌ (kubectl) ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ค์์ ์ ๊ณตํ๋ค: ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฌ์ฉํ์ฌ
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ปจํธ๋กค ํ๋ ์ธ ๊ณผ
ํต์ ํ๊ธฐ ์ํ ์ปค๋งจ๋๋ผ์ธ ํด
์ด ํด์ ์ด๋ฆ์ kubectl
์ด๋ค.
๊ตฌ์ฑ์ ์ํด, kubectl
์ config ํ์ผ์ $HOME/.kube ์์ ์ฐพ๋๋ค.
KUBECONFIG ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๊ฑฐ๋ --kubeconfig
ํ๋๊ทธ๋ฅผ ์ค์ ํ์ฌ ๋ค๋ฅธ kubeconfig
ํ์ผ์ ์ง์ ํ ์ ์๋ค.
์ด ๊ฐ์๋ kubectl
๊ตฌ๋ฌธ์ ๋ค๋ฃจ๊ณ , ์ปค๋งจ๋ ๋์์ ์ค๋ช
ํ๋ฉฐ, ์ผ๋ฐ์ ์ธ ์์ ๋ฅผ ์ ๊ณตํ๋ค.
์ง์๋๋ ๋ชจ๋ ํ๋๊ทธ ๋ฐ ํ์ ๋ช
๋ น์ ํฌํจํ ๊ฐ ๋ช
๋ น์ ๋ํ ์์ธํ ๋ด์ฉ์
kubectl ์ฐธ์กฐ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ค์น ๋ฐฉ๋ฒ์ ๋ํด์๋ kubectl ์ค์น ๋ฅผ ์ฐธ๊ณ ํ๊ณ ,
๋น ๋ฅธ ๊ฐ์ด๋๋ ์นํธ ์ํธ ๋ฅผ ์ฐธ๊ณ ํ๋ค. docker
๋ช
๋ น์ค ๋๊ตฌ์ ์ต์ํ๋ค๋ฉด,
๋์ปค ์ฌ์ฉ์๋ฅผ ์ํ kubectl
์์ ๋์๋๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ช
๋ น์ด๋ฅผ ๋ณผ ์ ์๋ค.
๊ตฌ๋ฌธ ํฐ๋ฏธ๋ ์ฐฝ์์ kubectl
๋ช
๋ น์ ์คํํ๋ ค๋ฉด ๋ค์์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ค.
kubectl [ command] [ TYPE] [ NAME] [ flags]
๋ค์์ command
, TYPE
, NAME
๊ณผ flags
์ ๋ํ ์ค๋ช
์ด๋ค.
command
: ํ๋ ์ด์์ ๋ฆฌ์์ค์์ ์ํํ๋ ค๋ ๋์์ ์ง์ ํ๋ค.
์: create
, get
, describe
, delete
TYPE
: ๋ฆฌ์์ค ํ์
์ ์ง์ ํ๋ค. ๋ฆฌ์์ค ํ์
์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ผ๋ฉฐ
๋จ์ํ, ๋ณต์ํ ๋๋ ์ฝ์ด ํ์์ ์ง์ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ๋ค์์ ๋ช
๋ น์ ๋์ผํ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค.
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
NAME
: ๋ฆฌ์์ค ์ด๋ฆ์ ์ง์ ํ๋ค. ์ด๋ฆ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ค. ์ด๋ฆ์ ์๋ตํ๋ฉด, ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํ ์ธ๋ถ ์ฌํญ์ด ํ์๋๋ค. ์: kubectl get pods
์ฌ๋ฌ ๋ฆฌ์์ค์ ๋ํ ์์
์ ์ํํ ๋, ํ์
๋ฐ ์ด๋ฆ๋ณ๋ก ๊ฐ ๋ฆฌ์์ค๋ฅผ ์ง์ ํ๊ฑฐ๋ ํ๋ ์ด์์ ํ์ผ์ ์ง์ ํ ์ ์๋ค.
flags
: ์ ํ์ ํ๋๊ทธ๋ฅผ ์ง์ ํ๋ค. ์๋ฅผ ๋ค์ด, -s
๋๋ --server
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ์ ์ฃผ์์ ํฌํธ๋ฅผ ์ง์ ํ ์ ์๋ค.
์ฃผ์: ์ปค๋งจ๋ ๋ผ์ธ์์ ์ง์ ํ๋ ํ๋๊ทธ๋ ๊ธฐ๋ณธ๊ฐ๊ณผ ํด๋น ํ๊ฒฝ ๋ณ์๋ฅผ ๋ฌด์ํ๋ค.๋์์ด ํ์ํ๋ค๋ฉด, ํฐ๋ฏธ๋ ์ฐฝ์์ kubectl help
๋ฅผ ์คํํ๋ค.
ํด๋ฌ์คํฐ ๋ด ์ธ์ฆ๊ณผ ๋ค์์คํ์ด์ค ์ค๋ฒ๋ผ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก kubectl
์ ๋จผ์ ์์ ์ด ํ๋ ์์์ ์คํ๋๊ณ ์๋์ง, ์ฆ ํด๋ฌ์คํฐ ์์ ์๋์ง๋ฅผ ํ๋ณํ๋ค. ์ด๋ฅผ ์ํด KUBERNETES_SERVICE_HOST
์ KUBERNETES_SERVICE_PORT
ํ๊ฒฝ ๋ณ์, ๊ทธ๋ฆฌ๊ณ ์๋น์ค ์ด์นด์ดํธ ํ ํฐ ํ์ผ์ด /var/run/secrets/kubernetes.io/serviceaccount/token
๊ฒฝ๋ก์ ์๋์ง๋ฅผ ํ์ธํ๋ค. ์ธ ๊ฐ์ง๊ฐ ๋ชจ๋ ๊ฐ์ง๋๋ฉด, ํด๋ฌ์คํฐ ๋ด ์ธ์ฆ์ด ์ ์ฉ๋๋ค.
ํ์ ํธํ์ฑ์ ์ํด, ํด๋ฌ์คํฐ ๋ด ์ธ์ฆ ์์ POD_NAMESPACE
ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด, ์๋น์ค ์ด์นด์ดํธ ํ ํฐ์ ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค ์ค์ ์ ์ค๋ฒ๋ผ์ด๋ํ๋ค. ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค ์ค์ ์ ์์กดํ๋ ๋ชจ๋ ๋งค๋ํ์คํธ์ ๋๊ตฌ๊ฐ ์ํฅ์ ๋ฐ์ ๊ฒ์ด๋ค.
POD_NAMESPACE
ํ๊ฒฝ ๋ณ์
POD_NAMESPACE
ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด, ๋ค์์คํ์ด์ค์ ์ํ๋ ์์์ ๋ํ CLI ์์
์ ํ๊ฒฝ ๋ณ์์ ์ค์ ๋ ๋ค์์คํ์ด์ค๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ํ๊ฒฝ ๋ณ์๊ฐ seattle
๋ก ์ค์ ๋์ด ์์ผ๋ฉด, kubectl get pods
๋ช
๋ น์ seattle
๋ค์์คํ์ด์ค์ ์๋ ํ๋ ๋ชฉ๋ก์ ๋ฐํํ๋ค. ์ด๋ ํ๋๊ฐ ๋ค์์คํ์ด์ค์ ์ํ๋ ์์์ด๋ฉฐ, ๋ช
๋ น์ด์ ๋ค์์คํ์ด์ค๋ฅผ ํน์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. kubectl api-resources
๋ช
๋ น์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ฌ ํน์ ์์์ด ๋ค์์คํ์ด์ค์ ์ํ๋ ์์์ธ์ง ํ๋ณํ๋ค.
๋ช
์์ ์ผ๋ก --namespace <value>
์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ๊ฐ์ ๋์์ ์ค๋ฒ๋ผ์ด๋ํ๋ค.
kubectl์ด ์๋น์ค์ด์นด์ดํธ ํ ํฐ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
๋ง์ฝ
์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ์ด์นด์ดํธ ํ ํฐ ํ์ผ์ด
/var/run/secrets/kubernetes.io/serviceaccount/token
๊ฒฝ๋ก์ ๋ง์ดํธ๋์ด ์๊ณ , KUBERNETES_SERVICE_HOST
ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ด ์๊ณ ,KUBERNETES_SERVICE_PORT
ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ด ์๊ณ ,kubectl ๋ช
๋ น์ ๋ค์์คํ์ด์ค๋ฅผ ๋ช
์ํ์ง ์์ผ๋ฉด kubectl์ ์์ ์ด ํด๋ฌ์คํฐ ๋ด๋ถ์์ ์คํ๋๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
kubectl์ ํด๋น ์๋น์ค์ด์นด์ดํธ์ ๋ค์์คํ์ด์ค(ํ๋์ ๋ค์์คํ์ด์ค์ ๋์ผํ๋ค)๋ฅผ ์ธ์ํ๊ณ ํด๋น ๋ค์์คํ์ด์ค์ ๋ํด ๋์ํ๋ค.
์ด๋ ํด๋ฌ์คํฐ ์ธ๋ถ์์ ์คํ๋์์ ๋์๋ ๋ค๋ฅธ๋ฐ,
kubectl์ด ํด๋ฌ์คํฐ ์ธ๋ถ์์ ์คํ๋์์ผ๋ฉฐ ๋ค์์คํ์ด์ค๊ฐ ๋ช
์๋์ง ์์ ๊ฒฝ์ฐ
kubectl ๋ช
๋ น์ด๋ ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ์์ ํ์ฌ ์ปจํ
์คํธ(current context)์
์ค์ ๋ ๋ค์์คํ์ด์ค์ ๋ํด ๋์ํ๋ค.
kubectl์ด ๋์ํ๋ ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
kubectl config set-context --current --namespace= <namespace-name>
๋ช
๋ น์ด ๋ค์ ํ์๋ ๋ชจ๋ kubectl
์์
์ ๋ํ ๊ฐ๋จํ ์ค๋ช
๊ณผ ์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ์ด ํฌํจ๋์ด ์๋ค.
๋ช
๋ น์ด ๊ตฌ๋ฌธ ์ค๋ช
alpha
kubectl alpha SUBCOMMAND [flags]
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ง ์์ ์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ ๋ช
๋ น์ ๋์ดํ๋ค. annotate
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
ํ๋ ์ด์์ ๋ฆฌ์์ค ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๊ฑฐ๋ ์
๋ฐ์ดํธํ๋ค. api-resources
kubectl api-resources [flags]
์ฌ์ฉ ๊ฐ๋ฅํ API ๋ฆฌ์์ค๋ฅผ ๋์ดํ๋ค. api-versions
kubectl api-versions [flags]
์ฌ์ฉ ๊ฐ๋ฅํ API ๋ฒ์ ์ ๋์ดํ๋ค. apply
kubectl apply -f FILENAME [flags]
ํ์ผ์ด๋ ํ์ค์
๋ ฅ(stdin)์ผ๋ก๋ถํฐ ๋ฆฌ์์ค์ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ค. attach
kubectl attach POD -c CONTAINER [-i] [-t] [flags]
์คํ ์ค์ธ ์ปจํ
์ด๋์ ์ฐ๊ฒฐํ์ฌ ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ณด๊ฑฐ๋ ํ์ค์
๋ ฅ์ ํตํด ์ปจํ
์ด๋์ ์ํธ ์์ฉํ๋ค. auth
kubectl auth [flags] [options]
์น์ธ์ ๊ฒ์ฌํ๋ค. autoscale
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ์์ ๊ด๋ฆฌํ๋ ํ๋ ์งํฉ์ ์๋์ผ๋ก ์กฐ์ ํ๋ค. certificate
kubectl certificate SUBCOMMAND [options]
์ธ์ฆ์ ๋ฆฌ์์ค๋ฅผ ์์ ํ๋ค. cluster-info
kubectl cluster-info [flags]
ํด๋ฌ์คํฐ์ ๋ง์คํฐ์ ์๋น์ค์ ๋ํ ์๋ํฌ์ธํธ ์ ๋ณด๋ฅผ ํ์ํ๋ค. completion
kubectl completion SHELL [options]
์ง์ ๋ ์
ธ(bash ๋๋ zsh)์ ๋ํ ์
ธ ์์ฑ ์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ค. config
kubectl config SUBCOMMAND [flags]
kubeconfig ํ์ผ์ ์์ ํ๋ค. ์ธ๋ถ ์ฌํญ์ ๊ฐ๋ณ ํ์ ๋ช
๋ น์ ์ฐธ๊ณ ํ๋ค. convert
kubectl convert -f FILENAME [options]
๋ค๋ฅธ API ๋ฒ์ ๊ฐ์ ๊ตฌ์ฑ ํ์ผ์ ๋ณํํ๋ค. YAML ๋ฐ JSON ํ์์ด ๋ชจ๋ ํ์ฉ๋๋ค. ์ฐธ๊ณ - kubectl-convert
ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ผ ํ๋ค. cordon
kubectl cordon NODE [options]
๋
ธ๋๋ฅผ ์ค์ผ์ค ๋ถ๊ฐ๋ฅ(unschedulable)์ผ๋ก ํ์ํ๋ค. cp
kubectl cp <file-spec-src> <file-spec-dest> [options]
์ปจํ
์ด๋์์ ๊ทธ๋ฆฌ๊ณ ์ปจํ
์ด๋๋ก ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณต์ฌํ๋ค. create
kubectl create -f FILENAME [flags]
ํ์ผ์ด๋ ํ์ค์
๋ ฅ์์ ํ๋ ์ด์์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ค. delete
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags]
ํ์ผ, ํ์ค์
๋ ฅ ๋๋ ๋ ์ด๋ธ ์
๋ ํฐ, ์ด๋ฆ, ๋ฆฌ์์ค ์
๋ ํฐ ๋๋ ๋ฆฌ์์ค๋ฅผ ์ง์ ํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ค. describe
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]
ํ๋ ์ด์์ ๋ฆฌ์์ค์ ์์ธํ ์ํ๋ฅผ ํ์ํ๋ค. diff
kubectl diff -f FILENAME [flags]
๋ผ์ด๋ธ ๊ตฌ์ฑ์ ๋ํด ํ์ผ์ด๋ ํ์ค์
๋ ฅ์ ์ฐจ์ด์ ์ ์ถ๋ ฅํ๋ค. drain
kubectl drain NODE [options]
์ ์ง ๋ณด์๋ฅผ ์ค๋น ์ค์ธ ๋
ธ๋๋ฅผ ๋๋ ์ธํ๋ค. edit
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]
๊ธฐ๋ณธ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์์ ํ๋ ์ด์์ ๋ฆฌ์์ค ์ ์๋ฅผ ํธ์งํ๊ณ ์
๋ฐ์ดํธํ๋ค. events
kubectl events
List events exec
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]
ํ๋์ ์ปจํ
์ด๋์ ๋ํด ๋ช
๋ น์ ์คํํ๋ค. explain
kubectl explain [--recursive=false] [flags]
ํ๋, ๋
ธ๋, ์๋น์ค ๋ฑ์ ๋ค์ํ ๋ฆฌ์์ค์ ๋ํ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค. expose
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]
๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ, ์๋น์ค ๋๋ ํ๋๋ฅผ ์๋ก์ด ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค๋ก ๋
ธ์ถํ๋ค. get
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]
ํ๋ ์ด์์ ๋ฆฌ์์ค๋ฅผ ๋์ดํ๋ค. kustomize
kubectl kustomize <dir> [flags] [options]
kustomization.yaml ํ์ผ์ ์ง์ ์ฌํญ์์ ์์ฑ๋ API ๋ฆฌ์์ค ์งํฉ์ ๋์ดํ๋ค. ์ธ์๋ ํ์ผ์ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ์ ๊ฒฝ๋ก์ด๊ฑฐ๋, ๋ฆฌํฌ์งํฐ๋ฆฌ ๋ฃจํธ์ ๊ด๋ จํ์ฌ ๊ฒฝ๋ก ์ ๋ฏธ์ฌ๊ฐ ๋์ผํ git ๋ฆฌํฌ์งํฐ๋ฆฌ URL์ด์ด์ผ ํ๋ค. label
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags]
ํ๋ ์ด์์ ๋ฆฌ์์ค ๋ ์ด๋ธ์ ์ถ๊ฐํ๊ฑฐ๋ ์
๋ฐ์ดํธํ๋ค. logs
kubectl logs POD [-c CONTAINER] [--follow] [flags]
ํ๋์ ์ปจํ
์ด๋์ ๋ํ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค. options
kubectl options
๋ชจ๋ ๋ช
๋ น์ ์ ์ฉ๋๋ ์ ์ญ ์ปค๋งจ๋ ๋ผ์ธ ์ต์
์ ๋์ดํ๋ค. patch
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]
์ ๋ต์ ๋ณํฉ ํจ์น ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค์ ํ๋ ์ด์์ ํ๋๋ฅผ ์
๋ฐ์ดํธํ๋ค. plugin
kubectl plugin [flags] [options]
ํ๋ฌ๊ทธ์ธ๊ณผ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ๋ค. port-forward
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
ํ๋ ์ด์์ ๋ก์ปฌ ํฌํธ๋ฅผ ํ๋๋ก ์ ๋ฌํ๋ค. proxy
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]
์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ์ ํ๋ก์๋ฅผ ์คํํ๋ค. replace
kubectl replace -f FILENAME
ํ์ผ ๋๋ ํ์ค์
๋ ฅ์์ ๋ฆฌ์์ค๋ฅผ ๊ต์ฒดํ๋ค. rollout
kubectl rollout SUBCOMMAND [options]
๋ฆฌ์์ค์ ๋กค์์์ ๊ด๋ฆฌํ๋ค. ์ ํจํ ๋ฆฌ์์ค ํ์
์๋ ๋ํ๋ก์ด๋จผํธ(deployment), ๋ฐ๋ชฌ์
(daemonset)๊ณผ ์คํ
์ดํธํ์
(statefulset)์ด ํฌํจ๋๋ค. run
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags]
ํด๋ฌ์คํฐ์์ ์ง์ ๋ ์ด๋ฏธ์ง๋ฅผ ์คํํ๋ค. scale
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags]
์ง์ ๋ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ์ ํฌ๊ธฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค. set
kubectl set SUBCOMMAND [options]
์ ํ๋ฆฌ์ผ์ด์
๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ๋ค. taint
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]
ํ๋ ์ด์์ ๋
ธ๋์์ ํ
์ธํธ(taint)๋ฅผ ์
๋ฐ์ดํธํ๋ค. top
kubectl top [flags] [options]
๋ฆฌ์์ค(CPU/๋ฉ๋ชจ๋ฆฌ/์คํ ๋ฆฌ์ง) ์ฌ์ฉ๋์ ํ์ํ๋ค. uncordon
kubectl uncordon NODE [options]
๋
ธ๋๋ฅผ ์ค์ผ์ค ๊ฐ๋ฅ(schedulable)์ผ๋ก ํ์ํ๋ค. version
kubectl version [--client] [flags]
ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ์คํ ์ค์ธ ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ ์ ํ์ํ๋ค. wait
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options]
์คํ(experimental) ๊ธฐ๋ฅ: ํ๋ ์ด์์ ๋ฆฌ์์ค์์ ํน์ ์กฐ๊ฑด์ ๊ธฐ๋ค๋ฆฐ๋ค.
๋ช
๋ น ๋์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐฐ์ฐ๋ ค๋ฉด kubectl ์ฐธ์กฐ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
๋ฆฌ์์ค ํ์
๋ค์ ํ์๋ ์ง์๋๋ ๋ชจ๋ ๋ฆฌ์์ค ํ์
๊ณผ ํด๋น ์ฝ์ด๊ฐ ๋์ด๋์ด ์๋ค.
(์ด ์ถ๋ ฅ์ kubectl api-resources
์์ ํ์ธํ ์ ์์ผ๋ฉฐ, ์ฟ ๋ฒ๋คํฐ์ค 1.25.0 ์์์ ์ถ๋ ฅ์ ๊ธฐ์ค์ผ๋ก ํ๋ค.)
NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings
v1 true Binding componentstatuses
cs
v1 false ComponentStatus configmaps
cm
v1 true ConfigMap endpoints
ep
v1 true Endpoints events
ev
v1 true Event limitranges
limits
v1 true LimitRange namespaces
ns
v1 false Namespace nodes
no
v1 false Node persistentvolumeclaims
pvc
v1 true PersistentVolumeClaim persistentvolumes
pv
v1 false PersistentVolume pods
po
v1 true Pod podtemplates
v1 true PodTemplate replicationcontrollers
rc
v1 true ReplicationController resourcequotas
quota
v1 true ResourceQuota secrets
v1 true Secret serviceaccounts
sa
v1 true ServiceAccount services
svc
v1 true Service mutatingwebhookconfigurations
admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration validatingwebhookconfigurations
admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration customresourcedefinitions
crd,crds
apiextensions.k8s.io/v1 false CustomResourceDefinition apiservices
apiregistration.k8s.io/v1 false APIService controllerrevisions
apps/v1 true ControllerRevision daemonsets
ds
apps/v1 true DaemonSet deployments
deploy
apps/v1 true Deployment replicasets
rs
apps/v1 true ReplicaSet statefulsets
sts
apps/v1 true StatefulSet tokenreviews
authentication.k8s.io/v1 false TokenReview localsubjectaccessreviews
authorization.k8s.io/v1 true LocalSubjectAccessReview selfsubjectaccessreviews
authorization.k8s.io/v1 false SelfSubjectAccessReview selfsubjectrulesreviews
authorization.k8s.io/v1 false SelfSubjectRulesReview subjectaccessreviews
authorization.k8s.io/v1 false SubjectAccessReview horizontalpodautoscalers
hpa
autoscaling/v2 true HorizontalPodAutoscaler cronjobs
cj
batch/v1 true CronJob jobs
batch/v1 true Job certificatesigningrequests
csr
certificates.k8s.io/v1 false CertificateSigningRequest leases
coordination.k8s.io/v1 true Lease endpointslices
discovery.k8s.io/v1 true EndpointSlice events
ev
events.k8s.io/v1 true Event flowschemas
flowcontrol.apiserver.k8s.io/v1beta2 false FlowSchema prioritylevelconfigurations
flowcontrol.apiserver.k8s.io/v1beta2 false PriorityLevelConfiguration ingressclasses
networking.k8s.io/v1 false IngressClass ingresses
ing
networking.k8s.io/v1 true Ingress networkpolicies
netpol
networking.k8s.io/v1 true NetworkPolicy runtimeclasses
node.k8s.io/v1 false RuntimeClass poddisruptionbudgets
pdb
policy/v1 true PodDisruptionBudget podsecuritypolicies
psp
policy/v1beta1 false PodSecurityPolicy clusterrolebindings
rbac.authorization.k8s.io/v1 false ClusterRoleBinding clusterroles
rbac.authorization.k8s.io/v1 false ClusterRole rolebindings
rbac.authorization.k8s.io/v1 true RoleBinding roles
rbac.authorization.k8s.io/v1 true Role priorityclasses
pc
scheduling.k8s.io/v1 false PriorityClass csidrivers
storage.k8s.io/v1 false CSIDriver csinodes
storage.k8s.io/v1 false CSINode csistoragecapacities
storage.k8s.io/v1 true CSIStorageCapacity storageclasses
sc
storage.k8s.io/v1 false StorageClass volumeattachments
storage.k8s.io/v1 false VolumeAttachment
์ถ๋ ฅ ์ต์
ํน์ ๋ช
๋ น์ ์ถ๋ ฅ์ ์์ํํ๊ฑฐ๋ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ ๋ค์ ์น์
์ ์ฐธ๊ณ ํ๋ค. ๋ค์ํ ์ถ๋ ฅ ์ต์
์ ์ง์ํ๋ ๋ช
๋ น์ ๋ํ ์์ธํ ๋ด์ฉ์ kubectl ์ฐธ์กฐ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ถ๋ ฅ ์์ํ ๋ชจ๋ kubectl
๋ช
๋ น์ ๊ธฐ๋ณธ ์ถ๋ ฅ ํ์์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ผ๋ฐ ํ
์คํธ ํ์์ด๋ค. ํน์ ํ์์ผ๋ก ํฐ๋ฏธ๋ ์ฐฝ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด, ์ง์๋๋ kubectl
๋ช
๋ น์ -o
๋๋ --output
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
๊ตฌ๋ฌธ kubectl [ command] [ TYPE] [ NAME] -o <output_format>
kubectl
๋ช
๋ น์ ๋ฐ๋ผ, ๋ค์๊ณผ ๊ฐ์ ์ถ๋ ฅ ํ์์ด ์ง์๋๋ค.
์ถ๋ ฅ ํ์ ์ค๋ช
-o custom-columns=<spec>
์ผํ๋ก ๊ตฌ๋ถ๋ ์ฌ์ฉ์ ์ ์ ์ด ๋ชฉ๋ก์ ์ฌ์ฉํ์ฌ ํ
์ด๋ธ์ ์ถ๋ ฅํ๋ค. -o custom-columns-file=<filename>
<filename>
ํ์ผ์์ ์ฌ์ฉ์ ์ ์ ์ด ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ํ
์ด๋ธ์ ์ถ๋ ฅํ๋ค.-o json
JSON ํ์์ API ์ค๋ธ์ ํธ๋ฅผ ์ถ๋ ฅํ๋ค. -o jsonpath=<template>
jsonpath ํํ์์ ์ ์๋ ํ๋๋ฅผ ์ถ๋ ฅํ๋ค.-o jsonpath-file=<filename>
<filename>
ํ์ผ์์ jsonpath ํํ์์ผ๋ก ์ ์๋ ํ๋๋ฅผ ์ถ๋ ฅํ๋ค.-o name
๋ฆฌ์์ค ์ด๋ฆ๋ง ์ถ๋ ฅํ๋ค. -o wide
์ถ๊ฐ ์ ๋ณด๊ฐ ํฌํจ๋ ์ผ๋ฐ ํ
์คํธ ํ์์ผ๋ก ์ถ๋ ฅ๋๋ค. ํ๋์ ๊ฒฝ์ฐ, ๋
ธ๋ ์ด๋ฆ์ด ํฌํจ๋๋ค. -o yaml
YAML ํ์์ API ์ค๋ธ์ ํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ด ์์ ์์, ๋ค์์ ๋ช
๋ น์ ๋จ์ผ ํ๋์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ YAML ํ์์ ์ค๋ธ์ ํธ๋ก ์ถ๋ ฅํ๋ค.
kubectl get pod web-pod-13je7 -o yaml
๊ธฐ์ตํ๊ธฐ: ๊ฐ ๋ช
๋ น์ด ์ง์ํ๋ ์ถ๋ ฅ ํ์์ ๋ํ ์์ธํ ๋ด์ฉ์
kubectl ์ฐธ์กฐ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ฌ์ฉ์ ์ ์ ์ด ์ฌ์ฉ์ ์ ์ ์ด์ ์ ์ํ๊ณ ์ํ๋ ์ธ๋ถ ์ ๋ณด๋ง ํ
์ด๋ธ์ ์ถ๋ ฅํ๋ ค๋ฉด, custom-columns
์ต์
์ ์ฌ์ฉํ ์ ์๋ค.
์ฌ์ฉ์ ์ ์ ์ด์ ์ธ๋ผ์ธ์ผ๋ก ์ ์ํ๊ฑฐ๋ ํ
ํ๋ฆฟ ํ์ผ์ ์ฌ์ฉํ๋๋ก ์ ํํ ์ ์๋ค. -o custom-columns=<spec>
๋๋ -o custom-columns-file=<filename>
์์ ์ธ๋ผ์ธ:
kubectl get pods <pod-name> -o custom-columns= NAME:.metadata.name,RSRC:.metadata.resourceVersion
ํ
ํ๋ฆฟ ํ์ผ:
kubectl get pods <pod-name> -o custom-columns-file= template.txt
template.txt
ํ์ผ์ ํฌํจ๋ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
NAME RSRC
metadata.name metadata.resourceVersion
๋ ๋ช
๋ น ์ค ํ๋๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๋น์ทํ๋ค.
NAME RSRC
submit-queue 610995
์๋ฒ์ธก ์ด kubectl
๋ ์๋ฒ์์ ์ค๋ธ์ ํธ์ ๋ํ ํน์ ์ด ์ ๋ณด ์์ ์ ์ง์ํ๋ค.
์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ถ๋ ฅํ ์ ์๋๋ก, ์ฃผ์ด์ง ๋ฆฌ์์ค์ ๋ํด ์๋ฒ๊ฐ ํด๋น ๋ฆฌ์์ค์ ๊ด๋ จ๋ ์ด๊ณผ ํ์ ๋ฐํํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ ์๋ฒ๊ฐ ์ถ๋ ฅ์ ์ธ๋ถ ์ฌํญ์ ์บก์ํํ๋๋ก ํ์ฌ, ๋์ผํ ํด๋ฌ์คํฐ์ ๋ํด ์ฌ์ฉ๋ ํด๋ผ์ด์ธํธ์์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ผ๊ด๋ ์ถ๋ ฅ์ ํ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์๋ค. ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด,
kubectl get
๋ช
๋ น์ --server-print=false
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.
์์ ํ๋ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ ์ฌ์ฉํ๋ค.
kubectl get pods <pod-name> --server-print= false
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๋น์ทํ๋ค.
NAME AGE
pod-name 1m
์ค๋ธ์ ํธ ๋ชฉ๋ก ์ ๋ ฌ ํฐ๋ฏธ๋ ์ฐฝ์์ ์ ๋ ฌ๋ ๋ชฉ๋ก์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด, ์ง์๋๋ kubectl
๋ช
๋ น์ --sort-by
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์๋ค. --sort-by
ํ๋๊ทธ์ ํจ๊ป ์ซ์๋ ๋ฌธ์์ด ํ๋๋ฅผ ์ง์ ํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์ ๋ ฌํ๋ค. ํ๋๋ฅผ ์ง์ ํ๋ ค๋ฉด, jsonpath ํํ์์ ์ฌ์ฉํ๋ค.
๊ตฌ๋ฌธ kubectl [ command] [ TYPE] [ NAME] --sort-by= <jsonpath_exp>
์์ ์ด๋ฆ๋ณ๋ก ์ ๋ ฌ๋ ํ๋ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ค๋ฉด, ๋ค์์ ์คํํ๋ค.
kubectl get pods --sort-by= .metadata.name
์์ : ์ผ๋ฐ์ ์ธ ์์
๋ค์ ์์ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ kubectl
์กฐ์ ์คํ์ ์ต์ํด์ง๋ค.
kubectl apply
- ํ์ผ ๋๋ ํ์ค์
๋ ฅ์์ ๋ฆฌ์์ค๋ฅผ ์ ์ฉํ๊ฑฐ๋ ์
๋ฐ์ดํธํ๋ค.
# example-service.yaml์ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์์ฑํ๋ค.
kubectl apply -f example-service.yaml
# example-controller.yaml์ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f example-controller.yaml
# <directory> ๋๋ ํฐ๋ฆฌ ๋ด์ .yaml, .yml ๋๋ .json ํ์ผ์ ์ ์๋ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f <directory>
kubectl get
- ํ๋ ์ด์์ ๋ฆฌ์์ค๋ฅผ ๋์ดํ๋ค.
# ๋ชจ๋ ํ๋๋ฅผ ์ผ๋ฐ ํ
์คํธ ์ถ๋ ฅ ํ์์ผ๋ก ๋์ดํ๋ค.
kubectl get pods
# ๋ชจ๋ ํ๋๋ฅผ ์ผ๋ฐ ํ
์คํธ ์ถ๋ ฅ ํ์์ผ๋ก ๋์ดํ๊ณ ์ถ๊ฐ ์ ๋ณด(์: ๋
ธ๋ ์ด๋ฆ)๋ฅผ ํฌํจํ๋ค.
kubectl get pods -o wide
# ์ง์ ๋ ์ด๋ฆ์ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ๋ฅผ ์ผ๋ฐ ํ
์คํธ ์ถ๋ ฅ ํ์์ผ๋ก ๋์ดํ๋ค. ํ: 'replicationcontroller' ๋ฆฌ์์ค ํ์
์ 'rc'๋ก ์งง๊ฒ ๋ฐ๊ฟ์ธ ์ ์๋ค.
kubectl get replicationcontroller <rc-name>
# ๋ชจ๋ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ์ ์๋น์ค๋ฅผ ์ผ๋ฐ ํ
์คํธ ์ถ๋ ฅ ํ์์ผ๋ก ํจ๊ป ๋์ดํ๋ค.
kubectl get rc,services
# ๋ชจ๋ ๋ฐ๋ชฌ ์
์ ์ผ๋ฐ ํ
์คํธ ์ถ๋ ฅ ํ์์ผ๋ก ๋์ดํ๋ค.
kubectl get ds
# ๋
ธ๋ server01์์ ์คํ ์ค์ธ ๋ชจ๋ ํ๋๋ฅผ ๋์ดํ๋ค.
kubectl get pods --field-selector= spec.nodeName= server01
kubectl describe
- ์ด๊ธฐํ๋์ง ์์ ๋ฆฌ์์ค๋ฅผ ํฌํจํ์ฌ ํ๋ ์ด์์ ๋ฆฌ์์ค์ ๊ธฐ๋ณธ ์ํ๋ฅผ ๋ํดํธ๋ก ํ์ํ๋ค.
# ๋
ธ๋ ์ด๋ฆ์ด <node-name>์ธ ๋
ธ๋์ ์ธ๋ถ ์ฌํญ์ ํ์ํ๋ค.
kubectl describe nodes <node-name>
# ํ๋ ์ด๋ฆ์ด <pod-name> ์ธ ํ๋์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ํ๋ค.
kubectl describe pods/<pod-name>
# ์ด๋ฆ์ด <rc-name>์ธ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ๊ฐ ๊ด๋ฆฌํ๋ ๋ชจ๋ ํ๋์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ํ๋ค.
# ๊ธฐ์ตํ๊ธฐ: ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ์์ ์์ฑ๋ ๋ชจ๋ ํ๋์๋ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ ์ด๋ฆ์ด ์ ๋์ฌ๋ก ๋ถ๋๋ค.
kubectl describe pods <rc-name>
# ๋ชจ๋ ํ๋์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค.
kubectl describe pods
์ฐธ๊ณ : kubectl get
๋ช
๋ น์ ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ ๋ฆฌ์์ค ํ์
์ ํ๋ ์ด์์
๋ฆฌ์์ค๋ฅผ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, -o
๋๋ --output
ํ๋๊ทธ๋ฅผ
์ฌ์ฉํ์ฌ ์ถ๋ ฅ ํ์์ ์ฌ์ฉ์ ์ ์ํ ์ ์๋ ํ๋ถํ ํ๋๊ทธ ์ธํธ๊ฐ ์๋ค.
-w
๋๋ --watch
ํ๋๊ทธ๋ฅผ ์ง์ ํ์ฌ ํน์ ์ค๋ธ์ ํธ์ ๋ํ ์
๋ฐ์ดํธ ์งํ๊ณผ์ ์ ํ์ธํ ์
์๋ค. kubectl describe
๋ช
๋ น์ ์ง์ ๋ ๋ฆฌ์์ค์ ์ฌ๋ฌ ๊ด๋ จ ์ธก๋ฉด์
์ค๋ช
ํ๋ ๋ฐ ๋ ์ค์ ์ ๋๋ค. API ์๋ฒ์ ๋ํ ์ฌ๋ฌ API ํธ์ถ์ ํธ์ถํ์ฌ
์ฌ์ฉ์์ ๋ํ ๋ทฐ(view)๋ฅผ ๋น๋ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, kubectl describe node
๋ช
๋ น์ ๋
ธ๋์ ๋ํ ์ ๋ณด๋ฟ๋ง ์๋๋ผ, ๋
ธ๋์์ ์คํ ์ค์ธ ํ๋์ ์์ฝ ์ ๋ณด, ๋
ธ๋์ ๋ํด ์์ฑ๋ ์ด๋ฒคํธ ๋ฑ์
์ ๋ณด๋ ๊ฒ์ํ๋ค.kubectl delete
- ํ์ผ, ํ์ค์
๋ ฅ ๋๋ ๋ ์ด๋ธ ์ ํ๊ธฐ, ์ด๋ฆ, ๋ฆฌ์์ค ์ ํ๊ธฐ๋ ๋ฆฌ์์ค๋ฅผ ์ง์ ํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ค.
# pod.yaml ํ์ผ์ ์ง์ ๋ ํ์
๊ณผ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ํ๋๋ฅผ ์ญ์ ํ๋ค.
kubectl delete -f pod.yaml
# '<label-key>=<label-value>' ๋ ์ด๋ธ์ด ์๋ ๋ชจ๋ ํ๋์ ์๋น์ค๋ฅผ ์ญ์ ํ๋ค.
kubectl delete pods,services -l <label-key>= <label-value>
# ์ด๊ธฐํ๋์ง ์์ ํ๋๋ฅผ ํฌํจํ ๋ชจ๋ ํ๋๋ฅผ ์ญ์ ํ๋ค.
kubectl delete pods --all
kubectl exec
- ํ๋์ ์ปจํ
์ด๋์ ๋ํด ๋ช
๋ น์ ์คํํ๋ค.
# ํ๋ <pod-name>์์ 'date'๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, ์ฒซ ๋ฒ์งธ ์ปจํ
์ด๋์์ ์ถ๋ ฅ๋๋ค.
kubectl exec <pod-name> -- date
# ํ๋ <pod-name>์ <container-name> ์ปจํ
์ด๋์์ 'date'๋ฅผ ์คํํ์ฌ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค.
kubectl exec <pod-name> -c <container-name> -- date
# ํ๋ <pod-name>์์ ๋ํ์ TTY๋ฅผ ์ฐ๊ฒฐํด /bin/bash๋ฅผ ์คํํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, ์ฒซ ๋ฒ์งธ ์ปจํ
์ด๋์์ ์ถ๋ ฅ๋๋ค.
kubectl exec -ti <pod-name> -- /bin/bash
kubectl logs
- ํ๋์ ์ปจํ
์ด๋์ ๋ํ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค.
# ํ๋ <pod-name>์์ ๋ก๊ทธ์ ์ค๋
์ท์ ๋ฐํํ๋ค.
kubectl logs <pod-name>
# ํ๋ <pod-name>์์ ๋ก๊ทธ ์คํธ๋ฆฌ๋ฐ์ ์์ํ๋ค. ์ด๊ฒ์ ๋ฆฌ๋
์ค ๋ช
๋ น 'tail -f'์ ๋น์ทํ๋ค.
kubectl logs -f <pod-name>
kubectl diff
- ์ ์๋ ํด๋ฌ์คํฐ ์
๋ฐ์ดํธ์ ์ฐจ์ด์ ์ ๋ณธ๋ค.
# "pod.json"์ ํฌํจ๋ ๋ฆฌ์์ค์ ์ฐจ์ด์ ์ ์ถ๋ ฅํ๋ค.
kubectl diff -f pod.json
# ํ์ค์
๋ ฅ์์ ํ์ผ์ ์ฝ์ด ์ฐจ์ด์ ์ ์ถ๋ ฅํ๋ค.
cat service.yaml | kubectl diff -f -
์์ : ํ๋ฌ๊ทธ์ธ ์์ฑ ๋ฐ ์ฌ์ฉ kubectl
ํ๋ฌ๊ทธ์ธ ์์ฑ๊ณผ ์ฌ์ฉ์ ์ต์ํด์ง๋ ค๋ฉด ๋ค์์ ์์ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ค.
# ์ด๋ค ์ธ์ด๋ก๋ ๊ฐ๋จํ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค๊ณ "kubectl-" ์ ๋์ฌ๋ก
# ์์ํ๋๋ก ์คํ ํ์ผ์ ์ด๋ฆ์ ์ง์ ํ๋ค.
cat ./kubectl-hello
#!/bin/sh
# ์ด ํ๋ฌ๊ทธ์ธ์ "hello world"๋ผ๋ ๋จ์ด๋ฅผ ์ถ๋ ฅํ๋ค
echo "hello world"
์์ฑํ ํ๋ฌ๊ทธ์ธ์ ์คํ ๊ฐ๋ฅํ๊ฒ ํ๋ค
chmod a+x ./kubectl-hello
# ๊ทธ๋ฆฌ๊ณ PATH์ ์์น๋ก ์ฎ๊ธด๋ค
sudo mv ./kubectl-hello /usr/local/bin
sudo chown root:root /usr/local/bin
# ์ด์ kubectl ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค๊ณ "์ค์นํ๋ค".
# kubectl์์ ํ๋ฌ๊ทธ์ธ์ ์ผ๋ฐ ๋ช
๋ น์ฒ๋ผ ํธ์ถํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ ์๋ค
kubectl hello
hello world
# ํ๋ฌ๊ทธ์ธ์ ๋ฐฐ์นํ $PATH์ ํด๋์์ ํ๋ฌ๊ทธ์ธ์ ์ญ์ ํ์ฌ,
# ํ๋ฌ๊ทธ์ธ์ "์ ๊ฑฐ"ํ ์ ์๋ค
sudo rm /usr/local/bin/kubectl-hello
kubectl
์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ๋ณด๋ ค๋ฉด,
kubectl plugin list
ํ์ ๋ช
๋ น์ ์ฌ์ฉํ๋ค.
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๋น์ทํ๋ค.
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
/usr/local/bin/kubectl-bar
kubectl plugin list
๋ ๋ํ ์คํ ๊ฐ๋ฅํ์ง ์๊ฑฐ๋,
๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ ์ํด ์ฐจ๋จ๋ ํ๋ฌ๊ทธ์ธ์ ๋ํด ๊ฒฝ๊ณ ํ๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
sudo chmod -x /usr/local/bin/kubectl-foo # ์คํ ๊ถํ ์ ๊ฑฐ
kubectl plugin list
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
- warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
/usr/local/bin/kubectl-bar
error: one plugin warning was found
ํ๋ฌ๊ทธ์ธ์ ๊ธฐ์กด kubectl ๋ช
๋ น ์์ ๋ณด๋ค ๋ณต์กํ ๊ธฐ๋ฅ์
๊ตฌ์ถํ๋ ์๋จ์ผ๋ก ์๊ฐํ ์ ์๋ค.
๋ค์ ๋ช ๊ฐ์ง ์๋ ์ด๋ฏธ kubectl-whoami
์
๋ค์ ๋ด์ฉ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค.
#!/bin/bash
# ์ด ํ๋ฌ๊ทธ์ธ์ ํ์ฌ ์ ํ๋ ์ปจํ
์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ฌ์ฉ์์ ๋ํ
# ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด 'kubectl config' ๋ช
๋ น์ ์ฌ์ฉํ๋ค.
kubectl config view --template= '{{ range .contexts }}{{ if eq .name "' $( kubectl config current-context) '" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'
์์ ํ๋ฌ๊ทธ์ธ์ ์คํํ๋ฉด KUBECONFIG ํ์ผ์์ ํ์ฌ์ ์ปจํ
์คํธ์ ๋ํ
์ฌ์ฉ์๊ฐ ํฌํจ๋ ์ถ๋ ฅ์ด ์ ๊ณต๋๋ค.
# ํ์ผ์ ์คํ ๊ฐ๋ฅํ๊ฒ ํ๋ค
sudo chmod +x ./kubectl-whoami
# ๊ทธ๋ฆฌ๊ณ PATH๋ก ์ฎ๊ธด๋ค
sudo mv ./kubectl-whoami /usr/local/bin
kubectl whoami
Current user: plugins-user
๋ค์ ๋ด์ฉ 10.1 - kubectl ์นํธ ์ํธ ์ด ํ์ด์ง๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ kubectl
์ปค๋งจ๋์ ํ๋๊ทธ์ ๋ํ ๋ชฉ๋ก์ ํฌํจํ๋ค.
Kubectl ์๋ ์์ฑ BASH source <( kubectl completion bash) # bash-completion ํจํค์ง๋ฅผ ๋จผ์ ์ค์นํ ํ, bash์ ์๋ ์์ฑ์ ํ์ฌ ์
ธ์ ์ค์ ํ๋ค
echo "source <(kubectl completion bash)" >> ~/.bashrc # ์๋ ์์ฑ์ bash ์
ธ์ ์๊ตฌ์ ์ผ๋ก ์ถ๊ฐํ๋ค
๋ํ, kubectl
์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ ์ฝ์นญ์ ์ฌ์ฉํ ์ ์๋ค.
alias k = kubectl
complete -o default -F __start_kubectl k
ZSH source <( kubectl completion zsh) # ํ์ฌ ์
ธ์ zsh์ ์๋ ์์ฑ ์ค์
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # ์๋ ์์ฑ์ zsh ์
ธ์ ์๊ตฌ์ ์ผ๋ก ์ถ๊ฐํ๋ค.
--all-namespaces
์ ๋ํ ๋
ธํธ--all-namespaces
๋ฅผ ๋ถ์ฌ์ผ ํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ฏ๋ก, --all-namespaces
์ ์ถ์ฝํ์ ์์ ๋๋ ๊ฒ์ด ์ข๋ค.
kubectl -A
Kubectl ์ปจํ
์คํธ์ ์ค์ kubectl
์ด ํต์ ํ๊ณ ์ค์ ์ ๋ณด๋ฅผ ์์ ํ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ
์ง์ ํ๋ค. ์ค์ ํ์ผ์ ๋ํ ์์ธํ ์ ๋ณด๋ kubeconfig๋ฅผ ์ด์ฉํ ํด๋ฌ์คํฐ ๊ฐ ์ธ์ฆ ๋ฌธ์๋ฅผ
์ฐธ๊ณ ํ๋ค.
kubectl config view # ๋ณํฉ๋ kubeconfig ์ค์ ์ ํ์ํ๋ค.
# ๋์์ ์ฌ๋ฌ kubeconfig ํ์ผ์ ์ฌ์ฉํ๊ณ ๋ณํฉ๋ ๊ตฌ์ฑ์ ํ์ธํ๋ค
KUBECONFIG = ~/.kube/config:~/.kube/kubconfig2
kubectl config view
# e2e ์ฌ์ฉ์์ ์ํธ๋ฅผ ํ์ธํ๋ค
kubectl config view -o jsonpath = '{.users[?(@.name == "e2e")].user.password}'
kubectl config view -o jsonpath = '{.users[].name}' # ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์ ์ถ๋ ฅ
kubectl config view -o jsonpath = '{.users[*].name}' # ์ฌ์ฉ์ ๋ฆฌ์คํธ ์กฐํ
kubectl config get-contexts # ์ปจํ
์คํธ ๋ฆฌ์คํธ ์ถ๋ ฅ
kubectl config current-context # ํ์ฌ ์ปจํ
์คํธ ์ถ๋ ฅ
kubectl config use-context my-cluster-name # my-cluster-name๋ฅผ ๊ธฐ๋ณธ ์ปจํ
์คํธ๋ก ์ค์
kubectl config set-cluster my-cluster-name # kubeconfig์ ํด๋ฌ์คํฐ ์ํธ๋ฆฌ๋ฅผ ์ค์
# kubeconfig์ ์ด ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์์ํจ ์์ฒญ์ ์ฌ์ฉํ ํ๋ก์ ์๋ฒ์ URL์ ๊ตฌ์ฑํ๋ค.
kubectl config set-cluster my-cluster-name --proxy-url= my-proxy-url
# ๊ธฐ๋ณธ ์ธ์ฆ์ ์ง์ํ๋ ์๋ก์ด ์ฌ์ฉ์๋ฅผ kubeconf์ ์ถ๊ฐํ๋ค
kubectl config set-credentials kubeuser/foo.kubernetes.com --username= kubeuser --password= kubepassword
# ํด๋น ์ปจํ
์คํธ์์ ๋ชจ๋ ํ์ kubectl ์ปค๋งจ๋์ ๋ํ ๋ค์์คํ์ด์ค๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋ค
kubectl config set-context --current --namespace= ggckad-s2
# ํน์ ์ฌ์ฉ์์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ปจํ
์คํธ ์ค์
kubectl config set-context gce --user= cluster-admin --namespace= foo \
&& kubectl config use-context gce
kubectl config unset users.foo # foo ์ฌ์ฉ์ ์ญ์
# ์ปจํ
์คํธ/๋ค์์คํ์ด์ค๋ฅผ ์ค์ /์กฐํํ๋ ๋จ์ถ ๋ช
๋ น (bash ๋ฐ bash ํธํ ์
ธ์์๋ง ๋์ํจ, ๋ค์์คํ์ด์ค ์ค์ ์ ์ํด kn ์ ์ฌ์ฉํ๊ธฐ ์ ์ ํ์ฌ ์ปจํ
์คํธ๊ฐ ์ค์ ๋์ด์ผ ํจ)
alias kx = 'f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
alias kn = 'f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'
Kubectl apply apply
๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ฅผ ์ ์ํ๋ ํ์ผ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ๊ด๋ฆฌํ๋ค. kubectl apply
๋ฅผ ์คํํ์ฌ ํด๋ฌ์คํฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ์
๋ฐ์ดํธํ๋ค. ์ด๊ฒ์ ํ๋ก๋์
ํ๊ฒฝ์์ ์ฟ ๋ฒ๋คํฐ์ค ์ ํ๋ฆฌ์ผ์ด์
์ ๊ด๋ฆฌํ ๋ ๊ถ์ฅ๋๋ค. Kubectl Book ์ ์ฐธ๊ณ ํ๋ค.
์ค๋ธ์ ํธ ์์ฑ ์ฟ ๋ฒ๋คํฐ์ค ๋งค๋ํ์คํธ๋ JSON์ด๋ YAML๋ก ์ ์๋๋ค. ํ์ผ ํ์ฅ์๋ .yaml
, .yml
, .json
์ด ์ฌ์ฉ๋๋ค.
kubectl apply -f ./my-manifest.yaml # ๋ฆฌ์์ค(๋ค) ์์ฑ
kubectl apply -f ./my1.yaml -f ./my2.yaml # ์ฌ๋ฌ ํ์ผ๋ก ๋ถํฐ ์์ฑ
kubectl apply -f ./dir # dir ๋ด ๋ชจ๋ ๋งค๋ํ์คํธ ํ์ผ์์ ๋ฆฌ์์ค(๋ค) ์์ฑ
kubectl apply -f https://git.io/vPieo # url๋ก๋ถํฐ ๋ฆฌ์์ค(๋ค) ์์ฑ
kubectl create deployment nginx --image= nginx # nginx ๋จ์ผ ์ธ์คํด์ค๋ฅผ ์์
# "Hello World"๋ฅผ ์ถ๋ ฅํ๋ ์ก(Job) ์์ฑ
kubectl create job hello --image= busybox:1.28 -- echo "Hello World"
# ๋งค๋ถ๋ง๋ค "Hello World"๋ฅผ ์ถ๋ ฅํ๋ ํฌ๋ก ์ก(CronJob) ์์ฑ
kubectl create cronjob hello --image= busybox:1.28 --schedule= "*/1 * * * *" -- echo "Hello World"
kubectl explain pods # ํ๋ ๋งค๋ํ์คํธ ๋ฌธ์๋ฅผ ์กฐํ
# stdin์ผ๋ก ๋ค์์ YAML ์ค๋ธ์ ํธ ์์ฑ
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000"
EOF
# ์ฌ๋ฌ ๊ฐ์ ํค๋ก ์ํฌ๋ฆฟ ์์ฑ
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
๋ฆฌ์์ค ์กฐํ ๋ฐ ์ฐพ๊ธฐ # ๊ธฐ๋ณธ ์ถ๋ ฅ์ ์ํ Get ์ปค๋งจ๋
kubectl get services # ๋ค์์คํ์ด์ค ๋ด ๋ชจ๋ ์๋น์ค์ ๋ชฉ๋ก ์กฐํ
kubectl get pods --all-namespaces # ๋ชจ๋ ๋ค์์คํ์ด์ค ๋ด ๋ชจ๋ ํ๋์ ๋ชฉ๋ก ์กฐํ
kubectl get pods -o wide # ํด๋นํ๋ ๋ค์์คํ์ด์ค ๋ด ๋ชจ๋ ํ๋์ ์์ธ ๋ชฉ๋ก ์กฐํ
kubectl get deployment my-dep # ํน์ ๋ํ๋ก์ด๋จผํธ์ ๋ชฉ๋ก ์กฐํ
kubectl get pods # ๋ค์์คํ์ด์ค ๋ด ๋ชจ๋ ํ๋์ ๋ชฉ๋ก ์กฐํ
kubectl get pod my-pod -o yaml # ํ๋์ YAML ์กฐํ
# ์์ธ ์ถ๋ ฅ์ ์ํ Describe ์ปค๋งจ๋
kubectl describe nodes my-node
kubectl describe pods my-pod
# Name์ผ๋ก ์ ๋ ฌ๋ ์๋น์ค์ ๋ชฉ๋ก ์กฐํ
kubectl get services --sort-by= .metadata.name
# ์ฌ์์ ํ์๋ก ์ ๋ ฌ๋ ํ๋์ ๋ชฉ๋ก ์กฐํ
kubectl get pods --sort-by= '.status.containerStatuses[0].restartCount'
# PersistentVolumes์ ์ฉ๋๋ณ๋ก ์ ๋ ฌํด์ ์กฐํ
kubectl get pv --sort-by= .spec.capacity.storage
# app=cassandra ๋ ์ด๋ธ์ ๊ฐ์ง ๋ชจ๋ ํ๋์ ๋ ์ด๋ธ ๋ฒ์ ์กฐํ
kubectl get pods --selector= app = cassandra -o \
jsonpath = '{.items[*].metadata.labels.version}'
# ์๋ฅผ ๋ค์ด 'ca.crt'์ ๊ฐ์ด ์ ์ด ์๋ ํค๊ฐ์ ๊ฒ์ํ๋ค
kubectl get configmap myconfig \
-o jsonpath = '{.data.ca\.crt}'
# ๋ฐ์ค(`_`) ๋์ ๋์(`-`)๋ฅผ ์ฌ์ฉํ์ฌ base64 ์ธ์ฝ๋ฉ๋ ๊ฐ์ ์กฐํ
kubectl get secret my-secret --template= '{{index .data "key-name-with-dashes"}}'
# ๋ชจ๋ ์์ปค ๋
ธ๋ ์กฐํ (์
๋ ํฐ๋ฅผ ์ฌ์ฉํ์ฌ 'node-role.kubernetes.io/control-plane'
# ์ผ๋ก ๋ช
๋ช
๋ ๋ผ๋ฒจ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ธ)
kubectl get node --selector= '!node-role.kubernetes.io/control-plane'
# ๋ค์์คํ์ด์ค์ ๋ชจ๋ ์คํ ์ค์ธ ํ๋๋ฅผ ์กฐํ
kubectl get pods --field-selector= status.phase= Running
# ๋ชจ๋ ๋
ธ๋์ ์ธ๋ถIP๋ฅผ ์กฐํ
kubectl get nodes -o jsonpath = '{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# ํน์ RC์ ์ํด์๋ ํ๋ ์ด๋ฆ์ ๋ชฉ๋ก ์กฐํ
# "jq" ์ปค๋งจ๋๋ jsonpath๋ฅผ ์ฌ์ฉํ๋ ๋งค์ฐ ๋ณต์กํ ๋ณํ์ ์ ์ฉํ๋ค. https://stedolan.github.io/jq/ ์์ ํ์ธํ ์ ์๋ค.
sel = ${ $( kubectl get rc my-rc --output= json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"' ) %?}
echo $( kubectl get pods --selector= $sel --output= jsonpath ={ .items..metadata.name} )
# ๋ชจ๋ ํ๋(๋๋ ๋ ์ด๋ธ์ ์ง์ํ๋ ๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ)์ ๋ ์ด๋ธ ์กฐํ
kubectl get pods --show-labels
# ์ด๋ค ๋
ธ๋๊ฐ ์ค๋น๋๋์ง ํ์ธ
JSONPATH = '{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath = " $JSONPATH " | grep "Ready=True"
# ์ธ๋ถ ๋๊ตฌ ์์ด ๋์ฝ๋ฉ๋ ์ํฌ๋ฆฟ ์ถ๋ ฅ
kubectl get secret my-secret -o go-template= '{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
# ํ๋์ ์ํด ํ์ฌ ์ฌ์ฉ๋๊ณ ์๋ ๋ชจ๋ ์ํฌ๋ฆฟ ๋ชฉ๋ก ์กฐํ
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# ๋ชจ๋ ํ๋์ ์ด๊ธฐํ ์ปจํ
์ด๋(initContainer)์ ์ปจํ
์ด๋ID ๋ชฉ๋ก ์กฐํ
# ์ด๊ธฐํ ์ปจํ
์ด๋(initContainer)๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์ ์ง๋ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ์ ๋ฆฌํ ๋ ์ ์ฉํ๋ค.
kubectl get pods --all-namespaces -o jsonpath = '{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# ํ์์คํฌํ๋ก ์ ๋ ฌ๋ ์ด๋ฒคํธ ๋ชฉ๋ก ์กฐํ
kubectl get events --sort-by= .metadata.creationTimestamp
# ๋ชจ๋ Warning ํ์
์ด๋ฒคํธ ์กฐํ
kubectl events --types= Warning
# ๋งค๋ํ์คํธ๊ฐ ์ ์ฉ๋ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ์ ํ์ฌ ์ํ์ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๋น๊ตํ๋ค.
kubectl diff -f ./my-manifest.yaml
# ๋
ธ๋์ ๋ํด ๋ฐํ๋ ๋ชจ๋ ํค์ ๋ง์นจํ๋ก ๊ตฌ๋ถ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
# ๋ณต์กํ ์ค์ฒฉ JSON ๊ตฌ์กฐ ๋ด์์ ํค๋ฅผ ์ฐพ์ ๋ ์ ์ฉํ๋ค.
kubectl get nodes -o json | jq -c 'paths|join(".")'
# ํ๋ ๋ฑ์ ๋ํด ๋ฐํ๋ ๋ชจ๋ ํค์ ๋ง์นจํ๋ก ๊ตฌ๋ถ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
kubectl get pods -o json | jq -c 'paths|join(".")'
# ๋ชจ๋ ํ๋์ ๋ํด ENV๋ฅผ ์์ฑํ๋ค(๊ฐ ํ๋์ ๊ธฐ๋ณธ ์ปจํ
์ด๋๊ฐ ์๊ณ , ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค๊ฐ ์๊ณ , `env` ๋ช
๋ น์ด๊ฐ ๋์ํ๋ค๊ณ ๊ฐ์ ).
# `env` ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ง์๋๋ ๋ช
๋ น์ด๋ฅผ ๋ชจ๋ ํ๋์ ์คํํ ๋์๋ ์ฐธ๊ณ ํ ์ ์๋ค.
for pod in $( kubectl get po --output= jsonpath ={ .items..metadata.name} ) ; do echo $pod && kubectl exec -it $pod -- env; done
# ๋ํ๋ก์ด๋จผํธ์ status ์๋ธ๋ฆฌ์์ค๋ฅผ ์กฐํํ๋ค.
kubectl get deployment nginx-deployment --subresource= status
๋ฆฌ์์ค ์
๋ฐ์ดํธ kubectl set image deployment/frontend www = image:v2 # "frontend" ๋ํ๋ก์ด๋จผํธ์ "www" ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธํ๋ ๋กค๋ง ์
๋ฐ์ดํธ
kubectl rollout history deployment/frontend # ํ ๋ฆฌ๋น์ ์ ํฌํจํ ๋ํ๋ก์ด๋จผํธ์ ์ด๋ ฅ์ ์ฒดํฌ
kubectl rollout undo deployment/frontend # ์ด์ ๋ํ๋ก์ด๋จผํธ๋ก ๋กค๋ฐฑ
kubectl rollout undo deployment/frontend --to-revision= 2 # ํน์ ๋ฆฌ๋น์ ์ผ๋ก ๋กค๋ฐฑ
kubectl rollout status -w deployment/frontend # ์๋ฃ๋ ๋๊น์ง "frontend" ๋ํ๋ก์ด๋จผํธ์ ๋กค๋ง ์
๋ฐ์ดํธ ์ํ๋ฅผ ๊ฐ์
kubectl rollout restart deployment/frontend # "frontend" ๋ํ๋ก์ด๋จผํธ์ ๋กค๋ง ์ฌ์์
cat pod.json | kubectl replace -f - # stdin์ผ๋ก ์ ๋ฌ๋ JSON์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ต์ฒด
# ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ๊ต์ฒด, ์ญ์ ํ ์ฌ์์ฑํจ. ์ด๊ฒ์ ์๋น์ค๋ฅผ ์ค๋จ์ํด.
kubectl replace --force -f ./pod.json
# ๋ณต์ ๋ nginx๋ฅผ ์ํ ์๋น์ค๋ฅผ ์์ฑํ๋ค. 80 ํฌํธ๋ก ์๋น์คํ๊ณ , ์ปจํ
์ด๋๋ 8000 ํฌํธ๋ก ์ฐ๊ฒฐํ๋ค.
kubectl expose rc nginx --port= 80 --target-port= 8000
# ๋จ์ผ-์ปจํ
์ด๋ ํ๋์ ์ด๋ฏธ์ง ๋ฒ์ (ํ๊ทธ)์ v4๋ก ์
๋ฐ์ดํธ
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods my-pod new-label= awesome # ๋ ์ด๋ธ ์ถ๊ฐ
kubectl label pods my-pod new-label- # ๋ ์ด๋ธ ์ ๊ฑฐ
kubectl annotate pods my-pod icon-url= http://goo.gl/XXBTWq # ์ด๋
ธํ
์ด์
์ถ๊ฐ
kubectl autoscale deployment foo --min= 2 --max= 10 # ๋ํ๋ก์ด๋จผํธ "foo" ์คํ ์ค์ผ์ผ
๋ฆฌ์์ค ํจ์น # ๋
ธ๋๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์
๋ฐ์ดํธ
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
# ์ปจํ
์ด๋์ ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธ. ๋ณํฉ(merge) ํค์ด๋ฏ๋ก, spec.containers[*].name์ด ํ์
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
# ์์น ๋ฐฐ์ด์ ์ด์ฉํ json ํจ์น๋ฅผ ์ฌ์ฉํ์ฌ, ์ปจํ
์ด๋์ ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธ
kubectl patch pod valid-pod --type= 'json' -p= '[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
# ์์น ๋ฐฐ์ด์ ์ด์ฉํ json ํจ์น๋ฅผ ์ฌ์ฉํ์ฌ livenessProbe ๋ํ๋ก์ด๋จผํธ ๋นํ์ฑํ
kubectl patch deployment valid-deployment --type json -p= '[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
# ์์น ๋ฐฐ์ด์ ์ ์์ ์ถ๊ฐ
kubectl patch sa default --type= 'json' -p= '[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
# ๋ํ๋ก์ด๋จผํธ์ scale ์๋ธ๋ฆฌ์์ค๋ฅผ ํจ์นํ์ฌ ๋ ํ๋ฆฌ์นด ์ ์
๋ฐ์ดํธ
kubectl patch deployment nginx-deployment --subresource= 'scale' --type= 'merge' -p '{"spec":{"replicas":2}}'
๋ฆฌ์์ค ํธ์ง ์ ํธํ๋ ํธ์ง๊ธฐ๋ก ๋ชจ๋ API ๋ฆฌ์์ค๋ฅผ ํธ์งํ ์ ์๋ค.
kubectl edit svc/docker-registry # docker-registry๋ผ๋ ์๋น์ค ํธ์ง
KUBE_EDITOR = "nano" kubectl edit svc/docker-registry # ๋ค๋ฅธ ํธ์ง๊ธฐ ์ฌ์ฉ
๋ฆฌ์์ค ์ค์ผ์ผ๋ง kubectl scale --replicas= 3 rs/foo # 'foo'๋ผ๋ ๋ ํ๋ฆฌ์นด์
์ 3์ผ๋ก ์ค์ผ์ผ
kubectl scale --replicas= 3 -f foo.yaml # "foo.yaml"์ ์ง์ ๋ ๋ฆฌ์์ค์ ํฌ๊ธฐ๋ฅผ 3์ผ๋ก ์ค์ผ์ผ
kubectl scale --current-replicas= 2 --replicas= 3 deployment/mysql # mysql์ด๋ผ๋ ๋ํ๋ก์ด๋จผํธ์ ํ์ฌ ํฌ๊ธฐ๊ฐ 2์ธ ๊ฒฝ์ฐ, mysql์ 3์ผ๋ก ์ค์ผ์ผ
kubectl scale --replicas= 5 rc/foo rc/bar rc/baz # ์ฌ๋ฌ ๊ฐ์ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ ์ค์ผ์ผ
๋ฆฌ์์ค ์ญ์ kubectl delete -f ./pod.json # pod.json์ ์ง์ ๋ ์ ํ ๋ฐ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ํ๋ ์ญ์
kubectl delete pod unwanted --now # ์ ์ ์๊ฐ ์์ด ์ฆ์ ํ๋ ์ญ์
kubectl delete pod,service baz foo # "baz", "foo"์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ํ๋์ ์๋น์ค ์ญ์
kubectl delete pods,services -l name = myLabel # name=myLabel ๋ผ๋ฒจ์ ๊ฐ์ง ํ๋์ ์๋น์ค ์ญ์
kubectl -n my-ns delete pod,svc --all # my-ns ๋ค์์คํ์ด์ค ๋ด ๋ชจ๋ ํ๋์ ์๋น์ค ์ญ์
# awk pattern1 ๋๋ pattern2์ ๋งค์นญ๋๋ ๋ชจ๋ ํ๋ ์ญ์
kubectl get pods -n mynamespace --no-headers= true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod
์คํ ์ค์ธ ํ๋์ ์ํธ ์์ฉ kubectl logs my-pod # ํ๋ ๋ก๊ทธ ๋คํ (stdout)
kubectl logs -l name = myLabel # name์ด myLabel์ธ ํ๋ ๋ก๊ทธ ๋คํ (stdout)
kubectl logs my-pod --previous # ์ปจํ
์ด๋์ ์ด์ ์ธ์คํด์ค ์์ฑ์ ๋ํ ํ๋ ๋ก๊ทธ ๋คํ (stdout)
kubectl logs my-pod -c my-container # ํ๋ ๋ก๊ทธ ๋คํ (stdout, ๋ฉํฐ-์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl logs -l name = myLabel -c my-container # name์ด myLabel์ธ ํ๋ ๋ก๊ทธ ๋คํ (stdout)
kubectl logs my-pod -c my-container --previous # ์ปจํ
์ด๋์ ์ด์ ์ธ์คํด์ค ์์ฑ์ ๋ํ ํ๋ ๋ก๊ทธ ๋คํ (stdout, ๋ฉํฐ-์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl logs -f my-pod # ์ค์๊ฐ ์คํธ๋ฆผ ํ๋ ๋ก๊ทธ(stdout)
kubectl logs -f my-pod -c my-container # ์ค์๊ฐ ์คํธ๋ฆผ ํ๋ ๋ก๊ทธ(stdout, ๋ฉํฐ-์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl logs -f -l name = myLabel --all-containers # name์ด myLabel์ธ ๋ชจ๋ ํ๋์ ๋ก๊ทธ ์คํธ๋ฆฌ๋ฐ (stdout)
kubectl run -i --tty busybox --image= busybox:1.28 -- sh # ๋ํํ ์
ธ๋ก ํ๋๋ฅผ ์คํ
kubectl run nginx --image= nginx -n mynamespace # mynamespace ๋ค์์คํ์ด์ค์์ nginx ํ๋ 1๊ฐ ์คํ
kubectl run nginx --image= nginx --dry-run= client -o yaml > pod.yaml
# nginx ํ๋์ ๋ํ spec์ ์์ฑํ๊ณ , pod.yaml์ด๋ผ๋ ํ์ผ์ ํด๋น ๋ด์ฉ์ ๊ธฐ๋กํ๋ค.
kubectl attach my-pod -i # ์คํ ์ค์ธ ์ปจํ
์ด๋์ ์ฐ๊ฒฐ
kubectl port-forward my-pod 5000:6000 # ๋ก์ปฌ ๋จธ์ ์ 5000๋ฒ ํฌํธ๋ฅผ ๋ฆฌ์ค๋ํ๊ณ , my-pod์ 6000๋ฒ ํฌํธ๋ก ์ ๋ฌ
kubectl exec my-pod -- ls / # ๊ธฐ์กด ํ๋์์ ๋ช
๋ น ์คํ(ํ ๊ฐ ์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl exec --stdin --tty my-pod -- /bin/sh # ์คํ ์ค์ธ ํ๋๋ก ๋ํํ ์
ธ ์ก์ธ์ค(1 ์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl exec my-pod -c my-container -- ls / # ๊ธฐ์กด ํ๋์์ ๋ช
๋ น ์คํ(๋ฉํฐ-์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl top pod POD_NAME --containers # ํน์ ํ๋์ ํด๋น ์ปจํ
์ด๋์ ๋ํ ๋ฉํธ๋ฆญ ํ์
kubectl top pod POD_NAME --sort-by= cpu # ์ง์ ํ ํ๋์ ๋ํ ๋ฉํธ๋ฆญ์ ํ์ํ๊ณ 'cpu' ๋๋ 'memory'๋ณ๋ก ์ ๋ ฌ
์ปจํ
์ด๋๋ก/์ปจํ
์ด๋์์ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ ๋ณต์ฌ kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # ๋ก์ปฌ ๋๋ ํ ๋ฆฌ /tmp/foo_dir ๋ฅผ ํ์ฌ ๋ค์์คํ์ด์ค์ my-pod ํ๋ ์์ /tmp/bar_dir ๋ก ๋ณต์ฌ
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # ๋ก์ปฌ ํ์ผ /tmp/foo ๋ฅผ my-pod ํ๋์ my-container ์ปจํ
์ด๋ ์์ /tmp/bar ๋ก ๋ณต์ฌ
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # ๋ก์ปฌ ํ์ผ /tmp/foo ๋ฅผ my-namespace ๋ค์์คํ์ด์ค์ my-pod ํ๋ ์์ /tmp/bar ๋ก ๋ณต์ฌ
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # my-namespace ๋ค์์คํ์ด์ค์ my-pod ํ๋ ์์ ํ์ผ /tmp/foo ๋ฅผ ๋ก์ปฌ์ /tmp/bar ๋ก ๋ณต์ฌ
์ฐธ๊ณ : kubectl cp
๋ช
๋ น์ ์ฌ์ฉํ๋ ค๋ฉด ์ปจํ
์ด๋ ์ด๋ฏธ์ง์ 'tar' ๋ฐ์ด๋๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ด์ผ ํ๋ค. 'tar'๊ฐ ์์ผ๋ฉด, kubectl cp
๋ ์คํจํ ๊ฒ์ด๋ค.
์ฌ๋ณผ๋ฆญ ๋งํฌ, ์์ผ๋์นด๋ ํ์ฅ, ํ์ผ ๋ชจ๋ ๋ณด์กด๊ณผ ๊ฐ์ ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด์๋ kubectl exec
๋ฅผ ๊ณ ๋ คํด ๋ณผ ์ ์๋ค.tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # ๋ก์ปฌ ํ์ผ /tmp/foo ๋ฅผ my-namespace ๋ค์์คํ์ด์ค์ my-pod ํ๋ ์์ /tmp/bar ๋ก ๋ณต์ฌ
kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # my-namespace ๋ค์์คํ์ด์ค์ my-pod ํ๋ ์์ ํ์ผ /tmp/foo ๋ฅผ ๋ก์ปฌ์ /tmp/bar ๋ก ๋ณต์ฌ
๋ํ๋ก์ด๋จผํธ, ์๋น์ค์ ์ํธ ์์ฉ kubectl logs deploy/my-deployment # ๋ํ๋ก์ด๋จผํธ์ ๋ํ ํ๋ ๋ก๊ทธ ๋คํ (๋จ์ผ-์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl logs deploy/my-deployment -c my-container # ๋ํ๋ก์ด๋จผํธ์ ๋ํ ํ๋ ๋ก๊ทธ ๋คํ (๋ฉํฐ-์ปจํ
์ด๋ ๊ฒฝ์ฐ)
kubectl port-forward svc/my-service 5000 # ๋ก์ปฌ ๋จธ์ ์ 5000๋ฒ ํฌํธ๋ฅผ ๋ฆฌ์ค๋ํ๊ณ , my-service์ ๋์ผํ(5000๋ฒ) ํฌํธ๋ก ์ ๋ฌ
kubectl port-forward svc/my-service 5000:my-service-port # ๋ก์ปฌ ๋จธ์ ์ 5000๋ฒ ํฌํธ๋ฅผ ๋ฆฌ์ค๋ํ๊ณ , my-service์ <my-service-port> ๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํฌํธ๋ก ์ ๋ฌ
kubectl port-forward deploy/my-deployment 5000:6000 # ๋ก์ปฌ ๋จธ์ ์ 5000๋ฒ ํฌํธ๋ฅผ ๋ฆฌ์ค๋ํ๊ณ , <my-deployment> ์ ์ํด ์์ฑ๋ ํ๋์ 6000๋ฒ ํฌํธ๋ก ์ ๋ฌ
kubectl exec deploy/my-deployment -- ls # <my-deployment> ์ ์ํด ์์ฑ๋ ์ฒซ๋ฒ์งธ ํ๋์ ์ฒซ๋ฒ์งธ ์ปจํ
์ด๋์ ๋ช
๋ น์ด ์คํ (๋จ์ผ- ๋๋ ๋ค์ค-์ปจํ
์ด๋ ๊ฒฝ์ฐ)
๋
ธ๋, ํด๋ฌ์คํฐ์ ์ํธ ์์ฉ kubectl cordon my-node # my-node๋ฅผ ์ค์ผ์ค๋งํ ์ ์๋๋ก ํ๊ธฐ
kubectl drain my-node # ์ ์ง ๋ณด์๋ฅผ ์ํด์ my-node๋ฅผ ์ค๋น ์ํ๋ก ๋น์
kubectl uncordon my-node # my-node๋ฅผ ์ค์ผ์ค๋งํ ์ ์๋๋ก ํ๊ธฐ
kubectl top node my-node # ์ฃผ์ด์ง ๋
ธ๋์ ๋ํ ๋ฉํธ๋ฆญ ํ์
kubectl cluster-info # ๋ง์คํฐ ๋ฐ ์๋น์ค์ ์ฃผ์ ํ์
kubectl cluster-info dump # ํ์ฌ ํด๋ฌ์คํฐ ์ํ๋ฅผ stdout์ผ๋ก ๋คํ
kubectl cluster-info dump --output-directory= /path/to/cluster-state # ํ์ฌ ํด๋ฌ์คํฐ ์ํ๋ฅผ /path/to/cluster-state์ผ๋ก ๋คํ
# ํ์ฌ ๋
ธ๋์ ์กด์ฌํ๊ณ ์๋ ํ
์ธํธ(taint)๋ค์ ํ์ธ
kubectl get nodes -o= 'custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect'
# ์ด๋ฏธ ์กด์ฌํ๊ณ ์๋ key์ effect๋ฅผ ๊ฐ๋ ํ
์ธํธ์ ๊ฒฝ์ฐ, ์ง์ ํ ๊ฐ์ผ๋ก ๋์ฒด
kubectl taint nodes foo dedicated = special-user:NoSchedule
๋ฆฌ์์ค ํ์
๋จ์ถ๋ช
, API ๊ทธ๋ฃน ๊ณผ ํจ๊ป ์ง์๋๋ ๋ชจ๋ ๋ฆฌ์์ค ์ ํ๋ค, ๊ทธ๊ฒ๋ค์ ๋ค์์คํ์ด์ค ์ ์ข
๋ฅ(Kind) ๋ฅผ ๋์ด:
API ๋ฆฌ์์ค๋ฅผ ํ์ํ๊ธฐ ์ํ ๋ค๋ฅธ ์์
:
kubectl api-resources --namespaced= true # ๋ค์์คํ์ด์ค๋ฅผ ๊ฐ์ง๋ ๋ชจ๋ ๋ฆฌ์์ค
kubectl api-resources --namespaced= false # ๋ค์์คํ์ด์ค๋ฅผ ๊ฐ์ง์ง ์๋ ๋ชจ๋ ๋ฆฌ์์ค
kubectl api-resources -o name # ๋ชจ๋ ๋ฆฌ์์ค์ ๋จ์ํ (๋ฆฌ์์ค ์ด๋ฆ๋ง) ์ถ๋ ฅ
kubectl api-resources -o wide # ๋ชจ๋ ๋ฆฌ์์ค์ ํ์ฅ๋ ("wide"๋ก ์๋ ค์ง) ์ถ๋ ฅ
kubectl api-resources --verbs= list,get # "list"์ "get"์ ์์ฒญ ๋์ฌ๋ฅผ ์ง์ํ๋ ๋ชจ๋ ๋ฆฌ์์ค ์ถ๋ ฅ
kubectl api-resources --api-group= extensions # "extensions" API ๊ทธ๋ฃน์ ๋ชจ๋ ๋ฆฌ์์ค
์ถ๋ ฅ ํ์ ์ง์ ํน์ ํ์์ผ๋ก ํฐ๋ฏธ๋ ์ฐฝ์ ์ธ๋ถ ์ฌํญ์ ์ถ๋ ฅํ๋ ค๋ฉด, ์ง์๋๋ kubectl
๋ช
๋ น์ -o
(๋๋ --output
) ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.
์ถ๋ ฅ ํ์ ์ธ๋ถ ์ฌํญ -o=custom-columns=<๋ช
์ธ>
์ผํ๋ก ๊ตฌ๋ถ๋ ์ฌ์ฉ์ ์ ์ ์ด ๋ชฉ๋ก์ ์ฌ์ฉํ์ฌ ํ
์ด๋ธ ์ถ๋ ฅ -o=custom-columns-file=<ํ์ผ๋ช
>
<ํ์ผ๋ช
>
ํ์ผ์์ ์ฌ์ฉ์ ์ ์ ์ด ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ํ
์ด๋ธ ์ถ๋ ฅ-o=json
JSON ํ์์ API ์ค๋ธ์ ํธ ์ถ๋ ฅ -o=jsonpath=<ํ
ํ๋ฆฟ>
jsonpath ํํ์์ ์ ์๋ ํ๋ ์ถ๋ ฅ-o=jsonpath-file=<ํ์ผ๋ช
>
<ํ์ผ๋ช
> ํ์ผ์์ jsonpath ํํ์์ ์ ์๋ ํ๋ ์ถ๋ ฅ -o=name
๋ฆฌ์์ค ๋ช
๋ง ์ถ๋ ฅํ๊ณ ๊ทธ ์ธ์๋ ์ถ๋ ฅํ์ง ์์ -o=wide
์ถ๊ฐ ์ ๋ณด๊ฐ ํฌํจ๋ ์ผ๋ฐ-ํ
์คํธ ํ์์ผ๋ก ์ถ๋ ฅํ๊ณ , ํ๋์ ๊ฒฝ์ฐ ๋
ธ๋ ๋ช
์ด ํฌํจ -o=yaml
YAML ํ์์ API ์ค๋ธ์ ํธ ์ถ๋ ฅ
-o=custom-columns
์ ์ฌ์ฉ ์์:
# ํด๋ฌ์คํฐ์์ ์คํ ์ค์ธ ๋ชจ๋ ์ด๋ฏธ์ง
kubectl get pods -A -o= custom-columns= 'DATA:spec.containers[*].image'
# `default` ๋ค์์คํ์ด์ค์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํ๋๋ณ๋ก ๊ทธ๋ฃน์ง์ด ์ถ๋ ฅ
kubectl get pods --namespace default --output= custom-columns= "NAME:.metadata.name,IMAGE:.spec.containers[*].image"
# "registry.k8s.io/coredns:1.6.2" ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ด๋ฏธ์ง
kubectl get pods -A -o= custom-columns= 'DATA:spec.containers[?(@.image!="registry.k8s.io/coredns:1.6.2")].image'
# ์ด๋ฆ์ ๊ด๊ณ์์ด ๋ฉํ๋ฐ์ดํฐ ์๋์ ๋ชจ๋ ํ๋
kubectl get pods -A -o= custom-columns= 'DATA:metadata.*'
๋ ๋ง์ ์์ ๋ kubectl ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
Kubectl ์ถ๋ ฅ ๋ก๊ทธ ์์ธ ๋ ๋ฒจ(verbosity)๊ณผ ๋๋ฒ๊น
Kubectl ๋ก๊ทธ ์์ธ ๋ ๋ฒจ(verbosity)์ -v
๋๋--v
ํ๋๊ทธ์ ๋ก๊ทธ ๋ ๋ฒจ์ ๋ํ๋ด๋ ์ ์๋ก ์ ์ด๋๋ค. ์ผ๋ฐ์ ์ธ ์ฟ ๋ฒ๋คํฐ์ค ๋ก๊น
๊ท์น๊ณผ ๊ด๋ จ ๋ก๊ทธ ๋ ๋ฒจ์ด ์ฌ๊ธฐ ์ ์ค๋ช
๋์ด ์๋ค.
๋ก๊ทธ ๋ ๋ฒจ ์ธ๋ถ ์ฌํญ --v=0
์ผ๋ฐ์ ์ผ๋ก ํด๋ฌ์คํฐ ์ด์์(operator)์๊ฒ ํญ์ ๋ณด์ฌ์ง๊ฒ ํ๊ธฐ์๋ ์ ์ฉํจ. --v=1
์์ธํ ์ ๋ณด๋ฅผ ์ํ์ง ์๋ ๊ฒฝ์ฐ, ์ ์ ํ ๊ธฐ๋ณธ ๋ก๊ทธ ์์ค. --v=2
์๋น์ค์ ์์คํ
์ ์ค์ํ ๋ณํ์ ๊ด๋ จ์ด์๋ ์ค์ํ ๋ก๊ทธ ๋ฉ์์ง์ ๋ํ ์ ์ฉํ ์ ์ ์ํ ์ ๋ณด. ์ด๋ ๋๋ถ๋ถ์ ์์คํ
์์ ๊ถ์ฅ๋๋ ๊ธฐ๋ณธ ๋ก๊ทธ ์์ค์ด๋ค. --v=3
๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ํ์ฅ ์ ๋ณด. --v=4
๋๋ฒ๊ทธ ์์ค ์์ธํ. --v=5
ํธ๋ ์ด์ค ์์ค ์์ธํ. --v=6
์์ฒญํ ๋ฆฌ์์ค๋ฅผ ํ์. --v=7
HTTP ์์ฒญ ํค๋๋ฅผ ํ์. --v=8
HTTP ์์ฒญ ๋ด์ฉ์ ํ์. --v=9
๋ด์ฉ์ ์๋ผ ๋ด์ง ์๊ณ HTTP ์์ฒญ ๋ด์ฉ์ ํ์.
๋ค์ ๋ด์ฉ 10.2 - kubectl ์๋์์ค kubectl์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ฅผ ์ ์ดํ๋ค.
์์ธํ ์ ๋ณด๋ kubectl ๊ฐ์ ๋ฅผ ํ์ธํ๋ค.
kubectl [flags]
์ต์
--add-dir-header true์ธ ๊ฒฝ์ฐ, ๋ก๊ทธ ๋ฉ์์ง์ ํค๋์ ํ์ผ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค. --alsologtostderr ํ์ค ์๋ฌ์ ํ์ผ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ค. --as string ์์
์ ์ํํ ์ฌ์ฉ์ ์ด๋ฆ --as-group stringArray ์์
์ ์ํํ ๊ทธ๋ฃน. ์ด ํ๋๊ทธ๋ฅผ ๋ฐ๋ณตํด์ ์ฌ๋ฌ ๊ทธ๋ฃน์ ์ง์ ํ ์ ์๋ค. --azure-container-registry-config string Azure ์ปจํ
์ด๋ ๋ ์ง์คํธ๋ฆฌ ๊ตฌ์ฑ ์ ๋ณด๊ฐ ํฌํจ๋ ํ์ผ์ ๊ฒฝ๋ก์ด๋ค. --cache-dir string ๊ธฐ๋ณธ๊ฐ: "$HOME/.kube/cache" ๊ธฐ๋ณธ ์บ์ ๋๋ ํฐ๋ฆฌ --certificate-authority string ์ธ์ฆ ๊ธฐ๊ด์ ์ธ์ฆ์์ ๋ํ ํ์ผ ๊ฒฝ๋ก --client-certificate string TLS์ฉ ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ ํ์ผ ๊ฒฝ๋ก --client-key string TLS์ฉ ํด๋ผ์ด์ธํธ ํค์ ํ์ผ ๊ฒฝ๋ก --cloud-provider-gce-l7lb-src-cidrs cidrs ๊ธฐ๋ณธ๊ฐ: 130.211.0.0/22,35.191.0.0/16 L7 LB ํธ๋ํฝ ํ๋ก์ ๋ฐ ์ํ ํ์ธ์ ์ํด GCE ๋ฐฉํ๋ฒฝ์์ ์คํ๋ CIDR --cloud-provider-gce-lb-src-cidrs cidrs ๊ธฐ๋ณธ๊ฐ: 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16 L4 LB ํธ๋ํฝ ํ๋ก์ ๋ฐ ์ํ ํ์ธ์ ์ํด GCE ๋ฐฉํ๋ฒฝ์์ ์คํ๋ CIDR --cluster string ์ฌ์ฉํ kubeconfig ํด๋ฌ์คํฐ์ ์ด๋ฆ --context string ์ฌ์ฉํ kubeconfig ์ฝํ
์คํธ์ ์ด๋ฆ --default-not-ready-toleration-seconds int ๊ธฐ๋ณธ๊ฐ: 300 ์์ง ํจ๋ฌ๋ ์ด์
(toleration)์ด ์๋ ๋ชจ๋ ํ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๊ฐ๋๋ notReady:NoExecute์ ๋ํ ํจ๋ฌ๋ ์ด์
์ tolerationSeconds๋ฅผ ๋ํ๋ธ๋ค. --default-unreachable-toleration-seconds int ๊ธฐ๋ณธ๊ฐ: 300 ์์ง ํจ๋ฌ๋ ์ด์
์ด ์์ด์ ๊ธฐ๋ณธ์ธ unreachable:NoExecute๊ฐ ์ถ๊ฐ๋ ๋ชจ๋ ํ๋์ ๋ํ ํจ๋ฌ๋ ์ด์
์ tolerationSeconds๋ฅผ ๋ํ๋ธ๋ค. -h, --help kubectl์ ๋ํ ๋์๋ง --insecure-skip-tls-verify true์ธ ๊ฒฝ์ฐ, ์๋ฒ ์ธ์ฆ์์ ์ ํจ์ฑ์ ํ์ธํ์ง ์๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์์ HTTPS ์ฐ๊ฒฐ์ด ์์ ํ์ง ์๊ฒ ๋๋ค. --kubeconfig string CLI ์์ฒญ์ ์ฌ์ฉํ kubeconfig ํ์ผ์ ๊ฒฝ๋ก์ด๋ค. --log-backtrace-at traceLocation ๊ธฐ๋ณธ๊ฐ: :0 ๋ก๊น
์ด file:N์ ๋๋ฌํ์ ๋ ์คํ ํธ๋ ์ด์ค๋ฅผ ๋ด๋ณด๋ธ๋ค. --log-dir string ๋น์ด ์์ง ์์ผ๋ฉด, ์ด ๋๋ ํฐ๋ฆฌ์ ๋ก๊ทธ ํ์ผ์ ์์ฑํ๋ค. --log-file string ๋น์ด ์์ง ์์ผ๋ฉด, ์ด ๋ก๊ทธ ํ์ผ์ ์ฌ์ฉํ๋ค. --log-file-max-size uint ๊ธฐ๋ณธ๊ฐ: 1800 ๋ก๊ทธ ํ์ผ์ด ์ปค์ง ์ ์๋ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ ์ํ๋ค. ๋จ์๋ ๋ฉ๊ฐ ๋ฐ์ดํธ์ด๋ค. ๊ฐ์ด 0์ด๋ฉด, ํ์ผ์ ์ต๋ ํฌ๊ธฐ๋ ๋ฌด์ ํ์ด๋ค. --log-flush-frequency duration ๊ธฐ๋ณธ๊ฐ: 5s ๋ก๊ทธ๋ฅผ ๋น์ฐ๋ ๊ฐ๊ฒฉ์ ์ต๋ ์๊ฐ(์ด) --logtostderr ๊ธฐ๋ณธ๊ฐ: true ํ์ผ ๋์ ํ์ค ์๋ฌ์ ๊ธฐ๋ก --match-server-version ํด๋ผ์ด์ธํธ ๋ฒ์ ๊ณผ ์ผ์นํ๋ ์๋ฒ ๋ฒ์ ํ์ -n, --namespace string ์ง์ ๋ ๊ฒฝ์ฐ, ํด๋น ๋ค์์คํ์ด์ค๊ฐ CLI ์์ฒญ์ ๋ฒ์๊ฐ ๋จ --one-output true์ด๋ฉด, ๋ก๊ทธ๋ฅผ ๊ธฐ๋ณธ ์ฌ๊ฐ๋ ์์ค์ผ๋ก๋ง ๊ธฐ๋กํ๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ๊ฐ์ ๋ ๋ฎ์ ์ฌ๊ฐ๋ ์์ค์๋ ๊ธฐ๋กํจ). --password string API ์๋ฒ์ ๋ํ ๊ธฐ๋ณธ ์ธ์ฆ์ ์ํ ๋น๋ฐ๋ฒํธ --profile string ๊ธฐ๋ณธ๊ฐ: "none" ์บก์ฒํ ํ๋กํ์ผ์ ์ด๋ฆ. (none|cpu|heap|goroutine|threadcreate|block|mutex) ์ค ํ๋ --profile-output string ๊ธฐ๋ณธ๊ฐ: "profile.pprof" ํ๋กํ์ผ์ ์ธ ํ์ผ์ ์ด๋ฆ --request-timeout string ๊ธฐ๋ณธ๊ฐ: "0" ๋จ์ผ ์๋ฒ ์์ฒญ์ ํฌ๊ธฐํ๊ธฐ ์ ์ ๋๊ธฐํ๋ ์๊ฐ์ด๋ค. 0์ด ์๋ ๊ฐ์๋ ํด๋น ์๊ฐ ๋จ์(์: 1s, 2m, 3h)๊ฐ ํฌํจ๋์ด์ผ ํ๋ค. ๊ฐ์ด 0์ด๋ฉด ์์ฒญ ์๊ฐ์ด ์ด๊ณผ๋์ง ์๋๋ค. -s, --server string ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ์ ์ฃผ์์ ํฌํธ --skip-headers true์ด๋ฉด, ๋ก๊ทธ ๋ฉ์์ง์์ ํค๋ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. --skip-log-headers true์ด๋ฉด, ๋ก๊ทธ ํ์ผ์ ์ด ๋ ํค๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. --stderrthreshold severity ๊ธฐ๋ณธ๊ฐ: 2 ์ด ์๊ณ๊ฐ ์ด์์ ๋ก๊ทธ๋ ํ์ค ์๋ฌ๋ก ์ด๋ํ๋ค. --tls-server-name string ์๋ฒ ์ธ์ฆ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ฌ์ฉํ ์๋ฒ ์ด๋ฆ. ์ ๊ณต๋์ง ์์ผ๋ฉด, ์๋ฒ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํธ์คํธ ์ด๋ฆ์ด ์ฌ์ฉ๋๋ค. --token string API ์๋ฒ ์ธ์ฆ์ ์ํ ๋ฒ ์ด๋ฌ(Bearer) ํ ํฐ --user string ์ฌ์ฉํ kubeconfig ์ฌ์ฉ์์ ์ด๋ฆ --username string API ์๋ฒ์ ๋ํ ๊ธฐ๋ณธ ์ธ์ฆ์ ์ํ ์ฌ์ฉ์ ์ด๋ฆ -v, --v Level ๋ก๊ทธ ์์ค์ ์์ธํ ์ ๋๋ฅผ ๋ํ๋ด๋ ์ซ์ --version version[=true] ๋ฒ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ณ ์ข
๋ฃ --vmodule moduleSpec ํ์ผ ํํฐ๋ง ๋ก๊น
์ ์ํ ์ผํ๋ก ๊ตฌ๋ถ๋ pattern=N ์ค์ ๋ชฉ๋ก --warnings-as-errors ์๋ฒ์์ ๋ฐ์ ๊ฒฝ๊ณ ๋ฅผ ์ค๋ฅ๋ก ์ฒ๋ฆฌํ๊ณ 0์ด ์๋ ์ข
๋ฃ ์ฝ๋๋ก ์ข
๋ฃ
ํ๊ฒฝ ๋ณ์ tr>
KUBECONFIG kubectl ๊ตฌ์ฑ ("kubeconfig") ํ์ผ ๊ฒฝ๋ก. ๊ธฐ๋ณธ: "$HOME/.kube/config" KUBECTL_COMMAND_HEADERS false๋ก ์ค์ ํ๋ฉด, ํธ์ถ๋ kubectl ๋ช
๋ น(์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ v1.22 ์ด์)์ ์์ธํ ์ค๋ช
ํ๋ ์ถ๊ฐ HTTP ํค๋๋ฅผ ํด์ KUBECTL_EXPLAIN_OPENAPIV3 `kubectl explain` ํธ์ถ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ก์ด OpenAPIv3 ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ์ ํ. ์ฟ ๋ฒ๋คํฐ์ค 1.24 ์ดํ๋ก, OpenAPIV3 ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ ๋์ด์๋ค.
๋ ๋ณด๊ธฐ 10.3 - JSONPath ์ง์ Kubectl์ JSONPath ํ
ํ๋ฆฟ์ ์ง์ํ๋ค.
JSONPath ํ
ํ๋ฆฟ์ ์ค๊ดํธ {}๋ก ๋๋ฌ์ธ์ธ JSONPath ํํ์์ผ๋ก ๊ตฌ์ฑ๋๋ค.
Kubectl์ JSONPath ํํ์์ ์ฌ์ฉํ์ฌ JSON ์ค๋ธ์ ํธ์ ํน์ ํ๋๋ฅผ ํํฐ๋งํ๊ณ ์ถ๋ ฅ ํ์์ ์ง์ ํ๋ค.
์๋ณธ JSONPath ํ
ํ๋ฆฟ ๊ตฌ๋ฌธ ์ธ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๊ณผ ๊ตฌ๋ฌธ์ด ์ ํจํ๋ค.
ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ JSONPath ํํ์ ๋ด๋ถ์ ํ
์คํธ๋ฅผ ์ธ์ฉํ๋ค. ๋ชฉ๋ก์ ๋ฐ๋ณตํ๋ ค๋ฉด range
, end
์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค. ๋ชฉ๋ก์์ ๋ค๋ก ์ด๋ํ๋ ค๋ฉด negative slice ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค. negative ์ธ๋ฑ์ค๋ ๋ชฉ๋ก์ "์ํ(wrap around)" ํ์ง ์์ผ๋ฉฐ, -index + listLength >= 0
์ธ ํ ์ ํจํ๋ค. JSON ์
๋ ฅ ์ ๋ค์๊ณผ ๊ฐ๋ค.
{
"kind" : "List" ,
"items" :[
{
"kind" :"None" ,
"metadata" :{"name" :"127.0.0.1" },
"status" :{
"capacity" :{"cpu" :"4" },
"addresses" :[{"type" : "LegacyHostIP" , "address" :"127.0.0.1" }]
}
},
{
"kind" :"None" ,
"metadata" :{"name" :"127.0.0.2" },
"status" :{
"capacity" :{"cpu" :"8" },
"addresses" :[
{"type" : "LegacyHostIP" , "address" :"127.0.0.2" },
{"type" : "another" , "address" :"127.0.0.3" }
]
}
}
],
"users" :[
{
"name" : "myself" ,
"user" : {}
},
{
"name" : "e2e" ,
"user" : {"username" : "admin" , "password" : "secret" }
}
]
}
Function Description Example Result text
์ผ๋ฐ ํ
์คํธ kind is {.kind}
kind is List
@
ํ์ฌ ์ค๋ธ์ ํธ {@}
์
๋ ฅ๊ณผ ๋์ผ .
or []
์์ ์คํผ๋ ์ดํฐ {.kind}
, {['kind']}
or {['name\.type']}
List
..
์ฌ๊ท ํํฅ(recursive descent) {..name}
127.0.0.1 127.0.0.2 myself e2e
*
์์ผ๋ ์นด๋. ๋ชจ๋ ์ค๋ธ์ ํธ ๊ฐ์ ธ์ค๊ธฐ {.items[*].metadata.name}
[127.0.0.1 127.0.0.2]
[start:end:step]
์๋ ์ฒจ์ ์คํผ๋ ์ดํฐ {.users[0].name}
myself
[,]
์กฐํฉ ์คํผ๋ ์ดํฐ {.items[*]['metadata.name', 'status.capacity']}
127.0.0.1 127.0.0.2 map[cpu:4] map[cpu:8]
?()
ํํฐ {.users[?(@.name=="e2e")].user.password}
secret
range
, end
๋ฐ๋ณต ๋ชฉ๋ก {range .items[*]}[{.metadata.name}, {.status.capacity}] {end}
[127.0.0.1, map[cpu:4]] [127.0.0.2, map[cpu:8]]
''
ํด์๋ ๋ฌธ์์ด ์ธ์ฉ {range .items[*]}{.metadata.name}{'\t'}{end}
127.0.0.1 127.0.0.2
kubectl
๋ฐ JSONPath ํํ์์ ์ฌ์ฉํ๋ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
kubectl get pods -o json
kubectl get pods -o= jsonpath = '{@}'
kubectl get pods -o= jsonpath = '{.items[0]}'
kubectl get pods -o= jsonpath = '{.items[0].metadata.name}'
kubectl get pods -o= jsonpath = "{.items[*]['metadata.name', 'status.capacity']}"
kubectl get pods -o= jsonpath = '{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'
์ฐธ๊ณ : ์๋์ฐ์์ ๊ณต๋ฐฑ์ด ํฌํจ๋ JSONPath ํ
ํ๋ฆฟ์ ํฐ๋ฐ์ดํ(์์ bash์ ํ์๋ ์์๋ฐ์ดํ๊ฐ ์๋)๋ก ๋ฌถ์ด์ผ ํ๋ค. ์ฆ, ํ
ํ๋ฆฟ์ ๋ชจ๋ ๋ฌธ์ ์ฃผ๋ณ์ ์์๋ฐ์ดํ ๋๋ ์ด์ค์ผ์ดํ๋ ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.startTime}{'\n'}{end}"
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{\" \t\"}{.status.startTime}{\" \n\"}{end}"
์ฐธ๊ณ : JSONPath ์ ๊ท์์ ์ง์๋์ง ์๋๋ค. ์ ๊ท ํํ์์ ์ด์ฉํด ๋งค์นํ๋ ค๋ฉด jq
์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
# kubectl์ JSONPath ์ถ๋ ฅ์ ๋ํ ์ ๊ท ํํ์์ ์ง์ํ์ง ์๋๋ค.
# ๋ค์ ์ปค๋งจ๋๋ ์๋ํ์ง ์๋๋ค.
kubectl get pods -o jsonpath = '{.items[?(@.metadata.name=~/^test$/)].metadata.name}'
# ๋ค์ ์ปค๋งจ๋๋ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค.
kubectl get pods -o json | jq -r '.items[] | select(.metadata.name | test("test-")).spec.containers[].image'
10.4 - ๋์ปค ์ฌ์ฉ์๋ฅผ ์ํ kubectl ๋น์ ์ ์ฟ ๋ฒ๋คํฐ์ค ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ์ธ kubectl
์ ์ฌ์ฉํ์ฌ API ์๋ฒ์ ์ํธ ์์ฉํ ์ ์๋ค. ๋ง์ฝ ๋์ปค ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ์ ์ต์ํ๋ค๋ฉด kubectl
์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋จํ๋ค. ๋ค์ ์น์
์์๋ ๋์ปค์ ํ์ ๋ช
๋ น์ ๋ณด์ฌ์ฃผ๊ณ kubectl
๊ณผ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์ค๋ช
ํ๋ค.
docker run nginx ๋ํ๋ก์ด๋จผํธ(Deployment)๋ฅผ ์คํํ๊ณ ํด๋น ๋ํ๋ก์ด๋จผํธ๋ฅผ ๋
ธ์ถ์ํค๋ ค๋ฉด, kubectl create deployment ์ ์ฐธ๊ณ ํ๋ค.
docker:
docker run -d --restart= always -e DOMAIN = cluster --name nginx-app -p 80:80 nginx
55c103fa129692154a7652490236fee9be47d70a8dd562281ae7d2f9a339a6db
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" 9 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp nginx-app
kubectl:
# nginx ์คํํ๋ ํ๋๋ฅผ ์์ํ๋ค
kubectl create deployment --image= nginx nginx-app
deployment.apps/nginx-app created
# nginx-app ์ env๋ฅผ ์ถ๊ฐํ๋ค
kubectl set env deployment/nginx-app DOMAIN = cluster
deployment.apps/nginx-app env updated
์ฐธ๊ณ : kubectl
์ปค๋งจ๋๋ ์์ฑ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋ ๋ฆฌ์์ค์ ์ ํ๊ณผ ์ด๋ฆ์ ์ถ๋ ฅํ๋ฏ๋ก, ์ด๋ฅผ ํ์ ์ปค๋งจ๋์ ์ฌ์ฉํ ์ ์๋ค. ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋ ํ์๋ ์๋ก์ด ์๋น์ค๋ฅผ ๋
ธ์ถํ ์ ์๋ค.# ์๋น์ค๋ฅผ ํตํด ํฌํธ๋ฅผ ๋
ธ์ถ
kubectl expose deployment nginx-app --port= 80 --name= nginx-http
service "nginx-http" exposed
kubectl์ ์ฌ์ฉํ๋ฉด, N๊ฐ์ ํ๋๊ฐ nginx๋ฅผ ์คํํ๋๋ก ๋ํ๋ก์ด๋จผํธ ๋ฅผ ์์ฑํ ์ ์๋ค. ์ฌ๊ธฐ์ N์ ์คํ์ ๋ช
์๋ ๋ ํ๋ฆฌ์นด ์์ด๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ 1์ด๋ค. ๋ํ ํ๋์ ๋ ์ด๋ธ๊ณผ ์
๋ญํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์์ฑํ ์ ์๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ฌ์คํฐ ๋ด ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๊ทผํ๊ธฐ ์ํด ์๋น์ค ์ฌ์ฉํ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ์ง๋ docker run -d ...
์ ๋น์ทํ๊ฒ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ๋๋ค. ํฌ๊ทธ๋ผ์ด๋๋ก ์คํํ๋ ค๋ฉด kubectl run
์ ์ด์ฉํ์ฌ ํ๋๋ฅผ ์์ฑํ๋ค.
kubectl run [ -i] [ --tty] --attach <name> --image= <image>
docker run ...
๊ณผ ๋ฌ๋ฆฌ --attach
๋ฅผ ์ง์ ํ๋ฉด ํ์ค ์
๋ ฅ(stdin)
, ํ์ค ์ถ๋ ฅ(stdout)
๋ฐ ํ์ค ์ค๋ฅ(stderr)
๊ฐ ๋ถ๋๋ค. ์ฐ๊ฒฐ๋(attached) ์คํธ๋ฆผ์ ์ ์ดํ ์ ์๋ค(docker -a ...
).
ํด๋น ์ปจํ
์ด๋์์ ๋ถ๋ฆฌ(detach)ํ๋ ค๋ฉด ์ด์ค์ผ์ดํ ์ํ์ค(escape sequence) Ctrl+P๋ฅผ ์
๋ ฅํ ๋ค์ Ctrl+Q๋ฅผ ์
๋ ฅํ๋ค.
docker ps ํ์ฌ ์คํ ์ค์ธ ๋ชฉ๋ก์ ๋ณด๊ธฐ ์ํด์๋ kubectl get ์ ์ฐธ๊ณ ํ๋ค.
docker:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14636241935f ubuntu:16.04 "echo test" 5 seconds ago Exited (0) 5 seconds ago cocky_fermi
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-app
kubectl:
NAME READY STATUS RESTARTS AGE
nginx-app-8df569cb7-4gd89 1/1 Running 0 3m
ubuntu 0/1 Completed 0 20s
docker attach ์ด๋ฏธ ์คํ ์ค์ธ ์ปจํ
์ด๋์ ์ฐ๊ฒฐํ๋ ค๋ฉด kubectl attach ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp nginx-app
docker attach 55c103fa1296
...
kubectl:
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl attach -it nginx-app-5jyvm
...
์ปจํ
์ด๋์์ ๋ถ๋ฆฌํ๋ ค๋ฉด ์ด์ค์ผ์ดํ ์ํ์ค Ctrl+P๋ฅผ ์
๋ ฅํ ๋ค์ Ctrl+Q๋ฅผ ์
๋ ฅํ๋ค.
docker exec ์ปจํ
์ด๋์์ ์ปค๋งจ๋๋ฅผ ์คํํ๋ ค๋ฉด kubectl exec ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c103fa1296 nginx "nginx -g 'daemon ofโฆ" 6 minutes ago Up 6 minutes 0.0.0.0:80->80/tcp nginx-app
docker exec 55c103fa1296 cat /etc/hostname
55c103fa1296
kubectl:
NAME READY STATUS RESTARTS AGE
nginx-app-5jyvm 1/1 Running 0 10m
kubectl exec nginx-app-5jyvm -- cat /etc/hostname
nginx-app-5jyvm
๋ํํ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ค.
docker:
docker exec -ti 55c103fa1296 /bin/sh
# exit
kubectl:
kubectl exec -ti nginx-app-5jyvm -- /bin/sh
# exit
์์ธํ ๋ด์ฉ์ ์คํ ์ค์ธ ์ปจํ
์ด๋์ ์
ธ ์ป๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker logs ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ํ์ค ์
๋ ฅ(stdout)/ํ์ค ์ค๋ฅ(stderr)๋ฅผ ์ํํ๋ ค๋ฉด kubectl logs ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
192.168.9.1 - - [14/Jul/2015:01:04:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
192.168.9.1 - - [14/Jul/2015:01:04:03 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
kubectl:
kubectl logs -f nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
ํ๋์ ์ปจํ
์ด๋์๋ ๊ทผ์ํ ์ฐจ์ด๊ฐ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋๋ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋์ด๋ ์ข
๋ฃ๋์ง ์๋๋ค. ๋์ ํ๋๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํ๋ค. ์ด๋ ๋์ปค์ ์คํ ์ต์
์ธ --restart=always
์ ์ ์ฌํ์ง๋ง, ํ ๊ฐ์ง ํฐ ์ฐจ์ด์ ์ด ์๋ค. ๋์ปค์์๋ ํ๋ก์ธ์ค์ ๊ฐ ํธ์ถ์ ๋ํ ์ถ๋ ฅ์ด ์ฐ๊ฒฐ๋์ง๋ง, ์ฟ ๋ฒ๋คํฐ์ค์ ๊ฒฝ์ฐ ๊ฐ ํธ์ถ์ ๋ณ๊ฐ๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์ ์ด์ ์คํ์ ์ถ๋ ฅ ๋ด์ฉ์ ๋ณด๋ ค๋ฉด ๋ค์์ ์ํํ๋ค.
kubectl logs --previous nginx-app-zibvs
10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
์์ธํ ์ ๋ณด๋ ๋ก๊น
์ํคํ
์ฒ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker stop ๊ณผ docker rm ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค์งํ๊ณ ์ญ์ ํ๋ ค๋ฉด kubectl delete ์ ์ฐธ๊ณ ํ๋ค.
docker:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9ec34d98787 nginx "nginx -g 'daemon of" 22 hours ago Up 22 hours 0.0.0.0:80->80/tcp, 443/tcp nginx-app
a9ec34d98787
a9ec34d98787
kubectl:
kubectl get deployment nginx-app
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 1/1 1 1 2m
kubectl get po -l app = nginx-app
NAME READY STATUS RESTARTS AGE
nginx-app-2883164633-aklf7 1/1 Running 0 2m
kubectl delete deployment nginx-app
deployment "nginx-app" deleted
kubectl get po -l app = nginx-app
# ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋ค
์ฐธ๊ณ : kubectl์ ์ฌ์ฉํ ๋๋ ํ๋๋ฅผ ์ง์ ์ญ์ ํ์ง ์๋๋ค. ๋จผ์ ํ๋๋ฅผ ์์ ํ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ญ์ ํด์ผ ํ๋ค. ๋ง์ฝ ํ๋๋ฅผ ์ง์ ์ญ์ ํ๋ฉด ๋ํ๋ก์ด๋จผํธ๊ฐ ํ๋๋ฅผ ์ฌ์์ฑํ ๊ฒ์ด๋ค.docker login kubectl์ docker login
์ ์ง์ ์ ์ธ ์ ์ฌ์ ์ ์๋ค. ํ๋ผ์ด๋น ๋ ์ง์คํธ๋ฆฌ์ ํจ๊ป ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ผ์ด๋น ๋ ์ง์คํธ๋ฆฌ ์ฌ์ฉ ์ ์ฐธ๊ณ ํ๋ค.
docker version ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๋ ค๋ฉด kubectl version ์ ์ฐธ๊ณ ํ๋ค.
docker:
Client version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 0baf609
OS/Arch (server): linux/amd64
kubectl:
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.9+a3d1dfa6f4335", GitCommit:"9b77fed11a9843ce3780f70dd251e92901c43072", GitTreeState:"dirty", BuildDate:"2017-08-29T20:32:58Z", OpenPaasKubernetesVersion:"v1.03.02", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
docker info ํ๊ฒฝ ๋ฐ ์ค์ ์ ๋ํ ์์ธํ ์ ๋ณด๋ kubectl cluster-info ๋ฅผ ์ฐธ๊ณ ํ๋ค.
docker:
Containers: 40
Images: 168
Storage Driver: aufs
Root Dir: /usr/local/google/docker/aufs
Backing Filesystem: extfs
Dirs: 248
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-53-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 12
Total Memory: 31.32 GiB
Name: k8s-is-fun.mtv.corp.google.com
ID: ADUV:GCYR:B3VJ:HMPO:LNPQ:KD5S:YKFQ:76VN:IANZ:7TFV:ZBF4:BYJO
WARNING: No swap limit support
kubectl:
Kubernetes master is running at https://203.0.113.141
KubeDNS is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kube-dns/proxy
kubernetes-dashboard is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy
Grafana is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
Heapster is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
InfluxDB is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy
10.5 - kubectl ์ฌ์ฉ ๊ท์น kubectl
์ ๋ํ ๊ถ์ฅ ์ฌ์ฉ ๊ท์น.
์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์คํฌ๋ฆฝํธ์์ kubectl
์ฌ์ฉ ์คํฌ๋ฆฝํธ์ ์์ ์ ์ธ ์ถ๋ ฅ์ ์ํด์
-o name
, -o json
, -o yaml
, -o go-template
ํน์ -o jsonpath
์ ๊ฐ์ ๋จธ์ ์งํฅ(machine-oriented) ์ถ๋ ฅ ์์ ์ค ํ๋๋ฅผ ์์ฒญํ๋ค.์๋ฅผ ๋ค์ด jobs.v1.batch/myjob
๊ณผ ๊ฐ์ด ์ ์ฒด ๋ฒ์ ์ ์ฌ์ฉํ๋ค. ์ด๋ฅผ ํตํด kubectl
์ด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๋ ๊ธฐ๋ณธ ๋ฒ์ ์ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ค. ๋ฌธ๋งฅ, ์ค์ ๋๋ ๊ธฐํ ์๋ฌต์ ์ํ์ ์์กดํ์ง ์๋๋ค. ์๋ธ๋ฆฌ์์ค kubectl์ get
, patch
, edit
๋ฐ replace
์ ๊ฐ์ ๋ช
๋ น์ด์์
์๋ธ๋ฆฌ์์ค๋ฅผ ์ง์ํ๋ ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํด --subresource
์ํ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ
์๋ธ๋ฆฌ์์ค๋ฅผ ์กฐํํ๊ณ ์
๋ฐ์ดํธํ ์ ์๋ค. ํ์ฌ, status
์ scale
์๋ธ๋ฆฌ์์ค๋ง ์ง์๋๋ค. ์๋ธ๋ฆฌ์์ค์ ๋ํ API ๊ณ์ฝ์ ์ ์ฒด ๋ฆฌ์์ค์ ๋์ผํ๋ค.
status
์๋ธ๋ฆฌ์์ค๋ฅผ ์ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธํด๋,
์ปจํธ๋กค๋ฌ์์ ์๋ธ๋ฆฌ์์ค๋ฅผ ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ๊ฐ์ผ๋ก ์กฐ์ ํ ์ ์๋ค๋ ์ ์ ์ผ๋์ ๋์ด์ผ ํ๋ค. ๋ชจ๋ฒ ์ฌ๋ก kubectl run
kubectl run
์ผ๋ก infrastructure as code๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด์
๋ฒ์ ์ด ๋ช
์๋ ํ๊ทธ๋ก ์ด๋ฏธ์ง๋ฅผ ํ๊ทธํ๊ณ ๊ทธ ํ๊ทธ๋ฅผ ์๋ก์ด ๋ฒ์ ์ผ๋ก ์ด๋ํ์ง ์๋๋ค. ์๋ฅผ ๋ค์ด, :latest
๊ฐ ์๋ :v1234
, v1.2.3
, r03062016-1-4
๋ฅผ ์ฌ์ฉํ๋ค(์์ธํ ์ ๋ณด๋ ๊ตฌ์ฑ ๋ชจ๋ฒ ์ฌ๋ก ๋ฅผ ์ฐธ๊ณ ํ๋ค). ๋ง์ ํ๋ผ๋ฏธํฐ๊ฐ ์ ์ฉ๋ ์ด๋ฏธ์ง๋ฅผ ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ค. ํ์ํ์ง๋ง kubectl run
ํ๋๊ทธ๋ฅผ ํตํด ํํํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ํ์ผ์ ์์ค ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ ๋ฃ์ด์ ์ ํํ๋ค. --dry-run
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ก ์ ์ถํ์ง ์๊ณ ํด๋ฌ์คํฐ๋ก ๋ณด๋ผ ์ค๋ธ์ ํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋ค.
kubectl apply
kubectl apply
๋ฅผ ์ฌ์ฉํด์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ์
๋ฐ์ดํธ ํ ์ ์๋ค. kubectl apply๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ์ ๋ณด๋ Kubectl ์ฑ
์ ์ฐธ๊ณ ํ๋ค.
11 - ์ปดํฌ๋ํธ ๋๊ตฌ 11.1 - ๊ธฐ๋ฅ ๊ฒ์ดํธ ์ด ํ์ด์ง์๋ ๊ด๋ฆฌ์๊ฐ ๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ์ปดํฌ๋ํธ์์ ์ง์ ํ ์ ์๋ ๋ค์ํ
๊ธฐ๋ฅ ๊ฒ์ดํธ์ ๋ํ ๊ฐ์๊ฐ ํฌํจ๋์ด ์๋ค.
๊ธฐ๋ฅ์ ๋จ๊ณ(stage)์ ๋ํ ์ค๋ช
์ ๊ธฐ๋ฅ ๋จ๊ณ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
๊ฐ์ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ์ฟ ๋ฒ๋คํฐ์ค ๊ธฐ๋ฅ์ ์ค๋ช
ํ๋ ์ผ๋ จ์ ํค=๊ฐ ์์ด๋ค.
๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ์ปดํฌ๋ํธ์์ --feature-gates
์ปค๋งจ๋ ๋ผ์ธ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ
์ด๋ฌํ ๊ธฐ๋ฅ์ ์ผ๊ฑฐ๋ ๋ ์ ์๋ค.
๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ์ปดํฌ๋ํธ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ ์งํฉ์
ํ์ฑํ ๋๋ ๋นํ์ฑํํ ์ ์๋ค.
๋ชจ๋ ์ปดํฌ๋ํธ์ ๋ํ ์ ์ฒด ๊ธฐ๋ฅ ๊ฒ์ดํธ ์งํฉ์ ๋ณด๋ ค๋ฉด -h
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
kubelet๊ณผ ๊ฐ์ ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ์ค์ ํ๋ ค๋ฉด,
๊ธฐ๋ฅ ์ ๋ชฉ๋ก์ ์ง์ ๋ --feature-gates
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
--feature-gates= ...,GracefulNodeShutdown= true
๋ค์ ํ๋ ๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ์ปดํฌ๋ํธ์์ ์ค์ ํ ์ ์๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ
์์ฝํ ๊ฒ์ด๋ค.
์ํ ๋๋ ๋ฒ ํ ๊ธฐ๋ฅ์ ์ํ ๊ธฐ๋ฅ ๊ฒ์ดํธ ์ํ ๋๋ ๋ฒ ํ ๋จ๊ณ์ ์๋ ๊ธฐ๋ฅ์ ์ํ ๊ธฐ๋ฅ ๊ฒ์ดํธ ๊ธฐ๋ฅ ๋ํดํธ ๋จ๊ณ ๋์
์ข
๋ฃ APIListChunking
false
์ํ 1.8 1.8 APIListChunking
true
๋ฒ ํ 1.9 APIPriorityAndFairness
false
์ํ 1.18 1.19 APIPriorityAndFairness
true
๋ฒ ํ 1.20 APIResponseCompression
false
์ํ 1.7 1.15 APIResponseCompression
true
๋ฒ ํ 1.16 APISelfSubjectAttributesReview
false
์ํ 1.26 APIServerIdentity
false
์ํ 1.20 1.25 APIServerIdentity
true
๋ฒ ํ 1.26 APIServerTracing
false
์ํ 1.22 AllowInsecureBackendProxy
true
๋ฒ ํ 1.17 AnyVolumeDataSource
false
์ํ 1.18 1.23 AnyVolumeDataSource
true
๋ฒ ํ 1.24 AppArmor
true
๋ฒ ํ 1.4 CPUManagerPolicyAlphaOptions
false
์ํ 1.23 CPUManagerPolicyBetaOptions
true
๋ฒ ํ 1.23 CPUManagerPolicyOptions
false
์ํ 1.22 1.22 CPUManagerPolicyOptions
true
๋ฒ ํ 1.23 CSIMigrationPortworx
false
์ํ 1.23 1.24 CSIMigrationPortworx
false
๋ฒ ํ 1.25 CSIMigrationRBD
false
์ํ 1.23 CSINodeExpandSecret
false
์ํ 1.25 CSIVolumeHealth
false
์ํ 1.21 CrossNamespaceVolumeDataSource
false
์ํ 1.26 ContainerCheckpoint
false
์ํ 1.25 ContextualLogging
false
์ํ 1.24 CustomCPUCFSQuotaPeriod
false
์ํ 1.12 CustomResourceValidationExpressions
false
์ํ 1.23 1.24 CustomResourceValidationExpressions
true
๋ฒ ํ 1.25 DisableCloudProviders
false
์ํ 1.22 DisableKubeletCloudCredentialProviders
false
์ํ 1.23 DownwardAPIHugePages
false
์ํ 1.20 1.20 DownwardAPIHugePages
false
๋ฒ ํ 1.21 1.21 DownwardAPIHugePages
true
๋ฒ ํ 1.22 DynamicResourceAllocation
false
์ํ 1.26 EndpointSliceTerminatingCondition
false
์ํ 1.20 1.21 EndpointSliceTerminatingCondition
true
๋ฒ ํ 1.22 ExpandedDNSConfig
false
์ํ 1.22 ExperimentalHostUserNamespaceDefaulting
false
๋ฒ ํ 1.5 GRPCContainerProbe
false
์ํ 1.23 1.23 GRPCContainerProbe
true
๋ฒ ํ 1.24 GracefulNodeShutdown
false
์ํ 1.20 1.20 GracefulNodeShutdown
true
๋ฒ ํ 1.21 GracefulNodeShutdownBasedOnPodPriority
false
์ํ 1.23 1.23 GracefulNodeShutdownBasedOnPodPriority
true
๋ฒ ํ 1.24 HPAContainerMetrics
false
์ํ 1.20 HPAScaleToZero
false
์ํ 1.16 HonorPVReclaimPolicy
false
์ํ 1.23 InTreePluginAWSUnregister
false
์ํ 1.21 InTreePluginAzureDiskUnregister
false
์ํ 1.21 InTreePluginAzureFileUnregister
false
์ํ 1.21 InTreePluginGCEUnregister
false
์ํ 1.21 InTreePluginOpenStackUnregister
false
์ํ 1.21 InTreePluginPortworxUnregister
false
์ํ 1.23 InTreePluginRBDUnregister
false
์ํ 1.23 InTreePluginvSphereUnregister
false
์ํ 1.21 IPTablesOwnershipCleanup
false
์ํ 1.25 JobMutableNodeSchedulingDirectives
true
๋ฒ ํ 1.23 JobPodFailurePolicy
false
์ํ 1.25 1.25 JobPodFailurePolicy
true
๋ฒ ํ 1.26 JobReadyPods
false
์ํ 1.23 1.23 JobReadyPods
true
๋ฒ ํ 1.24 JobTrackingWithFinalizers
false
์ํ 1.22 1.22 JobTrackingWithFinalizers
false
๋ฒ ํ 1.23 1.24 JobTrackingWithFinalizers
true
๋ฒ ํ 1.25 KMSv2
false
์ํ 1.25 KubeletInUserNamespace
false
์ํ 1.22 KubeletPodResources
false
์ํ 1.13 1.14 KubeletPodResources
true
๋ฒ ํ 1.15 KubeletPodResourcesGetAllocatable
false
์ํ 1.21 1.22 KubeletPodResourcesGetAllocatable
true
๋ฒ ํ 1.23 KubeletTracing
false
์ํ 1.25 LegacyServiceAccountTokenTracking
false
์ํ 1.26 LocalStorageCapacityIsolationFSQuotaMonitoring
false
์ํ 1.15 1.24 LocalStorageCapacityIsolationFSQuotaMonitoring
true
๋ฒ ํ 1.25 LogarithmicScaleDown
false
์ํ 1.21 1.21 LogarithmicScaleDown
true
๋ฒ ํ 1.22 MatchLabelKeysInPodTopologySpread
false
์ํ 1.25 MaxUnavailableStatefulSet
false
์ํ 1.24 MemoryManager
false
์ํ 1.21 1.21 MemoryManager
true
๋ฒ ํ 1.22 MemoryQoS
false
์ํ 1.22 MinDomainsInPodTopologySpread
false
์ํ 1.24 1.24 MinDomainsInPodTopologySpread
false
๋ฒ ํ 1.25 MixedProtocolLBService
false
์ํ 1.20 1.23 MixedProtocolLBService
true
๋ฒ ํ 1.24 MultiCIDRRangeAllocator
false
์ํ 1.25 NetworkPolicyStatus
false
์ํ 1.24 NodeInclusionPolicyInPodTopologySpread
false
์ํ 1.25 NodeOutOfServiceVolumeDetach
false
์ํ 1.24 1.25 NodeOutOfServiceVolumeDetach
true
๋ฒ ํ 1.26 NodeSwap
false
์ํ 1.22 OpenAPIEnums
false
์ํ 1.23 1.23 OpenAPIEnums
true
๋ฒ ํ 1.24 OpenAPIV3
false
์ํ 1.23 1.23 OpenAPIV3
true
๋ฒ ํ 1.24 PDBUnhealthyPodEvictionPolicy
false
์ํ 1.26 PodAndContainerStatsFromCRI
false
์ํ 1.23 PodDeletionCost
false
์ํ 1.21 1.21 PodDeletionCost
true
๋ฒ ํ 1.22 PodDisruptionConditions
false
์ํ 1.25 1.25 PodDisruptionConditions
true
๋ฒ ํ 1.26 PodHasNetworkCondition
false
์ํ 1.25 PodSchedulingReadiness
false
์ํ 1.26 ProbeTerminationGracePeriod
false
์ํ 1.21 1.21 ProbeTerminationGracePeriod
false
๋ฒ ํ 1.22 1.24 ProbeTerminationGracePeriod
true
๋ฒ ํ 1.25 ProcMountType
false
์ํ 1.12 ProxyTerminatingEndpoints
false
์ํ 1.22 1.25 ProxyTerminatingEndpoints
true
๋ฒ ํ 1.26 QOSReserved
false
์ํ 1.11 ReadWriteOncePod
false
์ํ 1.22 RecoverVolumeExpansionFailure
false
์ํ 1.23 RemainingItemCount
false
์ํ 1.15 1.15 RemainingItemCount
true
๋ฒ ํ 1.16 RetroactiveDefaultStorageClass
false
์ํ 1.25 1.25 RetroactiveDefaultStorageClass
true
๋ฒ ํ 1.26 RotateKubeletServerCertificate
false
์ํ 1.7 1.11 RotateKubeletServerCertificate
true
๋ฒ ํ 1.12 SELinuxMountReadWriteOncePod
false
์ํ 1.25 SeccompDefault
false
์ํ 1.22 1.24 SeccompDefault
true
๋ฒ ํ 1.25 ServerSideFieldValidation
false
์ํ 1.23 1.24 ServerSideFieldValidation
true
๋ฒ ํ 1.25 SizeMemoryBackedVolumes
false
์ํ 1.20 1.21 SizeMemoryBackedVolumes
true
๋ฒ ํ 1.22 StatefulSetAutoDeletePVC
false
์ํ 1.22 StatefulSetStartOrdinal
false
์ํ 1.26 StorageVersionAPI
false
์ํ 1.20 StorageVersionHash
false
์ํ 1.14 1.14 StorageVersionHash
true
๋ฒ ํ 1.15 TopologyAwareHints
false
์ํ 1.21 1.22 TopologyAwareHints
false
๋ฒ ํ 1.23 1.23 TopologyAwareHints
true
๋ฒ ํ 1.24 TopologyManager
false
์ํ 1.16 1.17 TopologyManager
true
๋ฒ ํ 1.18 TopologyManagerPolicyAlphaOptions
false
์ํ 1.26 TopologyManagerPolicyBetaOptions
false
๋ฒ ํ 1.26 TopologyManagerPolicyOptions
false
์ํ 1.26 UserNamespacesStatelessPodsSupport
false
์ํ 1.25 ValidatingAdmissionPolicy
false
์ํ 1.26 VolumeCapacityPriority
false
์ํ 1.21 - WinDSR
false
์ํ 1.14 WinOverlay
false
์ํ 1.14 1.19 WinOverlay
true
๋ฒ ํ 1.20 WindowsHostNetwork
false
์ํ 1.26
์น๊ธ ๋๋ ์ฌ์ฉ ์ค๋จ๋ ๊ธฐ๋ฅ์ ์ํ ๊ธฐ๋ฅ ๊ฒ์ดํธ ์น๊ธ ๋๋ ์ฌ์ฉ ์ค๋จ ๊ธฐ๋ฅ์ ์ํ ๊ธฐ๋ฅ ๊ฒ์ดํธ ๊ธฐ๋ฅ ๋ํดํธ ๋จ๊ณ ๋์
์ข
๋ฃ AdvancedAuditing
false
์ํ 1.7 1.7 AdvancedAuditing
true
๋ฒ ํ 1.8 1.11 AdvancedAuditing
true
GA 1.12 - CPUManager
false
์ํ 1.8 1.9 CPUManager
true
๋ฒ ํ 1.10 1.25 CPUManager
true
GA 1.26 - CSIInlineVolume
false
์ํ 1.15 1.15 CSIInlineVolume
true
๋ฒ ํ 1.16 1.24 CSIInlineVolume
true
GA 1.25 - CSIMigration
false
์ํ 1.14 1.16 CSIMigration
true
๋ฒ ํ 1.17 1.24 CSIMigration
true
GA 1.25 - CSIMigrationAWS
false
์ํ 1.14 1.16 CSIMigrationAWS
false
๋ฒ ํ 1.17 1.22 CSIMigrationAWS
true
๋ฒ ํ 1.23 1.24 CSIMigrationAWS
true
GA 1.25 - CSIMigrationAzureDisk
false
์ํ 1.15 1.18 CSIMigrationAzureDisk
false
๋ฒ ํ 1.19 1.22 CSIMigrationAzureDisk
true
๋ฒ ํ 1.23 1.23 CSIMigrationAzureDisk
true
GA 1.24 CSIMigrationAzureFile
false
์ํ 1.15 1.20 CSIMigrationAzureFile
false
๋ฒ ํ 1.21 1.23 CSIMigrationAzureFile
true
๋ฒ ํ 1.24 1.25 CSIMigrationAzureFile
true
GA 1.26 CSIMigrationGCE
false
์ํ 1.14 1.16 CSIMigrationGCE
false
๋ฒ ํ 1.17 1.22 CSIMigrationGCE
true
๋ฒ ํ 1.23 1.24 CSIMigrationGCE
true
GA 1.25 - CSIMigrationvSphere
false
์ํ 1.18 1.18 CSIMigrationvSphere
false
๋ฒ ํ 1.19 1.24 CSIMigrationvSphere
true
๋ฒ ํ 1.25 1.25 CSIMigrationvSphere
true
GA 1.26 - CSIMigrationOpenStack
false
์ํ 1.14 1.17 CSIMigrationOpenStack
true
๋ฒ ํ 1.18 1.23 CSIMigrationOpenStack
true
GA 1.24 CSIStorageCapacity
false
์ํ 1.19 1.20 CSIStorageCapacity
true
๋ฒ ํ 1.21 1.23 CSIStorageCapacity
true
GA 1.24 - ControllerManagerLeaderMigration
false
์ํ 1.21 1.21 ControllerManagerLeaderMigration
true
๋ฒ ํ 1.22 1.23 ControllerManagerLeaderMigration
true
GA 1.24 - CronJobTimeZone
false
์ํ 1.24 1.24 CronJobTimeZone
true
๋ฒ ํ 1.25 DaemonSetUpdateSurge
false
์ํ 1.21 1.21 DaemonSetUpdateSurge
true
๋ฒ ํ 1.22 1.24 DaemonSetUpdateSurge
true
GA 1.25 - DefaultPodTopologySpread
false
์ํ 1.19 1.19 DefaultPodTopologySpread
true
๋ฒ ํ 1.20 1.23 DefaultPodTopologySpread
true
GA 1.24 - DelegateFSGroupToCSIDriver
false
์ํ 1.22 1.22 DelegateFSGroupToCSIDriver
true
๋ฒ ํ 1.23 1.25 DelegateFSGroupToCSIDriver
true
GA 1.26 - DisableAcceleratorUsageMetrics
false
์ํ 1.19 1.19 DisableAcceleratorUsageMetrics
true
๋ฒ ํ 1.20 1.24 DisableAcceleratorUsageMetrics
true
GA 1.25 - DevicePlugins
false
์ํ 1.8 1.9 DevicePlugins
true
๋ฒ ํ 1.10 1.25 DevicePlugins
true
GA 1.26 - DryRun
false
์ํ 1.12 1.12 DryRun
true
๋ฒ ํ 1.13 1.18 DryRun
true
GA 1.19 - DynamicKubeletConfig
false
์ํ 1.4 1.10 DynamicKubeletConfig
true
๋ฒ ํ 1.11 1.21 DynamicKubeletConfig
false
Deprecated 1.22 - EfficientWatchResumption
false
์ํ 1.20 1.20 EfficientWatchResumption
true
๋ฒ ํ 1.21 1.23 EfficientWatchResumption
true
GA 1.24 - EphemeralContainers
false
์ํ 1.16 1.22 EphemeralContainers
true
๋ฒ ํ 1.23 1.24 EphemeralContainers
true
GA 1.25 - EventedPLEG
false
์ํ 1.26 - ExecProbeTimeout
true
GA 1.20 - ExpandCSIVolumes
false
์ํ 1.14 1.15 ExpandCSIVolumes
true
๋ฒ ํ 1.16 1.23 ExpandCSIVolumes
true
GA 1.24 - ExpandInUsePersistentVolumes
false
์ํ 1.11 1.14 ExpandInUsePersistentVolumes
true
๋ฒ ํ 1.15 1.23 ExpandInUsePersistentVolumes
true
GA 1.24 - ExpandPersistentVolumes
false
์ํ 1.8 1.10 ExpandPersistentVolumes
true
๋ฒ ํ 1.11 1.23 ExpandPersistentVolumes
true
GA 1.24 - IdentifyPodOS
false
์ํ 1.23 1.23 IdentifyPodOS
true
๋ฒ ํ 1.24 1.24 IdentifyPodOS
true
GA 1.25 - IndexedJob
false
์ํ 1.21 1.21 IndexedJob
true
๋ฒ ํ 1.22 1.23 IndexedJob
true
GA 1.24 - JobTrackingWithFinalizers
false
์ํ 1.22 1.22 JobTrackingWithFinalizers
false
๋ฒ ํ 1.23 1.24 JobTrackingWithFinalizers
true
๋ฒ ํ 1.25 1.25 JobTrackingWithFinalizers
true
GA 1.26 - KubeletCredentialProviders
false
์ํ 1.20 1.23 KubeletCredentialProviders
true
๋ฒ ํ 1.24 1.25 KubeletCredentialProviders
true
GA 1.26 - LegacyServiceAccountTokenNoAutoGeneration
true
๋ฒ ํ 1.24 1.25 LegacyServiceAccountTokenNoAutoGeneration
true
GA 1.26 - LocalStorageCapacityIsolation
false
์ํ 1.7 1.9 LocalStorageCapacityIsolation
true
๋ฒ ํ 1.10 1.24 LocalStorageCapacityIsolation
true
GA 1.25 - NetworkPolicyEndPort
false
์ํ 1.21 1.21 NetworkPolicyEndPort
true
๋ฒ ํ 1.22 1.24 NetworkPolicyEndPort
true
GA 1.25 - NonPreemptingPriority
false
์ํ 1.15 1.18 NonPreemptingPriority
true
๋ฒ ํ 1.19 1.23 NonPreemptingPriority
true
GA 1.24 - PodAffinityNamespaceSelector
false
์ํ 1.21 1.21 PodAffinityNamespaceSelector
true
๋ฒ ํ 1.22 1.23 PodAffinityNamespaceSelector
true
GA 1.24 - PodSecurity
false
์ํ 1.22 1.22 PodSecurity
true
๋ฒ ํ 1.23 1.24 PodSecurity
true
GA 1.25 PreferNominatedNode
false
์ํ 1.21 1.21 PreferNominatedNode
true
๋ฒ ํ 1.22 1.23 PreferNominatedNode
true
GA 1.24 - RemoveSelfLink
false
์ํ 1.16 1.19 RemoveSelfLink
true
๋ฒ ํ 1.20 1.23 RemoveSelfLink
true
GA 1.24 - ServerSideApply
false
์ํ 1.14 1.15 ServerSideApply
true
๋ฒ ํ 1.16 1.21 ServerSideApply
true
GA 1.22 - ServiceInternalTrafficPolicy
false
์ํ 1.21 1.21 ServiceInternalTrafficPolicy
true
๋ฒ ํ 1.22 1.25 ServiceInternalTrafficPolicy
true
GA 1.26 - ServiceIPStaticSubrange
false
์ํ 1.24 1.24 ServiceIPStaticSubrange
true
๋ฒ ํ 1.25 1.25 ServiceIPStaticSubrange
true
GA 1.26 - ServiceLBNodePortControl
false
์ํ 1.20 1.21 ServiceLBNodePortControl
true
๋ฒ ํ 1.22 1.23 ServiceLBNodePortControl
true
GA 1.24 - ServiceLoadBalancerClass
false
์ํ 1.21 1.21 ServiceLoadBalancerClass
true
๋ฒ ํ 1.22 1.23 ServiceLoadBalancerClass
true
GA 1.24 - StatefulSetMinReadySeconds
false
์ํ 1.22 1.22 StatefulSetMinReadySeconds
true
๋ฒ ํ 1.23 1.24 StatefulSetMinReadySeconds
true
GA 1.25 - SuspendJob
false
์ํ 1.21 1.21 SuspendJob
true
๋ฒ ํ 1.22 1.23 SuspendJob
true
GA 1.24 - WatchBookmark
false
์ํ 1.15 1.15 WatchBookmark
true
๋ฒ ํ 1.16 1.16 WatchBookmark
true
GA 1.17 - WindowsHostProcessContainers
false
์ํ 1.22 1.22 WindowsHostProcessContainers
true
๋ฒ ํ 1.23 1.25 WindowsHostProcessContainers
true
GA 1.26 -
๊ธฐ๋ฅ ์ฌ์ฉ ๊ธฐ๋ฅ ๋จ๊ณ ๊ธฐ๋ฅ์ ์ํ , ๋ฒ ํ ๋๋ GA ๋จ๊ณ์ผ ์ ์๋ค.
์ํ ๊ธฐ๋ฅ์ ๋ค์์ ์๋ฏธํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์๋ค. ๋ฒ๊ทธ๊ฐ ์์ ์ ์๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ฒ๊ทธ์ ๋
ธ์ถ๋ ์ ์๋ค. ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ์ฌ์ ํต์ง์์ด ์ธ์ ๋ ์ง ์ค๋จ๋ ์ ์๋ค. API๋ ์ดํ ์ํํธ์จ์ด ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ํธํ๋์ง ์๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค. ๋ฒ๊ทธ์ ์ํ์ด ์ฆ๊ฐํ๊ณ ์ฅ๊ธฐ ์ง์์ด ๋ถ์กฑํ์ฌ, ๋จ๊ธฐ ํ
์คํธ
ํด๋ฌ์คํฐ์์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๋ฒ ํ ๊ธฐ๋ฅ์ ๋ค์์ ์๋ฏธํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์๋ค. ์ด ๊ธฐ๋ฅ์ ์ ํ
์คํธ๋์๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ค. ์ธ๋ถ ๋ด์ฉ์ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง, ์ ์ฒด ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ์ค๋จ๋์ง ์๋๋ค. ์ค๋ธ์ ํธ์ ์คํค๋ง ๋ฐ/๋๋ ์๋งจํฑ์ ํ์ ๋ฒ ํ ๋๋ ์์ ๋ฆด๋ฆฌ์ค์์
ํธํ๋์ง ์๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค. ์ด๋ฌํ ์ํฉ์ด ๋ฐ์ํ๋ฉด, ๋ค์ ๋ฒ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๊ธฐ ์ํ
์ง์นจ์ ์ ๊ณตํ๋ค. API ์ค๋ธ์ ํธ๋ฅผ ์ญ์ , ํธ์ง ๋ฐ ์ฌ์์ฑํด์ผ
ํ ์๋ ์๋ค. ํธ์ง ๊ณผ์ ์์ ์ฝ๊ฐ์ ์๊ฐ์ด ํ์ํ ์ ์๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์์กดํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ๋ค์ดํ์์ด ํ์ํ ์ ์๋ค. ํ์ ๋ฆด๋ฆฌ์ค์์ ํธํ๋์ง ์๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก
์
๋ฌด์ ์ค์ํ์ง ์์(non-business-critical) ์ฉ๋๋ก๋ง
๊ถ์ฅํ๋ค. ๋
๋ฆฝ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ํ ์ ์๋ ์ฌ๋ฌ ํด๋ฌ์คํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด ์ ํ์ ์ํํ ์ ์๋ค.
์ฐธ๊ณ : ๋ฒ ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํด ๋ณด๊ณ ์๊ฒฌ์ ๋ณด๋ด์ฃผ๊ธธ ๋ฐ๋๋ค!
๋ฒ ํ ๊ธฐ๊ฐ์ด ์ข
๋ฃ๋ ํ์๋, ๋ ๋ง์ ๋ณ๊ฒฝ์ ํ๋ ๊ฒ์ด ์ค์ฉ์ ์ด์ง ์์ ์ ์๋ค.GA (General Availability) ๊ธฐ๋ฅ์ ์์ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ ํ๋ค. ์ด ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ๊ธฐ๋ฅ์ ํญ์ ํ์ฑํ๋์ด ์๋ค. ๋นํ์ฑํํ ์ ์๋ค. ํด๋น ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ๋ ์ด์ ํ์ํ์ง ์๋ค. ์ฌ๋ฌ ํ์ ๋ฒ์ ์ ๋ฆด๋ฆฌ์ค๋ ์ํํธ์จ์ด์ ์์ ์ ์ธ ๊ธฐ๋ฅ์ ๋ฒ์ ์ด ํฌํจ๋๋ค. ๊ธฐ๋ฅ ๊ฒ์ดํธ ๋ชฉ๋ก ๊ฐ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ํน์ ๊ธฐ๋ฅ์ ํ์ฑํ/๋นํ์ฑํํ๋๋ก ์ค๊ณ๋์๋ค.
APIListChunking
: API ํด๋ผ์ด์ธํธ๊ฐ API ์๋ฒ์์ (LIST
๋๋ GET
)
๋ฆฌ์์ค๋ฅผ ์ฒญํฌ(chunks)๋ก ๊ฒ์ํ ์ ์๋๋ก ํ๋ค.APIPriorityAndFairness
: ๊ฐ ์๋ฒ์ ์ฐ์ ์์์ ๊ณต์ ์ฑ์ ํตํด ๋์ ์์ฒญ์
๊ด๋ฆฌํ ์ ์๋ค. (RequestManagement
์์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋จ)APIResponseCompression
: LIST
๋๋ GET
์์ฒญ์ ๋ํ API ์๋ต์ ์์ถํ๋ค.APIServerIdentity
: ํด๋ฌ์คํฐ์ ๊ฐ API ์๋ฒ์ ID๋ฅผ ํ ๋นํ๋ค.APIServerTracing
: API ์๋ฒ์์ ๋ถ์ฐ ์ถ์ (tracing)์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ค.
์์ธํ ๋ด์ฉ์ ์ฟ ๋ฒ๋คํฐ์ค ์์คํ
์ปดํฌ๋ํธ์ ๋ํ ์ถ์ ํ์ด์ง๋ฅผ ์ดํด๋ณธ๋ค.APISelfSubjectAttributesReview
: ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์์ฒญ์ ํ๋ ์ฃผ์ฒด(subject)์
์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋๋ก ํ๋ SelfSubjectReview
API๋ฅผ ํ์ฑํํ๋ค.
๋ ์์ธํ ์ ๋ณด๋ ํด๋ผ์ด์ธํธ๋ก์์ ์ธ์ฆ ์ ๋ณด API ์ ๊ทผ ์
ํ์ธํ๋ค.AdvancedAuditing
: ๊ณ ๊ธ ๊ฐ์ฌ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.AllowInsecureBackendProxy
: ์ฌ์ฉ์๊ฐ ํ๋ ๋ก๊ทธ ์์ฒญ์์ kubelet์
TLS ํ์ธ์ ๊ฑด๋๋ธ ์ ์๋๋ก ํ๋ค.AnyVolumeDataSource
: PVC ์
DataSource
๋ก ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ฌ์ฉ์ ํ์ฑํํ๋ค.AppArmor
: ๋ฆฌ๋
์ค ๋
ธ๋์์ ์คํ๋๋ ํ๋์ ๋ํ AppArmor ํ์ ์ ๊ทผ ์ ์ด์ ์ฌ์ฉ์ ํ์ฑํํ๋ค.
์์ธํ ๋ด์ฉ์ AppArmor ํํ ๋ฆฌ์ผ ์ ์ฐธ๊ณ ํ๋ค.ContainerCheckpoint
: kubelet์ ์ฒดํฌํฌ์ธํธ
API๋ฅผ ํ์ฑํํ๋ค.
์์ธํ ๋ด์ฉ์ kubelet ์ฒดํฌํฌ์ธํธ API ๋ฅผ ํ์ธํ๋ค.ControllerManagerLeaderMigration
: HA ํด๋ฌ์คํฐ์์ ํด๋ฌ์คํฐ ์คํผ๋ ์ดํฐ๊ฐ
kube-controller-manager์ ์ปจํธ๋กค๋ฌ๋ค์ ์ธ๋ถ controller-manager(์๋ฅผ ๋ค๋ฉด,
cloud-controller-manager)๋ก ๋ค์ดํ์ ์์ด ๋ผ์ด๋ธ ๋ง์ด๊ทธ๋ ์ด์
ํ ์ ์๋๋ก ํ์ฉํ๋๋ก
kube-controller-manager ์
cloud-controller-manager ์
๋ฆฌ๋ ๋ง์ด๊ทธ๋ ์ด์
(Leader Migration)์ ํ์ฑํํ๋ค.CPUManager
: ์ปจํ
์ด๋ ์์ค์ CPU ์ดํผ๋ํฐ ์ง์์ ํ์ฑํํ๋ค.
CPU ๊ด๋ฆฌ ์ ์ฑ
์ ์ฐธ๊ณ ํ๋ค.CPUManagerPolicyAlphaOptions
: CPUManager ์ ์ฑ
์ค ์คํ์ ์ด๋ฉฐ ์ํ ํ์ง์ธ ์ต์
์
๋ฏธ์ธ ์กฐ์ ์ ํ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ํ์ง ์์ค์ด ์ํ์ธ CPUManager ์ต์
์ ๊ทธ๋ฃน ์ ๋ณดํธํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ๋ฒ ํ ๋๋ ์์ (stable) ์ํ๋ก ์น๊ธ๋์ง ์์ ๊ฒ์ด๋ค.CPUManagerPolicyBetaOptions
: CPUManager ์ ์ฑ
์ค ์คํ์ ์ด๋ฉฐ ๋ฒ ํ ํ์ง์ธ ์ต์
์
๋ฏธ์ธ ์กฐ์ ์ ํ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ํ์ง ์์ค์ด ๋ฒ ํ์ธ CPUManager ์ต์
์ ๊ทธ๋ฃน ์ ๋ณดํธํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ์์ (stable) ์ํ๋ก ์น๊ธ๋์ง ์์ ๊ฒ์ด๋ค.CPUManagerPolicyOptions
: CPUManager ์ ์ฑ
์ ๋ฏธ์ธ ์กฐ์ ์ ํ์ฉํ๋ค.CrossNamespaceVolumeDataSource
: ๋ค์์คํ์ด์ค๊ฐ ๋ณผ๋ฅจ ๋ฐ์ดํฐ ์์ค ์ฌ์ฉ ๊ธฐ๋ฅ์
ํ์ฑํํ๋ฉฐ, ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์์ dataSourceRef
ํ๋์ ์์ค ๋ค์์คํ์ด์ค๋ฅผ
๊ธฐ์ฌํ ์ ์๊ฒ ๋๋ค.CSIInlineVolume
: ํ๋์ ๋ํ CSI ์ธ๋ผ์ธ ๋ณผ๋ฅจ ์ง์์ ํ์ฑํํ๋ค.CSIMigration
: shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์ ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์
์ฌ์ ์ค์น๋ ํด๋น CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.CSIMigrationAWS
: shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์
AWS-EBS ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ EBS CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
์ด ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์ด ์๊ฑฐ๋ EBS CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ง ์์ ๋
ธ๋์์์ ๋ง์ดํธ ๋์์ ๋ํด
์ธ-ํธ๋ฆฌ EBS ํ๋ฌ๊ทธ์ธ์ผ๋ก์ ํด๋ฐฑ(falling back)์ ์ง์ํ๋ค.
ํ๋ก๋น์ ๋์์ ๋ํด์๋ ํด๋ฐฑ์ ์ง์ํ์ง ์๋๋ฐ,
ํ๋ก๋น์ ๋์์ ํด๋น CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ด์ผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.CSIMigrationAzureDisk
: shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์
Azure-Disk ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ AzureDisk CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
์ด ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์ด ์๊ฑฐ๋ AzureDisk CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ง ์์ ๋
ธ๋์์์ ๋ง์ดํธ ๋์์ ๋ํด
์ธ-ํธ๋ฆฌ AzureDisk ํ๋ฌ๊ทธ์ธ์ผ๋ก์ ํด๋ฐฑ(falling back)์ ์ง์ํ๋ค.
ํ๋ก๋น์ ๋์์ ๋ํด์๋ ํด๋ฐฑ์ ์ง์ํ์ง ์๋๋ฐ,
ํ๋ก๋น์ ๋์์ ํด๋น CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ด์ผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด CSIMigration ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค.CSIMigrationAzureFile
: shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์
Azure-File ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ AzureFile CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
์ด ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์ด ์๊ฑฐ๋ AzureFile CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ง ์์ ๋
ธ๋์์์ ๋ง์ดํธ ๋์์ ๋ํด
์ธ-ํธ๋ฆฌ AzureFile ํ๋ฌ๊ทธ์ธ์ผ๋ก์ ํด๋ฐฑ(falling back)์ ์ง์ํ๋ค.
ํ๋ก๋น์ ๋์์ ๋ํด์๋ ํด๋ฐฑ์ ์ง์ํ์ง ์๋๋ฐ,
ํ๋ก๋น์ ๋์์ ํด๋น CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ด์ผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด CSIMigration ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค.CSIMigrationGCE
: shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์
GCE-PD ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ PD CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
์ด ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์ด ์๊ฑฐ๋ PD CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ง ์์ ๋
ธ๋์์์ ๋ง์ดํธ ๋์์ ๋ํด
์ธ-ํธ๋ฆฌ GCE ํ๋ฌ๊ทธ์ธ์ผ๋ก์ ํด๋ฐฑ(falling back)์ ์ง์ํ๋ค.
ํ๋ก๋น์ ๋์์ ๋ํด์๋ ํด๋ฐฑ์ ์ง์ํ์ง ์๋๋ฐ,
ํ๋ก๋น์ ๋์์ ํด๋น CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ด์ผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด CSIMigration ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค.CSIMigrationOpenStack
: shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์
Cinder ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ Cinder CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
์ด ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์ด ์๊ฑฐ๋ Cinder CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ง ์์ ๋
ธ๋์์์ ๋ง์ดํธ ๋์์ ๋ํด
์ธ-ํธ๋ฆฌ Cinder ํ๋ฌ๊ทธ์ธ์ผ๋ก์ ํด๋ฐฑ(falling back)์ ์ง์ํ๋ค.
ํ๋ก๋น์ ๋์์ ๋ํด์๋ ํด๋ฐฑ์ ์ง์ํ์ง ์๋๋ฐ,
ํ๋ก๋น์ ๋์์ ํด๋น CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ด์ผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด CSIMigration ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค.csiMigrationRBD
: RBD ํธ๋ฆฌ ๋ด(in-tree) ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋ ๋ณผ๋ฅจ ์์
์
Ceph RBD CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํธํ๋ ์ฌ(shim)๊ณผ ๋ณํ ๋ก์ง์ ํ์ฑํํ๋ค.
ํด๋ฌ์คํฐ์ CSIMigration ๋ฐ csiMigrationRBD ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์ด ์์ด์ผ ํ๊ณ ,
Ceph CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ์ค์ ๋์ด ์์ด์ผ ํ๋ค.
์ด ํ๋๊ทธ๋ ํธ๋ฆฌ ๋ด(in-tree) RBD ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ๊ธ์ง์ํค๋ InTreePluginRBDUnregister
๊ธฐ๋ฅ ํ๋๊ทธ์ ์ํด
์ฌ์ฉ ์ค๋จ๋์๋ค.CSIMigrationvSphere
: vSphere ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ vSphere CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ณผ๋ฅจ ์์
์
๋ผ์ฐํ
ํ๋ shim ๋ฐ ๋ณํ ๋ก์ง์ ์ฌ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋์ด ์๊ฑฐ๋ vSphere CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ง ์์ ๋
ธ๋์์์ ๋ง์ดํธ ๋์์ ๋ํด
์ธ-ํธ๋ฆฌ vSphere ํ๋ฌ๊ทธ์ธ์ผ๋ก์ ํด๋ฐฑ(falling back)์ ์ง์ํ๋ค.
ํ๋ก๋น์ ๋์์ ๋ํด์๋ ํด๋ฐฑ์ ์ง์ํ์ง ์๋๋ฐ,
ํ๋ก๋น์ ๋์์ ํด๋น CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ๋์ด ์์ด์ผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด CSIMigration ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์ด ์์ด์ผ ํ๋ค.CSIMigrationPortworx
: Portworx ํธ๋ฆฌ ๋ด(in-tree) ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋ ๋ณผ๋ฅจ ์์
์
Portworx CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํธํ๋ ์ฌ(shim)๊ณผ ๋ณํ ๋ก์ง์ ํ์ฑํํ๋ค.
Portworx CSI ๋๋ผ์ด๋ฒ๊ฐ ์ค์น ๋ฐ ์ค์ ๋์ด ์์ด์ผ ํ๋ค.CSINodeExpandSecret
: CSI ๋๋ผ์ด๋ฒ๊ฐ NodeExpandVolume
์์
์ํ ์ค์ ์ฌ์ฉํ ์ ์๋๋ก
์ํฌ๋ฆฟ ์ธ์ฆ ๋ฐ์ดํฐ๋ฅผ ๋๋ผ์ด๋ฒ์ ์ ์ก ๊ฐ๋ฅํ๊ฒ ํ๋ค.CSIStorageCapacity
: CSI ๋๋ผ์ด๋ฒ๊ฐ ์คํ ๋ฆฌ์ง ์ฉ๋ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ณ
์ฟ ๋ฒ๋คํฐ์ค ์ค์ผ์ค๋ฌ๊ฐ ํ๋๋ฅผ ์ค์ผ์คํ ๋ ํด๋น ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ค.
์คํ ๋ฆฌ์ง ์ฉ๋ ์ ์ฐธ๊ณ ํ๋ค.
์์ธํ ๋ด์ฉ์ csi
๋ณผ๋ฅจ ์ ํ ๋ฌธ์๋ฅผ ํ์ธํ๋ค.CSIVolumeHealth
: ๋
ธ๋์์์ CSI ๋ณผ๋ฅจ ์ํ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.ContextualLogging
: ์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด,
์ปจํ
์ค์ธ์ผ ๋ก๊น
์ ์ง์ํ๋ ์ฟ ๋ฒ๋คํฐ์ค ๊ตฌ์ฑ ์์๊ฐ ๋ก๊ทธ ์ถ๋ ฅ์ ์ถ๊ฐ ์์ธ๋ฅผ ์ถ๊ฐํ๋ค.ControllerManagerLeaderMigration
: kube-controller-manager
๋ฐ cloud-controller-manager
์
๋ํ ๋ฆฌ๋ ๋ง์ด๊ทธ๋ ์ด์
์ ์ง์ํ๋ค.CronJobTimeZone
: ํฌ๋ก ์ก ์ ์ ํ์ timeZone
ํ๋ ์ฌ์ฉ์ ํ์ฉํ๋ค.CustomCPUCFSQuotaPeriod
: kubelet config ์์
cpuCFSQuotaPeriod
๋ฅผ ๋
ธ๋๊ฐ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ค.CustomResourceValidationExpressions
: x-kubernetes-validations
ํ์ฅ ๊ธฐ๋ฅ์ผ๋ก ์์ฑ๋
๊ฒ์ฆ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ์ปค์คํ
๋ฆฌ์์ค๋ฅผ ๊ฒ์ฆํ๋
ํํ ์ธ์ด ๊ฒ์ฆ(expression language validation)์ CRD์ ํ์ฑํํ๋ค.DaemonSetUpdateSurge
: ๋
ธ๋๋น ์
๋ฐ์ดํธ ์ค ๊ฐ์ฉ์ฑ์ ์ ์งํ๋๋ก
๋ฐ๋ชฌ์
์ํฌ๋ก๋๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ค.
๋ฐ๋ชฌ์
์์ ๋กค๋ง ์
๋ฐ์ดํธ ์ํ ์ ์ฐธ๊ณ ํ๋ค.DefaultPodTopologySpread
: PodTopologySpread
์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ
๊ธฐ๋ณธ ๋ถ๋ฐฐ ๋ฅผ ์ํํ๋ค.DelegateFSGroupToCSIDriver
: CSI ๋๋ผ์ด๋ฒ๊ฐ ์ง์ํ ๊ฒฝ์ฐ, NodeStageVolume ๋ฐ NodePublishVolume CSI ํธ์ถ์ ํตํด
fsGroup
๋ฅผ ์ ๋ฌํ์ฌ ํ๋์ securityContext
์์
fsGroup
๋ฅผ ๋๋ผ์ด๋ธ์ ์ ์ฉํ๋ ์ญํ ์ ์์ํ๋ค.DevicePlugins
: ๋
ธ๋์์ ์ฅ์น ํ๋ฌ๊ทธ์ธ
๊ธฐ๋ฐ ๋ฆฌ์์ค ํ๋ก๋น์ ๋์ ํ์ฑํํ๋ค.DisableAcceleratorUsageMetrics
:
kubelet์ด ์์งํ ์ก์
๋ฌ๋ ์ดํฐ ์งํ ๋นํ์ฑํ .DisableCloudProviders
: kube-apiserver
, kube-controller-manager
,
--cloud-provider
์ปดํฌ๋ํธ ํ๋๊ทธ์ ๊ด๋ จ๋ kubelet
์
๋ชจ๋ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ค.DisableKubeletCloudCredentialProviders
: ์ด๋ฏธ์ง ํ ํฌ๋ฆฌ๋ด์
์ ์ํด
ํด๋ผ์ฐ๋ ํ๋ก๋ฐ์ด๋ ์ปจํ
์ด๋ ๋ ์ง์คํธ๋ฆฌ์ ์ธ์ฆ์ ์ํํ๋ kubelet ๋ด๋ถ(in-tree) ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ค.DownwardAPIHugePages
: ๋ค์ด์๋ API ์์
hugepages ์ฌ์ฉ์ ํ์ฑํํ๋ค.DryRun
: ์๋ฒ ์ธก์ dry run ์์ฒญ์
์์ฒญ์ ํ์ฑํํ์ฌ ์ปค๋ฐํ์ง ์๊ณ ์ ํจ์ฑ ๊ฒ์ฌ, ๋ณํฉ ๋ฐ ๋ณํ๋ฅผ ํ
์คํธํ ์ ์๋ค.DynamicKubeletConfig
: kubelet์ ๋์ ๊ตฌ์ฑ์ ํ์ฑํํ๋ค.
์ด ๊ธฐ๋ฅ์ ์ง์ํ๋ ๋ฒ์ ์ฐจ์ด(supported skew policy) ๋ฐ๊นฅ์์๋ ๋ ์ด์ ์ง์๋์ง ์๋๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ 1.24์ kubelet์์ ์ ๊ฑฐ๋์๋ค. kubelet ์ฌ๊ตฌ์ฑํ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.EndpointSliceTerminatingCondition
: ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค terminating
๋ฐ serving
์กฐ๊ฑด ํ๋๋ฅผ ํ์ฑํํ๋ค.EfficientWatchResumption
: ์คํ ๋ฆฌ์ง์์ ์์ฑ๋ ๋ถ๋งํฌ(์งํ ์๋ฆผ) ์ด๋ฒคํธ๋ฅผ
์ฌ์ฉ์์๊ฒ ์ ๋ฌํ ์ ์๋ค. ์ด๊ฒ์ ๊ฐ์ ์์
์๋ง ์ ์ฉ๋๋ค.EphemeralContainers
: ํ๋๋ฅผ ์คํํ๊ธฐ ์ํ
์์ ์ปจํ
์ด๋ ๋ฅผ
์ถ๊ฐํ ์ ์๋ค.EventedPLEG
: kubelet์ด CRI ์ ๋ํ
ํ์ฅ(extension)์ ํตํด ์ปจํ
์ด๋ ๋ฐํ์ ์ผ๋ก๋ถํฐ
์ปจํ
์ด๋ ๋ผ์ดํ์ฌ์ดํด ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ ์๋ ๊ธฐ๋ฅ์
ํ์ฑํํ๋ค(PLEG๋ โPod lifecycle event generatorโ์ ์ฝ์).
์ด ๊ธฐ๋ฅ์ด ํจ๊ณผ์ ์ด๋ ค๋ฉด,
ํด๋ฌ์คํฐ์์ ์คํ๋๋ ๊ฐ ์ปจํ
์ด๋ ๋ฐํ์์ ์ปจํ
์ด๋ ๋ผ์ดํ์ฌ์ดํด ์ด๋ฒคํธ ๊ธฐ๋ฅ๋ ํ์ฑํํด์ผ ํ๋ค.
์ปจํ
์ด๋ ๋ฐํ์์ด ์ปจํ
์ด๋ ๋ผ์ดํ์ฌ์ดํด ์ด๋ฒคํธ ์ง์ ์ฌ๋ถ๋ฅผ ์ฅ์ํ์ง ์์ผ๋ฉด,
kubelet์ ์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ํ์ฑํ๋์ด ์๋๋ผ๋ ์๋์ผ๋ก ๊ธฐ์กด(legacy) ์ผ๋ฐ PLEG ๋ฉ์ปค๋์ฆ์ผ๋ก ์ ํํ๋ค.ExecProbeTimeout
: kubelet์ด exec ํ๋ก๋ธ ์๊ฐ ์ด๊ณผ๋ฅผ ์ค์ํ๋์ง ํ์ธํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ๊ธฐ์กด ์ํฌ๋ก๋๊ฐ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ exec ํ๋ก๋ธ ์ ํ ์๊ฐ์ ๋ฌด์ํ
ํ์ฌ ์์ ๋ ๊ฒฐํจ์ ์์กดํ๋ ๊ฒฝ์ฐ ์กด์ฌํ๋ค.
์ค๋น์ฑ ํ๋ก๋ธ ๋ฅผ ์ฐธ์กฐํ๋ค.ExpandCSIVolumes
: CSI ๋ณผ๋ฅจ ํ์ฅ์ ํ์ฑํํ๋ค.ExpandedDNSConfig
: ๋ ๋ง์ DNS ๊ฒ์ ๊ฒฝ๋ก์ ๋ ๊ธด DNS ๊ฒ์ ๊ฒฝ๋ก ๋ชฉ๋ก์ ํ์ฉํ๋ ค๋ฉด
kubelet๊ณผ kube-apiserver๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ปจํ
์ด๋ ๋ฐํ์์ด ์ง์ํด์ผ ํ๋ค(Containerd: v1.5.6 ์ด์, CRI-O: v1.22 ์ด์).
ํ์ฅ๋ DNS ๊ตฌ์ฑ ์ ์ฐธ๊ณ ํ๋ค.ExpandInUsePersistentVolumes
: ์ฌ์ฉ ์ค์ธ PVC๋ฅผ ํ์ฅํ ์ ์๋ค.
์ฌ์ฉ ์ค์ธ ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์ ํฌ๊ธฐ ์กฐ์ ์ ์ฐธ๊ณ ํ๋ค.ExpandPersistentVolumes
: ํผ์์คํดํธ ๋ณผ๋ฅจ ํ์ฅ์ ํ์ฑํํ๋ค.
ํผ์์คํดํธ ๋ณผ๋ฅจ ํด๋ ์ ํ์ฅ ์ ์ฐธ๊ณ ํ๋ค.ExperimentalHostUserNamespaceDefaulting
: ์ฌ์ฉ์ ๋ค์์คํ์ด์ค๋ฅผ ํธ์คํธ๋ก
๊ธฐ๋ณธ ํ์ฑํํ๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ํธ์คํธ ๋ค์์คํ์ด์ค, ํธ์คํธ ๋ง์ดํธ,
๊ถํ์ด ์๋ ์ปจํ
์ด๋ ๋๋ ํน์ ๋น-๋ค์์คํ์ด์ค(non-namespaced) ๊ธฐ๋ฅ(์: MKNODE
, SYS_MODULE
๋ฑ)์
์ฌ์ฉํ๋ ์ปจํ
์ด๋๋ฅผ ์ํ ๊ฒ์ด๋ค. ๋์ปค ๋ฐ๋ชฌ์์ ์ฌ์ฉ์ ๋ค์์คํ์ด์ค
์ฌ ๋งคํ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง ํ์ฑํํด์ผ ํ๋ค.GracefulNodeShutdown
: kubelet์์ ์ ์ ์ข
๋ฃ๋ฅผ ์ง์ํ๋ค.
์์คํ
์ข
๋ฃ ์ค์ kubelet์ ์ข
๋ฃ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ ๋
ธ๋์์ ์คํ ์ค์ธ
ํ๋๋ฅผ ์ ์์ ์ผ๋ก ์ข
๋ฃํ๋ ค๊ณ ์๋ํ๋ค. ์์ธํ ๋ด์ฉ์
Graceful Node Shutdown ์
์ฐธ์กฐํ๋ค.GracefulNodeShutdownBasedOnPodPriority
: ๊ทธ๋ ์ด์คํ(graceful) ๋
ธ๋ ์
ง๋ค์ด์ ํ ๋
kubelet์ด ํ๋ ์ฐ์ ์์๋ฅผ ์ฒดํฌํ ์ ์๋๋ก ํ์ฑํํ๋ค.GRPCContainerProbe
: ํ์ฑ ํ๋ก๋ธ(Liveness Probe), ์ค๋น์ฑ ํ๋ก๋ธ(Readiness Probe), ์คํํธ์
ํ๋ก๋ธ(Startup Probe)์ ๋ํด gRPC ํ๋ก๋ธ๋ฅผ ํ์ฑํํ๋ค.
ํ์ฑ/์ค๋น์ฑ/์คํํธ์
ํ๋ก๋ธ ๊ตฌ์ฑํ๊ธฐ ๋ฅผ ์ฐธ์กฐํ๋ค.HonorPVReclaimPolicy
: ํผ์์คํดํธ ๋ณผ๋ฅจ ํ์ ์ ์ฑ
์ด Delete
์ธ ๊ฒฝ์ฐ PV-PVC ์ญ์ ์์์ ์๊ด์์ด ์ ์ฑ
์ ์ค์ํ๋ค.
๋ ์์ธํ ์ ๋ณด๋
ํผ์์คํดํธ๋ณผ๋ฅจ ์ญ์ ๋ณดํธ ํ์ด๋๋ผ์ด์ (finalizer) ๋ฌธ์๋ฅผ
์ฐธ๊ณ ํ๋ค.HPAContainerMetrics
: HorizontalPodAutoscaler
๋ฅผ ํ์ฑํํ์ฌ ๋์ ํ๋์
๊ฐ๋ณ ์ปจํ
์ด๋ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฅํ๋ค.HPAScaleToZero
: ์ฌ์ฉ์ ์ ์ ๋๋ ์ธ๋ถ ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ ๋ HorizontalPodAutoscaler
๋ฆฌ์์ค์ ๋ํด
minReplicas
๋ฅผ 0์ผ๋ก ์ค์ ํ๋ค.IPTablesOwnershipCleanup
: ์ด๋ฅผ ํ์ฑํํ๋ฉด kubelet์ด ๋ ์ด์ ๋ ๊ฑฐ์ IPTables ๊ท์น์ ๋ง๋ค์ง ์๋๋ค.IdentifyPodOS
: ํ๋ OS ํ๋๋ฅผ ์ง์ ํ ์ ์๊ฒ ํ๋ค.
์ด๋ฅผ ํตํด API ์๋ฒ ๊ด๋ฆฌ ์ ํ๋์ OS๋ฅผ ์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค 1.34์์,
pod.spec.os.name
์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ windows
์ linux
์ด๋ค.IndexedJob
: ์ก ์ปจํธ๋กค๋ฌ๊ฐ ํ๋ ์๋ฃ(completion)๋ฅผ
์๋ฃ ์ธ๋ฑ์ค์ ๋ฐ๋ผ ๊ด๋ฆฌํ ์ ์๋๋ก ํ์ฉํ๋ค.InTreePluginAWSUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ aws-ebs ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.InTreePluginAzureDiskUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ azuredisk ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.InTreePluginAzureFileUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ azurefile ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.InTreePluginGCEUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ gce-pd ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.InTreePluginOpenStackUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ ์คํ์คํ cinder ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.InTreePluginPortworxUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ Portworx ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.InTreePluginRBDUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ RBD ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.InTreePluginvSphereUnregister
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์ vSphere ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ์ค์งํ๋ค.JobMutableNodeSchedulingDirectives
: ์ก ์
ํ๋ ํ
ํ๋ฆฟ์ ์๋ ๋
ธ๋ ์ค์ผ์ค๋ง ์ง์๋ฅผ ์
๋ฐ์ดํธํ ์ ์๊ฒ ํ๋ค.JobPodFailurePolicy
: ์ฌ์ฉ์๊ฐ ์ปจํ
์ด๋์ ์ข
๋ฃ ์ฝ๋๋ ํ๋ ์ํ์ ๋ฐ๋ผ
ํ๋์ ์ฅ์ ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.JobReadyPods
: ํ๋ ์ปจ๋์
์ด
Ready
์ธ ํ๋์ ์๋ฅผ ์ถ์ ํ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
Ready
์ธ ํ๋์ ์๋ ์ก ์ํ์
status
ํ๋์ ๊ธฐ๋ก๋๋ค.JobTrackingWithFinalizers
: ํด๋ฌ์คํฐ์ ๋ฌด์ ํ์ผ๋ก ๋จ์ ์๋ ํ๋์ ์์กดํ์ง ์๊ณ
์ก ์ ์๋ฃ๋ฅผ ์ถ์ ํ ์ ์๋ค.
์ก ์ปจํธ๋กค๋ฌ๋ ์๋ฃ๋ ํ๋๋ฅผ ์ถ์ ํ๊ธฐ ์ํด
์๋ฃ๋ ํ๋์ ์ก ์ํ ํ๋๋ฅผ ์ฌ์ฉํ๋ค.KMSv2
: ์ ์ฅ ๋ฐ์ดํฐ ์ํธํ(encryption at rest)๋ฅผ ์ํ KMS v2 API๋ฅผ ํ์ฑํํ๋ค. ๋ ์์ธํ ์ ๋ณด๋ KMS ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ํธํํ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.KubeletCredentialProviders
: ์ด๋ฏธ์ง ํ ์๊ฒฉ ์ฆ๋ช
์ ๋ํด
kubelet exec ์๊ฒฉ ์ฆ๋ช
๊ณต๊ธ์๋ฅผ ํ์ฑํํ๋ค.KubeletInUserNamespace
: user namespace ์์
kubelet ์คํ์ ํ์ฑํํ๋ค.
๋ฃจํธ๊ฐ ์๋ ์ ์ ๋ก ์ฟ ๋ฒ๋คํฐ์ค ๋
ธ๋ ์ปดํฌ๋ํธ ์คํ ์ ์ฐธ๊ณ ํ๋ค.KubeletPodResources
: kubelet์ ํ๋ ๋ฆฌ์์ค gPRC ์๋ํฌ์ธํธ๋ฅผ ํ์ฑํํ๋ค. ์์ธํ ๋ด์ฉ์
์ฅ์น ๋ชจ๋ํฐ๋ง ์ง์ ์
์ฐธ๊ณ ํ๋ค.KubeletPodResourcesGetAllocatable
: kubelet์ ํ๋ ๋ฆฌ์์ค
GetAllocatableResources
๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
์ด API๋ ํด๋ผ์ด์ธํธ๊ฐ ๋
ธ๋์ ์ฌ์ ์ปดํจํ
์์์ ์ ํ์
ํ ์ ์๋๋ก,
ํ ๋น ๊ฐ๋ฅ ์์์ ๋ํ ์ ๋ณด๋ฅผ
์์ ํ ๋น ๋ณด๊ณ ํ๋ค.KubeletTracing
: kubelet์ ๋ถ์ฐ ์ถ์ ์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ค.
ํ์ฑํ๋ ๊ฒฝ์ฐ, kubelet CRI ์ธํฐํ์ด์ค์ ์ธ์ฆ๋ http ์๋ฒ๋ค์
OpenTelemetry ์ถ์ ๋ฒ์๋ฅผ ํ์ฑํ๋ ๋ฐ ๋์์ ์ค๋ค.
์์ธํ ๋ด์ฉ์ ์ฟ ๋ฒ๋คํฐ์ค ์์คํ
์ปดํฌ๋ํธ์ ๋ํ ์ถ์ ํ์ด์ง๋ฅผ ํ์ธํ๋ค.LegacyServiceAccountTokenNoAutoGeneration
: ์ํฌ๋ฆฟ ๊ธฐ๋ฐ
์๋น์ค ์ด์นด์ดํธ ํ ํฐ ์ ์๋ ์์ฑ์ ์ค๋จํ๋ค.LegacyServiceAccountTokenTracking
: ์ํฌ๋ฆฟ ๊ธฐ๋ฐ
์๋น์ค ์ด์นด์ดํธ ํ ํฐ ์ ์ฌ์ฉ์ ์ถ์ ํ๋ค.LocalStorageCapacityIsolation
:
๋ก์ปฌ ์์ ์คํ ๋ฆฌ์ง ์
emptyDir ๋ณผ๋ฅจ ์
sizeLimit
์์ฑ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.LocalStorageCapacityIsolationFSQuotaMonitoring
: ๋ก์ปฌ ์์ ์คํ ๋ฆฌ์ง ์
LocalStorageCapacityIsolation
์ด ํ์ฑํ๋๊ณ
emptyDir ๋ณผ๋ฅจ ์
๋ฐฑ์
ํ์ผ์์คํ
์ด ํ๋ก์ ํธ ์ฟผํฐ๋ฅผ ์ง์ํ๊ณ ํ์ฑํ๋ ๊ฒฝ์ฐ, ํ์ผ์์คํ
์ฌ์ฉ๋ณด๋ค๋
ํ๋ก์ ํธ ์ฟผํฐ๋ฅผ ์ฌ์ฉํ์ฌ emptyDir ๋ณผ๋ฅจ
์คํ ๋ฆฌ์ง ์ฌ์ฉ์ ๋ชจ๋ํฐ๋งํ์ฌ ์ฑ๋ฅ๊ณผ ์ ํ์ฑ์
ํฅ์์ํจ๋ค.LogarithmicScaleDown
: ์ปจํธ๋กค๋ฌ ์ค์ผ์ผ ๋ค์ด ์์ ํ๋ ํ์์คํฌํ๋ฅผ ๋ก๊ทธ ์ค์ผ์ผ๋ก ๋ฒ์ผํํ์ฌ
์ถ์ถํ ํ๋๋ฅผ ๋ฐ-๋๋คํ๊ฒ ์ ํํ๋ ๊ธฐ๋ฒ์ ํ์ฑํํ๋ค.MatchLabelKeysInPodTopologySpread
: ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด ์
matchLabelKeys
ํ๋๋ฅผ ํ์ฑํํ๋ค.MaxUnavailableStatefulSet
: ์คํ
์ดํธํ์
์
๋กค๋ง ์
๋ฐ์ดํธ ์ ๋ต ์ ๋ํด
maxUnavailable
ํ๋๋ฅผ ์ค์ ํ ์ ์๋๋ก ํ๋ค.
์ด ํ๋๋ ์
๋ฐ์ดํธ ๋์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ(unavailable) ์ํ์ ํ๋๋ฅผ ๋ช ๊ฐ๊น์ง ํ์ฉํ ์ง๋ฅผ ์ ํ๋ค.MemoryManager
: NUMA ํ ํด๋ก์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋์ ๋ํ
๋ฉ๋ชจ๋ฆฌ ์ดํผ๋ํฐ๋ฅผ ์ค์ ํ ์ ์๋ค.MemoryQoS
: cgroup v2 ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ
ํ๋/์ปจํ
์ด๋์์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฐ ์ฌ์ฉ ์ ํ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ค.MinDomainsInPodTopologySpread
: ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด ๋ด์
minDomains
์ฌ์ฉ์ ํ์ฑํํ๋ค.MixedProtocolLBService
: ๋์ผํ ๋ก๋๋ฐธ๋ฐ์ ์ ํ ์๋น์ค ์ธ์คํด์ค์์ ๋ค๋ฅธ ํ๋กํ ์ฝ
์ฌ์ฉ์ ํ์ฑํํ๋ค.MultiCIDRRangeAllocator
: MultiCIDR ๋ฒ์ ํ ๋น๊ธฐ๋ฅผ ํ์ฑํํ๋ค.NetworkPolicyEndPort
: ๋คํธ์ํฌํด๋ฆฌ์(NetworkPolicy) ์ค๋ธ์ ํธ์์ ๋จ์ผ ํฌํธ๋ฅผ ์ง์ ํ๋ ๊ฒ ๋์ ์
ํฌํธ ๋ฒ์๋ฅผ ์ง์ ํ ์ ์๋๋ก, endPort
ํ๋์ ์ฌ์ฉ์ ํ์ฑํํ๋ค.NetworkPolicyStatus
: ๋คํธ์ํฌํด๋ฆฌ์ ์ค๋ธ์ ํธ์ ๋ํด status
์๋ธ๋ฆฌ์์ค๋ฅผ ํ์ฑํํ๋ค.NodeInclusionPolicyInPodTopologySpread
: ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ๋น๋์นญ๋๋ฅผ ๊ณ์ฐํ ๋
ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด ์
nodeAffinityPolicy
์ nodeTaintsPolicy
๋ฅผ ํ์ฑํํ๋ค.NodeOutOfServiceVolumeDetach
: ๋
ธ๋๊ฐ node.kubernetes.io/out-of-service
ํ
์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ๋ถ๊ฐ(out-of-service)๋ก ํ์๋๋ฉด,
๋
ธ๋์ ์๋ ์ด ํ
์ธํธ๋ฅผ ํ์ฉํ์ง ์๋ ํ๋๋ ๊ฐ์ ๋ก ์ญ์ ๋๋ฉฐ,
์ข
๋ฃ๋๋ ํ๋์ ๋ํ ๋ณผ๋ฅจ ํด์ (detach) ๋์๋ ์ฆ์ ์ํ๋๋ค.
์ด๋ก ์ธํด ์ญ์ ๋ ํ๋๊ฐ ๋ค๋ฅธ ๋
ธ๋์์ ๋น ๋ฅด๊ฒ ๋ณต๊ตฌ๋ ์ ์๋ค.NodeSwap
: ๋
ธ๋์ ์ฟ ๋ฒ๋คํฐ์ค ์ํฌ๋ก๋์ฉ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ค๋ฉด kubelet์ ํ์ฑํํ๋ค.
๋ฐ๋์ KubeletConfiguration.failSwapOn
๋ฅผ false๋ก ์ค์ ํ ํ ์ฌ์ฉํด์ผ ํ๋ค.
๋ ์์ธํ ์ ๋ณด๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ฅผ ์ฐธ๊ณ ํ๋ค.NonPreemptingPriority
: ํ๋ผ์ด์ด๋ฆฌํฐํด๋์ค(PriorityClass)์ ํ๋์ preemptionPolicy
ํ๋๋ฅผ ํ์ฑํํ๋ค.OpenAPIEnums
: API ์๋ฒ๋ก๋ถํฐ ๋ฆฌํด๋ ์คํ ๋ด OpenAPI ์คํค๋ง์
"enum" ํ๋ ์ฑ์ฐ๊ธฐ๋ฅผ ํ์ฑํํ๋ค.OpenAPIV3
: API ์๋ฒ์ OpenAPI v3 ๋ฐํ์ ํ์ฑํํ๋ค.PDBUnhealthyPodEvictionPolicy
: PodDisruptionBudget
์ unhealthyPodEvictionPolicy
ํ๋๋ฅผ ํ์ฑํํ๋ค.
๋น์ ์(unhealthy) ํ๋๊ฐ ์ด๋ ์์ ์ ์ถ์ถ ๋์์ด ๋ ์ง๋ฅผ ์ด ํ๋์ ๋ช
์ํ๋ค.
๋ ์์ธํ ์ ๋ณด๋ ๋น์ ์ ํ๋ ์ถ์ถ ์ ์ฑ
์ ์ฐธ๊ณ ํ๋ค.PodDeletionCost
: ๋ ํ๋ฆฌ์นด์
๋ค์ด์ค์ผ์ผ ์ ์ญ์ ๋ ํ๋์ ์ฐ์ ์์๋ฅผ ์ฌ์ฉ์๊ฐ ์กฐ์ ํ ์ ์๋๋ก,
ํ๋ ์ญ์ ๋น์ฉ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.PodAffinityNamespaceSelector
: ํ๋ ์ดํผ๋ํฐ ๋ค์์คํ์ด์ค ์
๋ ํฐ
๊ธฐ๋ฅ๊ณผ
CrossNamespacePodAffinity
์ฟผํฐ ๋ฒ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.PodAndContainerStatsFromCRI
: kubelet์ด ์ปจํ
์ด๋์ ํ๋์ ๋ํ ํต๊ณ์น๋ค์
cAdvisor๊ฐ ์๋ CRI ์ปจํ
์ด๋ ๋ฐํ์์ผ๋ก๋ถํฐ ์์งํ๋๋ก ์ค์ ํ๋ค.PodDisruptionConditions
: ์ค๋จ(disruption)์ผ๋ก ์ธํด ํ๋๊ฐ ์ญ์ ๋๊ณ ์์์ ๋ํ๋ด๋ ํ๋ ์ปจ๋์
์ ์ถ๊ฐํ๋๋ก ์ง์ํ๋ค.PodHasNetworkCondition
: kubelet์ด ํ๋์ ํ๋ ๋คํธ์ํฌ ์ค๋น์ฑ ์ปจ๋์
์ ํ์ํ๋๋ก ์ง์ํ๋ค.PodSchedulingReadiness
: ํ๋์ ์ค์ผ์ค๋ง ์ค๋น์ฑ ์ ์ ์ดํ ์ ์๋๋ก schedulingGates
ํ๋๋ฅผ ํ์ฑํํ๋ค.PodSecurity
: PodSecurity
์ด๋๋ฏธ์
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ค.PreferNominatedNode
: ์ด ํ๋๊ทธ๋ ํด๋ฌ์คํฐ์ ์กด์ฌํ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ๋ฐ๋ณตํด์ ๊ฒ์ฌํ๊ธฐ ์ ์
์ง์ ๋ ๋
ธ๋๋ฅผ ๋จผ์ ๊ฒ์ฌํ ์ง ์ฌ๋ถ๋ฅผ
์ค์ผ์ค๋ฌ์ ์๋ ค์ค๋ค.ProbeTerminationGracePeriod
: ํ๋์ ํ๋ก๋ธ-์์ค
terminationGracePeriodSeconds
์ค์ ํ๊ธฐ
๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
๋ ์์ธํ ์ฌํญ์ ๊ธฐ๋ฅ๊ฐ์ ์ ์ ์ ์ฐธ๊ณ ํ๋ค.ProcMountType
: SecurityContext์ procMount
ํ๋๋ฅผ ์ค์ ํ์ฌ
์ปจํ
์ด๋์ proc ํ์
์ ๋ง์ดํธ๋ฅผ ์ ์ดํ ์ ์๋ค.ProxyTerminatingEndpoints
: ExternalTrafficPolicy=Local
์ผ ๋ ์ข
๋ฃ ์๋ํฌ์ธํธ๋ฅผ ์ฒ๋ฆฌํ๋๋ก
kube-proxy๋ฅผ ํ์ฑํํ๋ค.QOSReserved
: QoS ์์ค์์ ๋ฆฌ์์ค ์์ฝ์ ํ์ฉํ์ฌ ๋ฎ์ QoS ์์ค์ ํ๋๊ฐ
๋ ๋์ QoS ์์ค์์ ์์ฒญ๋ ๋ฆฌ์์ค๋ก ํ์ด๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค
(ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ง ํด๋น).ReadWriteOncePod
: ReadWriteOncePod
ํผ์์คํดํธ ๋ณผ๋ฅจ ์์ธ์ค ๋ชจ๋๋ฅผ
์ฌ์ฉํ๋ค.RecoverVolumeExpansionFailure
: ์ด์ ์ ์คํจํ๋ ๋ณผ๋ฅจ ํ์ฅ์ผ๋ก๋ถํฐ ๋ณต๊ตฌํ ์ ์๋๋ก,
์ฌ์ฉ์๊ฐ PVC๋ฅผ ๋ ์์ ํฌ๊ธฐ๋ก ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ค.
๋ณผ๋ฅจ ํ์ฅ ์ ์ค๋ฅ ๋ณต๊ตฌ ์์
์์ธํ ์ฌํญ์ ํ์ธํ๋ค.RemainingItemCount
: API ์๋ฒ๊ฐ
์ฒญํฌ(chunking) ๋ชฉ๋ก ์์ฒญ ์ ๋ํ
์๋ต์์ ๋จ์ ํญ๋ชฉ ์๋ฅผ ํ์ํ๋๋ก ํ์ฉํ๋ค.RemoveSelfLink
: ๋ชจ๋ ์ค๋ธ์ ํธ์ ์ฝ๋ ์
์ ๋ํด .metadata.selfLink
ํ๋๋ฅผ ๋น ์นธ(๋น ๋ฌธ์์ด)์ผ๋ก ์ค์ ํ๋ค.
์ด ํ๋๋ ์ฟ ๋ฒ๋คํฐ์ค v1.16์์ ์ฌ์ฉ ์ค๋จ๋์๋ค.
์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด, .metadata.selfLink
ํ๋๋ ์ฟ ๋ฒ๋คํฐ์ค API์ ์กด์ฌํ์ง๋ง,
ํญ์ ๋น ์นธ์ผ๋ก ์ ์ง๋๋ค.RetroactiveDefaultStorageClass
: ์ฐ๊ฒฐ์ด ํด์ ๋(unbound) PVC์ ์คํ ๋ฆฌ์งํด๋์ค๋ฅผ ์๊ธ์ ์ผ๋ก ํ ๋นํ๋ ๊ฒ์ ํ์ฉํ๋ค.RotateKubeletServerCertificate
: kubelet์์ ์๋ฒ TLS ์ธ์ฆ์์ ๋กํ
์ด์
์ ํ์ฑํํ๋ค.
์์ธํ ์ฌํญ์
kubelet ๊ตฌ์ฑ ์ ํ์ธํ๋ค.SELinuxMountReadWriteOncePod
: kubelet์ผ๋ก ํ์ฌ๊ธ,
๋ณผ๋ฅจ์ ์๋ ๋ชจ๋ ํ์ผ์ ๋ํด SELinux ๋ ์ด๋ธ์ ์ฌ๊ท์ ์ผ๋ก ์ ์ฉํ๋ ๋์
์ฌ๋ฐ๋ฅธ SELinux ๋ ์ด๋ธ์ ๊ฐ์ง๊ณ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ์ ์๋๋ก ํ๋ค.SeccompDefault
: ๋ชจ๋ ์ํฌ๋ก๋์ ๊ธฐ๋ณธ ๊ตฌ๋ถ ํ๋กํ์ผ๋ก
RuntimeDefault
์ ์ฌ์ฉํ๋ค.
seccomp ํ๋กํ์ผ์ ํ๋ ๋ฐ ์ปจํ
์ด๋ securityContext
์ ์ง์ ๋์ด ์๋ค.SELinuxMountReadWriteOncePod
: kubelet์ผ๋ก ํ์ฌ๊ธ,
๋ณผ๋ฅจ์ ์๋ ๋ชจ๋ ํ์ผ์ ๋ํด SELinux ๋ ์ด๋ธ์ ์ฌ๊ท์ ์ผ๋ก ์ ์ฉํ๋ ๋์
์ฌ๋ฐ๋ฅธ SELinux ๋ ์ด๋ธ์ ๊ฐ์ง๊ณ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ์ ์๋๋ก ํ๋ค.ServerSideApply
: API ์๋ฒ์์ SSA(Sever Side Apply)
๊ฒฝ๋ก๋ฅผ ํ์ฑํํ๋ค.ServerSideFieldValidation
: ์๋ฒ-์ฌ์ด๋(server-side) ํ๋ ๊ฒ์ฆ์ ํ์ฑํํ๋ค.
์ด๋ ๋ฆฌ์์ค ์คํค๋ง์ ๊ฒ์ฆ์ด ํด๋ผ์ด์ธํธ ์ฌ์ด๋(์: kubectl create
๋๋ kubectl apply
๋ช
๋ น์ค)๊ฐ ์๋๋ผ
API ์๋ฒ ์ฌ์ด๋์์ ์ํ๋จ์ ์๋ฏธํ๋ค.ServiceInternalTrafficPolicy
: ์๋น์ค์์ internalTrafficPolicy
ํ๋๋ฅผ ํ์ฑํํ๋ค.ServiceLBNodePortControl
: ์๋น์ค์์ allocateLoadBalancerNodePorts
ํ๋๋ฅผ ํ์ฑํํ๋ค.ServiceLoadBalancerClass
: ์๋น์ค์์ loadBalancerClass
ํ๋๋ฅผ ํ์ฑํํ๋ค.
์์ธํ ๋ด์ฉ์
๋ก๋๋ฐธ๋ฐ์ ๊ตฌํ์ฒด์ ์ข
๋ฅ ํ์ธํ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.ServiceIPStaticSubrange
: ClusterIP ๋ฒ์๋ฅผ ๋ถํ ํ๋
์๋น์ค ClusterIP ํ ๋น ์ ๋ต์ ํ์ฑํํ๋ค.
ClusterIP ๋์ ํ ๋น์ ์ฃผ๋ก ์์ ๋ฒ์์์ ์ํํ์ฌ,
์ฌ์ฉ์๊ฐ ๊ณ ์ ClusterIP๋ฅผ ํ์ ๋ฒ์์์ ํ ๋นํ๋ ์ํฉ์์๋ ์ถฉ๋ ํ๋ฅ ์ ๋ฎ์ถ ์ ์๋ค.
๋ ์์ธํ ์ฌํญ์
์ถฉ๋ ๋ฐฉ์ง ๋ฅผ ์ฐธ๊ณ ํ๋ค.SizeMemoryBackedVolumes
: memory-backed ๋ณผ๋ฅจ(๋ณดํต emptyDir
๋ณผ๋ฅจ)์ ํฌ๊ธฐ ์ํ์
์ง์ ํ ์ ์๋๋ก kubelets๋ฅผ ํ์ฑํํ๋ค.StatefulSetMinReadySeconds
: ์คํ
์ดํธํ์
์ปจํธ๋กค๋ฌ๊ฐ minReadySeconds
๋ฅผ
๋ฐ์ํ ์ ์๋ค.StatefulSetStartOrdinal
: ์คํ
์ดํธํ์
๋ด์์ ์์ ์์(start ordinal)๋ฅผ ์ค์ ํ ์ ์๋๋ก ํ๋ค.
๋ ์์ธํ ๋ด์ฉ์
์์ ์์ ๋ฅผ
ํ์ธํ๋ค.StorageVersionAPI
: ์คํ ๋ฆฌ์ง ๋ฒ์ API ๋ฅผ
ํ์ฑํํ๋ค.StorageVersionHash
: API ์๋ฒ๊ฐ ๋์ค์ปค๋ฒ๋ฆฌ์์ ์คํ ๋ฆฌ์ง ๋ฒ์ ํด์๋ฅผ ๋
ธ์ถํ๋๋ก
ํ์ฉํ๋ค.SuspendJob
: ์ก ์ค์ง/์ฌ์์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
์์ธํ ๋ด์ฉ์ ์ก ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํ๋ค.TopologyAwareHints
: ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค(EndpointSlices)์์ ํ ํด๋ก์ง ํํธ ๊ธฐ๋ฐ
ํ ํด๋ก์ง-์ด์จ์ด ๋ผ์ฐํ
์ ํ์ฑํํ๋ค. ์์ธํ ๋ด์ฉ์
ํ ํด๋ก์ง ์ธ์ง ํํธ
๋ฅผ ์ฐธ๊ณ ํ๋ค.TopologyManager
: ์ฟ ๋ฒ๋คํฐ์ค์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ํ ์ธ๋ถํ๋ ํ๋์จ์ด ๋ฆฌ์์ค
ํ ๋น์ ์กฐ์ ํ๋ ๋ฉ์ปค๋์ฆ์ ํ์ฑํํ๋ค.
๋
ธ๋์ ํ ํด๋ก์ง ๊ด๋ฆฌ ์ ์ฑ
์ ์ด ๋ฅผ ์ฐธ๊ณ ํ๋ค.TopologyManagerPolicyAlphaOptions
: ํ ํด๋ก์ง ๋งค๋์ ํด๋ฆฌ์(topology manager
policy)์ ์คํ์ ์ด๊ณ ์ํ ํ์ง์ธ ์ต์
์ ๋ฏธ์ธ ์กฐ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ํ์ง ์์ค์ด ์ํ ์ํ์ธ ํ ํด๋ก์ง ๋งค๋์ ์ต์
๊ตฐ ์ ์ ์ดํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ์์ผ๋ก๋ ๋ฒ ํ ๋๋ ์์ ์ํ๋ก ์น๊ธ๋์ง ์๋๋ค.TopologyManagerPolicyBetaOptions
: ํ ํด๋ก์ง ๋งค๋์ ํด๋ฆฌ์(topology manager
policy)์ ์คํ์ ์ด๊ณ ๋ฒ ํ ํ์ง์ธ ์ต์
์ ๋ฏธ์ธ ์กฐ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ํ์ง ์์ค์ด ๋ฒ ํ ์ํ์ธ ํ ํด๋ก์ง ๋งค๋์ ์ต์
๊ตฐ ์ ์ ์ดํ๋ค.
์ด ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ์์ผ๋ก๋ ์์ ์ํ๋ก ์น๊ธ๋์ง ์๋๋ค.TopologyManagerPolicyOptions
: ํ ํด๋ก์ง ๋งค๋์ ํด๋ฆฌ์(topology manager policy)์ ๋ฏธ์ธ ์กฐ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.UserNamespacesStatelessPodsSupport
: ์คํ
์ดํธ๋ฆฌ์ค(stateless) ํ๋์ ๋ํ ์ ์ ๋ค์์คํ์ด์ค ์ง์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.ValidatingAdmissionPolicy
: ์ด๋๋ฏธ์
์ปจํธ๋กค์ CEL(Common Expression Language) ๊ฒ์ฆ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ValidatingAdmissionPolicy ์ง์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.VolumeCapacityPriority
: ๊ฐ์ฉ PV ์ฉ๋์ ๊ธฐ๋ฐ์ผ๋ก
์ฌ๋ฌ ํ ํด๋ก์ง์ ์๋ ๋
ธ๋๋ค์ ์ฐ์ ์์๋ฅผ ์ ํ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.WatchBookmark
: ๊ฐ์์ ๋ถ๋งํฌ(watch bookmark) ์ด๋ฒคํธ ์ง์์ ํ์ฑํํ๋ค.WinDSR
: kube-proxy๊ฐ ์๋์ฐ์ฉ DSR ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ ์ ์๋ค.WinOverlay
: kube-proxy๊ฐ ์๋์ฐ์ฉ ์ค๋ฒ๋ ์ด ๋ชจ๋์์ ์คํ๋ ์ ์๋๋ก ํ๋ค.WindowsHostProcessContainers
: ์๋์ฐ HostProcess ์ปจํ
์ด๋์ ๋ํ ์ง์์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ค.๋ค์ ๋ด์ฉ ์ฌ์ฉ ์ค๋จ ์ ์ฑ
์ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ํ
๊ธฐ๋ฅ๊ณผ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ๋ ํ๋ก์ ํธ์ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ค.์ฟ ๋ฒ๋คํฐ์ค 1.24๋ถํฐ, ์๋ก์ด ๋ฒ ํ API๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ง ์๋ค.
๋ฒ ํ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ค๋ฉด, ์ฐ๊ด๋ API ๋ฆฌ์์ค๋ ํ์ฑํํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, storage.k8s.io/v1beta1/csistoragecapacities
์ ๊ฐ์ ํน์ ๋ฆฌ์์ค๋ฅผ ํ์ฑํํ๋ ค๋ฉด,
--runtime-config=storage.k8s.io/v1beta1/csistoragecapacities
๋ฅผ ์ค์ ํ๋ค.
๋ช
๋ น์ค ํ๋๊ทธ์ ๋ํ ์์ธ ์ฌํญ์ API ๋ฒ์ ๊ท์น ์ ์ฐธ๊ณ ํ๋ค. 11.2 - ์ ๊ฑฐ๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ ์ด ํ์ด์ง๋ ๊ทธ๊ฐ ์ ๊ฑฐ๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ์ ๋ชฉ๋ก์ ๋์ดํ๋ค.
์ด ํ์ด์ง์ ์ ๋ณด๋ ์ฐธ๊ณ ์ฉ์ด๋ค.
์ ๊ฑฐ๋(removed) ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ ๋ ์ด์ ์ ํจํ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ก ์ธ์๋์ง ์๋๋ค๋ ์ ์์ ์กธ์
(GA'ed)์ด๋ ์ฌ์ฉ ์ค๋จ๋(deprecated) ๊ธฐ๋ฅ ๊ฒ์ดํธ์ ๋ค๋ฅด๋ค.
๋ฐ๋ฉด, ์น๊ธ๋๊ฑฐ๋ ์ฌ์ฉ ์ค๋จ๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋
๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ์ปดํฌ๋ํธ๊ฐ ์ธ์ํ ์๋ ์์ง๋ง ํด๋ฌ์คํฐ์์ ์ด๋ ํ ๋์ ์ฐจ์ด๋ ์ ๋ฐํ์ง ์๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ปดํฌ๋ํธ๊ฐ ์ธ์ํ ์ ์๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ๋ณด๋ ค๋ฉด,
์ํ/๋ฒ ํ ๊ธฐ๋ฅ ๊ฒ์ดํธ ํ ๋๋
์น๊ธ/์ฌ์ฉ ์ค๋จ ๊ธฐ๋ฅ ๊ฒ์ดํธ ํ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ ๊ฑฐ๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ ๋ค์์ ์๋ ํ
์ด๋ธ์ ๋ํ ์ค๋ช
์ด๋ค.
"๋์
" ์ด์ ํด๋น ๊ธฐ๋ฅ์ด ์ฒ์ ๋์
๋๊ฑฐ๋ ๋ฆด๋ฆฌ์ค ๋จ๊ณ๊ฐ ๋ณ๊ฒฝ๋
์ฟ ๋ฒ๋คํฐ์ค ๋ฆด๋ฆฌ์ค๋ฅผ ๋ํ๋ธ๋ค. "์ข
๋ฃ" ์ด์ ๊ฐ์ด ์๋ค๋ฉด, ํด๋น ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ง์ง๋ง ์ฟ ๋ฒ๋คํฐ์ค ๋ฆด๋ฆฌ์ค๋ฅผ ๋ํ๋ธ๋ค.
๋ง์ฝ ๊ธฐ๋ฅ ๋จ๊ณ๊ฐ "์ฌ์ฉ ์ค๋จ" ๋๋ "GA" ๋ผ๋ฉด,
"์ข
๋ฃ" ์ด์ ๊ฐ์ ํด๋น ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆด๋ฆฌ์ค๋ฅผ ๋ํ๋ธ๋ค. ์ ๊ฑฐ๋ ๊ธฐ๋ฅ ๊ฒ์ดํธ ๊ธฐ๋ฅ ๋ํดํธ ๋จ๊ณ ๋์
์ข
๋ฃ Accelerators
false
์ํ 1.6 1.10 Accelerators
- ์ฌ์ฉ ์ค๋จ 1.11 1.11 AffinityInAnnotations
false
์ํ 1.6 1.7 AffinityInAnnotations
- ์ฌ์ฉ ์ค๋จ 1.8 1.8 AllowExtTrafficLocalEndpoints
false
๋ฒ ํ 1.4 1.6 AllowExtTrafficLocalEndpoints
true
GA 1.7 1.9 AttachVolumeLimit
false
์ํ 1.11 1.11 AttachVolumeLimit
true
๋ฒ ํ 1.12 1.16 AttachVolumeLimit
true
GA 1.17 1.21 BalanceAttachedNodeVolumes
false
์ํ 1.11 1.21 BalanceAttachedNodeVolumes
false
์ฌ์ฉ ์ค๋จ 1.22 1.22 BlockVolume
false
์ํ 1.9 1.12 BlockVolume
true
๋ฒ ํ 1.13 1.17 BlockVolume
true
GA 1.18 1.21 BoundServiceAccountTokenVolume
false
์ํ 1.13 1.20 BoundServiceAccountTokenVolume
true
๋ฒ ํ 1.21 1.21 BoundServiceAccountTokenVolume
true
GA 1.22 1.23 CRIContainerLogRotation
false
์ํ 1.10 1.10 CRIContainerLogRotation
true
๋ฒ ํ 1.11 1.20 CRIContainerLogRotation
true
GA 1.21 1.22 CSIBlockVolume
false
์ํ 1.11 1.13 CSIBlockVolume
true
๋ฒ ํ 1.14 1.17 CSIBlockVolume
true
GA 1.18 1.21 CSIDriverRegistry
false
์ํ 1.12 1.13 CSIDriverRegistry
true
๋ฒ ํ 1.14 1.17 CSIDriverRegistry
true
GA 1.18 1.21 CSIMigrationAWSComplete
false
์ํ 1.17 1.20 CSIMigrationAWSComplete
- ์ฌ์ฉ ์ค๋จ 1.21 1.21 CSIMigrationAzureDiskComplete
false
์ํ 1.17 1.20 CSIMigrationAzureDiskComplete
- ์ฌ์ฉ ์ค๋จ 1.21 1.21 CSIMigrationAzureFileComplete
false
์ํ 1.17 1.20 CSIMigrationAzureFileComplete
- ์ฌ์ฉ ์ค๋จ 1.21 1.21 CSIMigrationGCEComplete
false
์ํ 1.17 1.20 CSIMigrationGCEComplete
- ์ฌ์ฉ ์ค๋จ 1.21 1.21 CSIMigrationOpenStackComplete
false
์ํ 1.17 1.20 CSIMigrationOpenStackComplete
- ์ฌ์ฉ ์ค๋จ 1.21 1.21 CSIMigrationvSphereComplete
false
๋ฒ ํ 1.19 1.21 CSIMigrationvSphereComplete
- ์ฌ์ฉ ์ค๋จ 1.22 1.22 CSINodeInfo
false
์ํ 1.12 1.13 CSINodeInfo
true
๋ฒ ํ 1.14 1.16 CSINodeInfo
true
GA 1.17 1.22 CSIPersistentVolume
false
์ํ 1.9 1.9 CSIPersistentVolume
true
๋ฒ ํ 1.10 1.12 CSIPersistentVolume
true
GA 1.13 1.16 CSIServiceAccountToken
false
์ํ 1.20 1.20 CSIServiceAccountToken
true
๋ฒ ํ 1.21 1.21 CSIServiceAccountToken
true
GA 1.22 1.24 CSIVolumeFSGroupPolicy
false
์ํ 1.19 1.19 CSIVolumeFSGroupPolicy
true
๋ฒ ํ 1.20 1.22 CSIVolumeFSGroupPolicy
true
GA 1.23 1.25 ConfigurableFSGroupPolicy
false
์ํ 1.18 1.19 ConfigurableFSGroupPolicy
true
๋ฒ ํ 1.20 1.22 ConfigurableFSGroupPolicy
true
GA 1.23 1.25 CronJobControllerV2
false
์ํ 1.20 1.20 CronJobControllerV2
true
๋ฒ ํ 1.21 1.21 CronJobControllerV2
true
GA 1.22 1.23 CSRDuration
true
๋ฒ ํ 1.22 1.23 CSRDuration
true
GA 1.24 1.25 CustomPodDNS
false
์ํ 1.9 1.9 CustomPodDNS
true
๋ฒ ํ 1.10 1.13 CustomPodDNS
true
GA 1.14 1.16 CustomResourceDefaulting
false
์ํ 1.15 1.15 CustomResourceDefaulting
true
๋ฒ ํ 1.16 1.16 CustomResourceDefaulting
true
GA 1.17 1.18 CustomResourcePublishOpenAPI
false
์ํ 1.14 1.14 CustomResourcePublishOpenAPI
true
๋ฒ ํ 1.15 1.15 CustomResourcePublishOpenAPI
true
GA 1.16 1.18 CustomResourceSubresources
false
์ํ 1.10 1.10 CustomResourceSubresources
true
๋ฒ ํ 1.11 1.15 CustomResourceSubresources
true
GA 1.16 1.18 CustomResourceValidation
false
์ํ 1.8 1.8 CustomResourceValidation
true
๋ฒ ํ 1.9 1.15 CustomResourceValidation
true
GA 1.16 1.18 CustomResourceWebhookConversion
false
์ํ 1.13 1.14 CustomResourceWebhookConversion
true
๋ฒ ํ 1.15 1.15 CustomResourceWebhookConversion
true
GA 1.16 1.18 DynamicAuditing
false
์ํ 1.13 1.18 DynamicAuditing
- ์ฌ์ฉ ์ค๋จ 1.19 1.19 DynamicProvisioningScheduling
false
์ํ 1.11 1.11 DynamicProvisioningScheduling
- ์ฌ์ฉ ์ค๋จ 1.12 - DynamicVolumeProvisioning
true
์ํ 1.3 1.7 DynamicVolumeProvisioning
true
GA 1.8 1.12 EnableAggregatedDiscoveryTimeout
true
์ฌ์ฉ ์ค๋จ 1.16 1.17 EnableEquivalenceClassCache
false
์ํ 1.8 1.12 EnableEquivalenceClassCache
- ์ฌ์ฉ ์ค๋จ 1.13 1.23 EndpointSlice
false
์ํ 1.16 1.16 EndpointSlice
false
๋ฒ ํ 1.17 1.17 EndpointSlice
true
๋ฒ ํ 1.18 1.20 EndpointSlice
true
GA 1.21 1.24 EndpointSliceNodeName
false
์ํ 1.20 1.20 EndpointSliceNodeName
true
GA 1.21 1.24 EndpointSliceProxying
false
์ํ 1.18 1.18 EndpointSliceProxying
true
๋ฒ ํ 1.19 1.21 EndpointSliceProxying
true
GA 1.22 1.24 EvenPodsSpread
false
์ํ 1.16 1.17 EvenPodsSpread
true
๋ฒ ํ 1.18 1.18 EvenPodsSpread
true
GA 1.19 1.21 ExperimentalCriticalPodAnnotation
false
์ํ 1.5 1.12 ExperimentalCriticalPodAnnotation
false
์ฌ์ฉ ์ค๋จ 1.13 1.16 ExternalPolicyForExternalIP
true
GA 1.18 1.22 GCERegionalPersistentDisk
true
๋ฒ ํ 1.10 1.12 GCERegionalPersistentDisk
true
GA 1.13 1.16 GenericEphemeralVolume
false
์ํ 1.19 1.20 GenericEphemeralVolume
true
๋ฒ ํ 1.21 1.22 GenericEphemeralVolume
true
GA 1.23 1.24 HugePageStorageMediumSize
false
์ํ 1.18 1.18 HugePageStorageMediumSize
true
๋ฒ ํ 1.19 1.21 HugePageStorageMediumSize
true
GA 1.22 1.24 HugePages
false
์ํ 1.8 1.9 HugePages
true
๋ฒ ํ 1.10 1.13 HugePages
true
GA 1.14 1.16 HyperVContainer
false
์ํ 1.10 1.19 HyperVContainer
false
์ฌ์ฉ ์ค๋จ 1.20 1.20 IPv6DualStack
false
์ํ 1.15 1.20 IPv6DualStack
true
๋ฒ ํ 1.21 1.22 IPv6DualStack
true
GA 1.23 1.24 ImmutableEphemeralVolumes
false
์ํ 1.18 1.18 ImmutableEphemeralVolumes
true
๋ฒ ํ 1.19 1.20 ImmutableEphemeralVolumes
true
GA 1.21 1.24 IngressClassNamespacedParams
false
์ํ 1.21 1.21 IngressClassNamespacedParams
true
๋ฒ ํ 1.22 1.22 IngressClassNamespacedParams
true
GA 1.23 1.24 Initializers
false
์ํ 1.7 1.13 Initializers
- ์ฌ์ฉ ์ค๋จ 1.14 1.14 KubeletConfigFile
false
์ํ 1.8 1.9 KubeletConfigFile
- ์ฌ์ฉ ์ค๋จ 1.10 1.10 KubeletPluginsWatcher
false
์ํ 1.11 1.11 KubeletPluginsWatcher
true
๋ฒ ํ 1.12 1.12 KubeletPluginsWatcher
true
GA 1.13 1.16 LegacyNodeRoleBehavior
false
์ํ 1.16 1.18 LegacyNodeRoleBehavior
true
๋ฒ ํ 1.19 1.20 LegacyNodeRoleBehavior
false
GA 1.21 1.22 MountContainers
false
์ํ 1.9 1.16 MountContainers
false
์ฌ์ฉ ์ค๋จ 1.17 1.17 MountPropagation
false
์ํ 1.8 1.9 MountPropagation
true
๋ฒ ํ 1.10 1.11 MountPropagation
true
GA 1.12 1.14 NamespaceDefaultLabelName
true
๋ฒ ํ 1.21 1.21 NamespaceDefaultLabelName
true
GA 1.22 1.23 NodeDisruptionExclusion
false
์ํ 1.16 1.18 NodeDisruptionExclusion
true
๋ฒ ํ 1.19 1.20 NodeDisruptionExclusion
true
GA 1.21 1.22 NodeLease
false
์ํ 1.12 1.13 NodeLease
true
๋ฒ ํ 1.14 1.16 NodeLease
true
GA 1.17 1.23 PVCProtection
false
์ํ 1.9 1.9 PVCProtection
- ์ฌ์ฉ ์ค๋จ 1.10 1.10 PersistentLocalVolumes
false
์ํ 1.7 1.9 PersistentLocalVolumes
true
๋ฒ ํ 1.10 1.13 PersistentLocalVolumes
true
GA 1.14 1.16 PodDisruptionBudget
false
์ํ 1.3 1.4 PodDisruptionBudget
true
๋ฒ ํ 1.5 1.20 PodDisruptionBudget
true
GA 1.21 1.25 PodOverhead
false
์ํ 1.16 1.17 PodOverhead
true
๋ฒ ํ 1.18 1.23 PodOverhead
true
GA 1.24 1.25 PodPriority
false
์ํ 1.8 1.10 PodPriority
true
๋ฒ ํ 1.11 1.13 PodPriority
true
GA 1.14 1.18 PodReadinessGates
false
์ํ 1.11 1.11 PodReadinessGates
true
๋ฒ ํ 1.12 1.13 PodReadinessGates
true
GA 1.14 1.16 PodShareProcessNamespace
false
์ํ 1.10 1.11 PodShareProcessNamespace
true
๋ฒ ํ 1.12 1.16 PodShareProcessNamespace
true
GA 1.17 1.19 RequestManagement
false
์ํ 1.15 1.16 RequestManagement
- ์ฌ์ฉ ์ค๋จ 1.17 1.17 ResourceLimitsPriorityFunction
false
์ํ 1.9 1.18 ResourceLimitsPriorityFunction
- ์ฌ์ฉ ์ค๋จ 1.19 1.19 ResourceQuotaScopeSelectors
false
์ํ 1.11 1.11 ResourceQuotaScopeSelectors
true
๋ฒ ํ 1.12 1.16 ResourceQuotaScopeSelectors
true
GA 1.17 1.18 RootCAConfigMap
false
์ํ 1.13 1.19 RootCAConfigMap
true
๋ฒ ํ 1.20 1.20 RootCAConfigMap
true
GA 1.21 1.22 RotateKubeletClientCertificate
true
๋ฒ ํ 1.8 1.18 RotateKubeletClientCertificate
true
GA 1.19 1.21 RunAsGroup
true
๋ฒ ํ 1.14 1.20 RunAsGroup
true
GA 1.21 1.22 RuntimeClass
false
์ํ 1.12 1.13 RuntimeClass
true
๋ฒ ํ 1.14 1.19 RuntimeClass
true
GA 1.20 1.24 SCTPSupport
false
์ํ 1.12 1.18 SCTPSupport
true
๋ฒ ํ 1.19 1.19 SCTPSupport
true
GA 1.20 1.22 ScheduleDaemonSetPods
false
์ํ 1.11 1.11 ScheduleDaemonSetPods
true
๋ฒ ํ 1.12 1.16 ScheduleDaemonSetPods
true
GA 1.17 1.18 SelectorIndex
false
์ํ 1.18 1.18 SelectorIndex
true
๋ฒ ํ 1.19 1.19 SelectorIndex
true
GA 1.20 1.25 ServiceAccountIssuerDiscovery
false
์ํ 1.18 1.19 ServiceAccountIssuerDiscovery
true
๋ฒ ํ 1.20 1.20 ServiceAccountIssuerDiscovery
true
GA 1.21 1.23 ServiceAppProtocol
false
์ํ 1.18 1.18 ServiceAppProtocol
true
๋ฒ ํ 1.19 1.19 ServiceAppProtocol
true
GA 1.20 1.22 ServiceLoadBalancerFinalizer
false
์ํ 1.15 1.15 ServiceLoadBalancerFinalizer
true
๋ฒ ํ 1.16 1.16 ServiceLoadBalancerFinalizer
true
GA 1.17 1.20 ServiceNodeExclusion
false
์ํ 1.8 1.18 ServiceNodeExclusion
true
๋ฒ ํ 1.19 1.20 ServiceNodeExclusion
true
GA 1.21 1.22 ServiceTopology
false
์ํ 1.17 1.19 ServiceTopology
false
์ฌ์ฉ ์ค๋จ 1.20 1.22 SetHostnameAsFQDN
false
์ํ 1.19 1.19 SetHostnameAsFQDN
true
๋ฒ ํ 1.20 1.21 SetHostnameAsFQDN
true
GA 1.22 1,24 StartupProbe
false
์ํ 1.16 1.17 StartupProbe
true
๋ฒ ํ 1.18 1.19 StartupProbe
true
GA 1.20 1.23 StorageObjectInUseProtection
true
๋ฒ ํ 1.10 1.10 StorageObjectInUseProtection
true
GA 1.11 1.24 StreamingProxyRedirects
false
๋ฒ ํ 1.5 1.5 StreamingProxyRedirects
true
๋ฒ ํ 1.6 1.17 StreamingProxyRedirects
true
์ฌ์ฉ ์ค๋จ 1.18 1.21 StreamingProxyRedirects
false
์ฌ์ฉ ์ค๋จ 1.22 1.24 SupportIPVSProxyMode
false
์ํ 1.8 1.8 SupportIPVSProxyMode
false
๋ฒ ํ 1.9 1.9 SupportIPVSProxyMode
true
๋ฒ ํ 1.10 1.10 SupportIPVSProxyMode
true
GA 1.11 1.20 SupportNodePidsLimit
false
์ํ 1.14 1.14 SupportNodePidsLimit
true
๋ฒ ํ 1.15 1.19 SupportNodePidsLimit
true
GA 1.20 1.23 SupportPodPidsLimit
false
์ํ 1.10 1.13 SupportPodPidsLimit
true
๋ฒ ํ 1.14 1.19 SupportPodPidsLimit
true
GA 1.20 1.23 Sysctls
true
๋ฒ ํ 1.11 1.20 Sysctls
true
GA 1.21 1.22 TTLAfterFinished
false
์ํ 1.12 1.20 TTLAfterFinished
true
๋ฒ ํ 1.21 1.22 TTLAfterFinished
true
GA 1.23 1.24 TaintBasedEvictions
false
์ํ 1.6 1.12 TaintBasedEvictions
true
๋ฒ ํ 1.13 1.17 TaintBasedEvictions
true
GA 1.18 1.20 TaintNodesByCondition
false
์ํ 1.8 1.11 TaintNodesByCondition
true
๋ฒ ํ 1.12 1.16 TaintNodesByCondition
true
GA 1.17 1.18 TokenRequest
false
์ํ 1.10 1.11 TokenRequest
true
๋ฒ ํ 1.12 1.19 TokenRequest
true
GA 1.20 1.21 TokenRequestProjection
false
์ํ 1.11 1.11 TokenRequestProjection
true
๋ฒ ํ 1.12 1.19 TokenRequestProjection
true
GA 1.20 1.21 ValidateProxyRedirects
false
์ํ 1.12 1.13 ValidateProxyRedirects
true
๋ฒ ํ 1.14 1.21 ValidateProxyRedirects
true
์ฌ์ฉ ์ค๋จ 1.22 1.24 VolumePVCDataSource
false
์ํ 1.15 1.15 VolumePVCDataSource
true
๋ฒ ํ 1.16 1.17 VolumePVCDataSource
true
GA 1.18 1.21 VolumeScheduling
false
์ํ 1.9 1.9 VolumeScheduling
true
๋ฒ ํ 1.10 1.12 VolumeScheduling
true
GA 1.13 1.16 VolumeSnapshotDataSource
false
์ํ 1.12 1.16 VolumeSnapshotDataSource
true
๋ฒ ํ 1.17 1.19 VolumeSnapshotDataSource
true
GA 1.20 1.22 VolumeSubpath
true
GA 1.10 1.24 VolumeSubpathEnvExpansion
false
์ํ 1.14 1.14 VolumeSubpathEnvExpansion
true
๋ฒ ํ 1.15 1.16 VolumeSubpathEnvExpansion
true
GA 1.17 1.24 WarningHeaders
true
๋ฒ ํ 1.19 1.21 WarningHeaders
true
GA 1.22 1.24 WindowsEndpointSliceProxying
false
์ํ 1.19 1.20 WindowsEndpointSliceProxying
true
๋ฒ ํ 1.21 1.21 WindowsEndpointSliceProxying
true
GA 1.22 1.24 WindowsGMSA
false
์ํ 1.14 1.15 WindowsGMSA
true
๋ฒ ํ 1.16 1.17 WindowsGMSA
true
GA 1.18 1.20 WindowsRunAsUserName
false
์ํ 1.16 1.16 WindowsRunAsUserName
true
๋ฒ ํ 1.17 1.17 WindowsRunAsUserName
true
GA 1.18 1.20
Descriptions for removed feature gates Accelerators
: ๋์ปค ์์ง ์ฌ์ฉ ์ Nvidia GPU ์ง์์ ํ์ฑํํ๋
ํ๋ฌ๊ทธ์ธ์ ์ด๊ธฐ ํํ๋ฅผ ์ ๊ณตํ์์ผ๋ฉฐ, ์ฌ์ฉ ์ค๋จ๋์๋ค.
๋์์ ์ํด์๋ ์ฅ์น ํ๋ฌ๊ทธ์ธ ์
ํ์ธํ๋ค.
AffinityInAnnotations
: ํ๋ ์ดํผ๋ํฐ ๋๋ ์ํฐ-์ดํผ๋ํฐ
์ค์ ์ ํ์ฑํํ๋ค.
AllowExtTrafficLocalEndpoints
: ์๋น์ค๊ฐ ์ธ๋ถ ์์ฒญ์ ๋
ธ๋์ ๋ก์ปฌ ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ
ํ ์ ์๋๋ก ํ๋ค.
AttachVolumeLimit
: ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ด ๋
ธ๋์ ์ฐ๊ฒฐ๋ ์ ์๋ ๋ณผ๋ฅจ ์์
๋ํ ์ ํ์ ๋ณด๊ณ ํ๋๋ก ํ๋ค.
์์ธํ ๋ด์ฉ์ ๋์ ๋ณผ๋ฅจ ์ ํ ์
์ฐธ๊ณ ํ๋ค.
BalanceAttachedNodeVolumes
: ์ค์ผ์ค๋ง ์ ๊ท ํ ์กํ ๋ฆฌ์์ค ํ ๋น์ ์ํด ๊ณ ๋ คํ ๋
ธ๋์ ๋ณผ๋ฅจ ์๋ฅผ
ํฌํจํ๋ค. ์ค์ผ์ค๋ฌ๊ฐ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋์ CPU, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ๋ฐ ๋ณผ๋ฅจ ์๊ฐ
๋ ๊ฐ๊น์ด ๋
ธ๋๊ฐ ์ ํธ๋๋ค.
BlockVolume
: ํ๋์์ ์์ ๋ธ๋ก ์ฅ์น์ ์ ์์ ์ฌ์ฉ์ ํ์ฑํํ๋ค.
์์ธํ ๋ด์ฉ์ ์์ ๋ธ๋ก ๋ณผ๋ฅจ ์ง์ ์
์ฐธ๊ณ ํ๋ค.
BoundServiceAccountTokenVolume
: ServiceAccountTokenVolumeProjection์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ์
๋ณผ๋ฅจ์ ์ฌ์ฉํ๋๋ก
์๋น์ค์ด์นด์ดํธ ๋ณผ๋ฅจ์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ค.
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ serviceaccount_stale_tokens_total
๋ฉํธ๋ฆญ์ ์ฌ์ฉํ์ฌ
ํ์ฅ ํ ํฐ์ ์์กดํ๋ ์ํฌ๋ก๋๋ฅผ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ค.
์ด๋ฌํ ์ํฌ๋ก๋๊ฐ ์๋ ๊ฒฝ์ฐ --service-account-extend-token-expiration=false
ํ๋๊ทธ๋ก
kube-apiserver
๋ฅผ ์์ํ์ฌ ํ์ฅ ํ ํฐ ๊ธฐ๋ฅ์ ๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ฐ์ด๋ ์๋น์ค ๊ณ์ ํ ํฐ ์ ํ์ธํ๋ค.
CRIContainerLogRotation
: CRI ์ปจํ
์ด๋ ๋ฐํ์์ ์ปจํ
์ด๋ ๋ก๊ทธ ๋กํ
์ด์
์ ํ์ฑํํ๋ค.
๋ก๊ทธ ํ์ผ ์ฌ์ด์ฆ ๊ธฐ๋ณธ๊ฐ์ 10MB์ด๋ฉฐ,
์ปจํ
์ด๋ ๋น ์ต๋ ๋ก๊ทธ ํ์ผ ์ ๊ธฐ๋ณธ๊ฐ์ 5์ด๋ค.
์ด ๊ฐ์ kubelet ํ๊ฒฝ์ค์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
๋ ์์ธํ ๋ด์ฉ์
๋
ธ๋ ๋ ๋ฒจ์์์ ๋ก๊น
์ ์ฐธ๊ณ ํ๋ค.
CSIBlockVolume
: ์ธ๋ถ CSI ๋ณผ๋ฅจ ๋๋ผ์ด๋ฒ๊ฐ ๋ธ๋ก ์คํ ๋ฆฌ์ง๋ฅผ ์ง์ํ ์ ์๊ฒ ํ๋ค.
์์ธํ ๋ด์ฉ์ csi
์์ ๋ธ๋ก ๋ณผ๋ฅจ ์ง์ ์
์ฐธ๊ณ ํ๋ค.
CSIDriverRegistry
: csi.storage.k8s.io์์ CSIDriver API ์ค๋ธ์ ํธ์ ๊ด๋ จ๋
๋ชจ๋ ๋ก์ง์ ํ์ฑํํ๋ค.
CSIMigrationAWSComplete
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์์ EBS ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ์ค์งํ๊ณ shim ๋ฐ ๋ณํ ๋ก์ง์ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ ์์
์ AWS-EBS
์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ EBS CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ CSIMigration๊ณผ CSIMigrationAWS ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋๊ณ
EBS CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ๋์ด ์์ด์ผ ํ๋ค.
์ด ํ๋๊ทธ๋ ์ธ-ํธ๋ฆฌ EBS ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ๋ง๋ InTreePluginAWSUnregister
๊ธฐ๋ฅ ํ๋๊ทธ๋ก ์ธํด
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค.
CSIMigrationAzureDiskComplete
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์์
Azure-Disk ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ์ค์งํ๊ณ
shim ๋ฐ ๋ณํ ๋ก์ง์ ์ฌ์ฉํ์ฌ
๋ณผ๋ฅจ ์์
์ Azure-Disk ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ AzureDisk CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ CSIMigration๊ณผ CSIMigrationAzureDisk ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋๊ณ
AzureDisk CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ๋์ด ์์ด์ผ ํ๋ค.
์ด ํ๋๊ทธ๋ ์ธ-ํธ๋ฆฌ AzureDisk ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ๋ง๋
InTreePluginAzureDiskUnregister
๊ธฐ๋ฅ ํ๋๊ทธ๋ก ์ธํด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค.
CSIMigrationAzureFileComplete
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์์ Azure ํ์ผ ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ์ค์งํ๊ณ shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์
Azure ํ์ผ ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ AzureFile CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก
๋ผ์ฐํ
ํ ์ ์๋ค. ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ CSIMigration๊ณผ CSIMigrationAzureFile ๊ธฐ๋ฅ
ํ๋๊ทธ๊ฐ ํ์ฑํ๋๊ณ AzureFile CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ๋์ด
์์ด์ผ ํ๋ค. ์ด ํ๋๊ทธ๋ ์ธ-ํธ๋ฆฌ AzureFile ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ๋ง๋
InTreePluginAzureFileUnregister
๊ธฐ๋ฅ ํ๋๊ทธ๋ก ์ธํด
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค.
CSIMigrationGCEComplete
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์์ GCE-PD
์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ์ค์งํ๊ณ shim ๋ฐ ๋ณํ ๋ก์ง์ ํตํด ๋ณผ๋ฅจ ์์
์ GCE-PD
์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์ PD CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ผ์ฐํ
ํ ์ ์๋ค.
CSIMigration๊ณผ CSIMigrationGCE ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋๊ณ PD CSI
ํ๋ฌ๊ทธ์ธ์ด ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ๋์ด ์์ด์ผ ํ๋ค.
์ด ํ๋๊ทธ๋ ์ธ-ํธ๋ฆฌ GCE PD ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ๋ง๋ InTreePluginGCEUnregister
๊ธฐ๋ฅ ํ๋๊ทธ๋ก ์ธํด
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค.
CSIMigrationOpenStackComplete
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์์
Cinder ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ์ค์งํ๊ณ shim ๋ฐ ๋ณํ ๋ก์ง์ด Cinder ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ์์ Cinder CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ณผ๋ฅจ ์์
์ ๋ผ์ฐํ
ํ ์ ์๋๋ก ํ๋ค.
ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ CSIMigration๊ณผ CSIMigrationOpenStack ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋๊ณ
Cinder CSI ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ๋์ด ์์ด์ผ ํ๋ค.
์ด ํ๋๊ทธ๋ ์ธ-ํธ๋ฆฌ openstack cinder ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ๋ง๋ InTreePluginOpenStackUnregister
๊ธฐ๋ฅ ํ๋๊ทธ๋ก ์ธํด
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค.
CSIMigrationvSphereComplete
: kubelet ๋ฐ ๋ณผ๋ฅจ ์ปจํธ๋กค๋ฌ์์ vSphere ์ธ-ํธ๋ฆฌ
ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ์ค์งํ๊ณ shim ๋ฐ ๋ณํ ๋ก์ง์ ํ์ฑํํ์ฌ vSphere ์ธ-ํธ๋ฆฌ ํ๋ฌ๊ทธ์ธ์์
vSphere CSI ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ณผ๋ฅจ ์์
์ ๋ผ์ฐํ
ํ ์ ์๋๋ก ํ๋ค. CSIMigration ๋ฐ
CSIMigrationvSphere ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ํ์ฑํ๋๊ณ vSphere CSI ํ๋ฌ๊ทธ์ธ์ด
ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ ์ค์น ๋ฐ ๊ตฌ์ฑ์ด ๋์ด ์์ด์ผ ํ๋ค.
์ด ํ๋๊ทธ๋ ์ธ-ํธ๋ฆฌ vsphere ํ๋ฌ๊ทธ์ธ์ ๋ฑ๋ก์ ๋ง๋ InTreePluginvSphereUnregister
๊ธฐ๋ฅ ํ๋๊ทธ๋ก ์ธํด
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค.
CSINodeInfo
: csi.storage.k8s.io
๋ด์ CSINodeInfo API ์ค๋ธ์ ํธ์ ๊ด๋ จ๋ ๋ชจ๋ ๋ก์ง์ ํ์ฑํํ๋ค.
CSIPersistentVolume
: CSI (Container Storage Interface)
ํธํ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ํตํด ํ๋ก๋น์ ๋๋ ๋ณผ๋ฅจ์ ๊ฐ์งํ๊ณ
๋ง์ดํธํ ์ ์๋ค.
CSIServiceAccountToken
: ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋ ํ๋์ ์๋น์ค ๊ณ์ ํ ํฐ์ ๋ฐ์ ์ ์๋๋ก
CSI ๋๋ผ์ด๋ฒ๋ฅผ ํ์ฑํํ๋ค.
ํ ํฐ ์์ฒญ ์ ์ฐธ์กฐํ๋ค.
CSIVolumeFSGroupPolicy
: CSI๋๋ผ์ด๋ฒ๊ฐ fsGroupPolicy
ํ๋๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉํ๋ค.
์ด ํ๋๋ CSI๋๋ผ์ด๋ฒ์์ ์์ฑ๋ ๋ณผ๋ฅจ์ด ๋ง์ดํธ๋ ๋ ๋ณผ๋ฅจ ์์ ๊ถ๊ณผ
๊ถํ ์์ ์ ์ง์ํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ค.
CSRDuration
: ํด๋ผ์ด์ธํธ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค CSR API๋ฅผ ํตํด ๋ฐ๊ธ๋ ์ธ์ฆ์์ ๊ธฐ๊ฐ์
์์ฒญํ ์ ์๋ค.
ConfigurableFSGroupPolicy
: ์ฌ์ฉ์๊ฐ ํ๋์ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ๋ fsGroups์ ๋ํ
๋ณผ๋ฅจ ๊ถํ ๋ณ๊ฒฝ ์ ์ฑ
์ ๊ตฌ์ฑํ ์ ์๋ค. ์์ธํ ๋ด์ฉ์
ํ๋์ ๋ณผ๋ฅจ ๊ถํ ๋ฐ ์์ ๊ถ ๋ณ๊ฒฝ ์ ์ฑ
๊ตฌ์ฑ ์
์ฐธ๊ณ ํ๋ค.
CronJobControllerV2
: ํฌ๋ก ์ก(CronJob)
์ปจํธ๋กค๋ฌ์ ๋์ฒด ๊ตฌํ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด,
๋์ผํ ์ปจํธ๋กค๋ฌ์ ๋ฒ์ 1์ด ์ ํ๋๋ค.
CustomPodDNS
: dnsConfig
์์ฑ์ ์ฌ์ฉํ์ฌ ํ๋์ DNS ์ค์ ์ ์ฌ์ฉ์ ์ ์ํ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ ํ๋์ DNS ์ค์ ์
ํ์ธํ๋ค.
CustomResourceDefaulting
: OpenAPI v3 ์ ํจ์ฑ ๊ฒ์ฌ ์คํค๋ง์์ ๊ธฐ๋ณธ๊ฐ์ ๋ํ CRD ์ง์์ ํ์ฑํํ๋ค.
CustomResourcePublishOpenAPI
: CRD OpenAPI ์ฌ์์ ๊ฒ์ํ ์ ์๋ค.
CustomResourceSubresources
: ์ปค์คํ
๋ฆฌ์์ค๋ฐํผ๋์
์์
์์ฑ๋ ๋ฆฌ์์ค์์ /status
๋ฐ /scale
ํ์ ๋ฆฌ์์ค๋ฅผ ํ์ฑํํ๋ค.
CustomResourceValidation
: ์ปค์คํ
๋ฆฌ์์ค๋ฐํผ๋์
์์
์์ฑ๋ ๋ฆฌ์์ค์์ ์คํค๋ง ๊ธฐ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ์ฑํํ๋ค.
CustomResourceWebhookConversion
: ์ปค์คํ
๋ฆฌ์์ค๋ฐํผ๋์
์์
์์ฑ๋ ๋ฆฌ์์ค์ ๋ํด ์น ํ
๊ธฐ๋ฐ์ ๋ณํ์ ํ์ฑํํ๋ค.
DynamicAuditing
: v1.19 ์ด์ ์ ๋ฒ์ ์์ ๋์ ๊ฐ์ฌ๋ฅผ ํ์ฑํํ๋ ๋ฐ ์ฌ์ฉํ๋ค.
DynamicProvisioningScheduling
: ๋ณผ๋ฅจ ํ ํด๋ก์ง๋ฅผ ์ธ์ํ๊ณ PV ํ๋ก๋น์ ๋์ ์ฒ๋ฆฌํ๋๋ก
๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ฅผ ํ์ฅํ๋ค.
์ด ๊ธฐ๋ฅ์ v1.12์ VolumeScheduling
๊ธฐ๋ฅ์ผ๋ก ๋์ฒด๋์๋ค.
DynamicVolumeProvisioning
: ํ๋์ ํผ์์คํดํธ ๋ณผ๋ฅจ์
๋์ ํ๋ก๋น์ ๋ ์ ํ์ฑํํ๋ค.
EnableAggregatedDiscoveryTimeout
: ์์ง๋ ๊ฒ์ ํธ์ถ์์ 5์ด
์๊ฐ ์ด๊ณผ๋ฅผ ํ์ฑํํ๋ค.
EnableEquivalenceClassCache
: ์ค์ผ์ค๋ฌ๊ฐ ํ๋๋ฅผ ์ค์ผ์ค๋งํ ๋ ๋
ธ๋์
๋๋ฑ์ฑ์ ์บ์ํ ์ ์๊ฒ ํ๋ค.
EndpointSlice
: ๋ณด๋ค ์ค์ผ์ผ๋ง ๊ฐ๋ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋คํธ์ํฌ ์๋ํฌ์ธํธ์ ๋ํ
์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค(EndpointSlices)๋ฅผ ํ์ฑํํ๋ค. ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ํ์ฑํ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
EndpointSliceNodeName
: ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค nodeName
ํ๋๋ฅผ ํ์ฑํํ๋ค.
EndpointSliceProxying
: ํ์ฑํ๋๋ฉด, ๋ฆฌ๋
์ค์์ ์คํ๋๋
kube-proxy๋ ์๋ํฌ์ธํธ ๋์ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค๋ฅผ
๊ธฐ๋ณธ ๋ฐ์ดํฐ ์์ค๋ก ์ฌ์ฉํ์ฌ ํ์ฅ์ฑ๊ณผ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ํ์ฑํ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
EvenPodsSpread
: ํ ํด๋ก์ง ๋๋ฉ์ธ ๊ฐ์ ํ๋๋ฅผ ๊ท ๋ฑํ๊ฒ ์ค์ผ์ค๋งํ ์ ์๋ค.
ํ๋ ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด ์ ์ฐธ๊ณ ํ๋ค.
ExperimentalCriticalPodAnnotation
: ํน์ ํ๋์ critical ๋ก
์ด๋
ธํ
์ด์
์ ๋ฌ์์ ์ค์ผ์ค๋ง์ด ๋ณด์ฅ๋๋๋ก ํ๋ค.
์ด ๊ธฐ๋ฅ์ v1.13๋ถํฐ ํ๋ ์ฐ์ ์์ ๋ฐ ์ ์ ์ผ๋ก ์ธํด ์ฌ์ฉ ์ค๋จ๋์๋ค.
ExternalPolicyForExternalIP
: ExternalTrafficPolicy๊ฐ ์๋น์ค(Service) ExternalIP์ ์ ์ฉ๋์ง ์๋
๋ฒ๊ทธ๋ฅผ ์์ ํ๋ค.
GCERegionalPersistentDisk
: GCE์์ ์ง์ญ PD ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
GenericEphemeralVolume
: ์ผ๋ฐ ๋ณผ๋ฅจ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ ์์, ์ธ๋ผ์ธ
๋ณผ๋ฅจ์ ํ์ฑํํ๋ค(ํ์ฌ ์คํ ๋ฆฌ์ง ๊ณต๊ธ ์
์ฒด, ์คํ ๋ฆฌ์ง ์ฉ๋ ์ถ์ , ์ค๋
์ท์ผ๋ก๋ถํฐ ๋ณต์
๋ฑ์์ ์ ๊ณตํ ์ ์์).
์์ ๋ณผ๋ฅจ ์ ์ฐธ๊ณ ํ๋ค.
HugePageStorageMediumSize
: ์ฌ์ ํ ๋น๋ huge page ์
์ฌ๋ฌ ํฌ๊ธฐ๋ฅผ ์ง์ํ๋ค.
HugePages
: ์ฌ์ ํ ๋น๋ huge page ์
ํ ๋น ๋ฐ ์ฌ์ฉ์ ํ์ฑํํ๋ค.
HyperVContainer
: ์๋์ฐ ์ปจํ
์ด๋๋ฅผ ์ํ
Hyper-V ๊ฒฉ๋ฆฌ
๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
IPv6DualStack
: IPv6์ ์ํ ์ด์ค ์คํ
๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
ImmutableEphemeralVolumes
: ์์ ์ฑ๊ณผ ์ฑ๋ฅ ํฅ์์ ์ํด ๊ฐ๋ณ ์ํฌ๋ฆฟ(Secret)๊ณผ ์ปจํผ๊ทธ๋งต(ConfigMap)์
๋ณ๊ฒฝํ ์ ์๋(immutable) ๊ฒ์ผ๋ก ํ์ํ ์ ์๋ค.
IngressClassNamespacedParams
: ๋ค์์คํ์ด์ค ๋ฒ์์ ํ๋ผ๋ฏธํฐ๊ฐ
IngressClass
๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ํ์ฉํ๋ค.
์ด ๊ธฐ๋ฅ์ IngressClass.spec.parameters
์ Scope
๋ฐ Namespace
์ 2 ํ๋๋ฅผ ์ถ๊ฐํ๋ค.
Initializers
: Initializers ์ด๋๋ฏธ์
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ,
์ค๋ธ์ ํธ ์์ฑ ์ ๋น๋๊ธฐ ํ์กฐ(asynchronous coordination)๋ฅผ ํ์ฉํ๋ค.
KubeletConfigFile
: ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ํ์ผ์์
kubelet ๊ตฌ์ฑ์ ๋ก๋ํ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ ๊ตฌ์ฑ ํ์ผ์ ํตํด kubelet ํ๋ผ๋ฏธํฐ ์ค์ ์
์ฐธ๊ณ ํ๋ค.
KubeletPluginsWatcher
: kubelet์ด CSI ๋ณผ๋ฅจ ๋๋ผ์ด๋ฒ ์ ๊ฐ์
ํ๋ฌ๊ทธ์ธ์ ๊ฒ์ํ ์ ์๋๋ก ํ๋ก๋ธ ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ ๊ฐ์์(watcher) ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ค.
LegacyNodeRoleBehavior
: ๋นํ์ฑํ๋๋ฉด, ์๋น์ค ๋ก๋ ๋ฐธ๋ฐ์ ๋ฐ ๋
ธ๋ ์ค๋จ์ ๋ ๊ฑฐ์ ๋์์
NodeDisruptionExclusion
๊ณผ ServiceNodeExclusion
์ ์ํด ์ ๊ณต๋ ๊ธฐ๋ฅ๋ณ ๋ ์ด๋ธ์ ๋์ ํ์ฌ
node-role.kubernetes.io/master
๋ ์ด๋ธ์ ๋ฌด์ํ๋ค.
MountContainers
: ํธ์คํธ์ ์ ํธ๋ฆฌํฐ ์ปจํ
์ด๋๋ฅผ ๋ณผ๋ฅจ ๋ง์ดํฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
MountPropagation
: ํ ์ปจํ
์ด๋์์ ๋ค๋ฅธ ์ปจํ
์ด๋ ๋๋ ํ๋๋ก ๋ง์ดํธ๋ ๋ณผ๋ฅจ์ ๊ณต์ ํ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ ๋ง์ดํธ ์ ํ(propagation) ์ ์ฐธ๊ณ ํ๋ค.
NamespaceDefaultLabelName
: API ์๋ฒ๋ก ํ์ฌ๊ธ ๋ชจ๋ ๋ค์์คํ์ด์ค์ ๋ํด ๋ณ๊ฒฝํ ์ ์๋ (immutable)
๋ ์ด๋ธ kubernetes.io/metadata.name
์ ์ค์ ํ๋๋ก ํ๋ค.
(๋ค์์คํ์ด์ค์ ์ด๋ฆ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ)
NodeDisruptionExclusion
: ์์ญ(zone) ์ฅ์ ์ ๋
ธ๋๊ฐ ์ ์ธ๋์ง ์๋๋ก ๋
ธ๋ ๋ ์ด๋ธ node.kubernetes.io/exclude-disruption
์ฌ์ฉ์ ํ์ฑํํ๋ค.
NodeLease
: ์๋ก์ด ๋ฆฌ์ค(Lease) API๊ฐ ๋
ธ๋ ์ํ ์ ํธ๋ก ์ฌ์ฉ๋ ์ ์๋ ๋
ธ๋ ํํธ๋นํธ(heartbeats)๋ฅผ ๋ณด๊ณ ํ ์ ์๊ฒ ํ๋ค.
PVCProtection
: ํ๋์์ ์ฌ์ฉ ์ค์ผ ๋ ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์(PVC)์ด
์ญ์ ๋์ง ์๋๋ก ํ๋ค.
PersistentLocalVolumes
: ํ๋์์ local
๋ณผ๋ฅจ ์ ํ์ ์ฌ์ฉ์ ํ์ฑํํ๋ค.
local
๋ณผ๋ฅจ์ ์์ฒญํ๋ ๊ฒฝ์ฐ ํ๋ ์ดํผ๋ํฐ๋ฅผ ์ง์ ํด์ผ ํ๋ค.
PodDisruptionBudget
: PodDisruptionBudget ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
PodOverhead
: ํ๋ ์ค๋ฒํค๋๋ฅผ ํ๋จํ๊ธฐ ์ํด ํ๋์ค๋ฒํค๋(PodOverhead)
๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
PodPriority
: ์ฐ์ ์์ ๋ฅผ
๊ธฐ๋ฐ์ผ๋ก ํ๋์ ์ค์ผ์ค๋ง ์ทจ์์ ์ ์ ์ ํ์ฑํํ๋ค.
PodReadinessGates
: ํ๋ ์ค๋น์ฑ ํ๊ฐ๋ฅผ ํ์ฅํ๊ธฐ ์ํด
PodReadinessGate
ํ๋ ์ค์ ์ ํ์ฑํํ๋ค. ์์ธํ ๋ด์ฉ์ ํ๋์ ์ค๋น์ฑ ๊ฒ์ดํธ ๋ฅผ
์ฐธ๊ณ ํ๋ค.
PodShareProcessNamespace
: ํ๋์์ ์คํ๋๋ ์ปจํ
์ด๋ ๊ฐ์ ๋จ์ผ ํ๋ก์ธ์ค ๋ค์์คํ์ด์ค๋ฅผ
๊ณต์ ํ๊ธฐ ์ํด ํ๋์์ shareProcessNamespace
์ค์ ์ ํ์ฑํํ๋ค. ์์ธํ ๋ด์ฉ์
ํ๋์ ์ปจํ
์ด๋ ๊ฐ ํ๋ก์ธ์ค ๋ค์์คํ์ด์ค ๊ณต์ ์์ ํ์ธํ ์ ์๋ค.
RequestManagement
: ๊ฐ API ์๋ฒ์์ ์ฐ์ ์์ ๋ฐ ๊ณต์ ์ฑ์ผ๋ก ์์ฒญ ๋์์ฑ์
๊ด๋ฆฌํ ์ ์๋ค. 1.17 ์ดํ APIPriorityAndFairness
์์ ์ฌ์ฉ ์ค๋จ๋์๋ค.
ResourceLimitsPriorityFunction
: ์
๋ ฅ ํ๋์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํ๋ ์ค
ํ๋ ์ด์์ ๋ง์กฑํ๋ ๋
ธ๋์ ๊ฐ๋ฅํ ์ต์ ์ ์ 1์ ํ ๋นํ๋
์ค์ผ์ค๋ฌ ์ฐ์ ์์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค. ์๋๋ ๋์ผํ ์ ์๋ฅผ ๊ฐ์ง
๋
ธ๋ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋๋ ๊ฒ์ด๋ค.
ResourceQuotaScopeSelectors
: ๋ฆฌ์์ค ์ฟผํฐ ๋ฒ์ ์
๋ ํฐ๋ฅผ ํ์ฑํํ๋ค.
RootCAConfigMap
: ๋ชจ๋ ๋ค์์คํ์ด์ค์ kube-root-ca.crt
๋ผ๋
์ปจํผ๊ทธ๋งต ์ ๊ฒ์ํ๋๋ก
kube-controller-manager
๋ฅผ ๊ตฌ์ฑํ๋ค. ์ด ์ปจํผ๊ทธ๋งต์๋ kube-apiserver์ ๋ํ ์ฐ๊ฒฐ์ ํ์ธํ๋ ๋ฐ
์ฌ์ฉ๋๋ CA ๋ฒ๋ค์ด ํฌํจ๋์ด ์๋ค. ์์ธํ ๋ด์ฉ์
๋ฐ์ด๋ ์๋น์ค ๊ณ์ ํ ํฐ ์
์ฐธ์กฐํ๋ค.
RotateKubeletClientCertificate
: kubelet์์ ํด๋ผ์ด์ธํธ TLS ์ธ์ฆ์์ ๋กํ
์ด์
์ ํ์ฑํํ๋ค.
์์ธํ ๋ด์ฉ์
kubelet ๊ตฌ์ฑ ์ ์ฐธ๊ณ ํ๋ค.
RunAsGroup
: ์ปจํ
์ด๋์ init ํ๋ก์ธ์ค์ ์ค์ ๋ ๊ธฐ๋ณธ ๊ทธ๋ฃน ID ์ ์ด๋ฅผ ํ์ฑํํ๋ค.
RuntimeClass
: ์ปจํ
์ด๋ ๋ฐํ์ ๊ตฌ์ฑ์ ์ ํํ๊ธฐ ์ํด ๋ฐํ์ํด๋์ค(RuntimeClass)
๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
SCTPSupport
: ํ๋, ์๋น์ค, ์๋ํฌ์ธํธ, ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ๋ฐ ๋คํธ์ํฌํด๋ฆฌ์ ์ ์์์
SCTP protocol
๊ฐ์ ํ์ฑํํ๋ค.
ScheduleDaemonSetPods
: ๋ฐ๋ชฌ์
(DaemonSet) ์ปจํธ๋กค๋ฌ ๋์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ก ๋ฐ๋ชฌ์
ํ๋๋ฅผ
์ค์ผ์ค๋งํ ์ ์๋ค.
SelectorIndex
: API ์๋ฒ ๊ฐ์(watch) ์บ์์ ๋ ์ด๋ธ ๋ฐ ํ๋ ๊ธฐ๋ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ
๋ชฉ๋ก ์์
์ ๊ฐ์ํํ ์ ์๋ค.
ServiceAccountIssuerDiscovery
: API ์๋ฒ์์ ์๋น์ค ์ด์นด์ดํธ ๋ฐํ์์ ๋ํด OIDC ๋์ค์ปค๋ฒ๋ฆฌ ์๋ํฌ์ธํธ(๋ฐ๊ธ์ ๋ฐ
JWKS URL)๋ฅผ ํ์ฑํํ๋ค. ์์ธํ ๋ด์ฉ์
ํ๋์ ์๋น์ค ์ด์นด์ดํธ ๊ตฌ์ฑ ์
์ฐธ๊ณ ํ๋ค.
ServiceAppProtocol
: ์๋น์ค์ ์๋ํฌ์ธํธ์์ appProtocol
ํ๋๋ฅผ ํ์ฑํํ๋ค.
ServiceLoadBalancerFinalizer
: ์๋น์ค ๋ก๋ ๋ฐธ๋ฐ์์ ๋ํ Finalizer ๋ณดํธ๋ฅผ ํ์ฑํํ๋ค.
ServiceNodeExclusion
: ํด๋ผ์ฐ๋ ์ ๊ณต์๊ฐ ์์ฑํ ๋ก๋ ๋ฐธ๋ฐ์์์ ๋
ธ๋๋ฅผ ์ ์ธํ ์ ์๋ค.
"node.kubernetes.io/exclude-from-external-load-balancers
"๋ก ๋ ์ด๋ธ์ด ์ง์ ๋ ๊ฒฝ์ฐ ๋
ธ๋๋ฅผ ์ ์ธํ ์ ์๋ค.
ServiceTopology
: ์๋น์ค๊ฐ ํด๋ฌ์คํฐ์ ๋
ธ๋ ํ ํด๋ก์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํธ๋ํฝ์ ๋ผ์ฐํ
ํ ์ ์๋๋ก ํ๋ค.
์์ธํ ๋ด์ฉ์ ์๋น์คํ ํด๋ก์ง(ServiceTopology) ๋ฅผ ์ฐธ๊ณ ํ๋ค.
SetHostnameAsFQDN
: ์ ์ฒด ์ฃผ์ ๋๋ฉ์ธ ์ด๋ฆ(FQDN)์ ํ๋์ ํธ์คํธ ์ด๋ฆ์ผ๋ก
์ค์ ํ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ค.
ํ๋์ setHostnameAsFQDN
ํ๋ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
StartupProbe
: kubelet์์ ์คํํธ์
ํ๋ก๋ธ๋ฅผ ํ์ฑํํ๋ค.
StorageObjectInUseProtection
: ํผ์์คํดํธ๋ณผ๋ฅจ ๋๋ ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์ ์ค๋ธ์ ํธ๊ฐ ์ฌ์ ํ
์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ์ญ์ ๋ฅผ ์ฐ๊ธฐํ๋ค.
StreamingProxyRedirects
: ์คํธ๋ฆฌ๋ฐ ์์ฒญ์ ์ํด ๋ฐฑ์๋(kubelet)์์ ๋ฆฌ๋๋ ์
์
๊ฐ๋ก์ฑ์ ๋ฐ๋ฅด๋๋ก API ์๋ฒ์ ์ง์ํ๋ค.
์คํธ๋ฆฌ๋ฐ ์์ฒญ์ ์๋ก๋ exec
, attach
๋ฐ port-forward
์์ฒญ์ด ์๋ค.
SupportIPVSProxyMode
: IPVS๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ๋ด ์๋น์ค ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ ๊ณตํ๋ค.
์์ธํ ๋ด์ฉ์ ์๋น์ค ํ๋ก์ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
SupportNodePidsLimit
: ๋
ธ๋์์ PID ์ ํ ์ง์์ ํ์ฑํํ๋ค.
--system-reserved
๋ฐ --kube-reserved
์ต์
์ pid=<number>
ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํ์ฌ ์ง์ ๋ ์์ ํ๋ก์ธ์ค ID๊ฐ
์์คํ
์ ์ฒด์ ๊ฐ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ์์คํ
๋ฐ๋ชฌ์ ๋ํด ์์ฝ๋๋๋ก ํ ์ ์๋ค.
SupportPodPidsLimit
: ํ๋์ PID ์ ํ์ ๋ํ ์ง์์ ํ์ฑํํ๋ค.
Sysctls
: ๊ฐ ํ๋์ ์ค์ ํ ์ ์๋ ๋ค์์คํ์ด์ค ์ปค๋ ํ๋ผ๋ฏธํฐ(sysctl)๋ฅผ ์ง์ํ๋ค.
์์ธํ ๋ด์ฉ์ sysctl ์ ์ฐธ๊ณ ํ๋ค.
TTLAfterFinished
: TTL ์ปจํธ๋กค๋ฌ ๊ฐ
์คํ์ด ๋๋ ํ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋๋ก ํ์ฉํ๋ค.
TaintBasedEvictions
: ๋
ธ๋์ ํ
์ธํธ(taint) ๋ฐ ํ๋์ ํจ๋ฌ๋ ์ด์
(toleration)์ ๊ธฐ๋ฐ์ผ๋ก
๋
ธ๋์์ ํ๋๋ฅผ ์ถ์ถํ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ ํ
์ธํธ์ ํจ๋ฌ๋ ์ด์
์ ์ฐธ๊ณ ํ๋ค.
TaintNodesByCondition
: ๋
ธ๋ ์ปจ๋์
์
๊ธฐ๋ฐ์ผ๋ก ์๋ ํ
์ธํธ ๋
ธ๋๋ฅผ ํ์ฑํํ๋ค.
TokenRequest
: ์๋น์ค ์ด์นด์ดํธ ๋ฆฌ์์ค์์ TokenRequest
์๋ํฌ์ธํธ๋ฅผ ํ์ฑํํ๋ค.
TokenRequestProjection
: projected
๋ณผ๋ฅจ ์ ํตํด
์๋น์ค ์ด์นด์ดํธ ํ ํฐ์ ํ๋์ ์ฃผ์
ํ ์ ์๋ค.
ValidateProxyRedirects
: ์ด ํ๋๊ทธ๋ API ์๋ฒ๊ฐ ๋์ผํ ํธ์คํธ๋ก๋ง ๋ฆฌ๋๋ ์
๋๋๊ฐ๋ฅผ ํ์ธํด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ๋ค.
StreamingProxyRedirects
ํ๋๊ทธ๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋๋ค.
VolumePVCDataSource
: ๊ธฐ์กด PVC๋ฅผ ๋ฐ์ดํฐ ์์ค๋ก ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
VolumeScheduling
: ๋ณผ๋ฅจ ํ ํด๋ก์ง ์ธ์ ์ค์ผ์ค๋ง์ ํ์ฑํํ๊ณ
ํผ์์คํดํธ๋ณผ๋ฅจํด๋ ์(PVC) ๋ฐ์ธ๋ฉ์ด ์ค์ผ์ค๋ง ๊ฒฐ์ ์ ์ธ์ํ๋๋ก ํ๋ค. ๋ํ
PersistentLocalVolumes
๊ธฐ๋ฅ ๊ฒ์ดํธ์ ํจ๊ป ์ฌ์ฉ๋ ๋
local
๋ณผ๋ฅจ ์ ํ์ ์ฌ์ฉํ ์ ์๋ค.
VolumeSnapshotDataSource
: ๋ณผ๋ฅจ ์ค๋
์ท ๋ฐ์ดํฐ ์์ค ์ง์์ ํ์ฑํํ๋ค.
VolumeSubpath
: ์ปจํ
์ด๋์ ๋ณผ๋ฅจ์ ํ์ ๊ฒฝ๋ก(subpath)๋ฅผ ๋ง์ดํธํ ์ ์๋ค.
VolumeSubpathEnvExpansion
: ํ๊ฒฝ ๋ณ์๋ฅผ subPath
๋ก ํ์ฅํ๊ธฐ ์ํด
subPathExpr
ํ๋๋ฅผ ํ์ฑํํ๋ค.
WarningHeaders
: API ์๋ต์์ ๊ฒฝ๊ณ ํค๋๋ฅผ ๋ณด๋ผ ์ ์๋ค.
WindowsEndpointSliceProxying
: ํ์ฑํ๋๋ฉด, ์๋์ฐ์์ ์คํ๋๋ kube-proxy๋
์๋ํฌ์ธํธ ๋์ ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค๋ฅผ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์์ค๋ก ์ฌ์ฉํ์ฌ
ํ์ฅ์ฑ๊ณผ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ํ์ฑํํ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
WindowsGMSA
: ํ๋์์ ์ปจํ
์ด๋ ๋ฐํ์์ผ๋ก GMSA ์๊ฒฉ ์ฆ๋ช
์คํ์ ์ ๋ฌํ ์ ์๋ค.
WindowsRunAsUserName
: ๊ธฐ๋ณธ ์ฌ์ฉ์๊ฐ ์๋(non-default) ์ฌ์ฉ์๋ก ์๋์ฐ ์ปจํ
์ด๋์์
์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ์ ์๋๋ก ์ง์ํ๋ค. ์์ธํ ๋ด์ฉ์
RunAsUserName ๊ตฌ์ฑ ์ ์ฐธ๊ณ ํ๋ค.
11.3 - kube-proxy ์๋์์ค ์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํฌ ํ๋ก์๋ ๊ฐ ๋
ธ๋์์ ์คํ๋๋ค.
์ด๋ ๊ฐ ๋
ธ๋์ ์ฟ ๋ฒ๋คํฐ์ค API์ ์ ์๋ ์๋น์ค๋ฅผ ๋ฐ์ํ๋ฉฐ ๋จ์ํ
TCP, UDP ๋ฐ SCTP ์คํธ๋ฆผ ํฌ์๋ฉ ๋๋ ๋ผ์ด๋ ๋ก๋น TCP, UDP ๋ฐ SCTP ํฌ์๋ฉ์ ๋ฐฑ์๋ ์
์์ ์ํ ํ ์ ์๋ค.
์๋น์ค ํด๋ฌ์คํธ IP ๋ฐ ํฌํธ๋ ํ์ฌ ์๋น์ค ํ๋ก์์ ์ํด ์ด๋ฆฐ ํฌํธ๋ฅผ ์ง์ ํ๋
Docker-links-compatible ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ์ฐพ์ ์ ์๋ค.
์ด๋ฌํ ํด๋ฌ์คํฐ IP์ ํด๋ฌ์คํฐ DNS๋ฅผ ์ ๊ณตํ๋ ์ ํ์ ์ ๋์จ์ด ์๋ค. ์ ์ ๋ apiserver API๋ก
์๋น์ค๋ฅผ ์์ฑํ์ฌ ํ๋ก์๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ค.
kube-proxy [flags]
์ต์
--add_dir_header true์ธ ๊ฒฝ์ฐ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๋ก๊ทธ ๋ฉ์์ง์ ํค๋์ ์ถ๊ฐํ๋ค.
--alsologtostderr ํ์ผ๊ณผ ํจ๊ป, ํ์ค ์๋ฌ์๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค.
--bind-address string ๊ธฐ๋ณธ๊ฐ: 0.0.0.0 ํ๋ก์ ์๋ฒ๊ฐ ์๋น์คํ IP ์ฃผ์(๋ชจ๋ IPv4 ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ '0.0.0.0'์ผ๋ก ์ค์ , ๋ชจ๋ IPv6 ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ '::'๋ก ์ค์ )
--bind-address-hard-fail true์ธ ๊ฒฝ์ฐ kube-proxy๋ ํฌํธ ๋ฐ์ธ๋ฉ ์คํจ๋ฅผ ์น๋ช
์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ข
๋ฃํ๋ค.
--boot-id-file string ๊ธฐ๋ณธ๊ฐ: "/proc/sys/kernel/random/boot_id" boot-id๋ฅผ ์ํด ํ์ธํ ํ์ผ ๋ชฉ๋ก(์ผํ๋ก ๋ถ๋ฆฌ). ๊ฐ์ฅ ๋จผ์ ๋ฐ๊ฒฌ๋๋ ํญ๋ชฉ์ ์ฌ์ฉํ๋ค.
--cleanup true์ธ ๊ฒฝ์ฐ iptables ๋ฐ ipvs ๊ท์น์ ์ ๊ฑฐํ๊ณ ์ข
๋ฃํ๋ค.
--cluster-cidr string ํด๋ฌ์คํฐ์ ์๋ ํ๋์ CIDR ๋ฒ์. ๊ตฌ์ฑ ํ์๋ ์ด ๋ฒ์ ๋ฐ์์ ์๋น์ค ํด๋ฌ์คํฐ IP๋ก ์ ์ก๋๋ ํธ๋ํฝ์ ๋ง์ค์ปค๋ ์ด๋๋๊ณ ํ๋์์ ์ธ๋ถ LoadBalancer IP๋ก ์ ์ก๋ ํธ๋ํฝ์ ๋์ ํด๋น ํด๋ฌ์คํฐ IP๋ก ์ ์ก๋๋ค. ๋์ผ-์คํ(dual-stack) ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ, ๊ฐ IP ์ฒด๊ณ(IPv4์ IPv6)๋ณ๋ก ์ต์ํ ํ๋์ CIDR์ ํฌํจํ๋ ๋ชฉ๋ก(์ผํ๋ก ๋ถ๋ฆฌ)์ ๊ฐ์ง๋ค. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--config string ์ค์ ํ์ผ์ ๊ฒฝ๋ก.
--config-sync-period duration ๊ธฐ๋ณธ๊ฐ: 15m0s apiserver์ ์ค์ ์ด ๊ฐฑ์ ๋๋ ๋น๋. 0๋ณด๋ค ์ปค์ผ ํ๋ค.
--conntrack-max-per-core int32 ๊ธฐ๋ณธ๊ฐ: 32768 CPU ์ฝ์ด๋น ์ถ์ ํ ์ต๋ NAT ์ฐ๊ฒฐ ์(ํ๋(limit)๋ฅผ ๊ทธ๋๋ก ๋๊ณ contrack-min์ ๋ฌด์ํ๋ ค๋ฉด 0์ผ๋ก ์ค์ ํ๋ค)(
--conntrack-min int32 ๊ธฐ๋ณธ๊ฐ: 131072 conntrack-max-per-core์ ๊ด๊ณ์์ด ํ ๋นํ ์ต์ conntrack ํญ๋ชฉ ์(ํ๋๋ฅผ ๊ทธ๋๋ก ๋๋ ค๋ฉด conntrack-max-per-core๊ฐ์ 0์ผ๋ก ์ค์ ).
--conntrack-tcp-timeout-close-wait duration ๊ธฐ๋ณธ๊ฐ: 1h0m0s CLOSE_WAIT ์ํ์ TCP ์ฐ๊ฒฐ์ ๋ํ NAT ์๊ฐ ์ด๊ณผ
--conntrack-tcp-timeout-established duration ๊ธฐ๋ณธ๊ฐ: 24h0m0s ์ค์ ๋ TCP ์ฐ๊ฒฐ์ ๋ํ ์ ํด์๊ฐ ์ด๊ณผ(๊ฐ์ด 0์ด๋ฉด ๊ทธ๋๋ก ์ ์ง)
--detect-local-mode LocalMode ๋ก์ปฌ ํธ๋ํฝ์ ํ์งํ๋ ๋ฐ ์ฌ์ฉํ ๋ชจ๋. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--feature-gates <์ผํ๋ก ๊ตฌ๋ถ๋ 'key=True|False' ์๋ค> ์ํ/์คํ์ ๊ธฐ๋ฅ์ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ๋ํ๋ด๋ `key=value` ์์ ์งํฉ. ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์
์ ๋ค์๊ณผ ๊ฐ๋ค: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (BETA - default=true) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=true) CSIMigrationPortworx=true|false (BETA - default=false) CSIMigrationRBD=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=true) CSINodeExpandSecret=true|false (ALPHA - default=false) CSIVolumeHealth=true|false (ALPHA - default=false) ContainerCheckpoint=true|false (ALPHA - default=false) CronJobTimeZone=true|false (BETA - default=true) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (BETA - default=true) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IPTablesOwnershipCleanup=true|false (ALPHA - default=false) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobPodFailurePolicy=true|false (ALPHA - default=false) JobReadyPods=true|false (BETA - default=true) JobTrackingWithFinalizers=true|false (BETA - default=true) KMSv2=true|false (ALPHA - default=false) KubeletCredentialProviders=true|false (BETA - default=true) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) KubeletTracing=true|false (ALPHA - default=false) LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (BETA - default=true) LogarithmicScaleDown=true|false (BETA - default=true) MatchLabelKeysInPodTopologySpread=true|false (ALPHA - default=false) MaxUnavailableStatefulSet=true|false (ALPHA - default=false) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MinDomainsInPodTopologySpread=true|false (BETA - default=false) MixedProtocolLBService=true|false (BETA - default=true) MultiCIDRRangeAllocator=true|false (ALPHA - default=false) NetworkPolicyStatus=true|false (ALPHA - default=false) NodeInclusionPolicyInPodTopologySpread=true|false (ALPHA - default=false) NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false) NodeSwap=true|false (ALPHA - default=false) OpenAPIEnums=true|false (BETA - default=true) OpenAPIV3=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodDisruptionConditions=true|false (ALPHA - default=false) PodHasNetworkCondition=true|false (ALPHA - default=false) ProbeTerminationGracePeriod=true|false (BETA - default=true) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RetroactiveDefaultStorageClass=true|false (ALPHA - default=false) RotateKubeletServerCertificate=true|false (BETA - default=true) SELinuxMountReadWriteOncePod=true|false (ALPHA - default=false) SeccompDefault=true|false (BETA - default=true) ServerSideFieldValidation=true|false (BETA - default=true) ServiceIPStaticSubrange=true|false (BETA - default=true) ServiceInternalTrafficPolicy=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=true) TopologyManager=true|false (BETA - default=true) UserNamespacesStatelessPodsSupport=true|false (ALPHA - default=false) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true) --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--healthz-bind-address ipport ๊ธฐ๋ณธ๊ฐ: 0.0.0.0:10256 ํฌ์ค ์ฒดํฌ ์๋ฒ๊ฐ ์๋น์คํ ํฌํธ๊ฐ ์๋ IP ์ฃผ์(๋ชจ๋ IPv4์ ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ '0.0.0.0:10256', ๋ชจ๋ IPv6์ ์ธํฐํ์ด์ค์ธ ๊ฒฝ์ฐ '[::]:10256'๋ก ์ค์ )์ด๋ฉฐ, ์ฌ์ฉ ์ ํ ๊ฒฝ์ฐ ๋น์นธ์ผ๋ก ๋๋ค. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
-h, --help kube-proxy์ ๋ํ ๋์๋ง.
--hostname-override string ๋ฌธ์์ด ๊ฐ์ด ์์ผ๋ฉด, ์ด ๊ฐ์ ์ค์ ํธ์คํธ๋ค์ ๋์ ์ ID๋ก ์ฌ์ฉํ๋ค.
--iptables-masquerade-bit int32 ๊ธฐ๋ณธ๊ฐ: 14 ์์ iptable ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ SNAT๊ฐ ํ์ํ ํจํท์ ํ์ํ๋ fwmark ์คํ์ด์ค ๋นํธ. [0, 31] ๋ฒ์ ์์ ์์ด์ผ ํ๋ค.
--iptables-min-sync-period duration ๊ธฐ๋ณธ๊ฐ: 1s ์๋ํฌ์ธํธ ๋ฐ ์๋น์ค๊ฐ ๋ณ๊ฒฝ๋ ๋ iptable ๊ท์น์ ์๋ก ๊ณ ์น ์ ์๋ ๋น๋์ ์ต์ ๊ฐ๊ฒฉ(์: '5s', '1m', '2h22m').
--iptables-sync-period duration ๊ธฐ๋ณธ๊ฐ: 30s iptable ๊ท์น์ ์๋ก ๊ณ ์น๋ ๋น๋์ ์ต๋ ๊ฐ๊ฒฉ(์: '5s', '1m', '2h22m'). 0 ๋ณด๋ค ์ปค์ผ ํ๋ค.
--ipvs-exclude-cidrs stringSlice IPVS ๊ท์น์ ์ ๋ฆฌํ ๋ ipvs ํ๋ก์๊ฐ ๊ฑด๋๋ฆฌ์ง ์์์ผ ํ๋ ์ผํ๋ก ๊ตฌ๋ถ๋ CIDR ๋ชฉ๋ก.
--ipvs-min-sync-period duration ์๋ํฌ์ธํธ ๋ฐ ์๋น์ค๊ฐ ๋ณ๊ฒฝ๋ ๋ ipvs ๊ท์น์ ์๋ก ๊ณ ์น ์ ์๋ ๋น๋์ ์ต์ ๊ฐ๊ฒฉ(์: '5s', '1m', '2h22m').
--ipvs-scheduler string ํ๋ก์ ๋ชจ๋๊ฐ ipvs์ธ ๊ฒฝ์ฐ ipvs ์ค์ผ์ค๋ฌ ์ ํ.
--ipvs-strict-arp arp_ignore๋ฅผ 1๋ก ์ค์ ํ๊ณ arp_annotes๋ฅผ 2๋ก ์ค์ ํ์ฌ ์๊ฒฉํ ARP๋ฅผ ์ฌ์ฉ.
--ipvs-sync-period duration ๊ธฐ๋ณธ๊ฐ: 30s ipvs ๊ท์น์ด ์๋ก ๊ฐฑ์ ๋๋ ๋น๋์ ์ต๋ ๊ฐ๊ฒฉ(์: '5s', '1m', '2h22m'). 0 ๋ณด๋ค ์ปค์ผ ํ๋ค.
--ipvs-tcp-timeout duration ์ ํด IPVS TCP ์ฐ๊ฒฐ์ ๋ํ ์๊ฐ ์ด๊ณผ. 0์ด๋ฉด ๊ทธ๋๋ก ์ ์ง(์: '5s', '1m', '2h22m').
--ipvs-tcpfin-timeout duration FIN ํจํท์ ์์ ํ ํ IPVS TCP ์ฐ๊ฒฐ์ ๋ํ ์๊ฐ ์ด๊ณผ. 0์ด๋ฉด ๊ทธ๋๋ก ์ ์ง(์: '5s', '1m', '2h22m').
--ipvs-udp-timeout duration IPVS UDP ํจํท์ ๋ํ ์๊ฐ ์ด๊ณผ. 0์ด๋ฉด ๊ทธ๋๋ก ์ ์ง(์: '5s', '1m', '2h22m').
--kube-api-burst int32 ๊ธฐ๋ณธ๊ฐ: 10 ์ฟ ๋ฒ๋คํฐ์ค api ์๋ฒ์ ํต์ ํ๋ ๋์ ์ฌ์ฉํ burst.
--kube-api-content-type string ๊ธฐ๋ณธ๊ฐ: "application/vnd.kubernetes.protobuf" api ์๋ฒ์ ๋ณด๋ธ ์์ฒญ์ ๋ด์ฉ ์ ํ.
--kube-api-qps float32 ๊ธฐ๋ณธ๊ฐ: 5 ์ฟ ๋ฒ๋คํฐ์ค api ์๋ฒ์ ํต์ ํ ๋ ์ฌ์ฉํ QPS.
--kubeconfig string ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ kubeconfig ํ์ผ์ ๊ฒฝ๋ก(๋ง์คํฐ ์์น๋ ๋ง์คํฐ ํ๋๊ทธ๋ก ์ค์ ๋จ).
--log_backtrace_at <'file:N' ํ์์ ๋ฌธ์์ด> ๊ธฐ๋ณธ๊ฐ: :0 ํ์ผ์ N๊ฐ ์ค๋งํผ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ฒ ๋๋ฉด, ์คํ ํธ๋ ์ด์ค๋ฅผ ์ถ๋ ฅํ๋ค.
--log_dir string ๋ก๊ทธ ํ์ผ์ ์ง์ ๋ ๊ฒฝ๋ก ์๋์ ์ฐ๋ฉฐ, ๋น์ด์์ ๊ฒฝ์ฐ ๋ฌด์๋๋ค.
--log_file string ์ง์ ๋ ๋ก๊ทธ ํ์ผ์ ์ฌ์ฉํ๋ฉฐ, ๋น์ด์์ ๊ฒฝ์ฐ ๋ฌด์๋๋ค.
--log_file_max_size uint ๊ธฐ๋ณธ๊ฐ: 1800 ๋ก๊ทธ ํ์ผ์ ์ต๋ ํฌ๊ธฐ๋ฅผ MB ๋จ์๋ก ์ง์ ํ๋ฉฐ, ๊ฐ์ด 0์ผ ๊ฒฝ์ฐ๋ ์ต๋ ํฌ๊ธฐ์ ์ ํ์ด ์๋ค.
--logtostderr ๊ธฐ๋ณธ๊ฐ: true ๋ก๊ทธ๋ฅผ ํ์ผ ๋์ ํ์ค ์๋ฌ์ ์ถ๋ ฅํ๋ค.
--machine-id-file string ๊ธฐ๋ณธ๊ฐ: "/etc/machine-id,/var/lib/dbus/machine-id" machine-id๋ฅผ ์ํด ํ์ธํ ํ์ผ ๋ชฉ๋ก(์ผํ๋ก ๋ถ๋ฆฌ). ๊ฐ์ฅ ๋จผ์ ๋ฐ๊ฒฌ๋๋ ํญ๋ชฉ์ ์ฌ์ฉํ๋ค.
--masquerade-all ์์ iptables ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋น์ค ํด๋ฌ์คํฐ IP๋ฅผ ํตํด ์ ์ก๋ ๋ชจ๋ ํธ๋ํฝ์ SNATํจ(์ผ๋ฐ์ ์ผ๋ก ํ์ํ์ง ์์).
--master string ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ์ ์ฃผ์(kubeconfig์ ๋ชจ๋ ๊ฐ ๋ฎ์ด์ฐ๊ธฐ).
--metrics-bind-address ipport ๊ธฐ๋ณธ๊ฐ: 127.0.0.1:10249 ๋ฉํธ๋ฆญ ์๋ฒ๊ฐ ์๋น์คํ ํฌํธ๊ฐ ์๋ IP ์ฃผ์(๋ชจ๋ IPv4 ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ '0.0.0.0:10249', ๋ชจ๋ IPv6 ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ '[::]:10249'๋ก ์ค์ ๋จ)๋ก, ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด ๋น์๋๋ค. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--nodeport-addresses stringSlice NodePort์ ์ฌ์ฉํ ์ฃผ์๋ฅผ ์ง์ ํ๋ ๊ฐ์ ๋ฌธ์์ด ์กฐ๊ฐ. ๊ฐ์ ์ ํจํ IP ๋ธ๋ก(์: 1.2.3.0/24, 1.2.3.4/32). ๊ธฐ๋ณธ๊ฐ์ธ ๋น ๋ฌธ์์ด ์กฐ๊ฐ๊ฐ์([]) ๋ชจ๋ ๋ก์ปฌ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
--one_output true์ผ ๊ฒฝ์ฐ, ์ฌ๊ฐ๋ ๊ธฐ๋ณธ ๋ ๋ฒจ์์๋ง ๋ก๊ทธ๋ฅผ ์ด๋ค(false์ผ ๊ฒฝ์ฐ ํฌ๊ฒ ์ฌ๊ฐํ์ง ์์ ๋จ๊ณ์์๋ ๋ก๊ทธ๋ฅผ ์ด๋ค).
--oom-score-adj int32 ๊ธฐ๋ณธ๊ฐ: -999 kube-proxy ํ๋ก์ธ์ค์ ๋ํ oom-score-adj ๊ฐ. ๊ฐ์ [-1000, 1000] ๋ฒ์ ๋ด์ ์์ด์ผ ํ๋ค. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--pod-bridge-interface string ํด๋ฌ์คํฐ ๋ด์ ๋ธ๋ฆฌ์ง ์ธํฐํ์ด์ค ์ด๋ฆ์ผ๋ก, kube-proxy๋ ์ง์ ๋ ์ธํฐํ์ด์ค๋ก๋ถํฐ ๋ฐ์ํ ํธ๋ํฝ์ ๋ก์ปฌ๋ก ๊ฐ์ฃผํ๋ค. DetectLocalMode๊ฐ BridgeInterface๋ก ์ค์ ๋์ด ์์ ๊ฒฝ์ฐ, ํด๋น ์ธ์๋ ๊ฐ์ด ์ค์ ๋์ด์ผ ํ๋ค.
--pod-interface-name-prefix string ํด๋ฌ์คํฐ ๋ด์์ ์ธํฐํ์ด์ค์ ์ ๋์ฌ๋ก, kube-proxy๋ ์ง์ ๋ ์ ๋์ฌ๊ฐ ๋ถ์ ์ธํฐํ์ด์ค๋ก๋ถํฐ ๋ฐ์ํ ํธ๋ํฝ์ ๋ก์ปฌ๋ก ๊ฐ์ฃผํ๋ค. DetectLocalMode๊ฐ InterfaceNamePrefix๋ก ์ค์ ๋์ด ์์ ๊ฒฝ์ฐ, ํด๋น ์ธ์๋ ๊ฐ์ด ์ค์ ๋์ด์ผ ํ๋ค.
--profiling ๊ฐ์ด true์ด๋ฉด /debug/pprof ํธ๋ค๋ฌ์์ ์น ์ธํฐํ์ด์ค๋ฅผ ํตํ ํ๋กํ์ผ๋ง์ ํ์ฑํํ๋ค. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--proxy-mode ProxyMode ์ฌ์ฉํ ํ๋ก์ ๋ชจ๋: 'iptables' (๋ฆฌ๋
์ค), 'ipvs' (๋ฆฌ๋
์ค), 'kernelspace' (์๋์ฐ), ๋๋ 'userspace' (๋ฆฌ๋
์ค/์๋์ฐ, ์ง์ ์ค๋จ). ๋ฆฌ๋
์ค์์์ ๊ธฐ๋ณธ๊ฐ์ 'iptables'์ด๋ฉฐ, ์๋์ฐ์์์ ๊ธฐ๋ณธ๊ฐ์ 'userspace'(์ถํ 'kernelspace'๋ก ๋ณ๊ฒฝ๋ ์์ )์ด๋ค. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--proxy-port-range port-range ์๋น์ค ํธ๋ํฝ์ ํ๋ก์ํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ํธ์คํธ ํฌํธ ๋ฒ์(beginPort-endPort, single port ๋๋ beginPort+offset ํฌํจ). ๋ง์ฝ ๋ฒ์๊ฐ 0, 0-0, ํน์ ์ง์ ๋์ง ์์ผ๋ฉด, ํฌํธ๋ ๋ฌด์์๋ก ์ ํ๋๋ค.
--show-hidden-metrics-for-version string ์จ๊ฒจ์ง ๋ฉํธ๋ฆญ์ ํ์ํ๋ ค๋ ์ด์ ๋ฒ์ . ์ด์ ๋ง์ด๋ ๋ฒ์ ๋ง ์ธ์ํ๋ฉฐ, ๋ค๋ฅธ ๊ฐ์ ํ์ฉํ์ง ์๋๋ค. ํฌ๋ฉง์ <๋ฉ์ด์ >.<๋ง์ด๋> ์ ๊ฐ์ผ๋ฉฐ, ์๋ฅผ ๋ค๋ฉด '1.16' ๊ณผ ๊ฐ๋ค. ์ด ํฌ๋ฉง์ ๋ชฉ์ ์, ๋ค์ ๋ฆด๋ฆฌ์ค๊ฐ ์จ๊ธธ ์ถ๊ฐ์ ์ธ ๋ฉํธ๋ฆญ์ ์ฌ์ฉ์์๊ฒ ๊ณต์งํ์ฌ, ๊ทธ ์ดํ ๋ฆด๋ฆฌ์ค์์ ๋ฉํธ๋ฆญ์ด ์๊ตฌ์ ์ผ๋ก ์ญ์ ๋์ ๋ ์ฌ์ฉ์๊ฐ ๋๋ผ์ง ์๋๋ก ํ๊ธฐ ์ํจ์ด๋ค. --config๋ฅผ ํตํด ์ค์ ํ์ผ์ด ๋ช
์๋ ๊ฒฝ์ฐ ์ด ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋๋ค.
--skip_headers true์ผ ๊ฒฝ์ฐ, ๋ก๊ทธ ๋ฉ์์ง์ ํค๋๋ฅผ ์ฐ์ง ์๋๋ค.
--skip_log_headers true์ผ ๊ฒฝ์ฐ, ๋ก๊ทธ ํ์ผ์ ์ด ๋ ํค๋๋ฅผ ๋ณด์ฌ์ฃผ์ง ์๋๋ค.
--stderrthreshold int ๊ธฐ๋ณธ๊ฐ: 2 ํด๋น ์๊ณ๊ฐ ์ด์์ ๋ก๊ทธ๋ฅผ ํ์ค์๋ฌ๋ก ๋ณด๋ธ๋ค.
--udp-timeout duration ๊ธฐ๋ณธ๊ฐ: 250ms ์ ํด UDP ์ฐ๊ฒฐ์ด ์ด๋ฆฐ ์ํ๋ก ์ ์ง๋๋ ์๊ฐ(์: '250ms', '2s'). ๊ฐ์ 0๋ณด๋ค ์ปค์ผ ํ๋ค. ํ๋ก์ ๋ชจ๋ userspace์๋ง ์ ์ฉ ๊ฐ๋ฅํจ.
-v, --v int ๋ก๊ทธ ์์ธ ๋ ๋ฒจ(verbosity) ๊ฐ
--version version[=true] ๋ฒ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ณ ์ข
๋ฃ
--vmodule <์ผํ๋ก ๊ตฌ๋ถ๋ 'pattern=N' ์ค์ ๋ค> ํ์ผ ํํฐ ๋ก๊น
์ ์ํ pattern=N ์ค์ ๋ชฉ๋ก(์ผํ๋ก ๋ถ๋ฆฌ).
--write-config-to string ๊ธฐ๋ณธ ๊ตฌ์ฑ ๊ฐ์ ์ด ํ์ผ์ ์ฎ๊ฒจ์ฐ๊ณ ์ข
๋ฃํ๋ค.
12 - ์ค์ผ์ค๋ง 12.1 - ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ ๊ธฐ๋ฅ ์ํ:
Kubernetes v1.25 [stable]
๊ตฌ์ฑ ํ์ผ์ ์์ฑํ๊ณ ํด๋น ๊ฒฝ๋ก๋ฅผ ์ปค๋งจ๋ ๋ผ์ธ ์ธ์๋ก ์ ๋ฌํ์ฌ
kube-scheduler
์ ๋์์ ์ฌ์ฉ์ ์ ์ํ ์ ์๋ค.
์ค์ผ์ค๋ง ํ๋กํ์ผ(Profile)์ ์ฌ์ฉํ๋ฉด kube-scheduler ์์
์ฌ๋ฌ ๋จ๊ณ์ ์ค์ผ์ค๋ง์ ๊ตฌ์ฑํ ์ ์๋ค.
๊ฐ ๋จ๊ณ๋ ์ต์คํ
์
ํฌ์ธํธ(extension point)๋ฅผ ํตํด ๋
ธ์ถ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์ด๋ฌํ
์ต์คํ
์
ํฌ์ธํธ ์ค ํ๋ ์ด์์ ๊ตฌํํ์ฌ ์ค์ผ์ค๋ง ๋์์ ์ ๊ณตํ๋ค.
KubeSchedulerConfiguration (v1beta3
๋๋ v1 )
๊ตฌ์กฐ์ ๋ง๊ฒ ํ์ผ์ ์์ฑํ๊ณ ,
kube-scheduler --config <filename>
์ ์คํํ์ฌ
์ค์ผ์ค๋ง ํ๋กํ์ผ์ ์ง์ ํ ์ ์๋ค.
์ต์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
clientConnection :
kubeconfig : /etc/srv/kubernetes/kube-scheduler/kubeconfig
์ฐธ๊ณ : KubeSchedulerConfiguration
v1beta2 ๋
v1.25๋ถํฐ ์ฌ์ฉ ์ค๋จ๋์๊ณ v1.26๋ถํฐ ์ ๊ฑฐ๋๋ค. KubeSchedulerConfiguration์
v1beta3 ๋๋
v1 ๋ก ์ ํํ ๋ค์
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ v1.25๋ก ์
๊ทธ๋ ์ด๋ํ๋๋ก ํ๋ค.
ํ๋กํ์ผ ์ค์ผ์ค๋ง ํ๋กํ์ผ์ ์ฌ์ฉํ๋ฉด kube-scheduler ์์
์ฌ๋ฌ ๋จ๊ณ์ ์ค์ผ์ค๋ง์ ๊ตฌ์ฑํ ์ ์๋ค.
๊ฐ ๋จ๊ณ๋ ์ต์คํ
์
ํฌ์ธํธ ์ ๋
ธ์ถ๋๋ค.
ํ๋ฌ๊ทธ์ธ ์ ์ด๋ฌํ ์ต์คํ
์
ํฌ์ธํธ ์ค
ํ๋ ์ด์์ ๊ตฌํํ์ฌ ์ค์ผ์ค๋ง ๋์์ ์ ๊ณตํ๋ค.
kube-scheduler
์ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ์ฌ
์ฌ๋ฌ ํ๋กํ์ผ ์ ์คํํ ์ ์๋ค.
์ต์คํ
์
ํฌ์ธํธ ์ค์ผ์ค๋ง์ ๋ค์ ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ํตํด ๋
ธ์ถ๋๋ ์ผ๋ จ์ ๋จ๊ณ์์
๋ฐ์ํ๋ค.
queueSort
: ์ด ํ๋ฌ๊ทธ์ธ์ ์ค์ผ์ค๋ง ๋๊ธฐ์ด์์ ๋ณด๋ฅ ์ค์ธ ํ๋๋ฅผ
์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋๊ธฐ์ด ์ ๋ ฌ ํ๋ฌ๊ทธ์ธ์ ํ ๋ฒ์ ๋จ ํ๋๋ง ํ์ฑํ๋ ์ ์๋ค.
์ฌ์ฉํ ์ ์๋ค.preFilter
: ์ด ํ๋ฌ๊ทธ์ธ์ ํํฐ๋งํ๊ธฐ ์ ์ ํ๋ ๋๋ ํด๋ฌ์คํฐ์ ๋ํ ์ ๋ณด๋ฅผ
์ฌ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋๋ฅผ unschedulable๋ก
ํ์ํ ์ ์๋ค.filter
: ์ด ํ๋ฌ๊ทธ์ธ์ ์ค์ผ์ค๋ง ์ ์ฑ
์ ๋จ์ (Predicates)๊ณผ ๋์ผํ๋ฉฐ
ํ๋๋ฅผ ์คํํ ์ ์๋ ๋
ธ๋๋ฅผ ํํฐ๋งํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ํํฐ๋
๊ตฌ์ฑ๋ ์์๋๋ก ํธ์ถ๋๋ค. ๋
ธ๋๊ฐ ๋ชจ๋ ํํฐ๋ฅผ ํต๊ณผํ์ง ์์ผ๋ฉด ํ๋๋ unschedulable๋ก
ํ์๋๋ค.postFilter
: ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋์ ์คํ ๊ฐ๋ฅํ ๋
ธ๋๋ฅผ ์ฐพ์ ์ ์์ ๋,
๊ตฌ์ฑ๋ ์์๋๋ก ํธ์ถ๋๋ค. postFilter
ํ๋ฌ๊ทธ์ธ์ด ํ๋ schedulable ์ ํ์ํ๋ ๊ฒฝ์ฐ,
๋๋จธ์ง ํ๋ฌ๊ทธ์ธ์ ํธ์ถ ๋์ง ์๋๋ค.preScore
: ์ด๊ฒ์ ์ฌ์ ์ค์ฝ์ด๋ง ์์
์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋
์ ๋ณด์ฑ ์ต์คํ
์
ํฌ์ธํธ์ด๋ค.score
: ์ด ํ๋ฌ๊ทธ์ธ์ ํํฐ๋ง ๋จ๊ณ๋ฅผ ํต๊ณผํ ๊ฐ ๋
ธ๋์ ์ ์๋ฅผ
์ ๊ณตํ๋ค. ๊ทธ๋ฐ ๋ค์ ์ค์ผ์ค๋ฌ๋ ๊ฐ์ค์น ํฉ๊ณ๊ฐ ๊ฐ์ฅ ๋์
๋
ธ๋๋ฅผ ์ ํํ๋ค.reserve
: ์ง์ ๋ ํ๋์ ๋ฆฌ์์ค๊ฐ ์์ฝ๋ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ์
์๋ฆฌ๋ ์ ๋ณด์ฑ ์ต์คํ
์
ํฌ์ธํธ์ด๋ค. ํ๋ฌ๊ทธ์ธ์ ๋ํ
Reserve
๋์ค ๋๋ ์ดํ์ ์คํจํ ๊ฒฝ์ฐ ํธ์ถ ๋๋ Unreserve
ํธ์ถ์
๊ตฌํํ๋ค.permit
: ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋ ๋ฐ์ธ๋ฉ์ ๋ฐฉ์งํ๊ฑฐ๋ ์ง์ฐ์ํฌ ์ ์๋ค.preBind
: ์ด ํ๋ฌ๊ทธ์ธ์ ํ๋๊ฐ ๋ฐ์ธ๋ฉ๋๊ธฐ ์ ์ ํ์ํ ๋ชจ๋ ์์
์ ์ํํ๋ค.bind
: ํ๋ฌ๊ทธ์ธ์ ํ๋๋ฅผ ๋
ธ๋์ ๋ฐ์ธ๋ฉํ๋ค. bind
ํ๋ฌ๊ทธ์ธ์ ์์๋๋ก ํธ์ถ๋๋ฉฐ
์ผ๋จ ๋ฐ์ธ๋ฉ์ด ์๋ฃ๋๋ฉด ๋๋จธ์ง ํ๋ฌ๊ทธ์ธ์ ๊ฑด๋๋ด๋ค. bind
ํ๋ฌ๊ทธ์ธ์ ์ ์ด๋ ํ๋ ์ด์ ํ์ํ๋ค.postBind
: ํ๋๊ฐ ๋ฐ์ธ๋๋ ํ ํธ์ถ๋๋
์ ๋ณด์ฑ ์ต์คํ
์
ํฌ์ธํธ์ด๋ค.multiPoint
: ์ด ํ๋๋ ํ๋ฌ๊ทธ์ธ๋ค์ ๋ชจ๋ ์ ์ฉ ๊ฐ๋ฅํ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด
ํ๋ฌ๊ทธ์ธ๋ค์ ๋์์ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์๊ฒ ํ๋ ํ๊ฒฝ ์ค์ ์ ์ฉ ํ๋์ด๋ค.๊ฐ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด ํน์ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ ์ ๋นํ์ฑํํ๊ฑฐ๋
์์ฒด ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- plugins :
score :
disabled :
- name : PodTopologySpread
enabled :
- name : MyCustomPluginA
weight : 2
- name : MyCustomPluginB
weight : 1
๋นํ์ฑํ๋ ๋ฐฐ์ด์ ์ด๋ฆ์ผ๋ก *
๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ต์คํ
์
ํฌ์ธํธ์ ๋ํ
๋ชจ๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ ์ ์๋ค. ์ํ๋ ๊ฒฝ์ฐ, ํ๋ฌ๊ทธ์ธ ์์๋ฅผ ์ฌ์ ๋ ฌํ๋ ๋ฐ
์ฌ์ฉํ ์๋ ์๋ค.
์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ ๋ค์์ ํ๋ฌ๊ทธ์ธ์ ์ด๋ค ์ต์คํ
์
ํฌ์ธํธ ์ค
ํ๋ ์ด์์ ๊ตฌํํ๋ค.
๊ธฐ๋ณธ์ผ๋ก ํ์ฑํ๋์ง ์๋ ๋ค์์ ํ๋ฌ๊ทธ์ธ์
์ปดํฌ๋ํธ ๊ตฌ์ฑ API๋ฅผ ํตํด ํ์ฑํํ ์๋ ์๋ค.
CinderLimits
: ๋
ธ๋์ ๋ํด OpenStack Cinder
๋ณผ๋ฅจ ์ ํ์ด ์ถฉ์กฑ๋ ์ ์๋์ง ํ์ธํ๋ค.
์ต์คํ
์
ํฌ์ธํธ: filter
.์ฌ๋ฌ ํ๋กํ์ผ ๋ ์ด์์ ํ๋กํ์ผ์ ์คํํ๋๋ก kube-scheduler
๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
๊ฐ ํ๋กํ์ผ์๋ ์ฐ๊ด๋ ์ค์ผ์ค๋ฌ ์ด๋ฆ์ด ์์ผ๋ฉฐ ์ต์คํ
์
ํฌ์ธํธ ์ ๊ตฌ์ฑ๋
๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ ์ธํธ๋ฅผ ๊ฐ์ง ์ ์๋ค.
๋ค์์ ์ํ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ฉด, ์ค์ผ์ค๋ฌ๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ด ์๋
ํ๋กํ์ผ๊ณผ ๋ชจ๋ ์ค์ฝ์ด๋ง ํ๋ฌ๊ทธ์ธ์ด ๋นํ์ฑํ๋ ํ๋กํ์ผ์ ๋ ๊ฐ์ง ํ๋กํ์ผ๋ก
์คํ๋๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : default-scheduler
- schedulerName : no -scoring-scheduler
plugins :
preScore :
disabled :
- name : '*'
score :
disabled :
- name : '*'
ํน์ ํ๋กํ์ผ์ ๋ฐ๋ผ ์ค์ผ์คํ๋ ค๋ ํ๋๋
.spec.schedulerName
์ ํด๋น ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ํฌํจํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, ์ค์ผ์ค๋ฌ ์ด๋ฆ default-scheduler
๋ฅผ ๊ฐ์ง ํ๋์ ํ๋กํ์ผ์ด ์์ฑ๋๋ค.
์ด ํ๋กํ์ผ์๋ ์์์ ์ค๋ช
ํ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ด ํฌํจ๋์ด ์๋ค. ๋ ์ด์์
ํ๋กํ์ผ์ ์ ์ธํ ๋, ๊ฐ๊ฐ์ ๋ํ ๊ณ ์ ํ ์ค์ผ์ค๋ฌ ์ด๋ฆ์ด ํ์ํ๋ค.
ํ๋๊ฐ ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด, kube-apiserver๋ ์ด๋ฅผ default-scheduler
๋ก
์ค์ ํ๋ค. ๋ฐ๋ผ์, ํด๋น ํ๋๋ฅผ ์ค์ผ์คํ๋ ค๋ฉด ์ด ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ๊ฐ์ง ํ๋กํ์ผ์ด
์์ด์ผ ํ๋ค.
์ฐธ๊ณ : ํ๋์ ์ค์ผ์ค๋ง ์ด๋ฒคํธ์๋ ReportingController๋ก .spec.schedulerName
์ด ์๋ค.
๋ฆฌ๋ ์ ์ถ์ ์ํ ์ด๋ฒคํธ๋ ๋ชฉ๋ก์์ ์ฒซ ๋ฒ์งธ ํ๋กํ์ผ์ ์ค์ผ์ค๋ฌ ์ด๋ฆ์
์ฌ์ฉํ๋ค.
์ฐธ๊ณ : ๋ชจ๋ ํ๋กํ์ผ์ queueSort
์ต์คํ
์
ํฌ์ธํธ์์ ๋์ผํ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ผ ํ๋ฉฐ
๋์ผํ ๊ตฌ์ฑ ํ๋ผ๋ฏธํฐ(ํด๋นํ๋ ๊ฒฝ์ฐ)๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. ๊ทธ ์ด์ ๋ ์ค์ผ์ค๋ฌ๊ฐ ๋ณด๋ฅ ์ค ์ํ์ธ ํ๋ ๋๊ธฐ์ด์
๋จ ํ๋๋ง ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.๋ค์์ ์ต์คํ
์
ํฌ์ธํธ์ ํ๋ฌ๊ทธ์ธ ์ ์ฉํ๊ธฐ kubescheduler.config.k8s.io/v1beta3
๋ถํฐ,
๋ค์์ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด ํ๋ฌ๊ทธ์ธ์ ์ฝ๊ฒ ํ์ฑํํ๊ฑฐ๋
๋นํ์ฑํํ ์ ์๊ฒ ํ๋ ํ๋กํ์ผ ํ๊ฒฝ ์ค์ multiPoint
๊ฐ ์ถ๊ฐ๋์๋ค.
์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ๊ด๋ฆฌ์๊ฐ ์ปค์คํ
ํ๋กํ์ผ์ ์ฌ์ฉํ ๋ ํ๊ฒฝ ์ค์ ์ ๊ฐ์ํํ ์ ์๋ค.
preScore
, score
, preFilter
, filter
์ต์คํ
์
ํฌ์ธํธ๊ฐ ์๋ MyPlugin
์ด๋ผ๋ ํ๋ฌ๊ทธ์ธ์ด ์๋ค๊ณ ๊ฐ์ ํ์.
๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด MyPlugin
์ ํ์ฑํํ๋ ค๋ฉด,
๋ค์๊ณผ ๊ฐ์ ํ๋กํ์ผ ํ๊ฒฝ ์ค์ ์ ์ฌ์ฉํ๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
multiPoint :
enabled :
- name : MyPlugin
์์ ์์๋ ์๋์ ๊ฐ์ด ๋ชจ๋ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด MyPlugin
์ ์๋์ผ๋ก ํ์ฑํํ๋ ๊ฒ๊ณผ
๋์ผํ ํจ๊ณผ๋ฅผ ๊ฐ๋๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : non-multipoint-scheduler
plugins :
preScore :
enabled :
- name : MyPlugin
score :
enabled :
- name : MyPlugin
preFilter :
enabled :
- name : MyPlugin
filter :
enabled :
- name : MyPlugin
์ฌ๊ธฐ์ multiPoint
๋ฅผ ์ฌ์ฉํ์ ๋์ ์ด์ ์,
์ถํ MyPlugin
์ด ๋ค๋ฅธ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํ ๊ตฌํ์ ์ถ๊ฐํ์ ๋,
์๋ก์ด ์ต์คํ
์
์ ๋ํด์๋ multiPoint
ํ๊ฒฝ ์ค์ ์ด ์๋์ผ๋ก ํ์ฑํ๋ ๊ฒ์ด๋ผ๋ ์ ์ด๋ค.
disabled
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ, MultiPoint
ํ์ฅ์ผ๋ก๋ถํฐ ํน์ ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ์ ์ธํ ์ ์๋ค.
๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๊ฑฐ๋, ๊ธฐ๋ณธ์ด ์๋(non-default) ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๊ฑฐ๋,
์์ผ๋์นด๋('*'
)๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ ์ ์๋ค.
๋ค์์ Score
์ PreScore
์ ๋ํด ๋นํ์ฑํํ๋ ์์์ด๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : non-multipoint-scheduler
plugins :
multiPoint :
enabled :
- name : 'MyPlugin'
preScore :
disabled :
- name : '*'
score :
disabled :
- name : '*'
kubescheduler.config.k8s.io/v1beta3
๋ถํฐ, MultiPoint
ํ๋๋ฅผ ํตํด
๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ ์ด ํ์ฑํ๋๋ค.
๊ทธ๋ฌ๋, ๊ฐ๋ณ ์ต์คํ
์
ํฌ์ธํธ์ ๋ํด ๊ธฐ๋ณธ๊ฐ(์: ์์, Score ๊ฐ์ค์น)์ ์ ์ฐํ๊ฒ ์ฌ์ค์ ํ๋ ๊ฒ๋ ์ฌ์ ํ ๊ฐ๋ฅํ๋ค.
์๋ฅผ ๋ค์ด, 2๊ฐ์ Score ํ๋ฌ๊ทธ์ธ DefaultScore1
๊ณผ DefaultScore2
๊ฐ ์๊ณ
๊ฐ๊ฐ์ ๊ฐ์ค์น๊ฐ 1
์ด๋ผ๊ณ ํ์.
์ด ๋, ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ค์น๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ์ฌ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
score :
enabled :
- name : 'DefaultScore2'
weight : 5
์ด ์์ ์์, ์ด ํ๋ฌ๊ทธ์ธ๋ค์ MultiPoint
์ ๋ช
์ํ ํ์๋ ์๋๋ฐ,
์ด๋ ์ด ํ๋ฌ๊ทธ์ธ๋ค์ด ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ Score
์๋ DefaultScore2
ํ๋ฌ๊ทธ์ธ๋ง ๋ช
์๋์๋ค.
์ด๋ ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ๋ช
์ํ์ฌ ์ค์ ๋ ํ๋ฌ๊ทธ์ธ์ ์ธ์ ๋ MultiPoint
ํ๋ฌ๊ทธ์ธ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์์ ์์์์๋ ๋ ํ๋ฌ๊ทธ์ธ์ ๋ชจ๋ ๋ช
์ํ์ง ์๊ณ ๋ ๋ ํ๋ฌ๊ทธ์ธ์ ์์๋ฅผ ์กฐ์ ํ์๋ค.
MultiPoint
ํ๋ฌ๊ทธ์ธ์ ์ค์ ํ ๋, ์ผ๋ฐ์ ์ธ ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ช
์๋ ์ต์คํ
์
ํฌ์ธํธ๊ฐ ๋จผ์ ์คํ๋๋ฉฐ, ์ฌ๊ธฐ์ ๋ช
์๋ ํ๊ฒฝ ์ค์ ์ ๋ค๋ฅธ ๋ชจ๋ ๊ณณ์ ์ค์ ๋ ๋ด์ฉ๋ณด๋ค ์ฐ์ ํ๋ค. MultiPoint
๋ฐ ํ๋ฌ๊ทธ์ธ ์ค์ ์ ํตํด ์๋์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ฌ๊ทธ์ธ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ ๋ฐ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ณธ ์ค์ ์์ ์ฐ์ ์์๋ฅผ ์ค๋ช
ํ๊ธฐ ์ํด, ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๊ฐ์ ํ๋ค.
ํ๋ฌ๊ทธ์ธ ์ต์คํ
์
ํฌ์ธํธ DefaultQueueSort
QueueSort
CustomQueueSort
QueueSort
DefaultPlugin1
Score
, Filter
DefaultPlugin2
Score
CustomPlugin1
Score
, Filter
CustomPlugin2
Score
, Filter
์ด๋ค ํ๋ฌ๊ทธ์ธ์ ๋ํ ์ ํจํ ์์ ํ๊ฒฝ ์ค์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion : kubescheduler.config.k8s.io/v1
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
multiPoint :
enabled :
- name : 'CustomQueueSort'
- name : 'CustomPlugin1'
weight : 3
- name : 'CustomPlugin2'
disabled :
- name : 'DefaultQueueSort'
filter :
disabled :
- name : 'DefaultPlugin1'
score :
enabled :
- name : 'DefaultPlugin2'
๋ช
์ํ ์ต์คํ
์
ํฌ์ธํธ ๋ด์ MultiPoint
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ ์ํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์์ ์ ์ํ๋ค.
๋ช
์ํ ์ต์คํ
์
ํฌ์ธํธ์ ์ฐ์ ์์๊ฐ ๋ ๋์ผ๋ฏ๋ก,
์ด ์ฌ์ ์๋ ๋ฌด์๋๊ณ ๋ก๊ทธ์๋ง ๊ธฐ๋ก๋๋ค.
๋๋ถ๋ถ์ ํ๊ฒฝ ์ค์ ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ ๊ฒ ๋ง๊ณ ๋, ์ด ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํฌํจํ๋ค.
์ปค์คํ
queueSort
ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๊ณ ๊ธฐ์กด์ ๊ธฐ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๋ค CustomPlugin1
๊ณผ CustomPlugin2
ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๋ฉฐ, ์ด ํ๋ฌ๊ทธ์ธ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ์ํด ์ด ํ๋ฌ๊ทธ์ธ๋ค์ด ๋จผ์ ์คํ๋๋คfilter
์ ๋ํด์๋ง DefaultPlugin1
์ ๋นํ์ฑํํ๋คscore
์ ๋ํด, DefaultPlugin2
ํ๋ฌ๊ทธ์ธ์ด (์ฌ์ง์ด ์ปค์คํ
ํ๋ฌ๊ทธ์ธ๋ณด๋ค๋) ๊ฐ์ฅ ๋จผ์ ์คํ๋๋๋ก ์์๋ฅผ ์กฐ์ ํ๋คmultiPoint
ํ๋๊ฐ ์๋ v1beta3
์ด์ ๋ฒ์ ์ ํ๊ฒฝ ์ค์ ์์๋, ์์ ์ค๋ํซ์ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค.
apiVersion : kubescheduler.config.k8s.io/v1beta2
kind : KubeSchedulerConfiguration
profiles :
- schedulerName : multipoint-scheduler
plugins :
# ๊ธฐ๋ณธ QueueSort ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ๋ค
queueSort :
enabled :
- name : 'CustomQueueSort'
disabled :
- name : 'DefaultQueueSort'
# ์ปค์คํ
Filter ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๋ค
filter :
enabled :
- name : 'CustomPlugin1'
- name : 'CustomPlugin2'
- name : 'DefaultPlugin2'
disabled :
- name : 'DefaultPlugin1'
# ์ปค์คํ
score ํ๋ฌ๊ทธ์ธ์ ํ์ฑํํ๊ณ ์์๋ฅผ ์กฐ์ ํ๋ค
score :
enabled :
- name : 'DefaultPlugin2'
weight : 1
- name : 'DefaultPlugin1'
weight : 3
๋ค์ ๋ณต์กํ ์์๋ฅผ ํตํด, ์ต์คํ
์
ํฌ์ธํธ๋ฅผ ์ค์ ํจ์ ์์ด์ MultiPoint
ํ๊ฒฝ ์ค์ ์ ์ ์ฐ์ฑ๊ณผ
๊ธฐ์กด ๋ฐฉ๋ฒ๊ณผ์ ๋๊น์๋ ํตํฉ์ ํ์ธํ ์ ์๋ค.
์ค์ผ์ค๋ฌ ์ค์ ์ ํ
์ค์ ๋ฒ์ v1beta2 ์์๋, NodeResourcesFit
ํ๋ฌ๊ทธ์ธ์ ์ํ ์๋ก์ด ์ค์ฝ์ด๋ง ํ์ฅ์
์ด์ฉํ ์ ์๋ค.
์ ํ์ฅ์ NodeResourcesLeastAllocated
, NodeResourcesMostAllocated
,
RequestedToCapacityRatio
ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ฅ์ ํตํฉํ์ฌ ์ ๊ณตํ๋ค.
์๋ฅผ ๋ค์ด, ์ด์ ์ NodeResourcesMostAllocated
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ค๋ฉด,
๋์ NodeResourcesFit
(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ฉด์
๋ค์๊ณผ ๊ฐ์ด scoreStrategy
๋ฅผ ํฌํจํ๋ pluginConfig
๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
apiVersion : kubescheduler.config.k8s.io/v1beta2
kind : KubeSchedulerConfiguration
profiles :
- pluginConfig :
- args :
scoringStrategy :
resources :
- name : cpu
weight : 1
type : MostAllocated
name : NodeResourcesFit
์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ NodeLabel
์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด NodeAffinity
ํ๋ฌ๊ทธ์ธ(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ค.
์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ ServiceAffinity
์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด InterPodAffinity
ํ๋ฌ๊ทธ์ธ(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ค.
์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ NodePreferAvoidPods
์ ์ฌ์ฉ ์ค๋จ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ๋
ธ๋ ํ
์ธํธ ๋ฅผ ์ฌ์ฉํ๋ค.
v1beta2 ์ค์ ํ์ผ์์ ํ์ฑํ๋ ํ๋ฌ๊ทธ์ธ์ ํด๋น ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ณธ ์ค์ ๊ฐ๋ณด๋ค v1beta2 ์ค์ ํ์ผ์ ๊ฐ์ด ์ฐ์ ์ ์ฉ๋๋ค.
์ค์ผ์ค๋ฌ healthz์ metrics ๋ฐ์ธ๋ ์ฃผ์์ ๋ํด host
๋๋ port
๊ฐ ์๋ชป ์ค์ ๋๋ฉด ๊ฒ์ฆ ์คํจ๋ฅผ ์ ๋ฐํ๋ค.
์ธ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ค์น ๊ธฐ๋ณธ๊ฐ์ด ๋ค์๊ณผ ๊ฐ์ด ์ฆ๊ฐํ๋ค.InterPodAffinity
: 1 ์์ 2 ๋กNodeAffinity
: 1 ์์ 2 ๋กTaintToleration
: 1 ์์ 3 ์ผ๋ก
์ค์ผ์ค๋ฌ ํ๋ฌ๊ทธ์ธ SelectorSpread
๋ ์ ๊ฑฐ๋์๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด
PodTopologySpread
ํ๋ฌ๊ทธ์ธ(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์)์ ์ฌ์ฉํ๋ค. ๋ค์ ๋ด์ฉ 12.2 - ์ค์ผ์ค๋ง ์ ์ฑ
์ฟ ๋ฒ๋คํฐ์ค v1.23 ์ด์ ๋ฒ์ ์์๋, ๋จ์ (predicates) ๋ฐ ์ฐ์ ์์(priorities) ํ๋ก์ธ์ค๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ค์ผ์ค๋ง ์ ์ฑ
์ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, kube-scheduler --policy-config-file <filename>
๋๋ kube-scheduler --policy-configmap <ConfigMap>
๋ช
๋ น์ ์คํํ์ฌ ์ค์ผ์ค๋ง ์ ์ฑ
์ ์ค์ ํ ์ ์๋ค.
์ด๋ฌํ ์ค์ผ์ค๋ง ์ ์ฑ
์ ์ฟ ๋ฒ๋คํฐ์ค v1.23 ๋ฒ์ ๋ถํฐ ์ง์๋์ง ์๋๋ค. ๊ด๋ จ๋ ํ๋๊ทธ์ธ policy-config-file
, policy-configmap
, policy-configmap-namespace
, use-legacy-policy-config
ํ๋๊ทธ๋ ์ง์๋์ง ์๋๋ค. ๋์ , ๋น์ทํ ํจ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ ์ ์ฌ์ฉํ๋ค.
๋ค์ ๋ด์ฉ 13 - ๋๊ตฌ ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฟ ๋ฒ๋คํฐ์ค ์์คํ
์ผ๋ก ์์
ํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ๋๊ตฌ๋ฅผ ํฌํจํ๋ค.
crictl crictl
์
CRI -ํธํ ์ปจํ
์ด๋ ๋ฐํ์์ ์กฐ์ฌ ๋ฐ ๋๋ฒ๊น
์ ์ํ
๋ช
๋ น์ค ์ธํฐํ์ด์ค์ด๋ค.
๋์๋ณด๋ ๋์๋ณด๋
๋
์ฟ ๋ฒ๋คํฐ์ค์ ์น๊ธฐ๋ฐ ์ ์ ์ธํฐํ์ด์ค์ด๋ฉฐ
์ปจํ
์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ก ๋ฐฐํฌํ๊ณ ํด๋ฌ์คํฐ ๋ฐ ํด๋ฌ์คํฐ ์์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ ๊ด๋ฆฌํ ์ ์๊ฒ ํด ์ค๋ค.
Helm ๐ ์ด ํญ๋ชฉ์ ์ฟ ๋ฒ๋คํฐ์ค์ ์ํ์ง ์๋ ์จ๋ํํฐ ํ๋ก์ ํธ ๋๋ ์ ํ์ ๋งํฌ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ถ๊ฐ ์ ๋ณด Helm ์ ์ฌ์ ๊ตฌ์ฑ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค ํจํค์ง๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ์ด๋ค.
์ด ํจํค์ง๋ Helm charts ๋ผ๊ณ ์๋ ค์ ธ ์๋ค.
Helm์ ์ฉ๋
์ฟ ๋ฒ๋คํฐ์ค ์ฐจํธ๋ก ๋ฐฐํฌ๋ ์ธ๊ธฐ์๋ ์ํํธ์จ์ด๋ฅผ ๊ฒ์ํ๊ณ ์ฌ์ฉ ์ฟ ๋ฒ๋คํฐ์ค ์ฐจํธ๋ก ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ณต์ ์ฟ ๋ฒ๋คํฐ์ค ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ๋ณต๊ฐ๋ฅํ ๋น๋ ๋ฐ ์์ฑ ๋งค๋ํ์คํธ ํ์ผ์ ์ง๋ฅํ๋ ๊ด๋ฆฌ Helm ํจํค์ง์ ๋ฆด๋ฆฌ์ค ๊ด๋ฆฌ Kompose Kompose
๋ ๋์ปค ์ปดํฌ์ฆ(Compose) ์ ์ ๋ค์ด ์ฟ ๋ฒ๋คํฐ์ค๋ก ์ด๋ํ๋๋ฐ ๋์์ด ๋๋ ๋๊ตฌ์ด๋ค.
Kompose์ ์ฉ๋
๋์ปค ์ปดํฌ์ฆ ํ์ผ์ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ก ๋ณํ ๋ก์ปฌ ๋์ปค ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ํตํด ๊ด๋ฆฌํ๋๋ก ์ด์ V1 ๋๋ V2 ๋์ปค ์ปดํฌ์ฆ yaml
ํ์ผ ๋๋ ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์
๋ฒ๋ค ์ ๋ณํ Kui Kui
๋ ์
๋ ฅ์ผ๋ก ์ผ๋ฐ์ ์ธ kubectl
์ปค๋งจ๋ ๋ผ์ธ ์์ฒญ์ ๋ฐ๊ณ
์ถ๋ ฅ์ผ๋ก ๊ทธ๋ํฝ์ ์ธ ์๋ต์ ์ ๊ณตํ๋ GUI ๋๊ตฌ์ด๋ค.
Kui๋ ์
๋ ฅ์ผ๋ก ์ผ๋ฐ์ ์ธ kubectl
์ปค๋งจ๋ ๋ผ์ธ ์์ฒญ์ ๋ฐ๊ณ ์ถ๋ ฅ์ผ๋ก ๊ทธ๋ํฝ์ ์ธ ์๋ต์ ์ ๊ณตํ๋ค.
Kui๋ ASCII ํ ๋์ ์ ๋ ฌ ๊ฐ๋ฅํ ํ๋ฅผ GUI๋ก ์ ๊ณตํ๋ค.
Kui๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์์ ์์
์ด ๊ฐ๋ฅํ๋ค.
์๋์ผ๋ก ์์ฑ๋์ด ๊ธธ์ด๊ฐ ๊ธด ๋ฆฌ์์ค ์ด๋ฆ์ ํด๋ฆญํ์ฌ ๋ณต์ฌํ ์ ์๋ค. kubectl
๋ช
๋ น์ ์
๋ ฅํ๋ฉด ์คํ๋๋ ๋ชจ์ต์ ๋ณผ ์ ์์ผ๋ฉฐ, kubectl
๋ณด๋ค ๋ ๋น ๋ฅธ ๊ฒฝ์ฐ๋ ์๋ค.์ก ์ ์กฐํํ์ฌ
์คํ ํ์์ ์ํฐํด ๊ทธ๋ฆผ์ผ๋ก ํ์ธํ๋ค.ํญ์ด ์๋ UI๋ฅผ ์ด์ฉํ์ฌ ํด๋ฌ์คํฐ์ ์์์ ํด๋ฆญ ๋์์ผ๋ก ํ์ธํ ์ ์๋ค. Minikube minikube
๋ ๊ฐ๋ฐ๊ณผ ํ
์คํ
๋ชฉ์ ์ผ๋ก
๋จ์ผ ๋
ธ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๋ก์ปฌ ์ํฌ์คํ
์ด์
์์
์คํํ๋ ๋๊ตฌ์ด๋ค.