๋ ธ๋
OpenShift Container Platform์์ ๋ ธ๋ ๊ตฌ์ฑ ๋ฐ ๊ด๋ฆฌ
์ด๋ก
1์ฅ. ๋ ธ๋ ๊ฐ์
1.1. ๋ ธ๋ ์ ๋ณด
๋ ธ๋๋ Kubernetes ํด๋ฌ์คํฐ์ ๊ฐ์ ๋๋ ๋ฒ ์ด ๋ฉํ ์์คํ ์ ๋๋ค. ์์ ์ ๋ ธ๋๋ Pod๋ก ๊ทธ๋ฃนํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๋ฅผ ํธ์คํ ํฉ๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์ ์ดํ๋ ๋ฐ ํ์ํ ์๋น์ค๋ฅผ ์คํํฉ๋๋ค. OpenShift Container Platform์์ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์๋ OpenShift Container Platform ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ Kubernetes ์๋น์ค ์ด์์ ์๋น์ค๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
ํด๋ฌ์คํฐ์ ์์ ์ ์ด๊ณ ์ ์์ ์ธ ๋
ธ๋๋ฅผ ๊ฐ๋ ๊ฒ์ ํธ์คํ
๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํํ ๊ธฐ๋ฅ์ ์ฐ์ ํฉ๋๋ค. OpenShift Container Platform์์๋ ๋
ธ๋๋ฅผ ๋ํ๋ด๋ Node
์ค๋ธ์ ํธ๋ฅผ ํตํด ๋
ธ๋์ ์ก์ธ์ค, ๊ด๋ฆฌ ๋ฐ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค. OpenShift CLI(oc
) ๋๋ ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ๋
ธ๋์์ ๋ค์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
๋ ธ๋์ ๋ค์ ๊ตฌ์ฑ ์์๋ Pod ์คํ์ ์ ์งํ๊ณ Kubernetes ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
- ์ปจํ ์ด๋ ๋ฐํ์:: ์ปจํ ์ด๋ ๋ฐํ์์ ์ปจํ ์ด๋ ์คํ์ ๋ด๋นํฉ๋๋ค. Kubernetes๋ containerd, cri-o, rktlet, Docker์ ๊ฐ์ ์ฌ๋ฌ ๋ฐํ์์ ์ ๊ณตํฉ๋๋ค.
- kubelet:: Kubelet์ ๋ ธ๋์์ ์คํ๋๋ฉฐ ์ปจํ ์ด๋ ๋งค๋ํ์คํธ๋ฅผ ์ฝ์ต๋๋ค. ์ ์๋ ์ปจํ ์ด๋๊ฐ ์์๋๊ณ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค. kubelet ํ๋ก์ธ์ค๋ ์์ ์ํ์ ๋ ธ๋ ์๋ฒ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. kubelet์ ๋คํธ์ํฌ ๊ท์น ๋ฐ ํฌํธ ์ ๋ฌ์ ๊ด๋ฆฌํฉ๋๋ค. kubelet์ Kubernetes์์ ์์ฑํ ์ปจํ ์ด๋๋ง ๊ด๋ฆฌํฉ๋๋ค.
- kube-proxy:: Kube-proxy๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ์คํ๋๋ฉฐ Kubernetes ๋ฆฌ์์ค ๊ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ ์งํฉ๋๋ค. Kube-proxy๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํธ์ํน ํ๊ฒฝ์ ๋ถ๋ฆฌํ๊ณ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- DNS:: ํด๋ฌ์คํฐ DNS๋ Kubernetes ์๋น์ค์ ๋ํ DNS ๋ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ DNS ์๋ฒ์ ๋๋ค. Kubernetes์์ ์์ํ๋ ์ปจํ ์ด๋๋ DNS ๊ฒ์์ ์ด DNS ์๋ฒ๋ฅผ ์๋์ผ๋ก ํฌํจํฉ๋๋ค.
![์ปจํธ๋กค ํ๋ ์ธ ๋ฐ ์์
์ ๋
ธ๋ ๊ฐ์](https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.10-Nodes-ko-KR/images/32829db347683a8f7181b419b4657e91/295_OpenShift_Nodes_Overview_1222.png)
์ฝ๊ธฐ ์์
์ฝ๊ธฐ ์์ ์ ์ฌ์ฉํ๋ฉด ๊ด๋ฆฌ์ ๋๋ ๊ฐ๋ฐ์๊ฐ OpenShift Container Platform ํด๋ฌ์คํฐ์ ๋ ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋์ด ํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ฌ์ฉ๋, ์ํ, ์ํ ๋ฐ ๊ธฐ๊ฐ๊ณผ ๊ฐ์ ๋ ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ๋ ธ๋์์ ์คํ ์ค์ธ Pod๋ฅผ ๋์ดํฉ๋๋ค.
๊ด๋ฆฌ ์์
๊ด๋ฆฌ์๋ ์ฌ๋ฌ ์์ ์ ํตํด OpenShift Container Platform ํด๋ฌ์คํฐ์์ ๋ ธ๋๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
-
๋
ธ๋ ๋ ์ด๋ธ์ ์ถ๊ฐํ๊ฑฐ๋ ์
๋ฐ์ดํธ ํฉ๋๋ค. ๋ ์ด๋ธ์
Node
์ค๋ธ์ ํธ์ ์ ์ฉ๋๋ ํค-๊ฐ ์์ ๋๋ค. ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod ์์ฝ์ ์ ์ดํ ์ ์์ต๋๋ค. -
CRD(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ์) ๋๋
kubeletConfig
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํฉ๋๋ค. -
Pod ์์ฝ์ ํ์ฉํ๊ฑฐ๋ ํ์ฉํ์ง ์๋๋ก ๋
ธ๋๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ํ๊ฐ
Ready
์ธ ์ ์ ์์ ์ ๋ ธ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก Pod๋ฅผ ๋ฐฐ์นํ ์ ์์ง๋ง ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ ์์ฝ ๋ถ๊ฐ๋ก ์ค์ ํ๊ณ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ์ค์ผ์ค๋งํ ์ ์๋๋ก ์์ ์ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ธฐ๋ณธ ๋์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. -
system-reserved
์ค์ ์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํฉ๋๋ค. OpenShift Container Platform์ด ๋ ธ๋์ ๊ฐ์ฅ ์ ํฉํsystem-reserved
CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๊ฒฐ์ ํ๋๋ก ํ์ฉํ๊ฑฐ๋ ๋ ธ๋์ ๊ฐ์ฅ ์ ํฉํ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๊ฒฐ์ ํ๊ณ ์ค์ ํ ์ ์์ต๋๋ค. - ๋ ธ๋์ ํ๋ก์ธ์ ์ฝ์ด ์, ํ๋ ์ ํ ๋๋ ๋ ๋ค์ ๋ฐ๋ผ ๋ ธ๋์์ ์คํํ ์ ์๋ Pod ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ ์์ ์ผ๋ก ์ฌ๋ถํ ํฉ๋๋ค.
- ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ์ถ์ํ์ฌ ํด๋ฌ์คํฐ์์ ๋ ธ๋๋ฅผ ์ญ์ ํฉ๋๋ค. ๋ฒ ์ด ๋ฉํ ํด๋ฌ์คํฐ์์ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋จผ์ ๋ ธ๋์ ๋ชจ๋ Pod๋ฅผ ๋๋ ์ธํ ๋ค์ ๋ ธ๋๋ฅผ ์๋์ผ๋ก ์ญ์ ํด์ผ ํฉ๋๋ค.
๊ธฐ๋ฅ ๊ฐ์ ์์
OpenShift Container Platform์ ์ฌ์ฉํ๋ฉด ๋จ์ํ ๋ ธ๋์ ์ก์ธ์คํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ ์ด์์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ์๋ ๋ ธ๋์์ ๋ค์ ์์ ์ ์ํํ์ฌ ํด๋ฌ์คํฐ์ ํจ์จ์ฑ, ์ ํ๋ฆฌ์ผ์ด์ ์นํ์ฑ์ ๋ง๋ค๊ณ , ๊ฐ๋ฐ์์๊ฒ ๋ ๋์ ํ๊ฒฝ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- Node Tuning Operator๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ถ ์์ค์ ์ปค๋ ํ๋์ด ํ์ํ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ธ๋ ์์ค ํ๋์ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ ธ๋์์ TLS ๋ณด์ ํ๋กํ์ ํ์ฑํํ์ฌ kubelet๊ณผ Kubernetes API ์๋ฒ ๊ฐ ํต์ ์ ๋ณดํธํฉ๋๋ค.
- ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์์ ์๋์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์คํํฉ๋๋ค. ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์์ฑ ๋ฐ ์ฌ์ฉํ์ฌ ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ชจ๋ ๋ ธ๋์์ ๋ก๊น Pod๋ฅผ ์คํํ๊ฑฐ๋ ๋ชจ๋ ๋ ธ๋์ ๋ชจ๋ํฐ๋ง ์์ด์ ํธ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํ์ฌ ๋ ธ๋ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ ์ ์์ต๋๋ค. ์ข ๋ฃ๋ ์ปจํ ์ด๋ ๋ฐ ์คํ ์ค์ธ Pod์์ ์ฐธ์กฐํ์ง ์์ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ์ฌ ๋ ธ๋๊ฐ ํจ์จ์ ์ผ๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ๋ ธ๋ ์งํฉ์ ์ปค๋ ๋งค๊ฐ ๋ณ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ๋คํธ์ํฌ ์ฃ์ง(์๊ฒฉ ์์ ์ ๋ ธ๋)์ ์์ ์ ๋ ธ๋๊ฐ ์๋๋ก OpenShift Container Platform ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. OpenShift Container Platform ํด๋ฌ์คํฐ์ ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์๋ ๋ฌธ์ ์ ์๊ฒฉ ์์ ์ ๋ ธ๋์์ Pod๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ ๋คํธ์ํฌ ์ฃ์ง์์ ์๊ฒฉ ์์ ์ ๋ ธ๋ ์ฌ์ฉ์ ์ฐธ์กฐํ์ญ์์ค.
1.2. Pod ์ ๋ณด
Pod๋ ๋ ธ๋์ ํจ๊ป ๋ฐฐํฌ๋๋ ํ๋ ์ด์์ ์ปจํ ์ด๋์ ๋๋ค. ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ Pod๋ฅผ ์ ์ํ๊ณ ์ค์ผ์ค๋งํ ์ค๋น๊ฐ ๋ ์ ์ ๋ ธ๋์์ ์คํ๋๋๋ก ํ ๋นํ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ์คํ๋๋ ๋์ Pod๊ฐ ์คํ๋ฉ๋๋ค. Pod๊ฐ ์ ์๋๊ณ ์คํ๋๋ฉด ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. Pod๋ฅผ ์ฌ์ฉํ ๋ ์ํํ ์ ์๋ ์ผ๋ถ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฝ๊ธฐ ์์
๊ด๋ฆฌ์๋ ๋ค์ ์์ ์ ํตํด ํ๋ก์ ํธ์ Pod์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ๋ณต์ ์ ๋ฐ ์ฌ์์, ํ์ฌ ์ํ ๋ฐ ๊ธฐ๊ฐ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ํ๋ก์ ํธ์ ๊ด๋ จ๋ Pod๋ฅผ ๋์ด ํฉ๋๋ค.
- CPU, ๋ฉ๋ชจ๋ฆฌ, ์คํ ๋ฆฌ์ง ์ฌ์ฉ๊ณผ ๊ฐ์ Pod ์ฌ์ฉ๋ ํต๊ณ ๋ฅผ ํ์ธํฉ๋๋ค.
๊ด๋ฆฌ ์์
๋ค์ ์์ ๋ชฉ๋ก์ ๊ด๋ฆฌ์๊ฐ OpenShift Container Platform ํด๋ฌ์คํฐ์์ Pod๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
OpenShift Container Platform์์ ์ฌ์ฉํ ์ ์๋ ๊ณ ๊ธ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์ ์ดํฉ๋๋ค.
- ์ค์ผ์ค๋ฌ ๊ฐ Pod๋ฅผ ๋ ์ ์ ํ ๋ ธ๋๋ก ๋ค์ ์์ฝํ๋๋ก ํน์ ์ ๋ต์ ๋ฐ๋ผ Pod๋ฅผ ์ ๊ฑฐํ๋๋ก Descheduler๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- Pod ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์์ ํ Pod ์๋ ๋ฐฉ์์ ๊ตฌ์ฑํ๊ณ ์ ์ฑ ์ ๋ค์ ์์ํฉ๋๋ค.
- Pod์ ์ก์ ๋ฐ ์์ ํธ๋ํฝ์ ๋ชจ๋ ์ ํํฉ๋๋ค.
- Pod ํ ํ๋ฆฟ์ด ์๋ ๋ชจ๋ ์ค๋ธ์ ํธ์ ๋ฐ ์ ๋ณผ๋ฅจ์ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํฉ๋๋ค. ๋ณผ๋ฅจ์ Pod์ ๋ชจ๋ ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ๋ง์ดํธ๋ ํ์ผ ์์คํ ์ ๋๋ค. ์ปจํ ์ด๋ ์คํ ๋ฆฌ์ง๋ ์์ ์คํ ๋ฆฌ์ง์ ๋๋ค. ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
๊ธฐ๋ฅ ๊ฐ์ ์์
OpenShift Container Platform์์ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ํด ๋ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ๋ณด๋ค ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์ ์์ ์๋ Pod๋ฅผ ๋ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ด๋ฌํ ํด๊ณผ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค.
์์ | ์ฌ์ฉ์ | ๋ ๋ง์ ์ ๋ณด |
---|---|---|
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํฉ๋๋ค. | ๊ฐ๋ฐ์ | ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ์ต์ ๋ฐ ์ต๋ Pod ์์ Pod์์ ๋ชฉํ๋ก ํ๋ CPU ์ฌ์ฉ๋ฅ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด Pod ๋ฅผ ์๋์ผ๋ก ์ค์ผ์ผ๋งํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ:: ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๋ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ฐฐํฌ, ์ํ ์ ์ฅ ์ธํธ, ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ๋๋ ์์ ์ Pod ์๋ฅผ ์๋์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ์ ์์ต๋๋ค. + ์์ธํ ๋ด์ฉ์ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ Operator ๊ฐ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. |
์์ง Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ค์นํ๊ณ ์ฌ์ฉํฉ๋๋ค. | ๊ด๋ฆฌ์ ๋ฐ ๊ฐ๋ฐ์ | ๊ด๋ฆฌ์๋ ์์ง Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ๋ฐ ์ํฌ๋ก๋์ ๋ฆฌ์์ค ์๊ตฌ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ์ฌ ํด๋ฌ์คํฐ ๋ฆฌ์์ค๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์์ง Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ Pod์ ์ถฉ๋ถํ ๋ฆฌ์์ค๊ฐ ์๋ ๋ ธ๋์ Pod๋ฅผ ์์ฝํ์ฌ ์์๊ฐ ๋ง์ ๊ธฐ๊ฐ์ Pod๋ฅผ ์ ์งํ ์ ์์ต๋๋ค. |
์ฅ์น ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ธ๋ถ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ์ ๊ณตํฉ๋๋ค. | ๊ด๋ฆฌ์ | ์ฅ์น ํ๋ฌ๊ทธ์ธ ์ ํน์ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ ๋ ธ๋( kubelet ์ธ๋ถ)์์ ์คํ๋๋ gRPC ์๋น์ค์ ๋๋ค. ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ๋ฐฐํฌํ์ฌ ํด๋ฌ์คํฐ ์ ์ฒด์์ ํ๋์จ์ด ์ฅ์น๋ฅผ ์ฌ์ฉํ๋๋ก ์ผ๊ด๋๊ณ ์ด์ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค. |
| ๊ด๋ฆฌ์ |
์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์
์๋ ์ํธ ๋ฐ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํ์ํฉ๋๋ค. |
1.3. ์ปจํ ์ด๋ ์ ๋ณด
์ปจํ ์ด๋๋ ์ข ์ ํญ๋ชฉ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฐ์ด๋๋ฆฌ์ ํจ๊ป ํจํค์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ก ๊ตฌ์ฑ๋ OpenShift Container Platform ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ๋จ์์ ๋๋ค. ์ปจํ ์ด๋์์๋ ๋ฌผ๋ฆฌ ์๋ฒ, ๊ฐ์ ๋จธ์ (VM) ๋ฐ ํ๋ผ์ด๋น ๋๋ ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋์ ๊ฐ์ ํ๊ฒฝ ๋ฐ ์ฌ๋ฌ ๋ฐฐ์น ๋์ ์ฌ์ด์ ์ผ๊ด์ฑ์ ์ ๊ณตํฉ๋๋ค.
Linux ์ปจํ ์ด๋ ๊ธฐ์ ์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ง์ ๋ ๋ฆฌ์์ค๋ก๋ง ์ก์ธ์ค๋ฅผ ์ ํํ๋ ๊ฐ๋จํ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ด๋ฆฌ์๋ ๋ค์๊ณผ ๊ฐ์ Linux ์ปจํ ์ด๋์์ ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
OpenShift Container Platform์ Init ์ปจํ ์ด๋๋ผ๋ ํน์ ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค. Init ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๋ณด๋ค ๋จผ์ ์คํ๋๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง์ ์๋ ์ ํธ๋ฆฌํฐ ๋๋ ์ค์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. Init ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๋จธ์ง Pod๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๋ ธ๋, Pod ๋ฐ ์ปจํ ์ด๋์์ ํน์ ์์ ์ ์ํํ๋ ๊ฒ ์ธ์๋ ์ ์ฒด OpenShift Container Platform ํด๋ฌ์คํฐ์ ํจ๊ป ์์ ํ์ฌ ํด๋ฌ์คํฐ์ ํจ์จ์ฑ์ ์ ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ Pod๋ฅผ ๊ณ ๊ฐ์ฉ์ฑ์ผ๋ก ์ ์งํ ์ ์์ต๋๋ค.
2์ฅ. ๋ ธ๋ ์์
2.1. Pod ์ฌ์ฉ
Pod๋ ํ๋์ ํธ์คํธ์ ํจ๊ป ๋ฐฐํฌ๋๋ ํ๋ ์ด์์ ์ปจํ ์ด๋์ด์ ์ ์, ๋ฐฐํฌ, ๊ด๋ฆฌํ ์ ์๋ ์ต์ ์ปดํจํ ๋จ์์ ๋๋ค.
2.1.1. Pod ์ดํด
Pod๋ ์ปจํ ์ด๋์ ๋ํ ๋จธ์ ์ธ์คํด์ค(์ค์ ๋๋ ๊ฐ์)์ ๋๋ต์ ์ผ๋ก ๋์ผํฉ๋๋ค. ๊ฐ Pod์๋ ์์ฒด ๋ด๋ถ IP ์ฃผ์๊ฐ ํ ๋น๋๋ฏ๋ก ํด๋น Pod๊ฐ ์ ์ฒด ํฌํธ ๊ณต๊ฐ์ ์์ ํ๊ณ Pod ๋ด์ ์ปจํ ์ด๋๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋คํธ์ํน์ ๊ณต์ ํ ์ ์์ต๋๋ค.
Pod์๋ ๋ผ์ดํ์ฌ์ดํด์ด ์ ์๋์ด ์์ผ๋ฉฐ ๋ ธ๋์์ ์คํ๋๋๋ก ํ ๋น๋ ๋ค์ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋๊ฑฐ๋ ๊ธฐํ ์ด์ ๋ก ์ ๊ฑฐ๋ ๋๊น์ง ์คํ๋ฉ๋๋ค. Pod๋ ์ ์ฑ ๋ฐ ์ข ๋ฃ ์ฝ๋์ ๋ฐ๋ผ ์ข ๋ฃ ํ ์ ๊ฑฐ๋๊ฑฐ๋ ์ปจํ ์ด๋ ๋ก๊ทธ์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฑํํ๊ธฐ ์ํด ์ ์ง๋ ์ ์์ต๋๋ค.
OpenShift Container Platform์์๋ ๋์ฒด๋ก Pod๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ผ๋ก ์ทจ๊ธํฉ๋๋ค. ์คํ ์ค์๋ Pod ์ ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. OpenShift Container Platform์ ๊ธฐ์กด Pod๋ฅผ ์ข ๋ฃํ ํ ์์ ๋ ๊ตฌ์ฑ์ด๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ๋๋ ๋ ๋ค ์ฌ์ฉํ์ฌ Pod๋ฅผ ๋ค์ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌํํฉ๋๋ค. Pod๋ฅผ ๋ค์ ์์ฑํ๋ฉด ํ์ฅ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ์ทจ๊ธ๋๊ณ ์ํ๊ฐ ์ ์ง๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก Pod๋ ์ฌ์ฉ์๊ฐ ์ง์ ๊ด๋ฆฌํ๋ ๋์ ์์ ์์ค์ ์ปจํธ๋กค๋ฌ์์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
OpenShift Container Platform ๋ ธ๋ ํธ์คํธ๋น ์ต๋ Pod ์๋ ํด๋ฌ์คํฐ ์ ํ์ ์ฐธ์กฐํ์ญ์์ค.
๋ณต์ ์ปจํธ๋กค๋ฌ์์ ๊ด๋ฆฌํ์ง ์๋ ๋ฒ ์ด Pod๋ ๋ ธ๋ ์ค๋จ ์ ๋ค์ ์์ฝ๋์ง ์์ต๋๋ค.
2.1.2. Pod ๊ตฌ์ฑ์ ์
OpenShift Container Platform์์๋ ํ๋์ ํธ์คํธ์ ํจ๊ป ๋ฐฐํฌ๋๋ ํ๋ ์ด์์ ์ปจํ ์ด๋์ด์ ์ ์, ๋ฐฐํฌ, ๊ด๋ฆฌํ ์ ์๋ ์ต์ ์ปดํจํ ๋จ์์ธ Pod์ Kubernetes ๊ฐ๋ ์ ํ์ฉํฉ๋๋ค.
๋ค์์ Rails ์ ํ๋ฆฌ์ผ์ด์ ์์ ํฌ๋ ์ ์์ ์์ ๋๋ค. ์ด ์์ ์์๋ Pod์ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. ๋๋ถ๋ถ ๋ค๋ฅธ ์ฃผ์ ์์ ์ค๋ช ํ๋ฏ๋ก ์ฌ๊ธฐ์์๋ ๊ฐ๋จํ ์ธ๊ธํฉ๋๋ค.
Pod
์ค๋ธ์ ํธ ์ ์(YAML)
kind: Pod apiVersion: v1 metadata: name: example namespace: default selfLink: /api/v1/namespaces/default/pods/example uid: 5cc30063-0265780783bc resourceVersion: '165032' creationTimestamp: '2019-02-13T20:31:37Z' labels: app: hello-openshift 1 annotations: openshift.io/scc: anyuid spec: restartPolicy: Always 2 serviceAccountName: default imagePullSecrets: - name: default-dockercfg-5zrhb priority: 0 schedulerName: default-scheduler terminationGracePeriodSeconds: 30 nodeName: ip-10-0-140-16.us-east-2.compute.internal securityContext: 3 seLinuxOptions: level: 's0:c11,c10' containers: 4 - resources: {} terminationMessagePath: /dev/termination-log name: hello-openshift securityContext: capabilities: drop: - MKNOD procMount: Default ports: - containerPort: 8080 protocol: TCP imagePullPolicy: Always volumeMounts: 5 - name: default-token-wbqsl readOnly: true mountPath: /var/run/secrets/kubernetes.io/serviceaccount 6 terminationMessagePolicy: File image: registry.redhat.io/openshift4/ose-ogging-eventrouter:v4.3 7 serviceAccount: default 8 volumes: 9 - name: default-token-wbqsl secret: secretName: default-token-wbqsl defaultMode: 420 dnsPolicy: ClusterFirst status: phase: Pending conditions: - type: Initialized status: 'True' lastProbeTime: null lastTransitionTime: '2019-02-13T20:31:37Z' - type: Ready status: 'False' lastProbeTime: null lastTransitionTime: '2019-02-13T20:31:37Z' reason: ContainersNotReady message: 'containers with unready status: [hello-openshift]' - type: ContainersReady status: 'False' lastProbeTime: null lastTransitionTime: '2019-02-13T20:31:37Z' reason: ContainersNotReady message: 'containers with unready status: [hello-openshift]' - type: PodScheduled status: 'True' lastProbeTime: null lastTransitionTime: '2019-02-13T20:31:37Z' hostIP: 10.0.140.16 startTime: '2019-02-13T20:31:37Z' containerStatuses: - name: hello-openshift state: waiting: reason: ContainerCreating lastState: {} ready: false restartCount: 0 image: openshift/hello-openshift imageID: '' qosClass: BestEffort
- 1
- Pod๋ ๋จ์ผ ์์ ์์ Pod ๊ทธ๋ฃน์ ์ ํํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ผ๋ฒจ์ ํ๋ ์ด์ ์ฌ์ฉํ์ฌ "ํ๊ทธ๋ฅผ ์ง์ "ํ ์ ์์ต๋๋ค. ๋ผ๋ฒจ์
metadata
ํด์์ ํค/๊ฐ ํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. - 2
- Pod๋ ๊ฐ๋ฅํ ๊ฐ
Always
,OnFailure
,Never
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฑ ์ ์ฌ์์ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์Always
์ ๋๋ค. - 3
- OpenShift Container Platform์ ์ปจํ ์ด๋์ ๋ํ ๋ณด์ ์ปจํ ์คํธ๋ฅผ ์ ์ํฉ๋๋ค. ๋ณด์ ์ปจํ ์คํธ๋ ๊ถํ ์๋ ์ปจํ ์ด๋๋ก ์คํํ๊ฑฐ๋ ์ ํํ ์ฌ์ฉ์๋ก ์คํํ ์ ์๋์ง์ ์ฌ๋ถ ๋ฑ์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ ์ปจํ ์คํธ๋ ๋งค์ฐ ์ ํ์ ์ด์ง๋ง ํ์์ ๋ฐ๋ผ ๊ด๋ฆฌ์๊ฐ ์์ ํ ์ ์์ต๋๋ค.
- 4
containers
๋ ํ๋ ์ด์์ ์ปจํ ์ด๋ ์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ์ง์ ํฉ๋๋ค.- 5
- ์ด ์ปจํ ์ด๋๋ ์ปจํ ์ด๋ ๋ด์์ ์ธ๋ถ ์คํ ๋ฆฌ์ง ๋ณผ๋ฅจ์ด ๋ง์ดํธ๋๋ ์์น๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ ์ง์คํธ๋ฆฌ์์ OpenShift Container Platform API์ ๋ํด ์์ฒญํ๋ ๋ฐ ํ์ํ ์๊ฒฉ ์ฆ๋ช ์ก์ธ์ค ๊ถํ์ ์ ์ฅํ๋ ๋ณผ๋ฅจ์ด ์์ต๋๋ค.
- 6
- Pod์ ์ ๊ณตํ ๋ณผ๋ฅจ์ ์ง์ ํฉ๋๋ค. ์ง์ ๋ ๊ฒฝ๋ก์์ ๋ณผ๋ฅจ์ ๋ง์ดํธํฉ๋๋ค. ์ปจํ ์ด๋ ๋ฃจํธ,
/
๋๋ ํธ์คํธ์ ์ปจํ ์ด๋์์ ๋์ผํ ๊ฒฝ๋ก์ ๋ง์ดํธํ์ง ๋ง์ญ์์ค. ์ปจํ ์ด๋๊ฐ ํธ์คํธ/dev/pts
ํ์ผ๊ณผ ๊ฐ์ด ์ถฉ๋ถํ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ ํธ์คํธ ์์คํ ์ด ์์๋ ์ ์์ต๋๋ค./host
๋ฅผ ์ฌ์ฉํ์ฌ ํธ์คํธ๋ฅผ ๋ง์ดํธํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค. - 7
- Pod์ ๊ฐ ์ปจํ ์ด๋๋ ์์ฒด ์ปจํ ์ด๋ ์ด๋ฏธ์ง์์ ์ธ์คํด์คํ๋ฉ๋๋ค.
- 8
- OpenShift Container Platform API์ ๋ํด ์์ฒญํ๋ Pod๋ ์์ฒญ ์ Pod์์ ์ธ์ฆํด์ผ ํ๋ ์๋น์ค ๊ณ์ ์ฌ์ฉ์๋ฅผ ์ง์ ํ๋
serviceAccount
ํ๋๊ฐ ์๋ ์ผ๋ฐ์ ์ธ ํจํด์ ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์ ์ ์ ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ๋ํ ์ก์ธ์ค ๊ถํ์ ์ธ๋ถ์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค. - 9
- Pod๋ ์ฌ์ฉํ ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ์คํ ๋ฆฌ์ง ๋ณผ๋ฅจ์ ์ ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์๋น์ค ๊ณ์ ํ ํฐ์ด ํฌํจ๋
๋ณด์
๋ณผ๋ฅจ์ ๋ํ ์์ ๋ณผ๋ฅจ์ ์ ๊ณตํฉ๋๋ค.ํ์ผ์ด ๋ง์ ์๊ตฌ ๋ณผ๋ฅจ์ Pod์ ์ฐ๊ฒฐํ๋ฉด ํด๋น Pod๊ฐ ์คํจํ๊ฑฐ๋ ์์ํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ OpenShift์์ ํ์ผ ์๊ฐ ๋ง์ ์๊ตฌ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Pod๋ฅผ ์์ํ์ง ๋ชปํ๊ฑฐ๋ ๊ณผ๋ํ ์๊ฐ์ ์ฐจ์งํ์ฌ "Ready" ์ํ๋ฅผ ์ป์ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด Pod ์ ์์๋ Pod๊ฐ ์์ฑ๋๊ณ ํด๋น ๋ผ์ดํ์ฌ์ดํด์ด ์์๋ ํ OpenShift Container Platform์ ์ํด ์๋์ผ๋ก ์ฑ์์ง๋ ํน์ฑ์ ํฌํจ๋์ง ์์ต๋๋ค. Kubernetes Pod ์ค๋ช ์์๋ Pod์ ๊ธฐ๋ฅ ๋ฐ ์ฉ๋์ ๋ํ ์ธ๋ถ ์ ๋ณด๊ฐ ์์ต๋๋ค.
2.1.3. ์ถ๊ฐ ๋ฆฌ์์ค
- ํฌ๋ ๋ฐ ์คํ ๋ฆฌ์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๊ตฌ ์คํ ๋ฆฌ์ง ์ดํด ๋ฐ ์์ ์คํ ๋ฆฌ์ง ์ดํด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.2. Pod ๋ณด๊ธฐ
๊ด๋ฆฌ์๋ ํด๋ฌ์คํฐ์ Pod๋ฅผ ๋ณด๊ณ ํด๋น Pod ๋ฐ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ์ ์ฒด์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
2.2.1. Pod ์ ๋ณด
OpenShift Container Platform์์๋ ํ๋์ ํธ์คํธ์ ํจ๊ป ๋ฐฐํฌ๋๋ ํ๋ ์ด์์ ์ปจํ ์ด๋์ด์ ์ ์, ๋ฐฐํฌ, ๊ด๋ฆฌํ ์ ์๋ ์ต์ ์ปดํจํ ๋จ์์ธ Pod์ Kubernetes ๊ฐ๋ ์ ํ์ฉํฉ๋๋ค. Pod๋ ์ปจํ ์ด๋์ ๋ํ ๋จธ์ ์ธ์คํด์ค(์ค์ ๋๋ ๊ฐ์)์ ๋๋ต์ ์ผ๋ก ๋์ผํฉ๋๋ค.
ํน์ ํ๋ก์ ํธ์ ์ฐ๊ฒฐ๋ Pod ๋ชฉ๋ก์ ํ์ธํ๊ฑฐ๋ Pod ๊ด๋ จ ์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
2.2.2. ํ๋ก์ ํธ์ Pod ๋ณด๊ธฐ
Pod์ ๋ณต์ ๋ณธ ์, ํ์ฌ ์ํ, ์ฌ์์ ํ์, ์๋ช ๋ฑ์ ํฌํจํ์ฌ ํ์ฌ ํ๋ก์ ํธ์ ๊ด๋ จ๋ Pod ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
ํ๋ก์ ํธ์ Pod๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ํ๋ก์ ํธ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
$ oc project <project-name>
๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ oc get pods
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get pods
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE console-698d866b78-bnshf 1/1 Running 2 165m console-698d866b78-m87pm 1/1 Running 2 165m
Pod IP ์ฃผ์์ Pod๊ฐ ์๋ ๋ ธ๋๋ฅผ ๋ณด๋ ค๋ฉด
-o wide
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.$ oc get pods -o wide
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE console-698d866b78-bnshf 1/1 Running 2 166m 10.128.0.24 ip-10-0-152-71.ec2.internal <none> console-698d866b78-m87pm 1/1 Running 2 166m 10.129.0.23 ip-10-0-173-237.ec2.internal <none>
2.2.3. Pod ์ฌ์ฉ๋ ํต๊ณ ๋ณด๊ธฐ
์ปจํ ์ด๋์ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ Pod์ ๋ํ ์ฌ์ฉ๋ ํต๊ณ๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ์ฉ๋ ํต๊ณ์๋ CPU, ๋ฉ๋ชจ๋ฆฌ, ์คํ ๋ฆฌ์ง ์ฌ์ฉ๋์ด ํฌํจ๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณด๋ ค๋ฉด
cluster-reader
๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. - ์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณด๋ ค๋ฉด ๋ฉํธ๋ฆญ์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ oc adm top pods
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc adm top pods -n openshift-console
์ถ๋ ฅ ์
NAME CPU(cores) MEMORY(bytes) console-7f58c69899-q8c8k 0m 22Mi console-7f58c69899-xhbgg 0m 25Mi downloads-594fcccf94-bcxk8 3m 18Mi downloads-594fcccf94-kv4p6 2m 15Mi
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๋ผ๋ฒจ์ด ์๋ Pod์ ์ฌ์ฉ๋ ํต๊ณ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc adm top pod --selector=''
ํํฐ๋งํ ์ ํ๊ธฐ(๋ผ๋ฒจ ์ฟผ๋ฆฌ)๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
=
,==
,!=
๊ฐ ์ง์๋ฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc adm top pod --selector='name=my-pod'
2.2.4. ๋ฆฌ์์ค ๋ก๊ทธ ๋ณด๊ธฐ
OpenShift CLI(oc) ๋ฐ ์น ์ฝ์์์ ๋ค์ํ ๋ฆฌ์์ค์ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๋ก๊ทธ๋ ๋ก๊ทธ์ ๋ง๋ฏธ ๋๋ ๋์์ ์ฝ์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- OpenShift CLI(oc)์ ์ก์ธ์คํฉ๋๋ค.
ํ๋ก์ธ์ค(UI)
OpenShift Container Platform ์ฝ์์์ ์ํฌ๋ก๋ โ Pod๋ก ์ด๋ํ๊ฑฐ๋ ์กฐ์ฌํ๋ ค๋ ๋ฆฌ์์ค๋ฅผ ํตํด Pod๋ก ์ด๋ํฉ๋๋ค.
์ฐธ๊ณ๋น๋์ ๊ฐ์ ์ผ๋ถ ๋ฆฌ์์ค์๋ ์ง์ ์ฟผ๋ฆฌํ Pod๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ธ์คํด์ค์์ ๋ฆฌ์์ค์ ์ธ๋ถ ์ ๋ณด ํ์ด์ง์์ ๋ก๊ทธ ๋งํฌ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ๋๋กญ๋ค์ด ๋ฉ๋ด์์ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
- ์กฐ์ฌํ Pod ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
- ๋ก๊ทธ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํ๋ก์ธ์ค(CLI)
ํน์ Pod์ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc logs -f <pod_name> -c <container_name>
๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-f
- ์ ํ ์ฌํญ: ์ถ๋ ฅ์์ ๋ก๊ทธ์ ๊ธฐ๋ก๋๋ ๋ด์ฉ์ ๋ฐ๋ฅด๋๋ก ์ง์ ํฉ๋๋ค.
<pod_name>
- pod ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
<container_name>
- ์ ํ ์ฌํญ: ์ปจํ ์ด๋์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. Pod์ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ์๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc logs ruby-58cd97df55-mww7r
$ oc logs -f ruby-57f7f4855b-znl92 -c ruby
๋ก๊ทธ ํ์ผ์ ๋ด์ฉ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
ํน์ ๋ฆฌ์์ค์ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc logs <object_type>/<resource_name> 1
- 1
- ๋ฆฌ์์ค ์ ํ ๋ฐ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc logs deployment/ruby
๋ก๊ทธ ํ์ผ์ ๋ด์ฉ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
2.3. Pod์ ๋ํ OpenShift Container Platform ํด๋ฌ์คํฐ ๊ตฌ์ฑ
๊ด๋ฆฌ์๋ Pod์ ํจ์จ์ ์ธ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
ํด๋ฌ์คํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์งํ๋ฉด Pod๊ฐ ์ข ๋ฃ๋ ๋ ์ํํ๋ ์์ ๊ณผ ๊ฐ์ ํด์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์์๊ฒ ๋ ๋์ ํ๊ฒฝ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฆ ํ์ํ ์์ Pod๊ฐ ํญ์ ์คํ๋๊ณ ์๋์ง ํ์ธํ์ฌ ํ ๋ฒ๋ง ์คํ๋๋๋ก ์ค๊ณ๋ Pod๋ฅผ ์ฌ์์ํ๋ ๊ฒฝ์ฐ Pod์ ์ฌ์ฉํ ์ ์๋ ๋์ญํญ์ ์ ํํ๊ณ , ์ค๋จ ์ค Pod๋ฅผ ๊ณ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
2.3.1. ์ฌ์์ ํ Pod ์๋ ๋ฐฉ์ ๊ตฌ์ฑ
Pod ์ฌ์์ ์ ์ฑ ์ ๋ฐ๋ผ ํด๋น Pod์ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๋ OpenShift Container Platform์์ ์๋ตํ๋ ๋ฐฉ๋ฒ์ด ๊ฒฐ์ ๋ฉ๋๋ค. ์ ์ฑ ์ ํด๋น Pod์ ๋ชจ๋ ์ปจํ ์ด๋์ ์ ์ฉ๋ฉ๋๋ค.
๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
Always
- ๊ธ๊ฒฉํ ๋ฐฑ์คํ ์ง์ฐ(10์ด, 20์ด, 40์ด)์ 5๋ถ์ผ๋ก ์ ํํ์ฌ Pod์์ ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋ ์ปจํ ์ด๋๋ฅผ ์ง์์ ์ผ๋ก ์ฌ์์ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์Always
์ ๋๋ค. -
OnFailure
- ๊ธ๊ฒฉํ ๋ฐฑ์คํ ์ง์ฐ(10์ด, 20์ด, 40์ด)์ 5๋ถ์ผ๋ก ์ ํํ์ฌ Pod์์ ์คํจํ ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํฉ๋๋ค. -
Never
- Pod์์ ์ข ๋ฃ๋๊ฑฐ๋ ์คํจํ ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํ์ง ์์ต๋๋ค. Pod๊ฐ ์ฆ์ ์คํจํ๊ณ ์ข ๋ฃ๋ฉ๋๋ค.
Pod๊ฐ ํน์ ๋ ธ๋์ ๋ฐ์ธ๋ฉ๋ ํ์๋ ๋ค๋ฅธ ๋ ธ๋์ ๋ฐ์ธ๋ฉ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ธ๋ ์ฅ์ ์ Pod๊ฐ ์๋ํ๋ ค๋ฉด ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํฉ๋๋ค.
์ํ | ์ปจํธ๋กค๋ฌ ์ ํ | ์ฌ์์ ์ ์ฑ |
---|---|---|
์ข ๋ฃํ ๊ฒ์ผ๋ก ์์๋๋ Pod(์: ์ผ๊ด ๊ณ์ฐ) | Job |
|
์ข ๋ฃ๋์ง ์์ ๊ฒ์ผ๋ก ์์๋๋ Pod(์: ์น ์๋ฒ) | ๋ณต์ ์ปจํธ๋กค๋ฌ |
|
๋จธ์ ๋น ํ๋์ฉ ์คํํด์ผ ํ๋ Pod | ๋ฐ๋ชฌ ์ธํธ | Any |
Pod์ ์ปจํ
์ด๋๊ฐ ์คํจํ๊ณ ์ฌ์์ ์ ์ฑ
์ด OnFailure
๋ก ์ค์ ๋ ๊ฒฝ์ฐ Pod๊ฐ ๋
ธ๋์ ๋จ์ ์๊ณ ์ปจํ
์ด๋๊ฐ ์ฌ์์๋ฉ๋๋ค. ์ปจํ
์ด๋๋ฅผ ์ฌ์์ํ์ง ์์ผ๋ ค๋ฉด ์ฌ์์ ์ ์ฑ
Never
๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ ์ฒด Pod๊ฐ ์คํจํ๋ฉด OpenShift Container Platform์์ ์ Pod๋ฅผ ์์ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ Pod์์ ์ฌ์์๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ํนํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ด์ ์คํ์ผ๋ก ๋ฐ์ํ ์์ ํ์ผ, ์ ๊ธ, ๋ถ์์ ํ ์ถ๋ ฅ ๋ฑ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
Kubernetes ์ํคํ ์ฒ์์๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋์ ์ด ์์ ์ ์ธ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ค๋จ๋๋ฉด kubelet์์ OpenShift Container Platform์ด ์ฌ์์๋์ง ์์ต๋๋ค.
๊ธฐ๋ณธ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ๋์ ์ด ์์ ์ ์ด์ง ์์ ๊ฒฝ์ฐ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ํตํฉ์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ์ค์นํ์ง ๋ง์ญ์์ค. ํด๋ผ์ฐ๋๊ฐ ์๋ ํ๊ฒฝ์์์ฒ๋ผ ํด๋ฌ์คํฐ๋ฅผ ์ค์นํฉ๋๋ค. ์ค์น๋ ํด๋ฌ์คํฐ์์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ํตํฉ์ ์ค์ ํ๊ฑฐ๋ ํด์ ํ๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
OpenShift Container Platform์์ ์คํจํ ์ปจํ ์ด๋์ ์ฌ์์ ์ ์ฑ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ Kubernetes ์ค๋ช ์์ ์์ ์ํ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.3.2. Pod์์ ์ฌ์ฉํ ์ ์๋ ๋์ญํญ ์ ํ
Pod์ ์๋น์ค ํ์ง ํธ๋ํฝ ์กฐ์ ๊ธฐ๋ฅ์ ์ ์ฉํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋์ญํญ์ ํจ๊ณผ์ ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค. Pod์์ ์ก์ ํ๋ ํธ๋ํฝ์ ๊ตฌ์ฑ๋ ์๋๋ฅผ ์ด๊ณผํ๋ ํจํท์ ๊ฐ๋จํ ์ญ์ ํ๋ ์ ์ฑ ์ ๋ฐ๋ผ ์ฒ๋ฆฌํฉ๋๋ค. Pod์ ์์ ๋๋ ํธ๋ํฝ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋๊ธฐ ์ค์ธ ํจํท์ ๊ตฌ์ฑํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค. ํน์ Pod์ ๋ํ ์ ํ ์ฌํญ์ ๋ค๋ฅธ Pod์ ๋์ญํญ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
ํ๋ก์ธ์ค
Pod์ ๋์ญํญ์ ์ ํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
์ค๋ธ์ ํธ ์ ์ JSON ํ์ผ์ ์์ฑํ๊ณ
kubernetes.io/ingress-bandwidth
๋ฐkubernetes.io/egress-bandwidth
์ฃผ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ํธ๋ํฝ ์๋๋ฅผ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Pod ์ก์ ๋ฐ ์์ ๋์ญํญ์ ๋ ๋ค 10M/s๋ก ์ ํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.์ ํ๋
Pod
์ค๋ธ์ ํธ ์ ์{ "kind": "Pod", "spec": { "containers": [ { "image": "openshift/hello-openshift", "name": "hello-openshift" } ] }, "apiVersion": "v1", "metadata": { "name": "iperf-slow", "annotations": { "kubernetes.io/ingress-bandwidth": "10M", "kubernetes.io/egress-bandwidth": "10M" } } }
์ค๋ธ์ ํธ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file_or_dir_path>
2.3.3. Pod ์ค๋จ ์์ฐ์ ์ฌ์ฉํ์ฌ ์คํ ์ค์ธ pod ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ
Pod ์ค๋จ ์์ฐ์ ์ฌ์ฉํ๋ฉด ์ ์ง๋ณด์๋ฅผ ์ํด ๋ ธ๋๋ฅผ ๋๋ ์ด๋ํ๋ ๋ฑ ์์ ์ค์ Pod์ ๋ํ ๋ณด์ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ต๋๋ค.
PodDisruptionBudget
์ ๋์์ ์๋ํด์ผ ํ๋ ์ต์ ๋ณต์ ๋ณธ ์ ๋๋ ๋ฐฑ๋ถ์จ์ ์ง์ ํ๋ API ์ค๋ธ์ ํธ์
๋๋ค. ํ๋ก์ ํธ์์ ์ด๋ฌํ ์ค์ ์ ๋
ธ๋ ์ ์ง ๊ด๋ฆฌ (์: ํด๋ฌ์คํฐ ์ถ์ ๋๋ ํด๋ฌ์คํฐ ์
๊ทธ๋ ์ด๋) ์ค์ ์ ์ฉํ ์ ์์ผ๋ฉฐ (๋
ธ๋ ์ฅ์ ์๊ฐ ์๋๋ผ) ์๋ฐ์ ์ผ๋ก ์ ๊ฑฐ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉ๋ฉ๋๋ค.
PodDisruptionBudget
์ค๋ธ์ ํธ์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- ์ผ๋ จ์ pod์ ๋ํ ๋ผ๋ฒจ ์ฟผ๋ฆฌ ๊ธฐ๋ฅ์ธ ๋ผ๋ฒจ ์ ํ๊ธฐ์ ๋๋ค.
๋์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ ์ต์ pod ์๋ฅผ ์ง์ ํ๋ ๊ฐ์ฉ์ฑ ์์ค์ ๋๋ค.
-
minAvailable
์ ์ค๋จ ์ค์๋ ํญ์ ์ฌ์ฉํ ์ ์์ด์ผํ๋ pod ์์ ๋๋ค. -
maxUnavailable
์ ์ค๋จ ์ค์ ์ฌ์ฉํ ์์๋ pod ์์ ๋๋ค.
-
Available
์ condition Ready=True
๊ฐ ์๋ Pod ์๋ฅผ ๋ํ๋
๋๋ค. ready=True
๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ Pod๋ฅผ ์ฐธ์กฐํ๋ฉฐ ์ผ์นํ๋ ๋ชจ๋ ์๋น์ค์ ๋ถํ ๋ถ์ฐ ํ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
maxUnavailable
0 %
๋๋ 0
์ด๋ minAvailable
์ 100 %
ํน์ ๋ณต์ ๋ณธ ์์ ๋์ผํ ๊ฐ์ ํ์ฉ๋์ง๋ง ์ด๋ก ์ธํด ๋
ธ๋๊ฐ ๋๋ ์ธ๋์ง ์๋๋ก ์ฐจ๋จํ ์ ์์ต๋๋ค.
๋ค์์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ก์ ํธ์์ pod ์ค๋จ ์์ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
$ oc get poddisruptionbudget --all-namespaces
์ถ๋ ฅ ์
NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE openshift-apiserver openshift-apiserver-pdb N/A 1 1 121m openshift-cloud-controller-manager aws-cloud-controller-manager 1 N/A 1 125m openshift-cloud-credential-operator pod-identity-webhook 1 N/A 1 117m openshift-cluster-csi-drivers aws-ebs-csi-driver-controller-pdb N/A 1 1 121m openshift-cluster-storage-operator csi-snapshot-controller-pdb N/A 1 1 122m openshift-cluster-storage-operator csi-snapshot-webhook-pdb N/A 1 1 122m openshift-console console N/A 1 1 116m #...
PodDisruptionBudget
์ ์์คํ
์์ ์ต์ minAvailable
pod๊ฐ ์คํ์ค์ธ ๊ฒฝ์ฐ ์ ์์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด ์ ํ์ ์ด๊ณผํ๋ ๋ชจ๋ pod๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
Pod ์ฐ์ ์์ ๋ฐ ์ ์ ์ค์ ์ ๋ฐ๋ผ ์ฐ์ ์์๊ฐ ๋ฎ์ pod๋ pod ์ค๋จ ์์ฐ ์๊ตฌ ์ฌํญ์ ๋ฌด์ํ๊ณ ์ ๊ฑฐ๋ ์ ์์ต๋๋ค.
2.3.3.1. Pod ์ค๋จ ์์ฐ์ ์ฌ์ฉํ์ฌ ์คํํด์ผ ํ pod ์ ์ง์
PodDisruptionBudget
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ ๊ฐ๋๋์ด์ผ ํ๋ ์ต์ ๋ณต์ ๋ณธ ์ ๋๋ ๋ฐฑ๋ถ์จ์ ์ง์ ํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
pod ์ค๋จ ์์ฐ์ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ค๋ธ์ ํธ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ๋ง๋ญ๋๋ค.
apiVersion: policy/v1 1 kind: PodDisruptionBudget metadata: name: my-pdb spec: minAvailable: 2 2 selector: 3 matchLabels: name: my-pod
- 1
PodDisruptionBudget
์policy/v1
API ๊ทธ๋ฃน์ ์ผ๋ถ์ ๋๋ค.- 2
- ๋์์ ์ฌ์ฉํ ์ ํ์๊ฐ ์๋ ์ต์ pod ์ ์ ๋๋ค. ์ ์ ๋๋ ๋ฐฑ๋ถ์จ (์:
20 %
)์ ์ง์ ํ๋ ๋ฌธ์์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. - 3
- ๋ฆฌ์์ค ์งํฉ์ ๋ํ ๋ผ๋ฒจ ์ฟผ๋ฆฌ์ ๋๋ค.
matchLabels
๋ฐmatchExpressions
์ ๊ฒฐ๊ณผ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฒฐํฉ๋ฉ๋๋ค. ์ด ๋งค๊ฐ ๋ณ์(์:selector {}
)๋ฅผ ๋น์ ๋๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ Pod๋ฅผ ์ ํํฉ๋๋ค.
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
apiVersion: policy/v1 1 kind: PodDisruptionBudget metadata: name: my-pdb spec: maxUnavailable: 25% 2 selector: 3 matchLabels: name: my-pod
- 1
PodDisruptionBudget
์policy/v1
API ๊ทธ๋ฃน์ ์ผ๋ถ์ ๋๋ค.- 2
- ๋์์ ์ฌ์ฉํ ์์๋ ์ต๋ pod ์์ ๋๋ค. ์ ์ ๋๋ ๋ฐฑ๋ถ์จ (์:
20 %
)์ ์ง์ ํ๋ ๋ฌธ์์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. - 3
- ๋ฆฌ์์ค ์งํฉ์ ๋ํ ๋ผ๋ฒจ ์ฟผ๋ฆฌ์ ๋๋ค.
matchLabels
๋ฐmatchExpressions
์ ๊ฒฐ๊ณผ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฒฐํฉ๋ฉ๋๋ค. ์ด ๋งค๊ฐ ๋ณ์(์:selector {}
)๋ฅผ ๋น์ ๋๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ Pod๋ฅผ ์ ํํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํฉ๋๋ค.
$ oc create -f </path/to/file> -n <project_name>
2.3.4. ์ค์ Pod๋ฅผ ์ฌ์ฉํ์ฌ Pod ์ ๊ฑฐ ๋ฐฉ์ง
์์ ํ ์๋ํ๋ ํด๋ฌ์คํฐ์ ์ค์ํ์ง๋ง ๋ง์คํฐ๊ฐ ์๋ ์ผ๋ฐ ํด๋ฌ์คํฐ ๋ ธ๋์์ ์คํ๋๋ ๋ค์ํ ํต์ฌ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ์ค์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋๋ฉด ํด๋ฌ์คํฐ๊ฐ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
์ค์๋ก ํ์๋ Pod๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
Pod๋ฅผ ์ค์๋ก ์ค์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
Pod
์ฌ์์ ์์ฑํ๊ฑฐ๋system-cluster-critical
์ฐ์ ์์ ํด๋์ค๋ฅผ ํฌํจํ๋๋ก ๊ธฐ์กด Pod๋ฅผ ํธ์งํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: my-pdb spec: template: metadata: name: critical-pod priorityClassName: system-cluster-critical 1
- 1
- ๋ ธ๋์์ ์ ๊ฑฐํด์๋ ์ ๋๋ Pod์ ๊ธฐ๋ณธ ์ฐ์ ์์ ํด๋์ค์ ๋๋ค.
๋๋ ํด๋ฌ์คํฐ์ ์ค์ํ Pod์ ๋ํด
system-node-critical
์ ์ง์ ํ ์ ์์ง๋ง ํ์ํ ๊ฒฝ์ฐ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค.Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
2.3.5. ํ์ผ ์๊ฐ ๋ง์ ์๊ตฌ ๋ณผ๋ฅจ์ ์ฌ์ฉํ ๋ Pod ํ์์์ ๊ฐ์
์คํ ๋ฆฌ์ง ๋ณผ๋ฅจ์ ๋ง์ ํ์ผ(~1,000,000๊ฐ ์ด์)์ด ํฌํจ๋ ๊ฒฝ์ฐ Pod ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ ๋ณผ๋ฅจ์ด ๋ง์ดํธ๋ ๋ Pod์ securityContext
์ ์ง์ ๋ fsGroup
๊ณผ ์ผ์นํ๋๋ก OpenShift Container Platform์์ ๊ฐ ๋ณผ๋ฅจ์ ์ปจํ
์ธ ์ ์์ ๊ถ ๋ฐ ๊ถํ์ ์ฌ๊ท์ ์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋๊ท๋ชจ ๋ณผ๋ฅจ์ ๊ฒฝ์ฐ ์์ ๊ถ ๋ฐ ๊ถํ์ ํ์ธํ๊ณ ๋ณ๊ฒฝํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก Pod ์์ ์๋๊ฐ ๋งค์ฐ ๋๋ ค์ง ์ ์์ต๋๋ค.
๋ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ ์ฉํ์ฌ ์ด ์ง์ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
- SCC(๋ณด์ ์ปจํ ์คํธ ์ ์ฝ ์กฐ๊ฑด)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ SELinux ์ฌ๋ ์ด๋ธ์ ๊ฑด๋๋๋๋ค.
-
SCC ๋ด์์
fsGroupChangePolicy
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Container Platform์์ ๋ณผ๋ฅจ์ ์์ ๊ถ ๋ฐ ๊ถํ์ ํ์ธํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ์ดํฉ๋๋ค. - ๋ฐํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ SELinux ์ฌ๋ ์ด๋ธ์ ๊ฑด๋๋๋๋ค.
2.4. ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod ์๋ ์ค์ผ์ผ๋ง
๊ฐ๋ฐ์๋ HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๋ณต์ ์ปจํธ๋กค๋ฌ ๋๋ ๋ฐฐํฌ ๊ตฌ์ฑ์ ์ํ๋ Pod์์ ์์งํ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก OpenShift Container Platform์์ ๋ณต์ ์ปจํธ๋กค๋ฌ ๋๋ ๋ฐฐํฌ ๊ตฌ์ฑ์ ๊ท๋ชจ๋ฅผ ์๋์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์ด๋ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ฐฐํฌ, ๋ฐฐํฌ ๊ตฌ์ฑ, ๋ณต์ ๋ณธ ์ธํธ, ๋ณต์ ์ปจํธ๋กค๋ฌ ๋๋ ์ํ ์ ์ฅ ์ธํธ์ ๋ํ HPA๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก Pod ์ค์ผ์ผ๋ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก Pod ์๋ ์ค์ผ์ผ๋ง์ ์ฐธ์กฐํ์ญ์์ค.
๋ค๋ฅธ ์ค๋ธ์ ํธ์์ ์ ๊ณตํ๋ ํน์ ๊ธฐ๋ฅ ๋๋ ๋์์ด ํ์ํ์ง ์๋ ํ Deployment
์ค๋ธ์ ํธ ๋๋ ReplicaSet
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฌํ ์ค๋ธ์ ํธ์ ๋ํ ์์ธํ ๋ด์ฉ์ Deployment ๋ฐ DeploymentConfig ์ค๋ธ์ ํธ ์ดํด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.4.1. ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ดํด
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ์ฌ ์คํํ๋ ค๋ ์ต์ ๋ฐ ์ต๋ Pod ์์ Pod์์ ๋ชฉํ๋ก ํ๋ CPU ์ฌ์ฉ๋ฅ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ง์ ํ ์ ์์ต๋๋ค.
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ๋ฉด OpenShift Container Platform์์ Pod์ CPU ๋ฐ/๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค ๋ฉํธ๋ฆญ์ ์ฟผ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ์์ ํ์ฌ ๋ฉํธ๋ฆญ ์ฌ์ฉ๋ฅ ๊ณผ ์ํ๋ ๋ฉํธ๋ฆญ ์ฌ์ฉ๋ฅ ์ ๋น์จ์ ๊ณ์ฐํ๊ณ ๊ทธ์ ๋ฐ๋ผ ํ์ฅ ๋๋ ์ถ์ํฉ๋๋ค. ์ฟผ๋ฆฌ ๋ฐ ์ค์ผ์ผ๋ง์ ์ ๊ธฐ์ ์ผ๋ก ์ํ๋์ง๋ง ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ ์ ์์ ๋๊น์ง 1~2๋ถ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๋ณต์ ์ปจํธ๋กค๋ฌ์ ๊ฒฝ์ฐ ์ด๋ฌํ ์ค์ผ์ผ๋ง์ ๋ณต์ ์ปจํธ๋กค๋ฌ์ ๋ณต์ ๋ณธ๊ณผ ์ง์ ์ ์ผ๋ก ์ผ์นํฉ๋๋ค. ๋ฐฐํฌ ๊ตฌ์ฑ์ ๊ฒฝ์ฐ ์ค์ผ์ผ๋ง์ ๋ฐฐํฌ ๊ตฌ์ฑ์ ๋ณต์ ๋ณธ ์์ ์ง์ ์ ์ผ๋ก ์ผ์นํฉ๋๋ค. ์๋ ์ค์ผ์ผ๋ง์ Complete
๋จ๊ณ์์ ์ต์ ๋ฐฐํฌ์๋ง ์ ์ฉ๋ฉ๋๋ค.
OpenShift Container Platform์ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์ฐจ์งํ์ฌ ์์ํ๋ ๋์๊ณผ ๊ฐ์ด ๋ฆฌ์์ค๊ฐ ๊ธ์ฆํ๋ ๋์ ๋ถํ์ํ ์๋ ์ค์ผ์ผ๋ง์ ๋ฐฉ์งํฉ๋๋ค. unready
์ํ์ Pod๋ ํ์ฅ ์ CPU ์ฌ์ฉ๋์ด 0
์ด๊ณ , ์ถ์ ์์๋ ์๋ ์ค์ผ์ผ๋ฌ์์ Pod๋ฅผ ๋ฌด์ํฉ๋๋ค. ์๋ ค์ง ๋ฉํธ๋ฆญ์ด ์๋ Pod๋ ํ์ฅ ์ CPU ์ฌ์ฉ๋์ด 0%
์ด๊ณ , ์ถ์ ์์๋ 100%
์
๋๋ค. ์ด๋ฅผ ํตํด HPA๋ฅผ ๊ฒฐ์ ํ๋ ๋์ ์์ ์ฑ์ด ํฅ์๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ค๋น ์ํ ์ ๊ฒ์ ๊ตฌ์ฑํ์ฌ ์ Pod๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
2.4.1.1. ์ง์๋๋ ๋ฉํธ๋ฆญ
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ์์๋ ๋ค์ ๋ฉํธ๋ฆญ์ ์ง์ํฉ๋๋ค.
๋ฉํธ๋ฆญ | ์ค๋ช | API ๋ฒ์ |
---|---|---|
CPU ์ฌ์ฉ | ์ฌ์ฉ๋๋ CPU ์ฝ์ด์ ์์ ๋๋ค. Pod์์ ์์ฒญํ๋ CPU์ ๋ฐฑ๋ถ์จ์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ | ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋๋ค. Pod์์ ์์ฒญํ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฑ๋ถ์จ์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|
๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์๋ ์ค์ผ์ผ๋ง์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ณต์ ๋ณธ ์์ ๋น๋กํ์ฌ ์ฆ๊ฐ ๋ฐ ๊ฐ์ํด์ผ ํฉ๋๋ค. ํ๊ท ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ณต์ ๋ณธ ์๊ฐ ์ฆ๊ฐํ๋ฉด Pod๋น ๋ฉ๋ชจ๋ฆฌ(์์ ์งํฉ) ์ฌ์ฉ๋์ด ์ ๋ฐ์ ์ผ๋ก ๊ฐ์ํด์ผ ํฉ๋๋ค.
- ๋ณต์ ๋ณธ ์๊ฐ ๊ฐ์ํ๋ฉด Pod๋ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํด์ผ ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์๋ ์ค์ผ์ผ๋ง์ ์ฌ์ฉํ๊ธฐ ์ ์ OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ํ์ธํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํด๋น ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ญ์์ค.
๋ค์ ์์ ์์๋ image-registry
Deployment
์ค๋ธ์ ํธ์ ์๋ ์ค์ผ์ผ๋ง์ ๋ณด์ฌ์ค๋๋ค. ์ด๊ธฐ ๋ฐฐํฌ์๋ Pod 3๊ฐ๊ฐ ํ์ํฉ๋๋ค. HPA ์ค๋ธ์ ํธ์์ ์ต์ 5๊ฐ๋ก ์ฆ๊ฐํฉ๋๋ค. Pod์ CPU ์ฌ์ฉ๋์ด 75%์ ๋๋ฌํ๋ฉด Pod๊ฐ 7๋ก ์ฆ๊ฐํฉ๋๋ค.
$ oc autoscale deployment/image-registry --min=5 --max=7 --cpu-percent=75
์ถ๋ ฅ ์
horizontalpodautoscaler.autoscaling/image-registry autoscaled
minReplicas
๊ฐ 3์ผ๋ก ์ค์ ๋ image-registry
Deployment
์ค๋ธ์ ํธ์ ์ํ HPA
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: image-registry namespace: default spec: maxReplicas: 7 minReplicas: 3 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: image-registry targetCPUUtilizationPercentage: 75 status: currentReplicas: 5 desiredReplicas: 0
๋ฐฐํฌ์ ์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get deployment image-registry
์ด์ ๋ฐฐํฌ์ Pod 5๊ฐ๊ฐ ์์ต๋๋ค.
์ถ๋ ฅ ์
NAME REVISION DESIRED CURRENT TRIGGERED BY image-registry 1 5 5 config
2.4.2. HPA๋ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
HPA(Horizontal Pod Autoscaler)๋ Pod ์๋ ํ์ฅ์ ๊ฐ๋ ์ ํ์ฅํฉ๋๋ค. HPA๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถํ ๋ถ์ฐ ๋ ธ๋ ๊ทธ๋ฃน์ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. HPA๋ ์ง์ ๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด Pod ์๋ฅผ ์๋์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์ ๋๋ค.
๊ทธ๋ฆผ 2.1. HPA์ ์์ ์์ค ์ํฌํ๋ก
![workflow](https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.10-Nodes-ko-KR/images/e5f238cca06e9ee1647ad76efa36dcef/HPAflow.png)
HPA๋ Kubernetes ์๋ ์ค์ผ์ผ๋ง API ๊ทธ๋ฃน์ API ๋ฆฌ์์ค์ ๋๋ค. ์๋ ์ค์ผ์ผ๋ฌ๋ ๋๊ธฐํ ๊ธฐ๊ฐ ๋์ ๊ธฐ๋ณธ 15์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ด ๋ฃจํ๋ก ์๋ํฉ๋๋ค. ์ด ๊ธฐ๊ฐ ๋์ ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์๋ HPA์ YAML ํ์ผ์ ์ ์๋ ๋ด์ฉ์ ๋ํด CPU, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ๋๋ ๋ ๋ค๋ฅผ ์ฟผ๋ฆฌํฉ๋๋ค. ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์๋ HPA๋ฅผ ๋์์ผ๋ก ํ๋ ๊ฐ Pod์ ๋ํด CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ Pod๋ณ ๋ฆฌ์์ค ์งํ API์์ ์ฌ์ฉ๋ฅ ์งํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
utilization ๊ฐ target์ด ์ค์ ๋ ๊ฒฝ์ฐ ์ปจํธ๋กค๋ฌ๋ ๊ฐ Pod์ ์ปจํ
์ด๋์ ํด๋นํ๋ ๋ฆฌ์์ค ์์ฒญ์ ๋ฐฑ๋ถ์จ๋ก utilization ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ ๋์ Pod์์ ํ๊ท ์ฌ์ฉ๋ฅ ์ ์ฌ์ฉํ๊ณ ์ํ๋ ๋ณต์ ๋ณธ ์๋ฅผ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋น์จ์ ์์ฑํฉ๋๋ค. HPA๋ ์งํ ์๋ฒ์์ ์ ๊ณตํ๋ metrics.k8s.io
์์ ์งํ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์งํ ํ๊ฐ์ ๋์ ํน์ฑ์ผ๋ก ์ธํด ๋ณต์ ๋ณธ ๊ทธ๋ฃน์ ํ์ฅํ๋ ๋์ ๋ณต์ ๋ณธ ์๊ฐ ๋ณ๋๋ ์ ์์ต๋๋ค.
HPA๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ชจ๋ ๋์ Pod์ ํด๋น ์ปจํ ์ด๋์ ๋ฆฌ์์ค ์์ฒญ์ด ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
2.4.3. ์์ฒญ ๋ฐ ์ ํ ์ ๋ณด
์ค์ผ์ค๋ฌ๋ Pod์ ์ปจํ ์ด๋์ ์ง์ ํ๋ ๋ฆฌ์์ค ์์ฒญ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ๋ฐฐ์นํ ๋ ธ๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. kubelet์ ์ปจํ ์ด๋์ ์ง์ ํ ๋ฆฌ์์ค ์ ํ์ ์ ์ฉํ์ฌ ์ปจํ ์ด๋๊ฐ ์ง์ ๋ ์ ํ๋ณด๋ค ๋ ๋ง์ด ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. kubelet์ ํด๋น ์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ ํนํ ํด๋น ์์คํ ๋ฆฌ์์ค์ ์์ฒญ ์์ ์์ฝํฉ๋๋ค.
๋ฆฌ์์ค ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
Pod ์ฌ์์์๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ฆฌ์์ค ์์ฒญ์ ์ง์ ํด์ผ ํฉ๋๋ค. HPA๋ ์ด ์ฌ์์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์ฌ์ฉ๋ฅ ์ ํ์ธํ ๋ค์ ๋์์ ํ์ฅ ๋๋ ์ถ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด HPA ์ค๋ธ์ ํธ๋ ๋ค์ ์งํ ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60
์ด ์์์ HPA๋ ์ค์ผ์ผ๋ง ๋์์ Pod์ ํ๊ท ์ฌ์ฉ๋ฅ ์ 60%๋ก ์ ์งํฉ๋๋ค. utilization์ ํ์ฌ ๋ฆฌ์์ค ์ฌ์ฉ๋๊ณผ ์์ฒญ๋ Pod ๋ฆฌ์์ค ๊ฐ ๋น์จ์ ๋๋ค.
2.4.4. ๋ชจ๋ฒ ์ฌ๋ก
๋ชจ๋ Pod์ ๋ฆฌ์์ค ์์ฒญ์ด ๊ตฌ์ฑ๋์ด ์์ด์ผ ํฉ๋๋ค.
HPA๋ OpenShift Container Platform ํด๋ฌ์คํฐ์์ ๊ด์ฐฐ๋ Pod CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ค์ผ์ผ๋ง ๊ฒฐ์ ์ ๋ด๋ฆฝ๋๋ค. ์ฌ์ฉ๋ฅ ๊ฐ์ ๊ฐ Pod์ ๋ฆฌ์์ค ์์ฒญ์ ๋ฐฑ๋ถ์จ๋ก ๊ณ์ฐ๋ฉ๋๋ค. ๋ฆฌ์์ค ์์ฒญ ๊ฐ์ด ๋๋ฝ๋๋ฉด HPA์ ์ต์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
์ฟจํ ๋ค์ด ๊ธฐ๊ฐ ๊ตฌ์ฑ
์ํ Pod ์๋ ์ค์ผ์ผ๋ง ์ค์ ์๊ฐ ๊ฐ๊ฒฉ ์์ด ์ด๋ฒคํธ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ฅํ ์ ์์ต๋๋ค. ์์ฃผ ๋ณต์ ๋ณ๋์ ๋ฐฉ์งํฉ๋๋ค. stabilizationWindowSeconds
ํ๋๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฟจ ๋ค์ด ๊ธฐ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ค์ผ์ผ๋ง์ ์ฌ์ฉ๋ ์งํ๊ฐ ๊ณ์ ๋ณ๋๋ ๋ ๋ณต์ ๋ณธ ์์ ๋ณ๋์ ์ ํํ๋ ๋ฐ ์์ ํ ๊ธฐ๊ฐ(stabilization) ์ฐฝ์
๋๋ค. ์๋ ์ค์ผ์ผ๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ด ์ฐฝ์ ์ฌ์ฉํ์ฌ ์ด์ ์ ์ํ๋ ์ํ๋ฅผ ์ถ์ธกํ๊ณ ์ํฌ๋ก๋ ๊ท๋ชจ์ ์ํ์ง ์๋ ๋ณ๊ฒฝ์ ๋ฐฉ์งํฉ๋๋ค.
์๋ฅผ ๋ค์ด, stabilization ์ฐฝ์ scaleDown
ํ๋์ ๋ํด ์ง์ ๋ฉ๋๋ค.
behavior: scaleDown: stabilizationWindowSeconds: 300
์์ ์์์๋ ์ง๋ 5๋ถ ๋์ ์ํ๋ ๋ชจ๋ ์ํ๋ฅผ ๊ณ ๋ คํฉ๋๋ค. ์ด๋ ๋กค๋ง ์ต๋๊ฐ๊ณผ ๋์ผํ๋ฉฐ ์ค์ผ์ผ๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋์ค์ ๋๋ฑํ Pod๋ฅผ ๋ค์ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ง Pod๋ฅผ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
2.4.4.1. ์ค์ผ์ผ๋ง ์ ์ฑ
autoscaling/v2
API๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ์ ์ค์ผ์ผ๋ง ์ ์ฑ
์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ค์ผ์ผ๋ง ์ ์ฑ
์ OpenShift Container Platform HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)์์ Pod๋ฅผ ์ค์ผ์ผ๋งํ๋ ๋ฐฉ๋ฒ์ ์ ์ดํฉ๋๋ค. ์ค์ผ์ผ๋ง ์ ์ฑ
์ ์ฌ์ฉํ๋ฉด ์ง์ ๋ ๊ธฐ๊ฐ์ ์ค์ผ์ผ๋งํ ํน์ ์ ๋๋ ํน์ ๋ฐฑ๋ถ์จ์ ์ค์ ํ์ฌ HPA์์ Pod๋ฅผ ํ์ฅ ๋๋ ์ถ์ํ๋ ๋น์จ์ ์ ํํ ์ ์์ต๋๋ค. ๋ํ ๋ฉํธ๋ฆญ์ด ๊ณ์ ๋ณ๋ํ๋ ๊ฒฝ์ฐ ์ด์ ์ ๊ณ์ฐํ ์ํ๋ ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ผ์ผ๋ง์ ์ ์ดํ๋ ์์ ํ ๊ธฐ๊ฐ์ ์ ์ํ ์ ์์ต๋๋ค. ๋์ผํ ์ค์ผ์ผ๋ง ๋ฐฉํฅ(ํ์ฅ ๋๋ ์ถ์)์ ๋ํด ์ฌ๋ฌ ์ ์ฑ
์ ์์ฑํ์ฌ ๋ณ๊ฒฝ ์ ๋์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์ฑ
์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ณต ์๊ฐ์ ์ง์ ํ์ฌ ์ค์ผ์ผ๋ง์ ์ ํํ ์๋ ์์ต๋๋ค. HPA๋ ๋ฐ๋ณต ์ค Pod๋ฅผ ์ค์ผ์ผ๋งํ ๋ค์ ํ์์ ๋ฐ๋ผ ์ถ๊ฐ ๋ฐ๋ณต์์ ์ค์ผ์ผ๋ง์ ์ํํฉ๋๋ค.
์ค์ผ์ผ๋ง ์ ์ฑ ์ด ํฌํจ๋ HPA ์ค๋ธ์ ํธ ์ํ
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: hpa-resource-metrics-memory namespace: default spec: behavior: scaleDown: 1 policies: 2 - type: Pods 3 value: 4 4 periodSeconds: 60 5 - type: Percent value: 10 6 periodSeconds: 60 selectPolicy: Min 7 stabilizationWindowSeconds: 300 8 scaleUp: 9 policies: - type: Pods value: 5 10 periodSeconds: 70 - type: Percent value: 12 11 periodSeconds: 80 selectPolicy: Max stabilizationWindowSeconds: 0 ...
- 1
- ์ค์ผ์ผ๋ง ์ ์ฑ ์ ๋ฐฉํฅ, ์ฆ
scaleDown
๋๋scaleUp
์ ์ง์ ํฉ๋๋ค. ์ด ์์ ์์๋ ์ถ์ ์ ์ฑ ์ ์์ฑํฉ๋๋ค. - 2
- ์ค์ผ์ผ๋ง ์ ์ฑ ์ ์ ์ํฉ๋๋ค.
- 3
- ์ ์ฑ ์ด ๊ฐ ๋ฐ๋ณต์์ ํน์ Pod ์ ๋๋ Pod ๋ฐฑ๋ถ์จ๋ก ์ค์ผ์ผ๋งํ๋์ง์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
pods
์ ๋๋ค. - 4
- ๊ฐ ๋ฐ๋ณต ์ค์ Pod ์ ๋๋ Pod ๋ฐฑ๋ถ์จ ์ค ํ๋์ ์ค์ผ์ผ๋ง ์์ ์ ํํฉ๋๋ค. Pod ์์ ๋ฐ๋ผ ์ถ์ํ ๊ธฐ๋ณธ๊ฐ์ ์์ต๋๋ค.
- 5
- ์ค์ผ์ผ๋ง ๋ฐ๋ณต์ ๊ธธ์ด๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
15
์ด์ ๋๋ค. - 6
- ๋ฐฑ๋ถ์จ๋ก ๋ ์ถ์ ๊ธฐ๋ณธ๊ฐ์ 100%์ ๋๋ค.
- 7
- ์ฌ๋ฌ ์ ์ฑ ์ด ์ ์๋ ๊ฒฝ์ฐ ๋จผ์ ์ฌ์ฉํ ์ ์ฑ ์ ๊ฒฐ์ ํฉ๋๋ค. ๊ฐ์ฅ ๋ง์ ๋ณ๊ฒฝ์ ํ์ฉํ๋ ์ ์ฑ ์ ์ฌ์ฉํ๋ ค๋ฉด
Max
๋ฅผ ์ง์ ํ๊ณ , ์ต์ ๋ณ๊ฒฝ์ ํ์ฉํ๋ ์ ์ฑ ์ ์ฌ์ฉํ๋ ค๋ฉดMin
์ ์ง์ ํฉ๋๋ค. HPA์์ ํด๋น ์ ์ฑ ๋ฐฉํฅ์ผ๋ก ์ค์ผ์ผ๋งํ์ง ์๋๋ก ํ๋ ค๋ฉดDisabled
๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์Max
์ ๋๋ค. - 8
- HPA์์ ์ํ๋ ์ํ๋ฅผ ๊ฒํ ํด์ผ ํ๋ ๊ธฐ๊ฐ์ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
0
์ ๋๋ค. - 9
- ์ด ์์ ์์๋ ํ์ฅ ์ ์ฑ ์ ์์ฑํฉ๋๋ค.
- 10
- Pod ์์ ๋ฐ๋ผ ํ์ฅ๋๋ ์์ ์ ํํฉ๋๋ค. Pod ์ ํ์ฅ ๊ธฐ๋ณธ๊ฐ์ 4%์ ๋๋ค.
- 11
- Pod ๋ฐฑ๋ถ์จ์ ๋ฐ๋ผ ํ์ฅ๋๋ ์์ ์ ํํฉ๋๋ค. ๋ฐฑ๋ถ์จ๋ก ๋ ํ์ฅ ๊ธฐ๋ณธ๊ฐ์ 100%์ ๋๋ค.
์ถ์ ์ ์ฑ ์ ์
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: hpa-resource-metrics-memory namespace: default spec: ... minReplicas: 20 ... behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Pods value: 4 periodSeconds: 30 - type: Percent value: 10 periodSeconds: 60 selectPolicy: Max scaleUp: selectPolicy: Disabled
์ด ์์ ์์ Pod ์๊ฐ 40๊ฐ๋ฅผ ์ด๊ณผํ๋ฉด selectPolicy
์์ ์๊ตฌํ๋ ๋๋ก ํด๋น ์ ์ฑ
์ผ๋ก ์ธํด ์๋นํ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฏ๋ก ์ถ์์ ๋ฐฑ๋ถ์จ ๊ธฐ๋ฐ ์ ์ฑ
์ด ์ฌ์ฉ๋ฉ๋๋ค.
Pod ๋ณต์ ๋ณธ์ด 80๊ฐ ์๋ ๊ฒฝ์ฐ HPA๋ ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์์ 1๋ถ(periodSeconds: 60
)์ ๊ฑธ์ณ (type: Percent
๋ฐ value: 10
๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ) Pod 80๊ฐ ์ค 10%์ ํด๋นํ๋ 8๊ฐ์ Pod๋ฅผ ์ค์
๋๋ค. ๋ค์ ๋ฐ๋ณต์์๋ Pod๊ฐ 72๊ฐ์
๋๋ค. HPA๋ ๋๋จธ์ง Pod์ 10%๋ฅผ ๊ณ์ฐํ 7.2๊ฐ๋ฅผ 8๊ฐ๋ก ์ฌ๋ฆผํ์ฌ Pod 8๊ฐ๋ฅผ ์ถ์ํฉ๋๋ค. ์ดํ ๋ฐ๋ณตํ ๋๋ง๋ค ๋๋จธ์ง Pod ์์ ๋ฐ๋ผ ์ค์ผ์ผ๋งํ Pod ์๊ฐ ๋ค์ ๊ณ์ฐ๋ฉ๋๋ค. Pod ์๊ฐ 40๊ฐ ๋ฏธ๋ง์ผ๋ก ์ค์ด๋ค๋ฉด Pod ๊ธฐ๋ฐ ์ซ์๊ฐ ๋ฐฑ๋ถ์จ ๊ธฐ๋ฐ ์ซ์๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ Pod ๊ธฐ๋ฐ ์ ์ฑ
์ด ์ ์ฉ๋ฉ๋๋ค. HPA๋ 20๊ฐ์ ๋ณต์ ๋ณธ(minReplicas
)์ด ๋จ์ ์์ ๋๊น์ง 30์ด(periodSeconds: 30
)์ ๊ฑธ์ณ ํ ๋ฒ์ Pod๋ฅผ 4๊ฐ์ฉ ์ค์
๋๋ค(type: Pods
๋ฐ value: 4
).
selectPolicy: Disabled
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด HPA์์ Pod๋ฅผ ํ์ฅํ์ง ๋ชปํฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋ณต์ ๋ณธ ์ธํธ ๋๋ ๋ฐฐํฌ ์ธํธ์ ๋ณต์ ๋ณธ ์๋ฅผ ์กฐ์ ํ์ฌ ์๋์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค.
์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ oc edit
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ค์ผ์ผ๋ง ์ ์ฑ
์ ํ์ธํ ์ ์์ต๋๋ค.
$ oc edit hpa hpa-resource-metrics-memory
์ถ๋ ฅ ์
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: annotations: autoscaling.alpha.kubernetes.io/behavior:\ '{"ScaleUp":{"StabilizationWindowSeconds":0,"SelectPolicy":"Max","Policies":[{"Type":"Pods","Value":4,"PeriodSeconds":15},{"Type":"Percent","Value":100,"PeriodSeconds":15}]},\ "ScaleDown":{"StabilizationWindowSeconds":300,"SelectPolicy":"Min","Policies":[{"Type":"Pods","Value":4,"PeriodSeconds":60},{"Type":"Percent","Value":10,"PeriodSeconds":60}]}}' ...
2.4.5. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์์ฑ
์น ์ฝ์์์ Deployment
๋๋ DeploymentConfig
์ค๋ธ์ ํธ์์ ์คํํ ์ต์ ๋ฐ ์ต๋ Pod ์๋ฅผ ์ง์ ํ๋ HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. Pod์์ ๋์์ผ๋ก ํ๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ์ํ ์๋ ์์ต๋๋ค.
HPA๋ Operator ์ง์ ์๋น์ค, Knative ์๋น์ค ๋๋ Helm ์ฐจํธ์ ์ผ๋ถ์ธ ๋ฐฐํฌ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ ์ฐจ
์น ์ฝ์์์ HPA๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- ํ ํด๋ก์ง ๋ณด๊ธฐ์์ ๋ ธ๋๋ฅผ ํด๋ฆญํ์ฌ ์ธก๋ฉด ์ฐฝ์ ํ์ํฉ๋๋ค.
์์ ๋๋กญ๋ค์ด ๋ชฉ๋ก์์ HorizontalPodAutoscaler ์ถ๊ฐ ๋ฅผ ์ ํํ์ฌ HorizontalPodAutoscaler ์ถ๊ฐ ์์์ ์ฝ๋๋ค.
๊ทธ๋ฆผ 2.2. Add HorizontalPodAutoscaler
HorizontalPodAutoscaler ์ถ๊ฐ ์์์์ ์ด๋ฆ, ์ต์ ๋ฐ ์ต๋ Pod ์ ํ, CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ์ํ๊ณ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
์ฐธ๊ณCPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ํ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
์น ์ฝ์์์ HPA๋ฅผ ํธ์งํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- ํ ํด๋ก์ง ๋ณด๊ธฐ์์ ๋ ธ๋๋ฅผ ํด๋ฆญํ์ฌ ์ธก๋ฉด ์ฐฝ์ ํ์ํฉ๋๋ค.
- ์์ ๋๋กญ๋ค์ด ๋ชฉ๋ก์์ HorizontalPodAutoscaler ํธ์ง์ ์ ํํ์ฌ Horizontal Pod Autoscaler ํธ์ง ์์์ ์ฝ๋๋ค.
- Horizontal Pod Autoscaler ํธ์ง ์์์์ ์ต์ ๋ฐ ์ต๋ Pod ์ ํ๊ณผ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํธ์งํ ๋ค์ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
์น ์ฝ์์์ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ๊ฑฐ๋ ํธ์งํ๋ ๋์ ์์ ๋ณด๊ธฐ์์ YAML ๋ณด๊ธฐ๋ก ์ ํํ ์ ์์ต๋๋ค.
์น ์ฝ์์์ HPA๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- ํ ํด๋ก์ง ๋ณด๊ธฐ์์ ๋ ธ๋๋ฅผ ํด๋ฆญํ์ฌ ์ธก๋ฉด ์ฐฝ์ ํ์ํฉ๋๋ค.
- ์์ ๋๋กญ๋ค์ด ๋ชฉ๋ก์์ HorizontalPodAutoscaler ์ ๊ฑฐ๋ฅผ ์ ํํฉ๋๋ค.
- ํ์ธ ํ์ ์ฐฝ์์ ์ ๊ฑฐ๋ฅผ ํด๋ฆญํ์ฌ HPA๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
2.4.6. CLI๋ฅผ ์ฌ์ฉํ์ฌ CPU ์ฌ์ฉ๋ฅ ์ ๋ํ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์์ฑ
OpenShift Container Platform CLI๋ฅผ ์ฌ์ฉํ๋ฉด HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ์์ฑํ์ฌ ๊ธฐ์กด Deployment
,DeploymentConfig
,ReplicaSet
,ReplicationController
๋๋ StatefulSet
์ค๋ธ์ ํธ๋ฅผ ์๋์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. HPA๋ ์ง์ ํ CPU ์ฌ์ฉ๋์ ์ ์งํ๋๋ก ํด๋น ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod๋ฅผ ์ค์ผ์ผ๋งํฉ๋๋ค.
๋ค๋ฅธ ์ค๋ธ์ ํธ์์ ์ ๊ณตํ๋ ํน์ ๊ธฐ๋ฅ ๋๋ ๋์์ด ํ์ํ์ง ์๋ ํ Deployment
์ค๋ธ์ ํธ ๋๋ ReplicaSet
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
HPA๋ ์ต์ ๋ฐ ์ต๋ ๊ฐ์ ์ฌ์ด์์ ๋ณต์ ๋ณธ ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ฌ ์ ์ฒด Pod์์ ์ง์ ๋ CPU ์ฌ์ฉ๋ฅ ์ ์ ์งํฉ๋๋ค.
CPU ์ฌ์ฉ๋ฅ ์ ์๋ ์ค์ผ์ผ๋งํ ๋๋ oc autoscale
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ธ์ ๋ ์ง ์คํํ๋ ค๋ ์ต์ ๋ฐ ์ต๋ Pod ์์ Pod์์ ๋ชฉํ๋ก ํ๋ ํ๊ท CPU ์ฌ์ฉ๋ฅ ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ต์๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด Pod์ OpenShift Container Platform ์๋ฒ์ ๊ธฐ๋ณธ๊ฐ์ด ์ง์ ๋ฉ๋๋ค.
ํน์ CPU ๊ฐ์ ์๋ ์ค์ผ์ผ๋งํ๋ ค๋ฉด ๋์ CPU ๋ฐ Pod ์ ํ์ ์ฌ์ฉํ์ฌ HorizontalPodAutoscaler
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. oc describe PodMetrics <pod-name>
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ์ด ๋ค์๊ณผ ์ ์ฌํ๊ฒ ํ์๋๊ณ Usage
์ Cpu
๋ฐ Memory
๊ฐ ํ์๋ฉ๋๋ค.
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
์ถ๋ ฅ ์
Name: openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Namespace: openshift-kube-scheduler Labels: <none> Annotations: <none> API Version: metrics.k8s.io/v1beta1 Containers: Name: wait-for-host-port Usage: Memory: 0 Name: scheduler Usage: Cpu: 8m Memory: 45440Ki Kind: PodMetrics Metadata: Creation Timestamp: 2019-05-23T18:47:56Z Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Timestamp: 2019-05-23T18:47:56Z Window: 1m0s Events: <none>
ํ๋ก์ธ์ค
CPU ์ฌ์ฉ๋ฅ ์ ๋ํ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์ ์ค ํ๋๋ฅผ ์ํํฉ๋๋ค.
CPU ์ฌ์ฉ๋ฅ ์ ๋ฐฑ๋ถ์จ์ ๋ฐ๋ผ ์ค์ผ์ผ๋งํ๋ ค๋ฉด ๊ธฐ์กด ์ค๋ธ์ ํธ์ ๋ํ
HorizontalPodAutoscaler
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc autoscale <object_type>/<name> \1 --min <number> \2 --max <number> \3 --cpu-percent=<percent> 4
- 1
- ์๋ ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ์ ํ ๋ฐ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์ค๋ธ์ ํธ๊ฐ ์กด์ฌํ๊ณ
Deployment
,DeploymentConfig
/dc
,ReplicaSet
/rs
,ReplicationController
/rc
๋๋StatefulSet
์ฌ์ผ ํฉ๋๋ค. - 2
- ํ์ํ ๊ฒฝ์ฐ ์ถ์ ์ ์ต์ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 3
- ํ์ฅ ์ ์ต๋ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 4
- ์์ฒญ๋ CPU์ ๋ฐฑ๋ถ์จ๋ก ํ์๋๋ ๋ชจ๋ Pod์ ๋ชฉํ ํ๊ท CPU ์ฌ์ฉ๋์ ์ง์ ํฉ๋๋ค. ์ง์ ํ์ง ์๊ฑฐ๋ ์์๊ฐ ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์๋ ์ค์ผ์ผ๋ง ์ ์ฑ ์ด ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ช ๋ น์
image-registry
Deployment
์ค๋ธ์ ํธ์ ์๋ ์ค์ผ์ผ๋ง์ ๋ณด์ฌ์ค๋๋ค. ์ด๊ธฐ ๋ฐฐํฌ์๋ Pod 3๊ฐ๊ฐ ํ์ํฉ๋๋ค. HPA ์ค๋ธ์ ํธ์์ ์ต์ 5๊ฐ๋ก ์ฆ๊ฐํฉ๋๋ค. Pod์ CPU ์ฌ์ฉ๋์ด 75%์ ๋๋ฌํ๋ฉด Pod๊ฐ 7๋ก ์ฆ๊ฐํฉ๋๋ค.$ oc autoscale deployment/image-registry --min=5 --max=7 --cpu-percent=75
ํน์ CPU ๊ฐ์ ์ค์ผ์ผ๋งํ๋ ค๋ฉด ๊ธฐ์กด ์ค๋ธ์ ํธ์ ๋ํด ๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: autoscaling/v2 1 kind: HorizontalPodAutoscaler metadata: name: cpu-autoscale 2 namespace: default spec: scaleTargetRef: apiVersion: apps/v1 3 kind: Deployment 4 name: example 5 minReplicas: 1 6 maxReplicas: 10 7 metrics: 8 - type: Resource resource: name: cpu 9 target: type: AverageValue 10 averageValue: 500m 11
- 1
autoscaling/v2
API๋ฅผ ์ฌ์ฉํฉ๋๋ค.- 2
- ์ด ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 3
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ API ๋ฒ์ ์ ์ง์ ํฉ๋๋ค.
-
Deployment
,ReplicaSet
,Statefulset
์ค๋ธ์ ํธ์ ๊ฒฝ์ฐapps/v1
์ ์ฌ์ฉํฉ๋๋ค. -
ReplicationController
์ ๊ฒฝ์ฐv1
์ ์ฌ์ฉํฉ๋๋ค. -
DeploymentConfig
์ ๊ฒฝ์ฐapps.openshift.io/v1
์ ์ฌ์ฉํฉ๋๋ค.
-
- 4
- ์ค๋ธ์ ํธ ์ ํ์ ์ง์ ํฉ๋๋ค. ์ค๋ธ์ ํธ๋
Deployment
,DeploymentConfig
/dc
,ReplicaSet
/rs
,ReplicationController
/rc
๋๋StatefulSet
์ฌ์ผ ํฉ๋๋ค. - 5
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์ค๋ธ์ ํธ๊ฐ ์์ด์ผ ํฉ๋๋ค.
- 6
- ์ถ์ ์ ์ต์ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 7
- ํ์ฅ ์ ์ต๋ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 8
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์
metrics
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - 9
- CPU ์ฌ์ฉ๋ฅ ์
cpu
๋ฅผ ์ง์ ํฉ๋๋ค. - 10
AverageValue
๋ก ์ค์ ํฉ๋๋ค.- 11
- ๋์ CPU ๊ฐ์ ์ฌ์ฉํ์ฌ
averageValue
๋ก ์ค์ ํฉ๋๋ค.
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get hpa cpu-autoscale
์ถ๋ ฅ ์
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cpu-autoscale Deployment/example 173m/500m 1 10 1 20m
2.4.7. CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ํ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ค๋ธ์ ํธ ์์ฑ
OpenShift Container Platform CLI๋ฅผ ์ฌ์ฉํ๋ฉด HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ์์ฑํ์ฌ ๊ธฐ์กด Deployment
,DeploymentConfig
,ReplicaSet
,ReplicationController
๋๋ StatefulSet
์ค๋ธ์ ํธ๋ฅผ ์๋์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. HPA๋ ์ง์ ํ ํ๊ท ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ (์ง์ ๊ฐ ๋๋ ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฑ๋ถ์จ)์ ์ ์งํ๋๋ก ํด๋น ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod๋ฅผ ์ค์ผ์ผ๋งํฉ๋๋ค.
๋ค๋ฅธ ์ค๋ธ์ ํธ์์ ์ ๊ณตํ๋ ํน์ ๊ธฐ๋ฅ ๋๋ ๋์์ด ํ์ํ์ง ์๋ ํ Deployment
์ค๋ธ์ ํธ ๋๋ ReplicaSet
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
HPA๋ ์ต์ ๋ฐ ์ต๋ ๊ฐ์ ์ฌ์ด์์ ๋ณต์ ๋ณธ ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ฌ ์ ์ฒด Pod์์ ์ง์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ ์งํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๊ฒฝ์ฐ ์ต์ ๋ฐ ์ต๋ Pod ์์ Pod์์ ๋ชฉํ๋ก ํด์ผ ํ๋ ํ๊ท ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ต์๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด Pod์ OpenShift Container Platform ์๋ฒ์ ๊ธฐ๋ณธ๊ฐ์ด ์ง์ ๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. oc describe PodMetrics <pod-name>
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ์ด ๋ค์๊ณผ ์ ์ฌํ๊ฒ ํ์๋๊ณ Usage
์ Cpu
๋ฐ Memory
๊ฐ ํ์๋ฉ๋๋ค.
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-129-223.compute.internal -n openshift-kube-scheduler
์ถ๋ ฅ ์
Name: openshift-kube-scheduler-ip-10-0-129-223.compute.internal Namespace: openshift-kube-scheduler Labels: <none> Annotations: <none> API Version: metrics.k8s.io/v1beta1 Containers: Name: wait-for-host-port Usage: Cpu: 0 Memory: 0 Name: scheduler Usage: Cpu: 8m Memory: 45440Ki Kind: PodMetrics Metadata: Creation Timestamp: 2020-02-14T22:21:14Z Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-129-223.compute.internal Timestamp: 2020-02-14T22:21:14Z Window: 5m0s Events: <none>
ํ๋ก์ธ์ค
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ํ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์ ์ค ํ๋์ ๋ํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
ํน์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ค์ผ์ผ๋งํ๋ ค๋ฉด ๊ธฐ์กด ์ค๋ธ์ ํธ์ ๋ํด ๋ค์๊ณผ ์ ์ฌํ
HorizontalPodAutoscaler
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.apiVersion: autoscaling/v2 1 kind: HorizontalPodAutoscaler metadata: name: hpa-resource-metrics-memory 2 namespace: default spec: scaleTargetRef: apiVersion: apps/v1 3 kind: Deployment 4 name: example 5 minReplicas: 1 6 maxReplicas: 10 7 metrics: 8 - type: Resource resource: name: memory 9 target: type: AverageValue 10 averageValue: 500Mi 11 behavior: 12 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Pods value: 4 periodSeconds: 60 - type: Percent value: 10 periodSeconds: 60 selectPolicy: Max
- 1
autoscaling/v2
API๋ฅผ ์ฌ์ฉํฉ๋๋ค.- 2
- ์ด ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 3
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ API ๋ฒ์ ์ ์ง์ ํฉ๋๋ค.
-
Deployment
,ReplicaSet
๋๋Statefulset
์ค๋ธ์ ํธ์ ๊ฒฝ์ฐapps/v1
์ ์ฌ์ฉํฉ๋๋ค. -
ReplicationController
์ ๊ฒฝ์ฐv1
์ ์ฌ์ฉํฉ๋๋ค. -
DeploymentConfig
์ ๊ฒฝ์ฐapps.openshift.io/v1
์ ์ฌ์ฉํฉ๋๋ค.
-
- 4
- ์ค๋ธ์ ํธ ์ ํ์ ์ง์ ํฉ๋๋ค. ์ค๋ธ์ ํธ๋
Deployment
, DeploymentConfig,
ReplicaSet
,ReplicationController
๋๋StatefulSet
์ฌ์ผ ํฉ๋๋ค. - 5
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์ค๋ธ์ ํธ๊ฐ ์์ด์ผ ํฉ๋๋ค.
- 6
- ์ถ์ ์ ์ต์ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 7
- ํ์ฅ ์ ์ต๋ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 8
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์
metrics
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - 9
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ํ
๋ฉ๋ชจ๋ฆฌ
๋ฅผ ์ง์ ํฉ๋๋ค. - 10
- ์ ํ์
AverageValue
๋ก ์ค์ ํฉ๋๋ค. - 11
averageValue
๋ฐ ํน์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ง์ ํฉ๋๋ค.- 12
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋ง ์ ์ฑ ์ ์ง์ ํ์ฌ ํ์ฅ ๋๋ ์ถ์๋น์จ์ ์ ์ดํฉ๋๋ค.
๋ฐฑ๋ถ์จ๋ก ์ค์ผ์ผ๋งํ๋ ค๋ฉด ๊ธฐ์กด ์ค๋ธ์ ํธ์ ๋ํด ๋ค์๊ณผ ์ ์ฌํ
HorizontalPodAutoscaler
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.apiVersion: autoscaling/v2 1 kind: HorizontalPodAutoscaler metadata: name: memory-autoscale 2 namespace: default spec: scaleTargetRef: apiVersion: apps/v1 3 kind: Deployment 4 name: example 5 minReplicas: 1 6 maxReplicas: 10 7 metrics: 8 - type: Resource resource: name: memory 9 target: type: Utilization 10 averageUtilization: 50 11 behavior: 12 scaleUp: stabilizationWindowSeconds: 180 policies: - type: Pods value: 6 periodSeconds: 120 - type: Percent value: 10 periodSeconds: 120 selectPolicy: Max
- 1
autoscaling/v2
API๋ฅผ ์ฌ์ฉํฉ๋๋ค.- 2
- ์ด ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 3
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ API ๋ฒ์ ์ ์ง์ ํฉ๋๋ค.
-
ReplicationController์ ๊ฒฝ์ฐ
v1
์ ์ฌ์ฉํฉ๋๋ค. -
DeploymentConfig์ ๊ฒฝ์ฐ
apps.openshift.io/v1
์ ์ฌ์ฉํฉ๋๋ค. -
Deployment, ReplicaSet, Statefulset ์ค๋ธ์ ํธ์ ๊ฒฝ์ฐ
apps/v1
์ ์ฌ์ฉํฉ๋๋ค.
-
ReplicationController์ ๊ฒฝ์ฐ
- 4
- ์ค๋ธ์ ํธ ์ ํ์ ์ง์ ํฉ๋๋ค. ์ค๋ธ์ ํธ๋
Deployment
, DeploymentConfig,
ReplicaSet
,ReplicationController
๋๋StatefulSet
์ฌ์ผ ํฉ๋๋ค. - 5
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์ค๋ธ์ ํธ๊ฐ ์์ด์ผ ํฉ๋๋ค.
- 6
- ์ถ์ ์ ์ต์ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 7
- ํ์ฅ ์ ์ต๋ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 8
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์
metrics
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - 9
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ํ
๋ฉ๋ชจ๋ฆฌ
๋ฅผ ์ง์ ํฉ๋๋ค. - 10
Utilization
์ผ๋ก ์ค์ ํฉ๋๋ค.- 11
averageUtilization
๋ฐ ์ ์ฒด Pod์ ๋ํ ๋์ ํ๊ท ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ (์์ฒญ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฑ๋ถ์จ๋ก ํ์)์ ์ง์ ํฉ๋๋ค. ๋์ Pod์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ด ๊ตฌ์ฑ๋์ด ์์ด์ผ ํฉ๋๋ค.- 12
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋ง ์ ์ฑ ์ ์ง์ ํ์ฌ ํ์ฅ ๋๋ ์ถ์๋น์จ์ ์ ์ดํฉ๋๋ค.
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f hpa.yaml
์ถ๋ ฅ ์
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory created
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get hpa hpa-resource-metrics-memory
์ถ๋ ฅ ์
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20m
$ oc describe hpa hpa-resource-metrics-memory
์ถ๋ ฅ ์
Name: hpa-resource-metrics-memory Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: Wed, 04 Mar 2020 16:31:37 +0530 Reference: Deployment/example Metrics: ( current / target ) resource memory on pods: 2441216 / 500Mi Min replicas: 1 Max replicas: 10 ReplicationController pods: 1 current / 1 desired Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale recommended size matches current size ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource ScalingLimited False DesiredWithinRange the desired count is within the acceptable range Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 6m34s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
2.4.8. CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ํ ์กฐ๊ฑด ์ดํด
์ผ๋ จ์ ์ํ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)์์ ์ค์ผ์ผ๋งํ ์ ์๋์ง ๊ทธ๋ฆฌ๊ณ HPA๊ฐ ํ์ฌ ์ ํ๋์ด ์๋์ง์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
HPA ์ํ ์กฐ๊ฑด์ Autoscaling API์ v2
๋ฒ์ ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
HPA๋ ๋ค์๊ณผ ๊ฐ์ ์ํ ์กฐ๊ฑด์ ํตํด ์๋ตํฉ๋๋ค.
AbleToScale
์ํ๋ HPA์์ ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ค๊ณ ์ ๋ฐ์ดํธํ ์ ์๋์ง์ ์ฌ๋ถ ๋ฐ ๋ฐฑ์คํ ๊ด๋ จ ์ํ๋ก ์ค์ผ์ผ๋ง์ ๋ฐฉ์งํ ์ ์๋์ง์ ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.-
True
์กฐ๊ฑด์ ์ค์ผ์ผ๋ง์ด ํ์ฉ๋์์์ ๋ํ๋ ๋๋ค. -
False
์กฐ๊ฑด์ ์ง์ ๋ ์ด์ ๋ก ์ค์ผ์ผ๋ง์ด ํ์ฉ๋์ง ์์์ ๋ํ๋ ๋๋ค.
-
ScalingActive
์กฐ๊ฑด์ HPA๊ฐ ํ์ฑํ๋์ด ์๊ณ (์: ๋์์ ๋ณต์ ๋ณธ ์๊ฐ 0์ด ์๋) ์ํ๋ ๋ฉํธ๋ฆญ์ ๊ณ์ฐํ ์ ์๋์ง์ ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.-
True
์กฐ๊ฑด์ ๋ฉํธ๋ฆญ์ด ์ ๋๋ก ์๋ํจ์ ๋ํ๋ ๋๋ค. -
False
์กฐ๊ฑด์ ์ผ๋ฐ์ ์ผ๋ก ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ค๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ ๋ํ๋ ๋๋ค.
-
ScalingLimited
์กฐ๊ฑด์ ์ํ๋ ์ค์ผ์ผ๋ง์ด ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ์ ์ต๋๊ฐ ๋๋ ์ต์๊ฐ์ผ๋ก ์ ํ๋์์์ ๋ํ๋ ๋๋ค.-
True
์กฐ๊ฑด์ ์ค์ผ์ผ๋ง์ ์ํด ์ต์ ๋๋ ์ต๋ ๋ณต์ ๋ณธ ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ฌ์ผ ํจ์ ๋ํ๋ ๋๋ค. False
์กฐ๊ฑด์ ์์ฒญ๋ ์ค์ผ์ผ๋ง์ด ํ์ฉ๋จ์ ๋ํ๋ ๋๋ค.$ oc describe hpa cm-test
์ถ๋ ฅ ์
Name: cm-test Namespace: prom Labels: <none> Annotations: <none> CreationTimestamp: Fri, 16 Jun 2017 18:09:22 +0000 Reference: ReplicationController/cm-test Metrics: ( current / target ) "http_requests" on pods: 66m / 500m Min replicas: 1 Max replicas: 4 ReplicationController pods: 1 current / 1 desired Conditions: 1 Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range Events:
- 1
- ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ์ ์ํ ๋ฉ์์ง์ ๋๋ค.
-
๋ค์์ ์ค์ผ์ผ๋งํ ์ ์๋ Pod์ ์์ ๋๋ค.
์ถ๋ ฅ ์
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale False FailedGetScale the HPA controller was unable to get the target's current scale: no matches for kind "ReplicationController" in group "apps" Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedGetScale 6s (x3 over 36s) horizontal-pod-autoscaler no matches for kind "ReplicationController" in group "apps"
๋ค์์ ์ค์ผ์ผ๋ง์ ํ์ํ ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ฌ ์ ์๋ Pod์ ์์ ๋๋ค.
์ถ๋ ฅ ์
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API
๋ค์์ ์์ฒญ๋ ์๋ ์ค์ผ์ผ๋ง์ด ํ์ํ ์ต์๊ฐ๋ณด๋ค ์ ์ Pod์ ์์ ๋๋ค.
์ถ๋ ฅ ์
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
2.4.8.1. CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ํ ์กฐ๊ฑด ๋ณด๊ธฐ
HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ํตํด Pod์ ์ค์ ๋ ์ํ ์กฐ๊ฑด์ ๋ณผ ์ ์์ต๋๋ค.
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ ์ํ ์กฐ๊ฑด์ v2
๋ฒ์ ์ autoscaling API์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. oc describe PodMetrics <pod-name>
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ์ด ๋ค์๊ณผ ์ ์ฌํ๊ฒ ํ์๋๊ณ Usage
์ Cpu
๋ฐ Memory
๊ฐ ํ์๋ฉ๋๋ค.
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
์ถ๋ ฅ ์
Name: openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Namespace: openshift-kube-scheduler Labels: <none> Annotations: <none> API Version: metrics.k8s.io/v1beta1 Containers: Name: wait-for-host-port Usage: Memory: 0 Name: scheduler Usage: Cpu: 8m Memory: 45440Ki Kind: PodMetrics Metadata: Creation Timestamp: 2019-05-23T18:47:56Z Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Timestamp: 2019-05-23T18:47:56Z Window: 1m0s Events: <none>
ํ๋ก์ธ์ค
Pod์ ์ํ ์กฐ๊ฑด์ ๋ณด๋ ค๋ฉด Pod ์ด๋ฆ๊ณผ ํจ๊ป ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
$ oc describe hpa <pod-name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc describe hpa cm-test
์ํ๊ฐ ์ถ๋ ฅ์ Conditions
ํ๋์ ๋ํ๋ฉ๋๋ค.
์ถ๋ ฅ ์
Name: cm-test
Namespace: prom
Labels: <none>
Annotations: <none>
CreationTimestamp: Fri, 16 Jun 2017 18:09:22 +0000
Reference: ReplicationController/cm-test
Metrics: ( current / target )
"http_requests" on pods: 66m / 500m
Min replicas: 1
Max replicas: 4
ReplicationController pods: 1 current / 1 desired
Conditions: 1
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request
ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
2.4.9. ์ถ๊ฐ ๋ฆฌ์์ค
- ๋ณต์ ์ปจํธ๋กค๋ฌ ๋ฐ ๋ฐฐํฌ ์ปจํธ๋กค๋ฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐฐํฌ ๋ฐ ๋ฐฐํฌ ๊ตฌ์ฑ ์ดํด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- HPA ์ฌ์ฉ ์๋ Memory Utilization์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Quarkus ์ ํ๋ฆฌ์ผ์ด์ ์ Horizontal Pod ์๋ ํ์ฅ ์์ ์ฐธ์กฐํ์ญ์์ค.
2.5. ์์ง Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฆฌ์์ค ์์ค ์๋ ์กฐ์
OpenShift Container Platform VPA(Vertical Pod Autoscaler Operator)๋ Pod์ ์ปจํ
์ด๋์ ๋ํ ๊ณผ๊ฑฐ ๋ฐ ํ์ฌ์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๊ฒํ ํ ํ ํ์ธํ ์ฌ์ฉ๋ ๊ฐ์ ๋ฐ๋ผ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. VPA๋ ๊ฐ๋ณ CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์ฌ์ฉํ์ฌ Deployment
, Deployment Config
, StatefulSet
, Job
, DaemonSet
, ReplicaSet
๋๋ ReplicationController
์ ๊ฐ์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ Pod๋ฅผ ํ๋ก์ ํธ์์ ์
๋ฐ์ดํธํฉ๋๋ค.
VPA๋ฅผ ์ฌ์ฉํ๋ฉด Pod์ ์ต์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ดํดํ๊ณ Pod์ ๋ผ์ดํ์ฌ์ดํด ๋ด๋ด Pod ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
2.5.1. Vertical Pod Autoscaler Operator ์ ๋ณด
VPA(Vertical Pod Autoscaler Operator)๋ API ๋ฆฌ์์ค ๋ฐ CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)๋ก ๊ตฌํ๋ฉ๋๋ค. CR์ ๋ฐ๋ผ Vertical Pod Autoscaler Operator์์ ๋ฐ๋ชฌ ์ธํธ, ๋ณต์ ์ปจํธ๋กค๋ฌ ๋ฑ๊ณผ ๊ฐ์ ํน์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๊ด๋ จ๋ Pod์์ ์ํํด์ผ ํ๋ ์์ ์ด ํ๋ก์ ํธ์์ ๊ฒฐ์ ๋ฉ๋๋ค.
VPA๋ ํด๋น Pod์ ์ปจํ ์ด๋ ๋ฐ ํ์ฌ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์๋์ผ๋ก ๊ณ์ฐํ๊ณ , ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ํ๋ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ํ์ธํ์ฌ ์ด๋ฌํ Pod๊ฐ ํญ์ ํจ์จ์ ์ผ๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด VPA์์ ์ฌ์ฉ ์ค์ธ ๋ฆฌ์์ค๋ณด๋ค ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ Pod์ ๋ฆฌ์์ค๋ฅผ ์ค์ด๊ณ ๋ฆฌ์์ค๋ฅผ ์ถฉ๋ถํ ์์ฒญํ์ง ์๋ Pod์ ๋ฆฌ์์ค๋ฅผ ๋๋ฆฝ๋๋ค.
VPA๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ด ํ์ ์์ด ์์ฒญ์ ๊ณ์ ์ ๊ณตํ ์ ์๋๋ก ๊ถ์ฅ ์ฌํญ๊ณผ ์ผ์นํ์ง ์๋ ๋ชจ๋ Pod๋ฅผ ํ ๋ฒ์ ํ๋์ฉ ์๋์ผ๋ก ์ญ์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ ์๋ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์ฌ๋ฐฐํฌํฉ๋๋ค. VPA๋ ๋ณ๊ฒฝ ์น์ธ Webhook๋ฅผ ์ฌ์ฉํ์ฌ Pod๊ฐ ๋ ธ๋์ ์น์ธ๋๊ธฐ ์ ์ ์ต์ ํ๋ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. VPA์์ Pod๋ฅผ ์ญ์ ํ์ง ์์ผ๋ ค๋ฉด ํ์์ ๋ฐ๋ผ VPA ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ ๋ฐ ์๋์ผ๋ก Pod๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ VPA์์ Pod๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ ค๋ฉด ์ต์ ๋ ๊ฐ์ ๋ณต์ ๋ณธ์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ด ์ต์๋ณด๋ค ์ ์ ๋ณต์ ๋ณธ์ ์ง์ ํ๋ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ ์ญ์ ๋์ง ์์ต๋๋ค. ์ด๋ฌํ Pod๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ฉด ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๊ฐ Pod๋ฅผ ์ฌ๋ฐฐํฌํ๋ฉด VPA์์ ์ Pod๋ฅผ ๊ถ์ฅ ์ฌํญ์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค. VPA ์ต์ ๊ฐ ๋ณ๊ฒฝ์ ํ์๋ ๋๋ก VerticalPodAutoscalerController
์ค๋ธ์ ํธ๋ฅผ ์์ ํ์ฌ ์ด ์ต์๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด CPU์ 50%๋ฅผ ์ฌ์ฉํ๋ฉด์ 10%๋ง ์์ฒญํ๋ Pod๊ฐ ์๋ ๊ฒฝ์ฐ, VPA๋ ์์ฒญํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ CPU๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ผ๋ก ํ๋จํ๊ณ Pod๋ฅผ ์ญ์ ํฉ๋๋ค. ๋ณต์ ๋ณธ ์ธํธ์ ๊ฐ์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ Pod๋ฅผ ์ฌ์์ํ๊ณ VPA๋ ๊ถ์ฅ ๋ฆฌ์์ค๋ก ์ Pod๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
๊ฐ๋ฐ์์ ๊ฒฝ์ฐ VPA๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ Pod์ ์ ์ ํ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋๋ก ๋ ธ๋์ Pod๋ฅผ ์์ฝํ์ฌ ์์๊ฐ ๋ง์ ๊ธฐ๊ฐ์๋ Pod๊ฐ ์ ์ง๋๋๋ก ํ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์๋ VPA๋ฅผ ์ฌ์ฉํ์ฌ Pod์์ ํ์ ์ด์์ CPU ๋ฆฌ์์ค๋ฅผ ์์ฝํ์ง ์๋๋ก ํด๋ฌ์คํฐ ๋ฆฌ์์ค๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค. VPA๋ ์ํฌ๋ก๋์์ ์ค์ ๋ก ์ฌ์ฉ ์ค์ธ ๋ฆฌ์์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ค๋ฅธ ์ํฌ๋ก๋์์ ์ฉ๋์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฆฌ์์ค ์๊ตฌ ์ฌํญ์ ์กฐ์ ํฉ๋๋ค. ๋ํ VPA๋ ์ด๊ธฐ ์ปจํ ์ด๋ ๊ตฌ์ฑ์ ์ง์ ๋ ์ ํ ๋ฐ ์์ฒญ ๊ฐ ๋น์จ๋ ์ ์งํฉ๋๋ค.
VPA ์คํ์ ์ค์งํ๊ฑฐ๋ ํด๋ฌ์คํฐ์์ ํน์ VPA CR์ ์ญ์ ํ๋ ๊ฒฝ์ฐ VPA์์ ์ด๋ฏธ ์์ ํ Pod์ ๋ํ ๋ฆฌ์์ค ์์ฒญ์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ Pod์์๋ ๋ชจ๋ VPA์์ ์ค์ ํ ์ด์ ์ ๊ถ์ฅ ์ฌํญ ๋์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
2.5.2. Vertical Pod Autoscaler Operator ์ค์น
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ VPA(Vertical Pod Autoscaler Operator)๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์์ Operator โ OperatorHub๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅํ Operator ๋ชฉ๋ก์์ VerticalPodAutoscaler๋ฅผ ์ ํํ ๋ค์ ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
Operator ์ค์น ํ์ด์ง์์ Operator ๊ถ์ฅ ๋ค์์คํ์ด์ค ์ต์
์ด ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์
openshift-vertical-pod-autoscaler
๋ค์์คํ์ด์ค์ Operator๊ฐ ์ค์น๋ฉ๋๋ค. ํด๋น ๋ค์์คํ์ด์ค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. - ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
VPA Operator ๊ตฌ์ฑ ์์๋ฅผ ๋์ดํ์ฌ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
- ์ํฌ๋ก๋ โ Pod๋ก ์ด๋ํฉ๋๋ค.
-
๋๋กญ๋ค์ด ๋ฉ๋ด์์
openshift-vertical-pod-autoscaler
ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณ Pod 4๊ฐ๊ฐ ์คํ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค. - ์ํฌ๋ก๋ โ ๋ฐฐํฌ๋ก ์ด๋ํ์ฌ ๋ฐฐํฌ 4๊ฐ๊ฐ ์คํ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
์ ํ ์ฌํญ์ ๋๋ค. ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ OpenShift Container Platform CLI์์ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get all -n openshift-vertical-pod-autoscaler
์ถ๋ ฅ์๋ Pod 4๊ฐ์ ๋ฐ ๋ฐฐํฌ 4๊ฐ๊ฐ ํ์๋ฉ๋๋ค.
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE pod/vertical-pod-autoscaler-operator-85b4569c47-2gmhc 1/1 Running 0 3m13s pod/vpa-admission-plugin-default-67644fc87f-xq7k9 1/1 Running 0 2m56s pod/vpa-recommender-default-7c54764b59-8gckt 1/1 Running 0 2m56s pod/vpa-updater-default-7f6cc87858-47vw9 1/1 Running 0 2m56s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/vpa-webhook ClusterIP 172.30.53.206 <none> 443/TCP 2m56s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/vertical-pod-autoscaler-operator 1/1 1 1 3m13s deployment.apps/vpa-admission-plugin-default 1/1 1 1 2m56s deployment.apps/vpa-recommender-default 1/1 1 1 2m56s deployment.apps/vpa-updater-default 1/1 1 1 2m56s NAME DESIRED CURRENT READY AGE replicaset.apps/vertical-pod-autoscaler-operator-85b4569c47 1 1 1 3m13s replicaset.apps/vpa-admission-plugin-default-67644fc87f 1 1 1 2m56s replicaset.apps/vpa-recommender-default-7c54764b59 1 1 1 2m56s replicaset.apps/vpa-updater-default-7f6cc87858 1 1 1 2m56s
2.5.3. Vertical Pod Autoscaler Operator ์ฌ์ฉ ์ ๋ณด
VPA(Vertical Pod Autoscaler Operator)๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ์์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ VPA CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค. VPA๋ ํด๋น ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod์ ๊ฐ์ฅ ์ ํฉํ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ํ์ธํ๊ณ ์ ์ฉํฉ๋๋ค. ๋ฐฐํฌ, ์ํ ์ ์ฅ ์ธํธ, ์์ , ๋ฐ๋ชฌ ์ธํธ, ๋ณต์ ๋ณธ ์ธํธ ๋๋ ๋ณต์ ์ปจํธ๋กค๋ฌ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ VPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. VPA CR์ ๋ชจ๋ํฐ๋งํ Pod์ ๋์ผํ ํ๋ก์ ํธ์ ์์ด์ผ ํฉ๋๋ค.
VPA CR์ ์ฌ์ฉํ์ฌ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ VPA๊ฐ ์๋ํ๋ ๋ชจ๋๋ฅผ ์ง์ ํฉ๋๋ค.
-
Auto
๋ฐRecreate
๋ชจ๋๋ Pod ์๋ช ๋์ VPA CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ถ์ฅ ์ฌํญ์ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค. VPA๋ ๊ถ์ฅ ์ฌํญ๊ณผ ์ผ์นํ์ง ์๋ ํ๋ก์ ํธ์ ๋ชจ๋ Pod๋ฅผ ์ญ์ ํฉ๋๋ค. ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์์ ์ฌ๋ฐฐํฌํ๋ฉด VPA๋ ์ Pod๋ฅผ ๊ถ์ฅ ์ฌํญ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. -
Initial
๋ชจ๋๋ Pod ์์ฑ ์์๋ง VPA ๊ถ์ฅ ์ฌํญ์ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค. -
Off
๋ชจ๋๋ ๊ถ์ฅ๋๋ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ๋ง ์ ๊ณตํ๋ฉฐ ๊ถ์ฅ ์ฌํญ์ ์๋์ผ๋ก ์ ์ฉํ ์ ์์ต๋๋ค.off
๋ชจ๋์์๋ Pod๋ฅผ ์ ๋ฐ์ดํธํ์ง ์์ต๋๋ค.
CR์ ์ฌ์ฉํ์ฌ VPA ํ๊ฐ ๋ฐ ์ ๋ฐ์ดํธ์์ ํน์ ์ปจํ ์ด๋๋ฅผ ์ตํธ์์ํ ์๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด Pod์ ๋ค์๊ณผ ๊ฐ์ ์ ํ ๋ฐ ์์ฒญ์ด ์์ต๋๋ค.
resources: limits: cpu: 1 memory: 500Mi requests: cpu: 500m memory: 100Mi
auto
๋ก ์ค์ ๋ VPA๋ฅผ ์์ฑํ๋ฉด VPA์์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ํ์ธํ๊ณ Pod๋ฅผ ์ญ์ ํฉ๋๋ค. ์ฌ๋ฐฐํฌ๋๋ฉด Pod๋ ์ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์ฌ์ฉํฉ๋๋ค.
resources: limits: cpu: 50m memory: 1250Mi requests: cpu: 25m memory: 262144k
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ VPA ๊ถ์ฅ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค.
$ oc get vpa <vpa-name> --output yaml
๋ช ๋ถ ํ ์ถ๋ ฅ์๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ๋ํ ๊ถ์ฅ ์ฌํญ์ด ํ์๋๋ฉฐ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
์ถ๋ ฅ ์
... status: ... recommendation: containerRecommendations: - containerName: frontend lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 262m memory: "274357142" - containerName: backend lowerBound: cpu: 12m memory: 131072k target: cpu: 12m memory: 131072k uncappedTarget: cpu: 12m memory: 131072k upperBound: cpu: 476m memory: "498558823" ...
์ถ๋ ฅ์๋ ๊ถ์ฅ ๋ฆฌ์์ค(target
), ์ต์ ๊ถ์ฅ ๋ฆฌ์์ค(lowerBound
), ์ต๊ณ ๊ถ์ฅ ๋ฆฌ์์ค(upperBound
), ์ต์ ๋ฆฌ์์ค ๊ถ์ฅ ์ฌํญ(uncappedTarget
)์ด ํ์๋ฉ๋๋ค.
VPA๋ lowerBound
๋ฐ upperBound
๊ฐ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์
๋ฐ์ดํธํด์ผ ํ๋์ง ํ์ธํฉ๋๋ค. Pod์ lowerBound
๊ฐ๋ณด๋ค ์๊ฑฐ๋ upperBound
๊ฐ์ ์ด๊ณผํ๋ ๋ฆฌ์์ค ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ VPA๋ Pod๋ฅผ ์ข
๋ฃํ๊ณ target
๊ฐ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ๋ค์ ์์ฑํฉ๋๋ค.
2.5.3.1. VPA ์ต์ ๊ฐ ๋ณ๊ฒฝ
๊ธฐ๋ณธ์ ์ผ๋ก ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ VPA์์ Pod๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๊ณ ์
๋ฐ์ดํธํ๋ ค๋ฉด ์ต์ ๋ ๊ฐ์ ๋ณต์ ๋ณธ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๊ฐ ๋ฏธ๋ง์ ๋ณต์ ๋ณธ์ ์ง์ ํ๋ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ VPA์์ ์๋์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. VPA๋ VPA ์ธ๋ถ์ ์ผ๋ถ ํ๋ก์ธ์ค์์ Pod๋ฅผ ๋ค์ ์์ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์์ ์ Pod๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. VerticalPodAutoscalerController
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค(CR)์์ minReplicas
๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ์ฌ ํด๋ฌ์คํฐ ์ ์ฒด ์ต์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด minReplicas
๋ฅผ 3
์ผ๋ก ์ค์ ํ๋ฉด VPA๋ ์ธ ๊ฐ ๋ฏธ๋ง์ ๋ณต์ ๋ณธ์ ์ง์ ํ๋ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ Pod๋ฅผ ์ญ์ ํ๊ณ ์
๋ฐ์ดํธํ์ง ์์ต๋๋ค.
minReplicas
๋ฅผ 1
๋ก ์ค์ ํ๋ฉด VPA๋ ํ๋์ ๋ณต์ ๋ณธ๋ง ์ง์ ํ๋ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ ์ ์ผํ Pod๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ์ด ์ค์ ์ ์ํฌ๋ก๋๊ฐ VPA์์ Pod๋ฅผ ์ญ์ ํ์ฌ ๋ฆฌ์์ค๋ฅผ ์กฐ์ ํ ๋๋ง๋ค ๋ค์ดํ์์ ํ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์ด ์ค์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํ๋์ ๋ณต์ ์ค๋ธ์ ํธ์์ ์ํ์ง ์๋ ๋ค์ด ํ์์ ๋ฐฉ์งํ๋ ค๋ฉด podUpdatePolicy
๊ฐ Initial
๋ก ์ค์ ๋ VPA CR์ ๊ตฌ์ฑํ์ฌ VPA ์ธ๋ถ ํ๋ก์ธ์ค์์ Pod๋ฅผ ์ฌ์์ํ ๋๋ง Pod๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ ํ ์๊ฐ์ Pod๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
VerticalPodAutoscalerController
์ค๋ธ์ ํธ์ ์
apiVersion: autoscaling.openshift.io/v1
kind: VerticalPodAutoscalerController
metadata:
creationTimestamp: "2021-04-21T19:29:49Z"
generation: 2
name: default
namespace: openshift-vertical-pod-autoscaler
resourceVersion: "142172"
uid: 180e17e9-03cc-427f-9955-3b4d7aeb2d59
spec:
minReplicas: 3 1
podMinCPUMillicores: 25
podMinMemoryMb: 250
recommendationOnly: false
safetyMarginFraction: 0.15
2.5.3.2. VPA ๊ถ์ฅ ์ฌํญ ์๋ ์ ์ฉ
VPA๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํ๋ ค๋ฉด updateMode
๋ฅผ Auto
๋๋ Recreate
๋ก ์ค์ ํ์ฌ ํน์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ VPA CR์ ์์ฑํฉ๋๋ค.
์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ Pod๊ฐ ์์ฑ๋๋ฉด VPA์์ ์ปจํ
์ด๋๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ์ ๋ถ์ํฉ๋๋ค. VPA๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ VPA ๊ถ์ฅ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ๋ชจ๋ Pod๋ฅผ ์ญ์ ํฉ๋๋ค. ์ฌ๋ฐฐํฌ๋๋ฉด Pod๋ VPA ๊ถ์ฅ ์ฌํญ์ ๋ฐ๋ผ ์ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํด ์ค์ ๋ ๋ชจ๋ Pod ์ค๋จ ์์ฐ์ ์ค์ํฉ๋๋ค. ๊ถ์ฅ ์ฌํญ์ ์ฐธ์กฐ๋ฅผ ์ํด VPA CR์ status
ํ๋์ ์ถ๊ฐ๋์ด ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ VPA์์ Pod๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ ค๋ฉด ์ต์ ๋ ๊ฐ์ ๋ณต์ ๋ณธ์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ด ์ต์๋ณด๋ค ์ ์ ๋ณต์ ๋ณธ์ ์ง์ ํ๋ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ ์ญ์ ๋์ง ์์ต๋๋ค. ์ด๋ฌํ Pod๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ฉด ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๊ฐ Pod๋ฅผ ์ฌ๋ฐฐํฌํ๋ฉด VPA์์ ์ Pod๋ฅผ ๊ถ์ฅ ์ฌํญ์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค. VPA ์ต์ ๊ฐ ๋ณ๊ฒฝ์ ํ์๋ ๋๋ก VerticalPodAutoscalerController
์ค๋ธ์ ํธ๋ฅผ ์์ ํ์ฌ ์ด ์ต์๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Auto
๋ชจ๋ VPA CR์ ์
apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-recommender spec: targetRef: apiVersion: "apps/v1" kind: Deployment 1 name: frontend 2 updatePolicy: updateMode: "Auto" 3
- 1
- ์ด VPA CR์์ ๊ด๋ฆฌํ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ ํ์ ๋๋ค.
- 2
- ์ด VPA CR์์ ๊ด๋ฆฌํ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ๋๋ค.
- 3
- ๋ชจ๋๋ฅผ
Auto
๋๋Recreate
๋ก ์ค์ ํฉ๋๋ค.-
Auto
. VPA๋ Pod ์์ฑ ์ ๋ฆฌ์์ค ์์ฒญ์ ํ ๋นํ๊ณ ์์ฒญ๋ ๋ฆฌ์์ค๊ฐ ์ ๊ถ์ฅ ์ฌํญ๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ธฐ์กด Pod๋ฅผ ์ข ๋ฃํ์ฌ ์ ๋ฐ์ดํธํฉ๋๋ค. -
Recreate
. VPA๋ Pod ์์ฑ ์ ๋ฆฌ์์ค ์์ฒญ์ ํ ๋นํ๊ณ ์์ฒญ๋ ๋ฆฌ์์ค๊ฐ ์ ๊ถ์ฅ ์ฌํญ๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ธฐ์กด Pod๋ฅผ ์ข ๋ฃํ์ฌ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด ๋ชจ๋๋ ๋ฆฌ์์ค ์์ฒญ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค Pod๋ฅผ ์ฌ์์ํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
-
VPA์์ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ๊ฒฐ์ ํ๊ณ ๊ถ์ฅ ์ฌํญ์ ์ Pod์ ์ ์ฉํ๋ ค๋ฉด ํ๋ก์ ํธ์ ์๋ ์ค์ธ Pod๊ฐ ์์ด์ผ ํฉ๋๋ค.
2.5.3.3. Pod ์์ฑ์ VPA ๊ถ์ฅ ์ฌํญ ์๋ ์ ์ฉ
VPA๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์ฒ์ ๋ฐฐํฌํ ๋๋ง ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ์ ์ฉํ๋ ค๋ฉด updateMode
๋ฅผ Initial
๋ก ์ค์ ํ์ฌ ํน์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ VPA CR์ ์์ฑํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ VPA ๊ถ์ฅ ์ฌํญ์ ์ฌ์ฉํ๋ ค๋ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ Pod๋ฅผ ์๋์ผ๋ก ์ญ์ ํฉ๋๋ค. Initial
๋ชจ๋์์ VPA๋ ์ ๋ฆฌ์์ค ๊ถ์ฅ ์ฌํญ์ ํ์ธํ ๋ Pod๋ฅผ ์ญ์ ํ์ง ์๊ณ Pod์ ์
๋ฐ์ดํธํ์ง๋ ์์ต๋๋ค.
Initial
๋ชจ๋ VPA CR์ ์
apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-recommender spec: targetRef: apiVersion: "apps/v1" kind: Deployment 1 name: frontend 2 updatePolicy: updateMode: "Initial" 3
VPA์์ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ๊ฒฐ์ ํ๊ณ ๊ถ์ฅ ์ฌํญ์ ์ Pod์ ์ ์ฉํ๋ ค๋ฉด ํ๋ก์ ํธ์ ์๋ ์ค์ธ Pod๊ฐ ์์ด์ผ ํฉ๋๋ค.
2.5.3.4. VPA ๊ถ์ฅ ์ฌํญ ์๋ ์ ์ฉ
VPA๋ฅผ ๊ถ์ฅ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ํ์ธํ๋ ๋ฐ์๋ง ์ฌ์ฉํ๋ ค๋ฉด updateMode
๋ฅผ off
๋ก ์ค์ ํ์ฌ ํน์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ VPA CR์ ์์ฑํฉ๋๋ค.
ํด๋น ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ Pod๊ฐ ์์ฑ๋๋ฉด VPA๋ ์ปจํ
์ด๋์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ์ ๋ถ์ํ๊ณ VPA CR์ status
ํ๋์ ํด๋น ๊ถ์ฅ ์ฌํญ์ ๊ธฐ๋กํฉ๋๋ค. VPA๋ ์ ๋ฆฌ์์ค ๊ถ์ฅ ์ฌํญ์ ํ์ธํ ๋ Pod๋ฅผ ์
๋ฐ์ดํธํ์ง ์์ต๋๋ค.
Off
๋ชจ๋ VPA CR์ ์
apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-recommender spec: targetRef: apiVersion: "apps/v1" kind: Deployment 1 name: frontend 2 updatePolicy: updateMode: "Off" 3
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๊ถ์ฅ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค.
$ oc get vpa <vpa-name> --output yaml
๊ถ์ฅ ์ฌํญ์ ๋ฐ๋ผ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๋ฅผ ํธ์งํ์ฌ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ์ถ๊ฐํ ๋ค์ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์ญ์ ํ๊ณ ์ฌ๋ฐฐํฌํ ์ ์์ต๋๋ค.
VPA์์ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด ํ๋ก์ ํธ์ ์๋ ์ค์ธ Pod๊ฐ ์์ด์ผ ํฉ๋๋ค.
2.5.3.5. VPA ๊ถ์ฅ ์ฌํญ ์ ์ฉ์์ ์ปจํ ์ด๋ ์ ์ธ
์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ปจํ
์ด๋๊ฐ ์ฌ๋ฌ ๊ฐ ์๊ณ VPA์์ ๋ชจ๋ ์ปจํ
์ด๋๋ฅผ ํ๊ฐํ๊ณ ํด๋น ์ปจํ
์ด๋์ ๋ํด ์๋ํ์ง ์๋๋ก ํ๋ ค๋ฉด ํน์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ VPA CR์ ์์ฑํ๊ณ resourcePolicy
๋ฅผ ์ถ๊ฐํ์ฌ ํน์ ์ปจํ
์ด๋๋ฅผ ์ตํธ์์ํฉ๋๋ค.
VPA์์ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์
๋ฐ์ดํธํ๋ฉด resourcePolicy
๊ฐ ํฌํจ๋ ๋ชจ๋ ์ปจํ
์ด๋๊ฐ ์
๋ฐ์ดํธ๋์ง ์์ผ๋ฉฐ VPA๋ Pod์ ํด๋น ์ปจํ
์ด๋์ ๋ํ ๊ถ์ฅ ์ฌํญ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-recommender spec: targetRef: apiVersion: "apps/v1" kind: Deployment 1 name: frontend 2 updatePolicy: updateMode: "Auto" 3 resourcePolicy: 4 containerPolicies: - containerName: my-opt-sidecar mode: "Off"
- 1
- ์ด VPA CR์์ ๊ด๋ฆฌํ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ ํ์ ๋๋ค.
- 2
- ์ด VPA CR์์ ๊ด๋ฆฌํ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ๋๋ค.
- 3
- ๋ชจ๋๋ฅผ
Auto
,Recreate
๋๋Off
๋ก ์ค์ ํฉ๋๋ค.Recreate
๋ชจ๋๋ ๋ฆฌ์์ค ์์ฒญ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค Pod๋ฅผ ์ฌ์์ํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. - 4
- ์ตํธ์์ํ ์ปจํ ์ด๋๋ฅผ ์ง์ ํ๊ณ
mode
๋ฅผOff
๋ก ์ค์ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด Pod์ ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌ์์ค ์์ฒญ ๋ฐ ์ ํ์ด ๋์ผํ ๋ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ์์ต๋๋ค.
# ... spec: containers: - name: frontend resources: limits: cpu: 1 memory: 500Mi requests: cpu: 500m memory: 100Mi - name: backend resources: limits: cpu: "1" memory: 500Mi requests: cpu: 500m memory: 100Mi # ...
backend
์ปจํ
์ด๋๋ฅผ ์ตํธ์์์ผ๋ก ์ค์ ํ์ฌ VPA CR์ ์์ํ๋ฉด VPA์์ Pod๋ฅผ ์ข
๋ฃํ ํ frontend
์ปจํ
์ด๋์๋ง ์ ์ฉ๋๋ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ๋ค์ ์์ฑํฉ๋๋ค.
... spec: containers: name: frontend resources: limits: cpu: 50m memory: 1250Mi requests: cpu: 25m memory: 262144k ... name: backend resources: limits: cpu: "1" memory: 500Mi requests: cpu: 500m memory: 100Mi ...
2.5.4. Vertical Pod Autoscaler Operator ์ฌ์ฉ
VPA(Vertical Pod Autoscaler Operator) CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํ์ฌ VPA๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. CR์ VPA์์ ํด๋น Pod์ ์ํํ ์์ ์ ๋ถ์ํ๊ณ ๊ฒฐ์ ํด์ผ ํ๋ Pod๋ฅผ ๋ํ๋ ๋๋ค.
ํ๋ก์ธ์ค
ํน์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ๋ํ VPA CR์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
์ค์ผ์ผ๋งํ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ๊ฐ ์๋ ํ๋ก์ ํธ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
VPA CR YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-recommender spec: targetRef: apiVersion: "apps/v1" kind: Deployment 1 name: frontend 2 updatePolicy: updateMode: "Auto" 3 resourcePolicy: 4 containerPolicies: - containerName: my-opt-sidecar mode: "Off"
- 1
- ์ด VPA์์ ๊ด๋ฆฌํ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ ์ ํ(
Deployment
,StatefulSet
,Job
,DaemonSet
,ReplicaSet
๋๋ReplicationController
)์ ์ง์ ํฉ๋๋ค. - 2
- ์ด VPA์์ ๊ด๋ฆฌํ ๊ธฐ์กด ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 3
- ๋ค์๊ณผ ๊ฐ์ด VPA ๋ชจ๋๋ฅผ ์ง์ ํฉ๋๋ค.
-
auto
: ์ปจํธ๋กค๋ฌ์ ์ฐ๊ฒฐ๋ Pod์ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค. VPA๋ ๊ธฐ์กด Pod๋ฅผ ์ข ๋ฃํ๊ณ ๊ถ์ฅ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์ฌ์ฉํ์ฌ ์ Pod๋ฅผ ์์ฑํฉ๋๋ค. -
recreate
: ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod์ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค. VPA๋ ๊ธฐ์กด Pod๋ฅผ ์ข ๋ฃํ๊ณ ๊ถ์ฅ ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์ฌ์ฉํ์ฌ ์ Pod๋ฅผ ์์ฑํฉ๋๋ค.recreate
๋ชจ๋๋ ๋ฆฌ์์ค ์์ฒญ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค Pod๋ฅผ ์ฌ์์ํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. -
initial
: ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod๊ฐ ์์ฑ๋ ๋ ๊ถ์ฅ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค. VPA๋ ์ ๋ฆฌ์์ค ๊ถ์ฅ ์ฌํญ์ ํ์ธํ ๋ Pod๋ฅผ ์ ๋ฐ์ดํธํ์ง ์์ต๋๋ค. -
off
: ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod์ ๋ฆฌ์์ค ๊ถ์ฅ ์ฌํญ๋ง ์์ฑํฉ๋๋ค. VPA๋ ์ ๋ฆฌ์์ค ๊ถ์ฅ ์ฌํญ์ ํ์ธํ ๋ Pod๋ฅผ ์ ๋ฐ์ดํธํ์ง ์๊ณ ํด๋น ๊ถ์ฅ ์ฌํญ์ ์ Pod์ ์ ์ฉํ์ง๋ ์์ต๋๋ค.
-
- 4
- ์ ํ ์ฌํญ์ ๋๋ค. ์ตํธ์์ํ ์ปจํ ์ด๋๋ฅผ ์ง์ ํ๊ณ ๋ชจ๋๋ฅผ
Off
๋ก ์ค์ ํฉ๋๋ค.
VPA CR์ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
์ ์ ํ VPA๋ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod์์ ์ปจํ ์ด๋์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ํ์ธํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ VPA ๊ถ์ฅ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค.
$ oc get vpa <vpa-name> --output yaml
์ถ๋ ฅ์๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ๋ํ ๊ถ์ฅ ์ฌํญ์ด ํ์๋๋ฉฐ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
์ถ๋ ฅ ์
... status: ... recommendation: containerRecommendations: - containerName: frontend lowerBound: 1 cpu: 25m memory: 262144k target: 2 cpu: 25m memory: 262144k uncappedTarget: 3 cpu: 25m memory: 262144k upperBound: 4 cpu: 262m memory: "274357142" - containerName: backend lowerBound: cpu: 12m memory: 131072k target: cpu: 12m memory: 131072k uncappedTarget: cpu: 12m memory: 131072k upperBound: cpu: 476m memory: "498558823" ...
2.5.5. Vertical Pod Autoscaler Operator ์ค์น ์ ๊ฑฐ
OpenShift Container Platform ํด๋ฌ์คํฐ์์ VPA(Vertical Pod Autoscaler Operator)๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ค์น ์ ๊ฑฐํด๋ ๊ธฐ์กด VPA CR์ ์ํด ์ด๋ฏธ ์์ ๋ Pod์ ๋ฆฌ์์ค ์์ฒญ์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ Pod์์๋ ๋ชจ๋ Vertical Pod Autoscaler Operator์์ ์ค์ ํ ๊ถ์ฅ ์ฌํญ ๋์ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
oc delete vpa <vpa-name
> ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ํน์ VPA CR์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค ์์ฒญ์๋ ์์ง Pod ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ค์น ์ ๊ฑฐํ ๋์ ๋์ผํ ์์
์ด ์ ์ฉ๋ฉ๋๋ค.
VPA Operator๋ฅผ ์ ๊ฑฐํ ํ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด Operator์ ๊ด๋ จ๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Vertical Pod Autoscaler Operator๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
- OpenShift Container Platform ์น ์ฝ์์์ Operator โ ์ค์น๋ Operator๋ฅผ ํด๋ฆญํฉ๋๋ค.
- openshift-vertical-pod-autoscaler ํ๋ก์ ํธ๋ก ์ ํํฉ๋๋ค.
-
VerticalPodAutoscaler Operator์ ๊ฒฝ์ฐ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ Operator ์ค์น ์ ๊ฑฐ๋ฅผ ์ ํํฉ๋๋ค.
- ์ ํ ์ฌํญ: Operator์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ํผ์ฐ์ฐ์๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ๋ํ ์์์์ ์ด Operator์ ๋ชจ๋ ํผ์ฐ์ฐ์ ์ธ์คํด์ค ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
- ์ ๊ฑฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ํ ์ฌํญ: OpenShift CLI๋ฅผ ์ฌ์ฉํ์ฌ VPA ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
VPA ๋ค์์คํ์ด์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
$ oc delete namespace openshift-vertical-pod-autoscaler
VPA CRD(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ์) ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํฉ๋๋ค.
$ oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io
$ oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.io
$ oc delete crd verticalpodautoscalers.autoscaling.k8s.io
CRD๋ฅผ ์ญ์ ํ๋ฉด ๊ด๋ จ ์ญํ , ํด๋ฌ์คํฐ ์ญํ , ์ญํ ๋ฐ์ธ๋ฉ์ด ์ ๊ฑฐ๋ฉ๋๋ค.
์ฐธ๊ณ์ด ์์ ์ ํด๋ฌ์คํฐ์์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์์ฑํ VPA CR์์ ์ ๊ฑฐ๋ฉ๋๋ค. VPA๋ฅผ ๋ค์ ์ค์นํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ค๋ธ์ ํธ๋ฅผ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค.
VPA Operator๋ฅผ ์ญ์ ํฉ๋๋ค.
$ oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler
2.6. Pod์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ์ ๊ณต
์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๊ฐ๋ฐ์์๊ฒ ์ ๊ณตํ๊ธธ ์ํ์ง ์๋ ๋ฏผ๊ฐํ ์ ๋ณด(์ํธ ๋ฐ ์ฌ์ฉ์ ์ด๋ฆ ๋ฑ)๊ฐ ํ์ํฉ๋๋ค.
๊ด๋ฆฌ์๋ Secret
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ ๋ณด๋ฅผ ๋ช
ํํ ํ
์คํธ๋ก ๊ณต๊ฐํ์ง ์๊ณ ๋ ์ ๊ณตํ ์ ์์ต๋๋ค.
2.6.1. ๋ณด์ ์ดํด
Secret
์ค๋ธ์ ํธ ์ ํ์์๋ ์ํธ, OpenShift Container Platform ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ ํ์ผ, ๊ฐ์ธ ์์ค ๋ฆฌํฌ์งํ ๋ฆฌ ์๊ฒฉ ์ฆ๋ช
๋ฑ๊ณผ ๊ฐ์ ์ค์ํ ์ ๋ณด๋ฅผ ๋ณด์ ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ๋ณด์์ Pod์์ ์ค์ํ ์ฝํ
์ธ ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋์ ๋ณด์์ ๋ง์ดํธํ๊ฑฐ๋ ์์คํ
์์ ์ํฌ๋ฆฟ์ ์ฌ์ฉํ์ฌ Pod ๋์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
์ฃผ์ ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ณด์ ๋ฐ์ดํฐ๋ ์ ์์๋ ๋ณ๋๋ก ์ฐธ์กฐํ ์ ์์ต๋๋ค.
- ๋ณด์ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ์์ ํ์ผ ์ ์ฅ ๊ธฐ๋ฅ(tmpfs)์ ์ํด ์ง์๋๋ฉฐ ๋ ธ๋์ ์ ์ฅ๋์ง ์์ต๋๋ค.
- ๋ณด์ ๋ฐ์ดํฐ๋ ๋ค์์คํ์ด์ค ๋ด์์ ๊ณต์ ํ ์ ์์ต๋๋ค.
YAML Secret
์ค๋ธ์ ํธ ์ ์
apiVersion: v1 kind: Secret metadata: name: test-secret namespace: my-namespace type: Opaque 1 data: 2 username: <username> 3 password: <password> stringData: 4 hostname: myapp.mydomain.com 5
- 1
- ๋ณด์์ ํค ์ด๋ฆ๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค.
- 2
data
ํ๋์์ ํ์ฉ๋๋ ํค ํ์์ Kubernetes ๊ตฌ๋ถ์ ์ฉ์ด์ง์ DNS_SUBDOMAIN ๊ฐ์ ์๋ ์ง์นจ์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค.- 3
data
๋งต์ ํค์ ๊ด๋ จ๋ ๊ฐ์ base64๋ก ์ธ์ฝ๋ฉ๋์ด์ผ ํฉ๋๋ค.- 4
stringData
๋งต์ ํญ๋ชฉ์ด base64๋ก ๋ณํ๋ ํ ํด๋น ํญ๋ชฉ์ด ์๋์ผ๋กdata
๋งต์ผ๋ก ์ด๋ํฉ๋๋ค. ์ด ํ๋๋ ์ฐ๊ธฐ ์ ์ฉ์ด๋ฉฐ ๊ฐ์data
ํ๋๋ฅผ ํตํด์๋ง ๋ฐํ๋ฉ๋๋ค.- 5
stringData
๋งต์ ํค์ ๊ด๋ จ๋ ๊ฐ์ ์ผ๋ฐ ํ ์คํธ ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋จผ์ ๋ณด์์ ์์ฑํ ํ ํด๋น ๋ณด์์ ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
๋ณด์ ์์ฑ ์ ๋ค์์ ์ํํฉ๋๋ค.
- ๋ณด์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
- Pod ์๋น์ค ๊ณ์ ์ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์์ ๋ํ ์ฐธ์กฐ๋ฅผ ํ์ฉํฉ๋๋ค.
-
๋ณด์์ ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋
secret
๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ํ์ผ๋ก ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
2.6.1.1. ๋ณด์ ์ ํ
type
ํ๋์ ๊ฐ์ ๋ณด์์ ํค ์ด๋ฆ๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋
๋๋ค. ์ ํ์ ์ฌ์ฉํ๋ฉด ๋ณด์ ์ค๋ธ์ ํธ์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ํค๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ ค๋ฉด ๊ธฐ๋ณธ๊ฐ์ธ opaque
์ ํ์ ์ฌ์ฉํฉ๋๋ค.
๋ณด์ ๋ฐ์ดํฐ์ ํน์ ํค ์ด๋ฆ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์๋ฒ ์ธก ์ต์ ๊ฒ์ฆ์ ํธ๋ฆฌ๊ฑฐํ๋ ค๋ฉด ๋ค์ ์ ํ ์ค ํ๋๋ฅผ ์ง์ ํฉ๋๋ค.
-
kubernetes.io/service-account-token
. ์๋น์ค ๊ณ์ ํ ํฐ์ ์ฌ์ฉํฉ๋๋ค. -
kubernetes.io/basic-auth
. ๊ธฐ๋ณธ ์ธ์ฆ์ ์ฌ์ฉํฉ๋๋ค. -
kubernetes.io/ssh-auth
. SSH ํค ์ธ์ฆ์ ์ฌ์ฉํฉ๋๋ค. -
kubernetes.io/tls
. TLS ์ธ์ฆ ๊ธฐ๊ด์ ์ฌ์ฉํฉ๋๋ค.
๊ฒ์ฆ์ ์ํํ์ง ์์ผ๋ ค๋ฉด typ: Opaque
๋ฅผ ์ง์ ํฉ๋๋ค. ์ฆ ๋ณด์์์ ํค ์ด๋ฆ ๋๋ ๊ฐ์ ๋ํ ๊ท์น์ ์ค์ํ๋๋ก ์์ฒญํ์ง ์์ต๋๋ค. opaque ๋ณด์์๋ ์์์ ๊ฐ์ ํฌํจํ ์ ์๋ ๋น์ ํ key:value
์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
example.com/my-secret-type
๊ณผ ๊ฐ์ ๋ค๋ฅธ ์์์ ์ ํ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ํ์ ์๋ฒ ์ธก์ ์ ์ฉ๋์ง ์์ง๋ง ๋ณด์ ์์ฑ์๊ฐ ํด๋น ์ ํ์ ํค/๊ฐ ์๊ตฌ ์ฌํญ์ ์ค์ํ๋๋ก ์๋ํ์์ ๋ํ๋
๋๋ค.
๋ค์ํ ์ํฌ๋ฆฟ ์ ํ์ ์๋ ๋ณด์ ์ฌ์ฉ์ ์ฝ๋ ์ํ์ ์ฐธ์กฐํ์ญ์์ค.
2.6.1.2. ๋ณด์ ๋ฐ์ดํฐ ํค
๋ณด์ํค๋ DNS ํ์ ๋๋ฉ์ธ์ ์์ด์ผ ํฉ๋๋ค.
2.6.2. ๋ณด์ ์์ฑ ๋ฐฉ๋ฒ ์ดํด
๊ด๋ฆฌ์๋ ๊ฐ๋ฐ์๊ฐ ํด๋น ๋ณด์์ ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํ๊ธฐ ์ ์ ๋ณด์์ ์์ฑํด์ผ ํฉ๋๋ค.
๋ณด์ ์์ฑ ์ ๋ค์์ ์ํํฉ๋๋ค.
๋ณด์์ ์ ์งํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ๋ณด์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค. ๊ฐ ์ํฌ๋ฆฟ ์ ํ์ ํ์ํ ํน์ ๋ฐ์ดํฐ๋ ๋ค์ ์น์ ์์ ์ญ์ง๋ ฌํ๋ฉ๋๋ค.
๋ถํฌ๋ช ๋ณด์์ ์์ฑํ๋ YAML ์ค๋ธ์ ํธ์ ์
apiVersion: v1 kind: Secret metadata: name: test-secret type: Opaque 1 data: 2 username: <username> password: <password> stringData: 3 hostname: myapp.mydomain.com secret.properties: | property1=valueA property2=valueB
๋ ๋ค ์๋
data
๋๋stringdata
ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ณด์์ ์ฐธ์กฐํ๋๋ก Pod ์๋น์ค ๊ณ์ ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
๋ณด์์ ์ฌ์ฉํ๋ ์๋น์ค ๊ณ์ ์ YAML
apiVersion: v1 kind: ServiceAccount ... secrets: - name: test-secret
๋ณด์์ ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋
secret
๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ํ์ผ๋ก ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.๋ณด์ ๋ฐ์ดํฐ๋ก ๋ณผ๋ฅจ์ ํ์ผ์ ์ฑ์ฐ๋ Pod์ YAML
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "cat /etc/secret-volume/*" ] volumeMounts: 1 - name: secret-volume mountPath: /etc/secret-volume 2 readOnly: true 3 volumes: - name: secret-volume secret: secretName: test-secret 4 restartPolicy: Never
- 1
- ๋ณด์์ด ํ์ํ ๊ฐ ์ปจํ ์ด๋์
volumeMounts
ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. - 2
- ๋ณด์์ด ํ์๋๊ธฐ๋ฅผ ์ํ๋ ๋ฏธ์ฌ์ฉ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ๋ณด์ ๋ฐ์ดํฐ ๋งต์ ๊ฐ ํค๋
mountPath
์๋์ ํ์ผ ์ด๋ฆ์ด ๋ฉ๋๋ค. - 3
true
๋ก ์ค์ ํฉ๋๋ค. true์ธ ๊ฒฝ์ฐ ๋๋ผ์ด๋ฒ์์ ์ฝ๊ธฐ ์ ์ฉ ๋ณผ๋ฅจ์ ์ ๊ณตํ๋๋ก ์ง์ํฉ๋๋ค.- 4
- ์ํฌ๋ฆฟ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
๋ณด์ ๋ฐ์ดํฐ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ฑ์ฐ๋ Pod์ YAML
apiVersion: v1 kind: Pod metadata: name: secret-example-pod spec: containers: - name: secret-test-container image: busybox command: [ "/bin/sh", "-c", "export" ] env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: 1 name: test-secret key: username restartPolicy: Never
- 1
- ์ํฌ๋ฆฟ ํค๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
๋ณด์ ๋ฐ์ดํฐ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ฑ์ฐ๋ ๋น๋ ๊ตฌ์ฑ์ YAML
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: secret-example-bc spec: strategy: sourceStrategy: env: - name: TEST_SECRET_USERNAME_ENV_VAR valueFrom: secretKeyRef: 1 name: test-secret key: username from: kind: ImageStreamTag namespace: openshift name: 'cli:latest'
- 1
- ์ํฌ๋ฆฟ ํค๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
2.6.2.1. ๋ณด์ ์์ฑ ์ ํ ์ฌํญ
๋ณด์์ ์ฌ์ฉํ๋ ค๋ฉด Pod์์ ๋ณด์์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค. ๋ณด์์ ๋ค์ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก Pod์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ปจํ ์ด๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด ์ฌ์ฉ.
- ํ๋ ์ด์์ ์ปจํ ์ด๋์ ๋ง์ดํธ๋ ๋ณผ๋ฅจ์์ ํ์ผ๋ก ์ฌ์ฉ.
- Pod์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๋ kubelet์ผ๋ก ์ฌ์ฉ.
๋ณผ๋ฅจ ์ ํ ๋ณด์์ ๋ณผ๋ฅจ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ปจํ ์ด๋์ ํ์ผ๋ก ์์ฑํฉ๋๋ค. ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ ๋ณด์์ ์๋น์ค ๊ณ์ ์ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค์ ๋ชจ๋ Pod์ ๋ณด์์ ์๋์ผ๋ก ์ฝ์ ํฉ๋๋ค.
ํ
ํ๋ฆฟ์ ๋ณด์ ์ ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํ
ํ๋ฆฟ์ ์ ๊ณต๋ ๋ณด์์ ์ฌ์ฉํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ณด์ ๋ณผ๋ฅจ ์์ค๋ฅผ ๊ฒ์ฆํ๊ณ ์ง์ ๋ ์ค๋ธ์ ํธ ์ฐธ์กฐ๊ฐ Secret
์ค๋ธ์ ํธ๋ฅผ ์ค์ ๋ก ๊ฐ๋ฆฌํค๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๋ณด์์ ์์ฑํ ํ ํด๋น ๋ณด์์ ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ์๋น์ค ๊ณ์ ์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ฝ์
๋๋๋ก ํ๋ ๊ฒ์
๋๋ค.
Secret API ์ค๋ธ์ ํธ๋ ๋ค์์คํ์ด์ค์ ์์ต๋๋ค. ๋์ผํ ๋ค์์คํ์ด์ค์ ์๋ Pod๋ง ์ฐธ์กฐํ ์ ์์ต๋๋ค.
๊ฐ๋ณ ๋ณด์์ 1MB๋ก ์ ํ๋ฉ๋๋ค. ์ด๋ ๋๊ท๋ชจ ๋ณด์์ด ์์ฑ๋์ด apiserver ๋ฐ kubelet ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ชจ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์์ ๋ณด์์ ๋ง์ด ์์ฑํด๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ชจ๋ ์ ์์ต๋๋ค.
2.6.2.2. ๋ถํฌ๋ช ๋ณด์ ์์ฑ
๊ด๋ฆฌ์๋ ์์์ ๊ฐ์ ํฌํจํ ์ ์๋ ๋น์ ํ key:value
์์ ์ ์ฅํ ์ ์๋ ๋ถํฌ๋ช
๋ณด์์ ์์ฑํ ์ ์์ต๋๋ค.
์ ์ฐจ
์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์ YAML ํ์ผ์
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque 1 data: username: <username> password: <password>
- 1
- ๋ถํฌ๋ช ๋ณด์์ ์ง์ ํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f <filename>.yaml
Pod์์ ๋ณด์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- "๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์ ์ ํ์๋ ๋๋ก Pod ์๋น์ค ๊ณ์ ์ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์์ ์ฐธ์กฐํฉ๋๋ค.
-
"๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์
์ ํ์๋ ๋๋ก ๋ณด์์ ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋(
๋ณด์
๋ณผ๋ฅจ ์ฌ์ฉ) ํ์ผ๋ก ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- Pod์์ ๋ณด์ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณด์ ์์ฑ ๋ฐฉ๋ฒ ์ดํด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.6.2.3. ์๋น์ค ๊ณ์ ํ ํฐ ์ํฌ๋ฆฟ ์์ฑ
๊ด๋ฆฌ์๋ ์๋น์ค ๊ณ์ ํ ํฐ ์ํฌ๋ฆฟ์ ์์ฑํ์ฌ API์ ์ธ์ฆํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค ๊ณ์ ํ ํฐ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์๋น์ค ๊ณ์ ํ ํฐ ์ํฌ๋ฆฟ์ ์ฌ์ฉํ๋ ๋์ TokenRequest API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ธ๋ฉ๋ ์๋น์ค ๊ณ์ ํ ํฐ์ ์ป๋ ๊ฒ์ด ์ข์ต๋๋ค. TokenRequest API์์ ์ป์ ํ ํฐ์ ๋ฐ์ธ๋ฉ๋ ์๋ช ์ด ์๊ณ ๋ค๋ฅธ API ํด๋ผ์ด์ธํธ์์ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ ์ฅ๋ ํ ํฐ๋ณด๋ค ๋ ์์ ํฉ๋๋ค.
TokenRequest API๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ์ฝ๊ธฐ ์ฌ์ด API ์ค๋ธ์ ํธ์์ ๋ง๋ฃ๋์ง ์์ ํ ํฐ์ ๋ณด์ ๋ ธ์ถ์ด ํ์ฉ๋๋ ๊ฒฝ์ฐ์๋ง ์๋น์ค ๊ณ์ ํ ํฐ ์ํฌ๋ฆฟ์ ์์ฑํด์ผ ํฉ๋๋ค.
๋ฐ์ธ๋ฉ๋ ์๋น์ค ๊ณ์ ํ ํฐ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ์ถ๊ฐ ๋ฆฌ์์ค ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ ์ฐจ
์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์ YAML ํ์ผ์
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.๋ณด์ ์ค๋ธ์ ํธ์
์:apiVersion: v1 kind: Secret metadata: name: secret-sa-sample annotations: kubernetes.io/service-account.name: "sa-name" 1 type: kubernetes.io/service-account-token 2
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f <filename>.yaml
Pod์์ ๋ณด์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- "๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์ ์ ํ์๋ ๋๋ก Pod ์๋น์ค ๊ณ์ ์ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์์ ์ฐธ์กฐํฉ๋๋ค.
-
"๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์
์ ํ์๋ ๋๋ก ๋ณด์์ ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋(
๋ณด์
๋ณผ๋ฅจ ์ฌ์ฉ) ํ์ผ๋ก ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- Pod์์ ๋ณด์ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณด์ ์์ฑ ๋ฐฉ๋ฒ ์ดํด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ๋ฐ์ธ๋ฉ๋ ์๋น์ค ๊ณ์ ํ ํฐ ์์ฒญ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋น์ค ๊ณ์ ํ ํฐ ๋ฐ์ธ๋ฉ ์ฌ์ฉ์์ฐธ์กฐํ์ญ์์ค.
- ์๋น์ค ๊ณ์ ์์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋น์ค ๊ณ์ ์ดํด ๋ฐ ์์ฑ์ ์ฐธ์กฐํ์ญ์์ค.
2.6.2.4. ๊ธฐ๋ณธ ์ธ์ฆ ๋ณด์ ์์ฑ
๊ด๋ฆฌ์๋ ๊ธฐ๋ณธ ์ธ์ฆ ๋ณด์์ ํ์ํ ์๊ฒฉ ์ฆ๋ช
์ ์ ์ฅํ ์ ์๋ ๊ธฐ๋ณธ ์ธ์ฆ ๋ณด์์ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ณด์ ์ ํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Secret
์ค๋ธ์ ํธ์ data
๋งค๊ฐ๋ณ์์ base64 ํ์์ผ๋ก ์ธ์ฝ๋ฉ๋ ๋ค์ ํค๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
-
์ฌ์ฉ์ ์ด๋ฆ
: ์ธ์ฆ์ ์ํ ์ฌ์ฉ์ ์ด๋ฆ -
password
: ์ธ์ฆ์ ๋ํ ์ํธ ๋๋ ํ ํฐ
stringData
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ ํ
์คํธ ์ฝํ
์ธ ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ฐจ
์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์ YAML ํ์ผ์
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.secret
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Secret metadata: name: secret-basic-auth type: kubernetes.io/basic-auth 1 data: stringData: 2 username: admin password: <password>
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f <filename>.yaml
Pod์์ ๋ณด์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- "๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์ ์ ํ์๋ ๋๋ก Pod ์๋น์ค ๊ณ์ ์ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์์ ์ฐธ์กฐํฉ๋๋ค.
-
"๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์
์ ํ์๋ ๋๋ก ๋ณด์์ ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋(
๋ณด์
๋ณผ๋ฅจ ์ฌ์ฉ) ํ์ผ๋ก ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- Pod์์ ๋ณด์ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณด์ ์์ฑ ๋ฐฉ๋ฒ ์ดํด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.6.2.5. SSH ์ธ์ฆ ๋ณด์ ์์ฑ
๊ด๋ฆฌ์๋ SSH ์ธ์ฆ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ SSH ์ธ์ฆ ๋ณด์์ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ณด์ ์ ํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Secret
์ค๋ธ์ ํธ์ data
๋งค๊ฐ๋ณ์์ ์ฌ์ฉํ SSH ์ธ์ฆ ์ ๋ณด๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์ ์ฐจ
์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์ YAML ํ์ผ์
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.๋ณด์ ์ค๋ธ์ ํธ์
์:apiVersion: v1 kind: Secret metadata: name: secret-ssh-auth type: kubernetes.io/ssh-auth 1 data: ssh-privatekey: | 2 MIIEpQIBAAKCAQEAulqb/Y ...
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f <filename>.yaml
Pod์์ ๋ณด์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- "๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์ ์ ํ์๋ ๋๋ก Pod ์๋น์ค ๊ณ์ ์ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์์ ์ฐธ์กฐํฉ๋๋ค.
-
"๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์
์ ํ์๋ ๋๋ก ๋ณด์์ ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋(
๋ณด์
๋ณผ๋ฅจ ์ฌ์ฉ) ํ์ผ๋ก ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
2.6.2.6. Docker ๊ตฌ์ฑ ๋ณด์ ์์ฑ
๊ด๋ฆฌ์๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ์ ์ก์ธ์คํ๊ธฐ ์ํ ์๊ฒฉ ์ฆ๋ช ์ ์ ์ฅํ ์ ์๋ Docker ๊ตฌ์ฑ ๋ณด์์ ์์ฑํ ์ ์์ต๋๋ค.
-
kubernetes.io/dockercfg
. ์ด ์ํฌ๋ฆฟ ์ ํ์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ Docker ๊ตฌ์ฑ ํ์ผ์ ์ ์ฅํฉ๋๋ค.secret
์ค๋ธ์ ํธ์data
๋งค๊ฐ๋ณ์์๋ base64 ํ์์ผ๋ก ์ธ์ฝ๋ฉ๋.dockercfg
ํ์ผ์ ๋ด์ฉ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. -
kubernetes.io/dockerconfigjson
. ์ด ์ํฌ๋ฆฟ ์ ํ์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ Docker ๊ตฌ์ฑ JSON ํ์ผ์ ์ ์ฅํฉ๋๋ค.secret
์ค๋ธ์ ํธ์data
๋งค๊ฐ๋ณ์์๋ base64 ํ์์ผ๋ก ์ธ์ฝ๋ฉ๋.docker/config.json
ํ์ผ์ ๋ด์ฉ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์ YAML ํ์ผ์
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.Docker ๊ตฌ์ฑ
๋ณด์ ์ค๋ธ์ ํธ์
์apiVersion: v1 kind: Secret metadata: name: secret-docker-cfg namespace: my-project type: kubernetes.io/dockerconfig 1 data: .dockerconfig:bm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg== 2
Docker ๊ตฌ์ฑ JSON
์ํฌ๋ฆฟ ์ค๋ธ์ ํธ์
์apiVersion: v1 kind: Secret metadata: name: secret-docker-json namespace: my-project type: kubernetes.io/dockerconfig 1 data: .dockerconfigjson:bm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg== 2
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ
Secret
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f <filename>.yaml
Pod์์ ๋ณด์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- "๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์ ์ ํ์๋ ๋๋ก Pod ์๋น์ค ๊ณ์ ์ ์ ๋ฐ์ดํธํ์ฌ ๋ณด์์ ์ฐธ์กฐํฉ๋๋ค.
-
"๋ณด์ ์์ฑ ๋ฐฉ๋ฒ" ์น์
์ ํ์๋ ๋๋ก ๋ณด์์ ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋(
๋ณด์
๋ณผ๋ฅจ ์ฌ์ฉ) ํ์ผ๋ก ์ฌ์ฉํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- Pod์์ ๋ณด์ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณด์ ์์ฑ ๋ฐฉ๋ฒ ์ดํด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2.6.3. ๋ณด์ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ ์ดํด
๋ณด์ ๊ฐ์ ์์ ํด๋ ์ด๋ฏธ ์คํ ์ค์ธ Pod์์ ์ฌ์ฉํ๋ ๊ฐ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ๋ณด์์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋ Pod๋ฅผ ์ญ์ ํ๊ณ ์ Pod๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค(๋๊ฐ ๋์ผํ PodSpec ์ฌ์ฉ).
๋ณด์ ์
๋ฐ์ดํธ ์์
์์๋ ์ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ๊ณผ ๋์ผํ ์ํฌํ๋ก๋ฅผ ๋ฐ๋ฆ
๋๋ค. kubectl rolling-update
๋ช
๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ณด์์ resourceVersion
๊ฐ์ ์ฐธ์กฐ ์ ์ง์ ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Pod๊ฐ ์์๋๋ ๋์์ ๋ณด์์ด ์
๋ฐ์ดํธ๋๋ ๊ฒฝ์ฐ Pod์ ์ฌ์ฉ๋๋ ๋ณด์์ ๋ฒ์ ์ด ์ ์๋์ง ์์ต๋๋ค.
ํ์ฌ๋ Pod๊ฐ ์์ฑ๋ ๋ ์ฌ์ฉ๋ ๋ณด์ ์ค๋ธ์ ํธ์ ๋ฆฌ์์ค ๋ฒ์ ์ ํ์ธํ ์ ์์ต๋๋ค. ์ปจํธ๋กค๋ฌ์์ ์ด์ resourceVersion
์ ์ฌ์ฉํ์ฌ ์ฌ์์ํ ์ ์๋๋ก Pod์์ ์ด ์ ๋ณด๋ฅผ ๋ณด๊ณ ํ๋๋ก ๊ณํ๋์ด ์์ต๋๋ค. ๊ทธ๋์ ๊ธฐ์กด ๋ณด์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ์ง ๋ง๊ณ ๊ณ ์ ํ ์ด๋ฆ์ผ๋ก ์ ๋ณด์์ ์์ฑํ์ญ์์ค.
2.6.4. ๋ณด์ ์์ฑ ๋ฐ ์ฌ์ฉ
๊ด๋ฆฌ์๋ ์๋น์ค ๊ณ์ ํ ํฐ ์ํฌ๋ฆฟ์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด API์ ์ธ์ฆํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์ค ๊ณ์ ํ ํฐ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๋ค์์คํ์ด์ค์ ์๋น์ค ๊ณ์ ์ ์์ฑํฉ๋๋ค.
$ oc create sa <service_account_name> -n <your_namespace>
๋ค์ YAML ์์ ๋ฅผ
service-account-token-secret.yaml
์ด๋ผ๋ ํ์ผ์ ์ ์ฅํฉ๋๋ค. ์์ ์๋ ์๋น์ค ๊ณ์ ํ ํฐ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋Secret
์ค๋ธ์ ํธ ๊ตฌ์ฑ์ด ํฌํจ๋์ด ์์ต๋๋ค.apiVersion: v1 kind: Secret metadata: name: <secret_name> 1 annotations: kubernetes.io/service-account.name: "sa-name" 2 type: kubernetes.io/service-account-token 3
- 1
- &
lt;secret_name
>์ ์๋น์ค ํ ํฐ ์ํฌ๋ฆฟ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํฉ๋๋ค. - 2
- ๊ธฐ์กด ์๋น์ค ๊ณ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
ServiceAccount
๋ฐSecret
์ค๋ธ์ ํธ๋ฅผ ๋ชจ๋ ์์ฑํ๋ ๊ฒฝ์ฐServiceAccount
์ค๋ธ์ ํธ๋ฅผ ๋จผ์ ์์ฑํฉ๋๋ค. - 3
- ์๋น์ค ๊ณ์ ํ ํฐ ์ํฌ๋ฆฟ ์ ํ์ ์ง์ ํฉ๋๋ค.
ํ์ผ์ ์ ์ฉํ์ฌ ์๋น์ค ๊ณ์ ํ ํฐ์ ์์ฑํฉ๋๋ค.
$ oc apply -f service-account-token-secret.yaml
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ํฌ๋ฆฟ์์ ์๋น์ค ๊ณ์ ํ ํฐ์ ๊ฐ์ ธ์ต๋๋ค.
$ oc get secret <sa_token_secret> -o jsonpath='{.data.token}' | base64 --decode) 1
์ถ๋ ฅ ์
ayJhbGciOiJSUzI1NiIsImtpZCI6IklOb2dtck1qZ3hCSWpoNnh5YnZhSE9QMkk3YnRZMVZoclFfQTZfRFp1YlUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImJ1aWxkZXItdG9rZW4tdHZrbnIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiYnVpbGRlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNmZGU2MGZmLTA1NGYtNDkyZi04YzhjLTNlZjE0NDk3MmFmNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmJ1aWxkZXIifQ.OmqFTDuMHC_lYvvEUrjr1x453hlEEHYcxS9VKSzmRkP1SiVZWPNPkTWlfNRp6bIUZD3U6aN3N7dMSN0eI5hu36xPgpKTdvuckKLTCnelMx6cxOdAbrcw1mCmOClNscwjS1KO1kzMtYnnq8rXHiMJELsNlhnRyyIXRTtNBsy4t64T3283s3SLsancyx0gy0ujx-Ch3uKAKdZi5iT-I8jnnQ-ds5THDs2h65RJhgglQEmSxpHrLGZFmyHAQI-_SjvmHZPXEc482x3SkaQHNLqpmrpJorNqh1M8ZHKzlujhZgVooMvJmWPXTb2vnvi3DGn2XI-hZxl1yD2yGH1RBpYUHA
- 1
- <sa_token_secret>์ ์๋น์ค ํ ํฐ ์ํฌ๋ฆฟ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
์๋น์ค ๊ณ์ ํ ํฐ์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ API๋ก ์ธ์ฆํฉ๋๋ค.
$ curl -X GET <openshift_cluster_api> --header "Authorization: Bearer <token>" 1 2
2.6.5. ๋ณด์์ด ํฌํจ๋ ์๋ช ๋ ์ธ์ฆ์ ์ฌ์ฉ ์ ๋ณด
์๋น์ค์ ๋ํ ํต์ ์ ๋ณดํธํ๋ ค๋ฉด ํ๋ก์ ํธ์ ๋ณด์์ ์ถ๊ฐํ ์ ์๋ ์๋ช ๋ ์ ๊ณต ์ธ์ฆ์/ํค ์์ ์์ฑํ๋๋ก OpenShift Container Platform์ ๊ตฌ์ฑํ๋ฉด ๋ฉ๋๋ค.
์๋น์ค ์ ๊ณต ์ธ์ฆ์ ๋ณด์์ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ฆ์๊ฐ ํ์ํ ๋ณต์กํ ๋ฏธ๋ค์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ํด๋น ์ค์ ์ ๊ด๋ฆฌ์ ํด์์ ๋ ธ๋ ๋ฐ ๋ง์คํฐ์ ๋ํด ์์ฑํ๋ ์๋ฒ ์ธ์ฆ์์ ๋์ผํฉ๋๋ค.
์๋น์ค Pod
์ฌ์์ ์๋น์ค ์ ๊ณต ์ธ์ฆ์ ๋ณด์์ ๋ํด ๊ตฌ์ฑ๋ฉ๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: registry
annotations:
service.beta.openshift.io/serving-cert-secret-name: registry-cert1
# ...
- 1
- ์ธ์ฆ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
๊ธฐํ Pod๋ ํด๋น Pod์ ์๋์ผ๋ก ๋ง์ดํธ๋๋ /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt ํ์ผ์ CA ๋ฒ๋ค์ ์ฌ์ฉํ์ฌ ๋ด๋ถ DNS ์ด๋ฆ์๋ง ์๋ช ๋๋ ํด๋ฌ์คํฐ ์์ฑ ์ธ์ฆ์๋ฅผ ์ ๋ขฐํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์๋ช
์๊ณ ๋ฆฌ์ฆ์ x509.SHA256WithRSA
์
๋๋ค. ์ง์ ๊ต๋ํ๋ ค๋ฉด ์์ฑ๋ ๋ณด์์ ์ญ์ ํฉ๋๋ค. ์ ์ธ์ฆ์๊ฐ ์์ฑ๋ฉ๋๋ค.
2.6.5.1. ๋ณด์๊ณผ ํจ๊ป ์ฌ์ฉํ ์๋ช ๋ ์ธ์ฆ์ ์์ฑ
Pod์ ํจ๊ป ์๋ช
๋ ์ ๊ณต ์ธ์ฆ์/ํค ์์ ์ฌ์ฉํ๋ ค๋ฉด ์๋น์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ํธ์งํ์ฌ service.beta.openshift.io/serving-cert-secret-name
์ฃผ์์ ์ถ๊ฐํ ๋ค์ Pod์ ๋ณด์์ ์ถ๊ฐํฉ๋๋ค.
ํ๋ก์ธ์ค
์๋น์ค ์ ๊ณต ์ธ์ฆ์ ๋ณด์์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
-
์๋น์ค์ ๋ํ
Pod
์ฌ์์ ํธ์งํฉ๋๋ค. ๋ณด์์ ์ฌ์ฉํ ์ด๋ฆ์ผ๋ก
service.beta.openshift.io/serving-cert-secret-name
์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.kind: Service apiVersion: v1 metadata: name: my-service annotations: service.beta.openshift.io/serving-cert-secret-name: my-cert 1 spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376
์ธ์ฆ์ ๋ฐ ํค๋ PEM ํ์์ด๋ฉฐ ๊ฐ๊ฐ
tls.crt
๋ฐtls.key
์ ์ ์ฅ๋ฉ๋๋ค.์๋น์ค๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
๋ณด์์ด ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
๋ชจ๋ ๋ณด์ ๋ชฉ๋ก์ ํ์ธํฉ๋๋ค.
$ oc get secrets
์ถ๋ ฅ ์
NAME TYPE DATA AGE my-cert kubernetes.io/tls 2 9m
๋ณด์์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํฉ๋๋ค.
$ oc describe secret my-cert
์ถ๋ ฅ ์
Name: my-cert Namespace: openshift-console Labels: <none> Annotations: service.beta.openshift.io/expiry: 2023-03-08T23:22:40Z service.beta.openshift.io/originating-service-name: my-service service.beta.openshift.io/originating-service-uid: 640f0ec3-afc2-4380-bf31-a8c784846a11 service.beta.openshift.io/expiry: 2023-03-08T23:22:40Z Type: kubernetes.io/tls Data ==== tls.key: 1679 bytes tls.crt: 2595 bytes
ํด๋น ๋ณด์์ ์ฌ์ฉํ์ฌ
Pod
์ฌ์์ ํธ์งํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: my-service-pod spec: containers: - name: mypod image: redis volumeMounts: - name: my-container mountPath: "/etc/my-path" volumes: - name: my-volume secret: secretName: my-cert items: - key: username path: my-group/my-username mode: 511
์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ Pod๊ฐ ์คํ๋ฉ๋๋ค. ์ธ์ฆ์๋ ๋ด๋ถ ์๋น์ค DNS ์ด๋ฆ์ธ
<service.name>.<service.namespace>.svc
์ ์ ํฉํฉ๋๋ค.์ธ์ฆ์/ํค ์์ ๋ง๋ฃ ์๊ธฐ๊ฐ ๋ค๊ฐ์ค๋ฉด ์๋์ผ๋ก ๊ต์ฒด๋ฉ๋๋ค. ๋ณด์์
service.beta.openshift.io/expiry
์ฃผ์์์ RFC3339 ํ์์ ๋ง๋ฃ ๋ ์ง๋ฅผ ํ์ธํฉ๋๋ค.์ฐธ๊ณ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋น์ค DNS ์ด๋ฆ
<service.name>.<service.namespace>.svc
๋ ์ธ๋ถ์์ ๋ผ์ฐํ ํ ์ ์์ต๋๋ค.<service.name>.<service.namespace>.svc
๋ ์ฃผ๋ก ํด๋ฌ์คํฐ ๋ด ๋๋ ์๋น์ค ๋ด ํต์ ๊ณผ ๊ฒฝ๋ก ์ฌ์ํธํ์ ์ฌ์ฉ๋ฉ๋๋ค.
2.6.6. ๋ณด์ ๋ฌธ์ ํด๊ฒฐ
๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ์ธ์ฆ์ ์์ฑ์ด ์คํจํ๋ ๊ฒฝ์ฐ (์๋น์ค์ service.beta.openshift.io/serving-cert-generation-error
์ฃผ์์ ๋ค์์ด ํฌํจ๋ฉ๋๋ค).
secret/ssl-key references serviceUID 62ad25ca-d703-11e6-9d6f-0e9c0057b608, which does not match 77b6dd80-d716-11e6-9d6f-0e9c0057b60
์ธ์ฆ์๋ฅผ ์์ฑํ ์๋น์ค๊ฐ ๋ ์ด์ ์กด์ฌํ์ง ์๊ฑฐ๋ serviceUID
๊ฐ ๋ค๋ฆ
๋๋ค. ์ด์ ๋ณด์์ ์ ๊ฑฐํ๊ณ service.beta.openshift.io/serving-cert-generation-error ,
์ฃผ์์ ์ง์ ์ธ์ฆ์๋ฅผ ๊ฐ์ ๋ก ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค.
service.beta.openshift.io/serving-cert-generation-error
-num
๋ณด์์ ์ญ์ ํฉ๋๋ค.
$ oc delete secret <secret_name>
์ฃผ์์ ์ง์๋๋ค.
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-
$ oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-num-
์ฃผ์์ ์ ๊ฑฐํ๋ ๋ช
๋ น์๋ ์ ๊ฑฐํ ์ฃผ์ ์ด๋ฆ ๋ค์ -
๊ฐ ์์ต๋๋ค.
2.7. ๊ตฌ์ฑ ๋งต ์์ฑ ๋ฐ ์ฌ์ฉ
๋ค์ ์น์ ์์๋ ๊ตฌ์ฑ ๋งต๊ณผ ์ด๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
2.7.1. ๊ตฌ์ฑ ๋งต ์ดํด
๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๊ตฌ์ฑ ํ์ผ, ๋ช ๋ น์ค ์ธ์ ๋ฐ ํ๊ฒฝ ๋ณ์ ์กฐํฉ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. OpenShift Container Platform์์ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ํ๊ธฐ ์ํด ์ด๋ฌํ ๊ตฌ์ฑ ์ํฐํฉํธ๋ ์ด๋ฏธ์ง ์ฝํ ์ธ ์ ๋ถ๋ฆฌ๋ฉ๋๋ค.
ConfigMap
์ค๋ธ์ ํธ๋ ์ปจํ
์ด๋๋ฅผ OpenShift Container Platform๊ณผ ๋ฌด๊ดํ๊ฒ ์ ์งํ๋ฉด์ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋๋ฅผ ์ฝ์
ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ๊ตฌ์ฑ ๋งต์ ๊ฐ๋ณ ์์ฑ ๋๋ ์ ์ฒด ๊ตฌ์ฑ ํ์ผ ๋๋ JSON Blob๊ณผ ๊ฐ์ ์ธ๋ถํ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ConfigMap
์ค๋ธ์ ํธ์๋ Pod์์ ์ฌ์ฉํ๊ฑฐ๋ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ์์คํ
๊ตฌ์ฑ ์์์ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์ฑ ๋ฐ์ดํฐ์ ํค-๊ฐ ์์ด ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ConfigMap
์ค๋ธ์ ํธ ์ ์
kind: ConfigMap apiVersion: v1 metadata: creationTimestamp: 2016-02-18T19:14:38Z name: example-config namespace: my-namespace data: 1 example.property.1: hello example.property.2: world example.property.file: |- property.1=value-1 property.2=value-2 property.3=value-3 binaryData: bar: L3Jvb3QvMTAw 2
์ด๋ฏธ์ง์ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ์์ ๊ตฌ์ฑ ๋งต์ ์์ฑํ ๋ binaryData
ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก Pod์์ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ตฌ์ฑ ๋งต์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ปจํ ์ด๋์์ ํ๊ฒฝ ๋ณ์ ๊ฐ ์ฑ์ฐ๊ธฐ
- ์ปจํ ์ด๋์์ ๋ช ๋ น์ค ์ธ์ ์ค์
- ๋ณผ๋ฅจ์ ๊ตฌ์ฑ ํ์ผ ์ฑ์ฐ๊ธฐ
์ฌ์ฉ์ ๋ฐ ์์คํ ๊ตฌ์ฑ ์์๋ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑ ๋งต์ ์ ์ฅํ ์ ์์ต๋๋ค.
๊ตฌ์ฑ ๋งต์ ๋ณด์๊ณผ ์ ์ฌํ์ง๋ง ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋์ง ์์ ๋ฌธ์์ด ์์ ์ ๋ ํธ๋ฆฌํ๊ฒ ์ง์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
๊ตฌ์ฑ ๋งต ์ ํ ์ฌํญ
Pod์์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ตฌ์ฑ ๋งต์ ์์ฑํด์ผ ํฉ๋๋ค.
์ปจํธ๋กค๋ฌ๋ ๋๋ฝ๋ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ํฉ์ ๋ฐ๋ผ ๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋ ๊ฐ๋ณ ๊ตฌ์ฑ ์์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
ConfigMap
์ค๋ธ์ ํธ๋ ํ๋ก์ ํธ์ ์์ต๋๋ค.
๋์ผํ ํ๋ก์ ํธ์ Pod์์๋ง ์ฐธ์กฐํ ์ ์์ต๋๋ค.
Kubelet์ API ์๋ฒ์์ ๊ฐ์ ธ์ค๋ Pod์ ๋ํ ๊ตฌ์ฑ ๋งต๋ง ์ง์ํฉ๋๋ค.
์ฌ๊ธฐ์๋ CLI๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ณต์ ์ปจํธ๋กค๋ฌ์์ ๊ฐ์ ์ ์ผ๋ก ์์ฑ๋๋ ๋ชจ๋ Pod๊ฐ ํฌํจ๋ฉ๋๋ค. OpenShift Container Platform ๋
ธ๋์ --manifest-url
ํ๋๊ทธ, --config
ํ๋๊ทธ ๋๋ ํด๋น REST API๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ Pod๋ฅผ ํฌํจํ์ง ์์ผ๋ฉฐ ์ด๋ Pod๋ฅผ ์์ฑํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๊ธฐ ๋๋ฌธ์
๋๋ค.
2.7.2. OpenShift Container Platform ์น ์ฝ์์์ ๊ตฌ์ฑ ๋งต ์์ฑ
OpenShift Container Platform ์น ์ฝ์์์ ๊ตฌ์ฑ ๋งต์ ์์ฑํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ก ๊ตฌ์ฑ ๋งต์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
-
๊ด๋ฆฌ์ ๊ด์ ์์
Workloads
โConfig Maps
์ ์ ํํฉ๋๋ค. - ํ์ด์ง ์ค๋ฅธ์ชฝ ์๋จ์์ ๊ตฌ์ฑ ๋งต ์์ฑ์ ์ ํํฉ๋๋ค.
- ๊ตฌ์ฑ ๋งต์ ์ฝํ ์ธ ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์์ฑ์ ์ ํํฉ๋๋ค.
-
๊ด๋ฆฌ์ ๊ด์ ์์
๊ฐ๋ฐ์๋ก ๊ตฌ์ฑ ๋งต์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
-
๊ฐ๋ฐ์ ๊ด์ ์์
Config Maps
์ ์ ํํฉ๋๋ค. - ํ์ด์ง ์ค๋ฅธ์ชฝ ์๋จ์์ ๊ตฌ์ฑ ๋งต ์์ฑ์ ์ ํํฉ๋๋ค.
- ๊ตฌ์ฑ ๋งต์ ์ฝํ ์ธ ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์์ฑ์ ์ ํํฉ๋๋ค.
-
๊ฐ๋ฐ์ ๊ด์ ์์
2.7.3. CLI๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ๋งต ์์ฑ
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋๋ ํ ๋ฆฌ, ํน์ ํ์ผ ๋๋ ๋ฆฌํฐ๋ด ๊ฐ์์ ๊ตฌ์ฑ ๋งต์ ์์ฑํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๊ตฌ์ฑ ๋งต ์์ฑ:
$ oc create configmap <configmap_name> [options]
2.7.3.1. ๋๋ ํ ๋ฆฌ์์ ๊ตฌ์ฑ ๋งต ์์ฑ
--from-file
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ ํฐ๋ฆฌ์์ ๊ตฌ์ฑ ๋งต์ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ ํ ๋ฆฌ ๋ด ์ฌ๋ฌ ํ์ผ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ๋งต์ ์์ฑํ ์ ์์ต๋๋ค.
๋๋ ํฐ๋ฆฌ์ ๊ฐ ํ์ผ์ ๊ตฌ์ฑ ๋งต์์ ํค๋ฅผ ์ฑ์ฐ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ํค ์ด๋ฆ์ ํ์ผ ์ด๋ฆ์ด๋ฉฐ ํค ๊ฐ์ ํ์ผ์ ๋ด์ฉ์ ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ช
๋ น์ example-files
๋๋ ํฐ๋ฆฌ์ ์ฝํ
์ธ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.
$ oc create configmap game-config --from-file=example-files/
๊ตฌ์ฑ ๋งต์์ ํค๋ฅผ ํ์ํฉ๋๋ค.
$ oc describe configmaps game-config
์ถ๋ ฅ ์
Name: game-config Namespace: default Labels: <none> Annotations: <none> Data game.properties: 158 bytes ui.properties: 83 bytes
๋งต์ ๋ ํค๊ฐ ๋ช
๋ น์ ์ง์ ๋ ๋๋ ํ ๋ฆฌ์ ํ์ผ ์ด๋ฆ์์ ์์ฑ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ํด๋น ํค์ ๋ด์ฉ์ ์ปค์ง ์ ์์ผ๋ฏ๋ก oc describe
์ ์ถ๋ ฅ์ ํค์ ํฌ๊ธฐ์ ์ด๋ฆ๋ง ํ์ํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๊ตฌ์ฑ ๋งต์ ์ฑ์ฐ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํ์ผ์ด ์๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ด์ผ ํฉ๋๋ค.
๋ค์ ์ ์ฐจ์์๋ ๋ค์ ์์ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
game.properties
๋ฐui.properties
:$ cat example-files/game.properties
์ถ๋ ฅ ์
enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30
$ cat example-files/ui.properties
์ถ๋ ฅ ์
color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice
ํ๋ก์ธ์ค
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ์ด ๋๋ ํฐ๋ฆฌ์ ๊ฐ ํ์ผ์ ๋ด์ฉ์ ๋ณด์ ํ ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.
$ oc create configmap game-config \ --from-file=example-files/
๊ฒ์ฆ
ํค ๊ฐ์ ๋ณด๋ ค๋ฉด
-o
์ต์ ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ์ ๋ํoc get
๋ช ๋ น์ ์ ๋ ฅํฉ๋๋ค.$ oc get configmaps game-config -o yaml
์ถ๋ ฅ ์
apiVersion: v1 data: game.properties: |- enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30 ui.properties: | color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice kind: ConfigMap metadata: creationTimestamp: 2016-02-18T18:34:05Z name: game-config namespace: default resourceVersion: "407" selflink: /api/v1/namespaces/default/configmaps/game-config uid: 30944725-d66e-11e5-8cd0-68f728db1985
2.7.3.2. ํ์ผ์์ ๊ตฌ์ฑ ๋งต ์์ฑ
--from-file
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์์ ๊ตฌ์ฑ ๋งต์ ์์ฑํ ์ ์์ต๋๋ค. --from-file
์ต์
์ CLI์ ์ฌ๋ฌ ๋ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
key=value
ํํ์์ --from-file
์ต์
์ ์ ๋ฌํ์ฌ ํ์ผ์์ ๊ฐ์ ธ์จ ์ฝํ
์ธ ์ ๊ตฌ์ฑ ๋งต์ ์ค์ ํ ํค๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create configmap game-config-3 --from-file=game-special-key=example-files/game.properties
ํ์ผ์์ ๊ตฌ์ฑ ๋งต์ ์์ฑํ๋ ๊ฒฝ์ฐ UTF8์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์์์ํค์ง ์๊ณ ์ด ํ๋์ ๋ฐฐ์น๋ UTF8์ด ์๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํ์ผ์ ํฌํจํ ์ ์์ต๋๋ค. OpenShift Container Platform์์๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๊ฐ์งํ๊ณ ํ์ผ์ MIME
๋ก ํฌ๋ช
ํ๊ฒ ์ธ์ฝ๋ฉํฉ๋๋ค. ์๋ฒ์์ MIME
ํ์ด๋ก๋๋ ๋ฐ์ดํฐ ์์ ์์ด ๋์ฝ๋ฉ๋์ด ์ ์ฅ๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๊ตฌ์ฑ ๋งต์ ์ฑ์ฐ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํ์ผ์ด ์๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ด์ผ ํฉ๋๋ค.
๋ค์ ์ ์ฐจ์์๋ ๋ค์ ์์ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
game.properties
๋ฐui.properties
:$ cat example-files/game.properties
์ถ๋ ฅ ์
enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30
$ cat example-files/ui.properties
์ถ๋ ฅ ์
color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice
ํ๋ก์ธ์ค
ํน์ ํ์ผ์ ์ง์ ํ์ฌ ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.
$ oc create configmap game-config-2 \ --from-file=example-files/game.properties \ --from-file=example-files/ui.properties
ํค-๊ฐ ์์ ์ง์ ํ์ฌ ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.
$ oc create configmap game-config-3 \ --from-file=game-special-key=example-files/game.properties
๊ฒ์ฆ
ํ์ผ์์ ํค ๊ฐ์ ํ์ธํ๋ ค๋ฉด
-o
์ต์ ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ์ ๋ํoc get
๋ช ๋ น์ ์ ๋ ฅํฉ๋๋ค.$ oc get configmaps game-config-2 -o yaml
์ถ๋ ฅ ์
apiVersion: v1 data: game.properties: |- enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30 ui.properties: | color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice kind: ConfigMap metadata: creationTimestamp: 2016-02-18T18:52:05Z name: game-config-2 namespace: default resourceVersion: "516" selflink: /api/v1/namespaces/default/configmaps/game-config-2 uid: b4952dc3-d670-11e5-8cd0-68f728db1985
ํค-๊ฐ ์์ ํค ๊ฐ์ ํ์ธํ๋ ค๋ฉด
-o
์ต์ ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ์ ๋ํoc get
๋ช ๋ น์ ์ ๋ ฅํฉ๋๋ค.$ oc get configmaps game-config-3 -o yaml
์ถ๋ ฅ ์
apiVersion: v1 data: game-special-key: |- 1 enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten secret.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30 kind: ConfigMap metadata: creationTimestamp: 2016-02-18T18:54:22Z name: game-config-3 namespace: default resourceVersion: "530" selflink: /api/v1/namespaces/default/configmaps/game-config-3 uid: 05f8da22-d671-11e5-8cd0-68f728db1985
- 1
- ์ด์ ๋จ๊ณ์์ ์ค์ ํ ํค์ ๋๋ค.
2.7.3.3. ๋ฆฌํฐ๋ด ๊ฐ์์ ๊ตฌ์ฑ ๋งต ์์ฑ
๊ตฌ์ฑ ๋งต์ ๋ฆฌํฐ๋ด ๊ฐ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
--from-literal
์ต์
์ key=value
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฏ๋ก ๋ช
๋ น์ค์์ ์ง์ ๋ฆฌํฐ๋ด ๊ฐ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๋ฆฌํฐ๋ด ๊ฐ์ ์ง์ ํ์ฌ ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.
$ oc create configmap special-config \ --from-literal=special.how=very \ --from-literal=special.type=charm
๊ฒ์ฆ
ํค ๊ฐ์ ๋ณด๋ ค๋ฉด
-o
์ต์ ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ์ ๋ํoc get
๋ช ๋ น์ ์ ๋ ฅํฉ๋๋ค.$ oc get configmaps special-config -o yaml
์ถ๋ ฅ ์
apiVersion: v1 data: special.how: very special.type: charm kind: ConfigMap metadata: creationTimestamp: 2016-02-18T19:14:38Z name: special-config namespace: default resourceVersion: "651" selflink: /api/v1/namespaces/default/configmaps/special-config uid: dadce046-d673-11e5-8cd0-68f728db1985
2.7.4. ์ฌ์ฉ ์ฌ๋ก: Pod์์ ๊ตฌ์ฑ ๋งต ์ฌ์ฉ
๋ค์ ์น์
์์๋ Pod์์ ConfigMap
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ ๋ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ค๋ช
ํฉ๋๋ค.
2.7.4.1. ๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์์ ํ๊ฒฝ ๋ณ์ ์ฑ์ฐ๊ธฐ
๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์์ ๊ฐ๋ณ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฑ์ฐ๊ฑฐ๋ ์ ํจํ ํ๊ฒฝ ๋ณ์ ์ด๋ฆ์ ํ์ฑํ๋ ๋ชจ๋ ํค์์ ์ปจํ ์ด๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฑ์ธ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๊ตฌ์ฑ ๋งต์ ๊ณ ๋ คํ์ญ์์ค.
๋ ๊ฐ์ ํ๊ฒฝ ๋ณ์๊ฐ ์๋ ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: special-config 1 namespace: default 2 data: special.how: very 3 special.type: charm 4
ํ๋์ ํ๊ฒฝ ๋ณ์๊ฐ ์๋ ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: env-config 1 namespace: default data: log_level: INFO 2
ํ๋ก์ธ์ค
configMapKeyRef
์น์ ์ ์ฌ์ฉํ์ฌ Pod์์ ์ดConfigMap
์ ํค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.ํน์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฝ์ ํ๋๋ก ๊ตฌ์ฑ๋ ์ํ
Pod
์ฌ์apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: 1 - name: SPECIAL_LEVEL_KEY 2 valueFrom: configMapKeyRef: name: special-config 3 key: special.how 4 - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config 5 key: special.type 6 optional: true 7 envFrom: 8 - configMapRef: name: env-config 9 restartPolicy: Never
- 1
ConfigMap
์์ ์ง์ ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๋ ์คํ ์์ ๋๋ค.- 2
- ํค ๊ฐ์ ์ฝ์ ํ๋ pod ํ๊ฒฝ ๋ณ์์ ์ด๋ฆ์ ๋๋ค.
- 3 5
- ํน์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋์ด์ฌ
ConfigMap
์ ์ด๋ฆ์ ๋๋ค. - 4 6
ConfigMap
์์ ๊ฐ์ ธ์ฌ ํ๊ฒฝ ๋ณ์์ ๋๋ค.- 7
- ํ๊ฒฝ ๋ณ์๋ฅผ ์ ํ์ ์ผ๋ก ๋ง๋ญ๋๋ค. ์ ํ ์ฌํญ์ผ๋ก ์ง์ ๋
ConfigMap
๋ฐ ํค๊ฐ ์๋ ๊ฒฝ์ฐ์๋ Pod๊ฐ ์์๋ฉ๋๋ค. - 8
ConfigMap
์์ ๋ชจ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๋ ์คํ ์์ ๋๋ค.- 9
- ๋ชจ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ ธ์ฌ
ConfigMap
์ ์ด๋ฆ์ ๋๋ค.
์ด Pod๊ฐ ์คํ๋๋ฉด Pod ๋ก๊ทธ์ ๋ค์ ์ถ๋ ฅ์ด ํฌํจ๋ฉ๋๋ค.
SPECIAL_LEVEL_KEY=very log_level=INFO
SPECIAL_TYPE_KEY=charm
์ ์์ ์ถ๋ ฅ์ ๋์ด๋์ง ์์ต๋๋ค. optional: true
๊ฐ ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
2.7.4.2. ๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ช ๋ น์ ๋ํ ๋ช ๋ น์ค ์ธ์ ์ค์
๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ Kubernetes ๋์ฒด ๊ตฌ๋ฌธ $(VAR_NAME)
์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋์์ ๋ช
๋ น ๋๋ ์ธ์ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๊ตฌ์ฑ ๋งต์ ๊ณ ๋ คํ์ญ์์ค.
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm
ํ๋ก์ธ์ค
์ปจํ ์ด๋์ ๋ช ๋ น์ ๊ฐ์ ์ฝ์ ํ๋ ค๋ฉด ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ ํค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์
$(VAR_NAME)
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์ ๋ช ๋ น์์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.ํน์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฝ์ ํ๋๋ก ๊ตฌ์ฑ๋ ์ํ Pod ์ฌ์
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] 1 env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type restartPolicy: Never
- 1
- ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์ ๋ช ๋ น์ ๊ฐ์ ์ฝ์ ํฉ๋๋ค.
์ด Pod๊ฐ ์คํ๋๋ฉด test-container ์ปจํ ์ด๋์์ ์คํ๋๋ echo ๋ช ๋ น์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
very charm
2.7.4.3. ๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์ฝํ ์ธ ์ฝ์
๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์ฝํ ์ธ ๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
ConfigMap
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm
ํ๋ก์ธ์ค
๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์ฝํ ์ธ ๋ฅผ ์ฝ์ ํ๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์ต์ ์ด ์์ต๋๋ค.
๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๋ฅผ ๋ณผ๋ฅจ์ ์ฝ์ ํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ํค๊ฐ ํ์ผ ์ด๋ฆ์ด๊ณ ํ์ผ์ ์ฝํ ์ธ ๊ฐ ํค์ ๊ฐ์ธ ํ์ผ๋ก ๋ณผ๋ฅจ์ ์ฑ์ฐ๋ ๊ฒ์ ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "cat", "/etc/config/special.how" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config 1 restartPolicy: Never
- 1
- ํค๊ฐ ํฌํจ๋ ํ์ผ์ ๋๋ค.
์ด Pod๊ฐ ์คํ๋๋ฉด cat ๋ช ๋ น์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
very
๊ตฌ์ฑ ๋งต ํค๊ฐ ์์๋ ๋ณผ๋ฅจ ๋ด์ ๊ฒฝ๋ก๋ฅผ ์ ์ดํ ์๋ ์์ต๋๋ค.
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "cat", "/etc/config/path/to/special-key" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config items: - key: special.how path: path/to/special-key 1 restartPolicy: Never
- 1
- ๊ตฌ์ฑ ๋งต ํค์ ๊ฒฝ๋ก์ ๋๋ค.
์ด Pod๊ฐ ์คํ๋๋ฉด cat ๋ช ๋ น์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
very
2.8. ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ Pod๊ฐ ์๋ ์ธ๋ถ ๋ฆฌ์์ค์ ์ก์ธ์ค
์ฅ์น ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์ ์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ๋ OpenShift Container Platform Pod์์ ํน์ ์ฅ์น ์ ํ(GPU, InfiniBand ๋๋ ๋ฒค๋๋ณ ์ด๊ธฐํ ๋ฐ ์ค์ ์ด ํ์ํ ๊ธฐํ ์ ์ฌํ ์ปดํจํ ๋ฆฌ์์ค)์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
2.8.1. ์ฅ์น ํ๋ฌ๊ทธ์ธ ์ดํด
์ฅ์น ํ๋ฌ๊ทธ์ธ์ ํด๋ฌ์คํฐ ์ ์ฒด์์ ํ๋์จ์ด ์ฅ์น๋ฅผ ์๋นํ ์ ์๋ ์ผ๊ด๋๊ณ ์ด์ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ํ์ฅ ๋ฉ์ปค๋์ฆ์ ํตํด ์ด๋ฌํ ์ฅ์น๋ฅผ ์ง์ํ์ฌ ์ปจํ ์ด๋์์ ์ด๋ฌํ ์ฅ์น๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ณ ์ฅ์น์ ์ํ ์ ๊ฒ์ ์ ๊ณตํ๋ฉฐ ์์ ํ๊ฒ ๊ณต์ ํฉ๋๋ค.
OpenShift Container Platform์ ์ฅ์น ํ๋ฌ๊ทธ์ธ API๋ฅผ ์ง์ํ์ง๋ง ์ฅ์น ํ๋ฌ๊ทธ์ธ ์ปจํ ์ด๋๋ ๊ฐ๋ณ ๊ณต๊ธ ์ ์ฒด์์ ์ง์ํฉ๋๋ค.
์ฅ์น ํ๋ฌ๊ทธ์ธ์ ํน์ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ ๋
ธ๋( kubelet
์ธ๋ถ)์์ ์คํ๋๋ gRPC ์๋น์ค์
๋๋ค. ๋ชจ๋ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ๋ค์ ์๊ฒฉ ํ๋ก์์ ํธ์ถ (RPC)์ ์ง์ํด์ผ ํฉ๋๋ค.
service DevicePlugin { // GetDevicePluginOptions returns options to be communicated with Device // Manager rpc GetDevicePluginOptions(Empty) returns (DevicePluginOptions) {} // ListAndWatch returns a stream of List of Devices // Whenever a Device state change or a Device disappears, ListAndWatch // returns the new list rpc ListAndWatch(Empty) returns (stream ListAndWatchResponse) {} // Allocate is called during container creation so that the Device // Plug-in can run device specific operations and instruct Kubelet // of the steps to make the Device available in the container rpc Allocate(AllocateRequest) returns (AllocateResponse) {} // PreStartcontainer is called, if indicated by Device Plug-in during // registration phase, before each container start. Device plug-in // can run device specific operations such as reseting the device // before making devices available to the container rpc PreStartcontainer(PreStartcontainerRequest) returns (PreStartcontainerResponse) {} }
์ฅ์น ํ๋ฌ๊ทธ์ธ ์
๊ฐํธํ ์ฅ์น ํ๋ฌ๊ทธ์ธ ์ฐธ์กฐ ๊ตฌํ์ ์ํด ์ฅ์น ๊ด๋ฆฌ์ ์ฝ๋์ vendor/k8s.io/kubernetes/pkg/kubelet/cm/deviceplugin/device_plugin_stub.go ์ ์คํ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค.
2.8.1.1. ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ
- ์ฅ์น ํ๋ฌ๊ทธ์ธ ๋ฐฐํฌ์๋ ๋ฐ๋ชฌ ์ธํธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์์ ์ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ๋ ธ๋์ /var/lib/kubelet/device-plugin/ ์ UNIX ๋๋ฉ์ธ ์์ผ์ ๋ง๋ค์ด ์ฅ์น ๊ด๋ฆฌ์์ RPC๋ฅผ ์ ๊ณตํ๋ ค๊ณ ํฉ๋๋ค.
- ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ํ๋์จ์ด ๋ฆฌ์์ค, ํธ์คํธ ํ์ผ ์์คํ ์ ๋ํ ์ก์ธ์ค ๋ฐ ์์ผ ์์ฑ์ ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก ๊ถํ ์๋ ๋ณด์ ์ปจํ ์คํธ์์ ์คํํด์ผ ํฉ๋๋ค.
- ๋ฐฐํฌ ๋จ๊ณ์ ๋ํ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ์ธ๋ถ ์ ๋ณด๋ ๊ฐ ์ฅ์น ํ๋ฌ๊ทธ์ธ ๊ตฌํ์์ ํ์ธํ ์ ์์ต๋๋ค.
2.8.2. ์ฅ์น ๊ด๋ฆฌ์ ์ดํด
์ฅ์น ๊ด๋ฆฌ์๋ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ด๋ผ๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ํน์ ๋ ธ๋ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ์๋ฆฌ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
์ ์คํธ๋ฆผ ์ฝ๋ ๋ณ๊ฒฝ์์ด ํน์ ํ๋์จ์ด๋ฅผ ๊ณต๊ฐํ ์ ์์ต๋๋ค.
OpenShift Container Platform์ ์ฅ์น ํ๋ฌ๊ทธ์ธ API๋ฅผ ์ง์ํ์ง๋ง ์ฅ์น ํ๋ฌ๊ทธ์ธ ์ปจํ ์ด๋๋ ๊ฐ๋ณ ๊ณต๊ธ ์ ์ฒด์์ ์ง์ํฉ๋๋ค.
์ฅ์น ๊ด๋ฆฌ์๋ ์ฅ์น๋ฅผ ํ์ฅ ๋ฆฌ์์ค(Extended Resources)์ผ๋ก ๊ณต๊ฐํฉ๋๋ค. ์ฌ์ฉ์ pod๋ ๋ค๋ฅธ ํ์ฅ ๋ฆฌ์์ค ๋ฅผ ์์ฒญํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋์ผํ ์ ํ/์์ฒญ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ฅ์น ๊ด๋ฆฌ์์ ์ํด ๊ณต๊ฐ๋ ์ฅ์น๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์์ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ /var/lib/kubelet/device-plugins/kubelet.sock ์์ Register
๋ฅผ ํธ์ถํ๋ ์ฅ์น ๊ด๋ฆฌ์์ ์ง์ ๋ฑ๋กํ๊ณ ์ฅ์น ๊ด๋ฆฌ์ ์์ฒญ์ ์ ๊ณตํ๊ธฐ ์ํด /var/lib/kubelet/device-plugins/<plugin>.sock ์์ gRPC ์๋น์ค๋ฅผ ์์ํฉ๋๋ค.
์ฅ์น ๊ด๋ฆฌ์๋ ์ ๋ฑ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ ์ฅ์น ํ๋ฌ๊ทธ์ธ ์๋น์ค์์ ListAndWatch
์๊ฒฉ ํ๋ก์์ ํธ์ถ(RPC)์ ํธ์ถํฉ๋๋ค. ์ด์ ๋ํ ์๋ต์ผ๋ก ์ฅ์น ๊ด๋ฆฌ์๋ ํ๋ฌ๊ทธ์ธ์์ gRPC ์คํธ๋ฆผ์ ํตํด ์ฅ์น ์ค๋ธ์ ํธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค. ์ฅ์น ๊ด๋ฆฌ์๋ ํ๋ฌ๊ทธ์ธ์์ ์๋ก์ด ์
๋ฐ์ดํธ๋ฅผ ์ํด ์คํธ๋ฆผ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ ์ธก์์๋ ํ๋ฌ๊ทธ์ธ์ ์คํธ๋ฆผ์ ์ด๋ฆฐ ์ํ๋ก ์ ์งํ๊ณ ์ฅ์น ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋์ผํ ์คํธ๋ฆฌ๋ฐ ์ฐ๊ฒฐ์ ํตํด ์ ์ฅ์น ๋ชฉ๋ก์ด ์ฅ์น ๊ด๋ฆฌ์๋ก ์ ์ก๋ฉ๋๋ค.
์๋ก์ด pod ์น์ธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ Kubelet์ ์ฅ์น ํ ๋น์ ์ํด ์์ฒญ๋ Extended Resources
๋ฅผ ์ฅ์น ๊ด๋ฆฌ์์๊ฒ ์ ๋ฌํฉ๋๋ค. ์ฅ์น ๊ด๋ฆฌ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํด๋น ํ๋ฌ๊ทธ์ธ์ด ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ด ์กด์ฌํ๊ณ ๋ก์ปฌ ์บ์๋ณ๋ก ํ ๋น ๊ฐ๋ฅํ ์ฅ์น๊ฐ ์๋ ๊ฒฝ์ฐ Allocate
RPC๊ฐ ํน์ ์ฅ์น ํ๋ฌ๊ทธ์ธ์์ ํธ์ถ๋ฉ๋๋ค.
๋ํ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ๋๋ผ์ด๋ฒ ์ค์น, ์ฅ์น ์ด๊ธฐํ ๋ฐ ์ฅ์น ์ฌ์ค์ ๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์ฅ์น ๊ด๋ จ ์์ ์ ์ํํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌํ๋ง๋ค ๋ค๋ฆ ๋๋ค.
2.8.3. ์ฅ์น ๊ด๋ฆฌ์ ํ์ฑํ
์ฅ์น ๊ด๋ฆฌ์๋ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ ๊ตฌํํ์ฌ ์ ์คํธ๋ฆผ ์ฝ๋ ๋ณ๊ฒฝ์์ด ํน์ ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฅ์น ๊ด๋ฆฌ์๋ ์ฅ์น ํ๋ฌ๊ทธ์ธ์ด๋ผ๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ํน์ ๋ ธ๋ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ์๋ฆฌ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ตฌ์ฑํ ๋ ธ๋ ์ ํ์ ์ ์
MachineConfigPool
CRD์ ์ฐ๊ด๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค. ๋ค์ ์ค ํ๋๋ฅผ ์คํํฉ๋๋ค.Machine config๋ฅผ ํ์ํฉ๋๋ค:
# oc describe machineconfig <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# oc describe machineconfig 00-worker
์ถ๋ ฅ ์
Name: 00-worker Namespace: Labels: machineconfiguration.openshift.io/role=worker 1
- 1
- ์ฅ์น ๊ด๋ฆฌ์์ ํ์ํ ๋ผ๋ฒจ์ ๋๋ค.
ํ๋ก์ธ์ค
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ํ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค (CR)๋ฅผ ๋ง๋ญ๋๋ค.
์ฅ์น ๊ด๋ฆฌ์ CR์ ์ค์ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: devicemgr 1 spec: machineConfigPoolSelector: matchLabels: machineconfiguration.openshift.io: devicemgr 2 kubeletConfig: feature-gates: - DevicePlugins=true 3
์ฅ์น ๊ด๋ฆฌ์๋ฅผ ๋ง๋ญ๋๋ค.
$ oc create -f devicemgr.yaml
์ถ๋ ฅ ์
kubeletconfig.machineconfiguration.openshift.io/devicemgr created
- ๋ ธ๋์์ /var/lib/kubelet/device-plugins/kubelet.sock์ด ์์ฑ๋์๋์ง ํ์ธํ์ฌ ์ฅ์น ๊ด๋ฆฌ์๊ฐ ์ค์ ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค. ์ด๋ ์ฅ์น ๊ด๋ฆฌ์์ gRPC ์๋ฒ๊ฐ ์ ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก์ ์์ ํ๋ UNIX ๋๋ฉ์ธ ์์ผ์ ๋๋ค. ์ด ์์ผ ํ์ผ์ ์ฅ์น ๊ด๋ฆฌ์๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง Kubelet์ ์์ํ ๋ ์์ฑ๋ฉ๋๋ค.
2.9. Pod ์์ฝ ๊ฒฐ์ ์ Pod ์ฐ์ ์์ ํฌํจ
ํด๋ฌ์คํฐ์์ Pod ์ฐ์ ์์ ๋ฐ ์ ์ ์ ํ์ฑํํ ์ ์์ต๋๋ค. Pod ์ฐ์ ์์๋ ๋ค๋ฅธ Pod์ ๊ด๋ จ๋ Pod์ ์ค์์ฑ์ ๋ํ๋ด๊ณ ํด๋น ์ฐ์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Pod๋ฅผ ๋๊ธฐ์ด์ ๋ฃ์ต๋๋ค. Pod ์ ์ ์ ์ฌ์ฉํ๋ฉด ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์ ์ ํ ์ ์์ผ๋ฏ๋ก ์ ์ ํ ๋ ธ๋ pod ์ฐ์ ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋์ Pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ๋ํ ๋ ธ๋์ Pod ์์ฝ ์์ ๋ฐ ๋ฆฌ์์ค ๋ถ์กฑ ์ ๊ฑฐ ์์์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ฐ์ ์์ ๋ฐ ์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด Pod์ ์๋์ ๊ฐ์ค์น๋ฅผ ์ ์ํ๋ ์ฐ์ ์์ ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Pod ์ฌ์์ ์ฐ์ ์์ ํด๋์ค๋ฅผ ์ฐธ์กฐํ์ฌ ์์ฝ์ ํด๋น ๊ฐ์ ์ ์ฉํฉ๋๋ค.
2.9.1. Pod ์ฐ์ ์์ ์ดํด
Pod ์ฐ์ ์์ ๋ฐ ์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ค์ผ์ค๋ฌ์์ ๋ณด๋ฅ ์ค์ธ Pod๋ฅผ ์ฐ์ ์์์ ๋ฐ๋ผ ์ ๋ ฌํ๊ณ , ๋ณด๋ฅ ์ค์ธ Pod๋ ์์ฝ ํ์์ ์ฐ์ ์์๊ฐ ๋ ๋ฎ์ ๋ค๋ฅธ ๋๊ธฐ ์ค์ธ Pod๋ณด๋ค ์์ ๋ฐฐ์น๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์์ฝ ์๊ตฌ ์ฌํญ์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋์ Pod๊ฐ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๋ณด๋ค ๋ ๋นจ๋ฆฌ ์์ฝ๋ ์ ์์ต๋๋ค. Pod๋ฅผ ์์ฝํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์ค์ผ์ค๋ฌ์์ ์ฐ์ ์์๊ฐ ๋ฎ์ ๋ค๋ฅธ Pod๋ฅผ ๊ณ์ ์์ฝํฉ๋๋ค.
2.9.1.1. Pod ์ฐ์ ์์ ํด๋์ค
๋ค์์คํ์ด์ค๊ฐ ์ง์ ๋์ง ์์ ์ค๋ธ์ ํธ๋ก์ ์ด๋ฆ์์ ์ฐ์ ์์ ์ ์ ๊ฐ์ผ๋ก์ ๋งคํ์ ์ ์ํ๋ ์ฐ์ ์์ ํด๋์ค๋ฅผ Pod์ ํ ๋นํ ์ ์์ต๋๋ค. ๊ฐ์ด ํด์๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค.
์ฐ์ ์์ ํด๋์ค ์ค๋ธ์ ํธ์๋ 1000000000(10์ต)๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ 32๋นํธ ์ ์ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์ ํ๊ฑฐ๋ ์ ๊ฑฐํด์๋ ์ ๋๋ ์ค์ํ Pod์ ๊ฒฝ์ฐ 10์ต๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ซ์๋ฅผ ์์ฝํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก OpenShift Container Platform์๋ ์ค์ํ ์์คํ Pod์ ์์ฝ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฐ์ ์์ ํด๋์ค๊ฐ 2๊ฐ ์์ฝ๋์ด ์์ต๋๋ค.
$ oc get priorityclasses
์ถ๋ ฅ ์
NAME VALUE GLOBAL-DEFAULT AGE system-node-critical 2000001000 false 72m system-cluster-critical 2000000000 false 72m openshift-user-critical 1000000000 false 3d13h cluster-logging 1000000 false 29s
system-node-critical - ์ด ์ฐ์ ์์ ํด๋์ค์ ๊ฐ์ 2000001000์ด๋ฉฐ ๋ ธ๋์์ ์ ๊ฑฐํด์๋ ์ ๋๋ ๋ชจ๋ Pod์ ์ฌ์ฉํฉ๋๋ค. ์ด ์ฐ์ ์์ ํด๋์ค๊ฐ ์๋ Pod์ ์๋ก๋
sdn-ovs
,sdn
๋ฑ์ด ์์ต๋๋ค. ๋๋ค์์ ์ค์ํ ๊ตฌ์ฑ ์์์๋ ๊ธฐ๋ณธ์ ์ผ๋กsystem-node-critical
์ฐ์ ์์ ํด๋์ค๊ฐ ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.- master-api
- master-controller
- master-etcd
- sdn
- sdn-ovs
- sync
system-cluster-critical - ์ด ์ฐ์ ์์ ํด๋์ค์ ๊ฐ์ 2000000000(10์ต)์ด๋ฉฐ ํด๋ฌ์คํฐ์ ์ค์ํ Pod์ ์ฌ์ฉํฉ๋๋ค. ์ด ์ฐ์ ์์ ํด๋์ค๊ฐ ์๋ Pod๋ ํน์ ์ํฉ์์ ๋ ธ๋์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด
system-node-critical
์ฐ์ ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํ Pod๊ฐ ์ฐ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ฐ์ ์์ ํด๋์ค๋ ์์ฝ์ ๋ณด์ฅํฉ๋๋ค. ์ด ์ฐ์ ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ Pod์ ์๋ก๋ fluentd, Descheduler์ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์ ๋ฑ์ด ์์ต๋๋ค. ๋๋ค์์ ์ค์ํ ๊ตฌ์ฑ ์์์๋ ๊ธฐ๋ณธ์ ์ผ๋กsystem-cluster-critical
์ฐ์ ์์ ํด๋์ค๊ฐ ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.- fluentd
- metrics-server
- Descheduler
-
OpenShift-user-critical - ๋ฆฌ์์ค ์๋น๋ฅผ ๋ฐ์ธ๋ฉํ ์ ์๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฆฌ์์ค ์ฌ์ฉ ๋์์ด ์๋ ์ค์ํ Pod์ ํจ๊ป
priorityClassName
ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.openshift-monitoring
๋ฐopenshift-user-workload-monitoring
๋ค์์คํ์ด์ค์ Prometheus Pod๋openshift-user-critical
priorityClassName
์ ์ฌ์ฉํฉ๋๋ค. ์ํฌ๋ก๋ ๋ชจ๋ํฐ๋ง์ ์ฒซ ๋ฒ์งธ์ฐ์ ์์
ํด๋์ค๋ก์์คํ ์ด
์ค์ํ๊ฒ ์ฌ์ฉํ์ง๋ง ๋ชจ๋ํฐ๋ง์์ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ๋ ธ๋๊ฐ ์ด๋ฅผ ์ ๊ฑฐํ ์ ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ํฐ๋ง ๋ฐฉ์ธ ์ฐ์ ์์๋ก ์ค์ผ์ค๋ฌ์ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ฌ ์ค์ํ ๋ ธ๋๊ฐ ์๋ํ ์ ์๋๋ก ์ํฌ๋ก๋๋ฅผ ๋ง์ด ์ด๋ํ๊ณ ์์ต๋๋ค. - cluster-logging - ์ด ์ฐ์ ์์๋ Fluentd์์ Fluentd Pod๊ฐ ๋ค๋ฅธ ์ฑ๋ณด๋ค ๋จผ์ ๋ ธ๋์ ์์ฝ๋๋๋ก ํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
2.9.1.2. Pod ์ฐ์ ์์ ์ด๋ฆ
์ฐ์ ์์ ํด๋์ค๊ฐ ํ ๊ฐ ์ด์ ์์ผ๋ฉด Pod
์ฌ์์์ ์ฐ์ ์์ ํด๋์ค ์ด๋ฆ์ ์ง์ ํ๋ Pod๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ฐ์ ์์ ์น์ธ ์ปจํธ๋กค๋ฌ๋ ์ฐ์ ์์ ํด๋์ค ์ด๋ฆ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ๊ฐ์ผ๋ก ๋ ์ฐ์ ์์๋ฅผ ์ฑ์๋๋ค. ์ด๋ฆ์ด ์ง์ ๋ ์ฐ์ ์์ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ Pod๊ฐ ๊ฑฐ๋ถ๋ฉ๋๋ค.
2.9.2. Pod ์ ์ ์ดํด
๊ฐ๋ฐ์๊ฐ Pod๋ฅผ ์์ฑํ๋ฉด Pod๊ฐ ํ๋ก ๋ค์ด๊ฐ๋๋ค. ๊ฐ๋ฐ์๊ฐ Pod์ Pod ์ฐ์ ์์ ๋๋ ์ ์ ์ ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๋ ํ์์ Pod๋ฅผ ์ ํํ๊ณ ํด๋น Pod๋ฅผ ๋ ธ๋์ ์์ฝํ๋ ค๊ณ ํฉ๋๋ค. ์ค์ผ์ค๋ฌ๊ฐ ๋ ธ๋์์ Pod์ ์ง์ ๋ ์๊ตฌ ์ฌํญ์ ๋ชจ๋ ์ถฉ์กฑํ๋ ์ ์ ํ ๊ณต๊ฐ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ ๋ณด๋ฅ ์ค์ธ Pod์ ๋ํ ์ ์ ๋ ผ๋ฆฌ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
์ค์ผ์ค๋ฌ๊ฐ ๋
ธ๋์์ Pod๋ฅผ ํ๋ ์ด์ ์ ์ ํ๋ฉด ์ฐ์ ์์๊ฐ ๋์ Pod
์ฌ์์ nominatedNodeName
ํ๋๊ฐ nodename
ํ๋์ ํจ๊ป ๋
ธ๋์ ์ด๋ฆ์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ nominatedNodeName
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ Pod์ฉ์ผ๋ก ์์ฝ๋ ๋ฆฌ์์ค๋ฅผ ๊ณ์ ์ถ์ ํ๊ณ ํด๋ฌ์คํฐ์ ์ ์ ์ ๋ํ ์ ๋ณด๋ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํฉ๋๋ค.
์ค์ผ์ค๋ฌ์์ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๋ฅผ ์ ์ ํ ํ์๋ Pod์ ์ ์ ์ข
๋ฃ ๊ธฐ๊ฐ์ ๋ฐ๋ฆ
๋๋ค. ์ค์ผ์ค๋ฌ์์ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๊ฐ ์ข
๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๋ ํด๋น ๋
ธ๋์์ ์ฐ์ ์์๊ฐ ๋ ๋์ Pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Pod
์ฌ์์ nominatedNodeName
ํ๋ ๋ฐ nodeName
ํ๋๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๋ํ ์ค์ผ์ค๋ฌ๊ฐ ๋
ธ๋์ Pod๋ฅผ ์ ์ ํ๊ณ ์ข
๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ํ์์ ๋ณด๋ฅ ์ค์ธ Pod๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ Pod๋ฅผ ์์ฝํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ค์ผ์ค๋ฌ๋ ์ฐ์ ์์๊ฐ ๋ ๋์ Pod๋ฅผ ๋์ ์์ฝํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๋ ๋ณด๋ฅ ์ค์ธ Pod์ nominatedNodeName
์ ์ง์ ํด๋น Pod๋ฅผ ๋ค๋ฅธ ๋
ธ๋์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
์ ์ ์ ์ํํด๋ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๊ฐ ๋ ธ๋์์ ๋ชจ๋ ์ ๊ฑฐ๋๋ ๊ฒ์ ์๋๋๋ค. ์ค์ผ์ค๋ฌ๋ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod์ ์ผ๋ถ๋ฅผ ์ ๊ฑฐํ์ฌ ๋ณด๋ฅ ์ค์ธ Pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค.
์ค์ผ์ค๋ฌ๋ ๋ ธ๋์์ ๋ณด๋ฅ ์ค์ธ Pod๋ฅผ ์์ฝํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ํด๋น ๋ ธ๋์์ Pod ์ ์ ์ ๊ณ ๋ คํฉ๋๋ค.
2.9.2.1. ๋น ์ ์ ์ฐ์ ์์ ํด๋์ค(๊ธฐ์ ํ๋ฆฌ๋ทฐ)
์ ์ ์ ์ฑ
์ด Never
๋ก ์ค์ ๋ Pod๋ ์์ฝ ํ์์ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๋ณด๋ค ์์ ๋ฐฐ์น๋์ง๋ง ๋ค๋ฅธ Pod๋ ์ ์ ํ ์ ์์ต๋๋ค. ์์ฝ ๋๊ธฐ ์ค์ธ ๋น ์ ์ Pod๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๊ฐ ์ถฉ๋ถํ๊ณ ํด๋น Pod๋ฅผ ์์ฝํ ์ ์์ ๋๊น์ง ์์ฝ ํ์ ๋จ์ ์์ต๋๋ค. ๋น ์ ์ Pod๋ ๋ค๋ฅธ Pod์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค์ผ์ค๋ฌ ๋ฐฑ์คํ์ ์ํฅ์ ๋ฐ์ต๋๋ค. ์ฆ ์ค์ผ์ค๋ฌ์์ ์ด๋ฌํ Pod๋ฅผ ์์ฝํ์ง ๋ชปํ๋ฉด ๋ ๋ฎ์ ๋น๋๋ก ๋ค์ ์์ฝ์ ์๋ํ์ฌ ์ฐ์ ์์๊ฐ ๋ ๋ฎ์ ๊ธฐํ Pod๋ฅผ ๋จผ์ ์์ฝํ ์ ์์ต๋๋ค.
๋น ์ ์ Pod๋ ์ฐ์ ์์๊ฐ ๋์ ๋ค๋ฅธ Pod์์ ๊ณ์ ์ ์ ํ ์ ์์ต๋๋ค.
2.9.2.2. Pod ์ ์ ๋ฐ ๊ธฐํ ์ค์ผ์ค๋ฌ ์ค์
Pod ์ฐ์ ์์ ๋ฐ ์ ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ค์ผ์ค๋ฌ ์ค์ ์ ๊ณ ๋ คํ์ญ์์ค.
- Pod ์ฐ์ ์์ ๋ฐ Pod ์ค๋จ ์์ฐ
- Pod ์ค๋จ ์์ฐ์ ๋์์ ์๋ํด์ผ ํ๋ ์ต์ ๋ณต์ ๋ณธ ์ ๋๋ ๋ฐฑ๋ถ์จ์ ์ง์ ํฉ๋๋ค. Pod ์ค๋จ ์์ฐ์ ์ง์ ํ๋ฉด Pod๋ฅผ ์ต์ ์ ๋ ธ๋ ฅ ์์ค์์ ์ ์ ํ ๋ OpenShift Container Platform์์ ํด๋น ์์ฐ์ ์ค์ํฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ Pod ์ค๋จ ์์ฐ์ ์๋ฐํ์ง ์๊ณ Pod๋ฅผ ์ ์ ํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฌํ Pod๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ Pod ์ค๋จ ์์ฐ ์๊ตฌ ์ฌํญ๊ณผ ๊ด๊ณ์์ด ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๋ฅผ ์ ์ ํ ์ ์์ต๋๋ค.
- Pod ์ฐ์ ์์ ๋ฐ Pod ์ ์ฌ์ฑ
- Pod ์ ์ฌ์ฑ์ ์ํด์๋ ๋์ผํ ๋ผ๋ฒจ์ด ์๋ ๋ค๋ฅธ Pod์ ๊ฐ์ ๋ ธ๋์์ ์ Pod๋ฅผ ์์ฝํด์ผ ํฉ๋๋ค.
๋ ธ๋์์ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ ์ด์์ Pod์ ๋ณด๋ฅ ์ค์ธ Pod์ Pod ๊ฐ ์ ์ฌ์ฑ์ด ์๋ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๋ ์ ํธ๋ ์๊ตฌ ์ฌํญ์ ์๋ฐํ์ง ์๊ณ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๋ฅผ ์ ์ ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๋ ๋ณด๋ฅ ์ค์ธ Pod๋ฅผ ์์ฝํ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์ฐพ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ผ์ค๋ฌ์์ ์ ์ ํ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์๋ค๋ ๋ณด์ฅ์ด ์๊ณ ๋ณด๋ฅ ์ค์ธ Pod๊ฐ ์์ฝ๋์ง ์์ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ํฉ์ ๋ฐฉ์งํ๋ ค๋ฉด ์ฐ์ ์์๊ฐ ๊ฐ์ Pod๋ฅผ ์ฌ์ฉํ์ฌ Pod ์ ์ฌ์ฑ์ ์ ์คํ๊ฒ ๊ตฌ์ฑํฉ๋๋ค.
2.9.2.3. ์ ์ ๋ Pod์ ์ ์ ์ข ๋ฃ
Pod๋ฅผ ์ ์ ํ ๋ ์ค์ผ์ค๋ฌ๋ Pod์ ์ ์ ์ข ๋ฃ ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ๋๊น์ง ๋๊ธฐํ์ฌ Pod๊ฐ ์๋์ ์๋ฃํ๊ณ ์ข ๋ฃํ ์ ์๋๋ก ํฉ๋๋ค. ๊ธฐ๊ฐ์ด ์ง๋ ํ์๋ Pod๊ฐ ์ข ๋ฃ๋์ง ์์ผ๋ฉด ์ค์ผ์ค๋ฌ์์ Pod๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์ด๋ฌํ ์ ์ ์ข ๋ฃ ๊ธฐ๊ฐ์ผ๋ก ์ธํด ์ค์ผ์ค๋ฌ์์ Pod๋ฅผ ์ ์ ํ๋ ์์ ๊ณผ ๋ ธ๋์์ ๋ณด๋ฅ ์ค์ธ Pod๋ฅผ ์์ฝํ ์ ์๋ ์๊ฐ ์ฌ์ด์ ์์ฐจ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ๊ฐ๊ฒฉ์ ์ต์ํํ๋ ค๋ฉด ์ฐ์ ์์๊ฐ ๋ฎ์ Pod์ ์ ์ ์ข ๋ฃ ๊ธฐ๊ฐ์ ์งง๊ฒ ๊ตฌ์ฑํ์ญ์์ค.
2.9.3. ์ฐ์ ์์ ๋ฐ ์ ์ ๊ตฌ์ฑ
Pod ์ฌ์์ priorityClassName
์ ์ฌ์ฉํ์ฌ ์ฐ์ ์์ ํด๋์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ Pod๋ฅผ ์ฐ์ ์์์ ์ฐ๊ฒฐํ์ฌ ์ฐ์ ์์ ๋ฐ ์ ์ ์ ์ ์ฉํฉ๋๋ค.
์์ฝ๋ ๊ธฐ์กด Pod์ ์ฐ์ ์์ ํด๋์ค๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
์ฐ์ ์์ ๋ฐ ์ ์ ์ ์ฌ์ฉํ๋๋ก ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
์ฐ์ ์์ ํด๋์ค๋ฅผ ํ ๊ฐ ์ด์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority 1 value: 1000000 2 preemptionPolicy: PreemptLowerPriority 3 globalDefault: false 4 description: "This priority class should be used for XYZ service pods only." 5
- 1
- ์ฐ์ ์์ ํด๋์ค ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ๋๋ค.
- 2
- ์ค๋ธ์ ํธ์ ์ฐ์ ์์ ๊ฐ์ ๋๋ค.
- 3
- ์ ํ ์ฌํญ์ ๋๋ค. ์ด ์ฐ์ ์์ ํด๋์ค๊ฐ ์ ์ ์ธ์ง ๋๋ ์ ์ ๋์ง ์๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. ์ ์ ์ ์ฑ ์ ๊ธฐ๋ณธ๊ฐ์
PreemptLowerPriority
๋ก, ํด๋น ์ฐ์ ์์ ํด๋์ค์ Pod์์ ์ฐ์ ์์๊ฐ ๋ฎ์ Pod๋ฅผ ์ ์ ํ ์ ์์ต๋๋ค. ์ ์ ์ ์ฑ ์ดNever
๋ก ์ค์ ๋ ๊ฒฝ์ฐ ํด๋น ์ฐ์ ์์ ํด๋์ค์ Pod๋ ์ ์ ํ์ง ์์ต๋๋ค. - 4
- ์ ํ ์ฌํญ์ ๋๋ค. ์ฐ์ ์์ ํด๋์ค ์ด๋ฆ์ด ์ง์ ๋์ง ์์ Pod์ ์ด ์ฐ์ ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ํ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก
false
์ ๋๋ค.globalDefault
๊ฐtrue
๋ก ์ค์ ๋ ํ๋์ ์ฐ์ ์์ ํด๋์ค๋ง ํด๋ฌ์คํฐ์ ์กด์ฌํ ์ ์์ต๋๋ค.globalDefault:true
๊ฐ ์ค์ ๋ ์ฐ์ ์์ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์ฐ์ ์์ ํด๋์ค ์ด๋ฆ์ด ์๋ Pod์ ์ฐ์ ์์๋ 0์ ๋๋ค.globalDefault:true
๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ ์์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ฐ์ ์์ ํด๋์ค๋ฅผ ์ถ๊ฐํ ํ ์์ฑ๋ Pod์๋ง ์ํฅ์ ๋ฏธ์น๊ณ ๊ธฐ์กด Pod์ ์ฐ์ ์์๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. - 5
- ์ ํ ์ฌํญ์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ด ์ฐ์ ์์ ํด๋์ค์ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ Pod๋ฅผ ์ค๋ช ํฉ๋๋ค. ์์์ ํ ์คํธ ๋ฌธ์์ด์ ์ ๋ ฅํฉ๋๋ค.
์ฐ์ ์์ ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
์ฐ์ ์์ ํด๋์ค์ ์ด๋ฆ์ ํฌํจํ Pod ์ฌ์์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent priorityClassName: high-priority 1
- 1
- ์ด Pod์ ์ฌ์ฉํ ์ฐ์ ์์ ํด๋์ค๋ฅผ ์ง์ ํฉ๋๋ค.
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
Pod ๊ตฌ์ฑ ๋๋ Pod ํ ํ๋ฆฟ์ ์ฐ์ ์์ ์ด๋ฆ์ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
2.10. ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ ธ๋์ Pod ๋ฐฐ์น
๋ ธ๋ ์ ํ๊ธฐ๋ ํค-๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋ ๋งต์ ์ง์ ํฉ๋๋ค. ๊ท์น์ ๋ ธ๋์ ์ฌ์ฉ์ ์ ์ ๋ผ๋ฒจ๊ณผ Pod์ ์ง์ ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํฉ๋๋ค.
Pod๋ฅผ ๋ ธ๋์์ ์คํํ๋ ค๋ฉด Pod์ ๋ ธ๋์ ๋ผ๋ฒจ๋ก ํ์๋ ํค-๊ฐ ์์ด ์์ด์ผ ํฉ๋๋ค.
๋์ผํ Pod ๊ตฌ์ฑ์์ ๋ ธ๋ ์ ์ฌ์ฑ ๋ฐ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋์ ์ค์ ๊ณ ๋ ค ์ฌํญ์ ์ฐธ์กฐํ์ญ์์ค.
2.10.1. ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น ์ ์ด
Pod์ ๋ ธ๋ ์ ํ๊ธฐ์ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod๊ฐ ์์ฝ๋๋ ์์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด OpenShift Container Platform์์ ์ผ์นํ๋ ๋ผ๋ฒจ์ด ํฌํจ๋ ๋ ธ๋์ Pod๋ฅผ ์์ฝํฉ๋๋ค.
๋ ธ๋, ๋จธ์ ์ธํธ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค. ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ฉด ๋ ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋๋ ๊ฒฝ์ฐ ์ ๋ ธ๋์ ๋ผ๋ฒจ์ด ์ง์ ๋ฉ๋๋ค. ๋ ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋ ๊ฒฝ์ฐ ๋ ธ๋ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ์ถ๊ฐ๋ ๋ผ๋ฒจ์ด ์ ์ง๋์ง ์์ต๋๋ค.
๊ธฐ์กด Pod์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ReplicaSet
์ค๋ธ์ ํธ, DaemonSet
์ค๋ธ์ ํธ, StatefulSet
์ค๋ธ์ ํธ, Deployment
์ค๋ธ์ ํธ ๋๋ DeploymentConfig
์ค๋ธ์ ํธ์ ๊ฐ์ด ํด๋น Pod์ ์ ์ด ์ค๋ธ์ ํธ์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด ์ ์ด ์ค๋ธ์ ํธ ์๋์ ๊ธฐ์กด Pod๋ ๋ผ๋ฒจ์ด ์ผ์นํ๋ ๋
ธ๋์์ ์ฌ์์ฑ๋ฉ๋๋ค. ์ Pod๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ Pod ์ฌ์์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค. Pod์ ์ ์ด ์ค๋ธ์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์ญ์ ํ๊ณ Pod ์ฌ์์ ํธ์งํ๊ณ Pod๋ฅผ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค.
์์ฝ๋ ๊ธฐ์กด Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๊ธฐ์กด Pod์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํด๋น Pod์ ์ ์ด ์ค๋ธ์ ํธ๋ฅผ ๊ฒฐ์ ํ์ญ์์ค. ์๋ฅผ ๋ค์ด router-default-66d5cf9464-m2g75
Pod๋ router-default-66d5cf9464
๋ณต์ ๋ณธ ์ธํธ์์ ์ ์ดํฉ๋๋ค.
$ oc describe pod router-default-66d5cf9464-7pwkc
์ถ๋ ฅ ์
kind: Pod apiVersion: v1 metadata: #... Name: router-default-66d5cf9464-7pwkc Namespace: openshift-ingress # ... Controlled By: ReplicaSet/router-default-66d5cf9464 # ...
์น ์ฝ์์์ Pod YAML์ ownerReferences
์๋์ ์ ์ด ์ค๋ธ์ ํธ๊ฐ ๋์ด๋ฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: router-default-66d5cf9464-7pwkc # ... ownerReferences: - apiVersion: apps/v1 kind: ReplicaSet name: router-default-66d5cf9464 uid: d81dd094-da26-11e9-a48a-128e7edf0312 controller: true blockOwnerDeletion: true # ...
ํ๋ก์ธ์ค
๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ ธ๋๋ฅผ ์ง์ ํธ์งํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
๋ ธ๋๋ฅผ ์์ฑํ ๋ ๋จธ์ ์ธํธ์์ ๊ด๋ฆฌํ๋ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ค๋ฉด
MachineSet
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
MachineSet
์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.$ oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-api
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc patch MachineSet abc612-msrtw-worker-us-east-1c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: xf2bd-infra-us-east-2a namespace: openshift-machine-api spec: template: spec: metadata: labels: region: "east" type: "user-node" #...
oc edit
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ผ๋ฒจ์ดMachineSet
์ค๋ธ์ ํธ์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit MachineSet abc612-msrtw-worker-us-east-1c -n openshift-machine-api
MachineSet
์ค๋ธ์ ํธ์ ์apiVersion: machine.openshift.io/v1beta1 kind: MachineSet # ... spec: # ... template: metadata: # ... spec: metadata: labels: region: east type: user-node # ...
๋ผ๋ฒจ์ ๋ ธ๋์ ์ง์ ์ถ๊ฐํฉ๋๋ค.
๋ ธ๋์
Node
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc label nodes <name> <key>=<value>
์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc label nodes ip-10-0-142-25.ec2.internal type=user-node region=east
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: hello-node-6fbccf8d9 labels: type: "user-node" region: "east" #...
๋ผ๋ฒจ์ด ๋ ธ๋์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get nodes -l type=user-node,region=east
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION ip-10-0-142-25.ec2.internal Ready worker 17m v1.23.0
Pod์ ์ผ์นํ๋ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๊ธฐ์กด ๋ฐ ํฅํ Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด Pod์ ์ ์ด ์ค๋ธ์ ํธ์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ผ๋ฒจ์ด ์๋
ReplicaSet
์ค๋ธ์ ํธ์ ์kind: ReplicaSet apiVersion: apps/v1 metadata: name: hello-node-6fbccf8d9 # ... spec: # ... template: metadata: creationTimestamp: null labels: ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default pod-template-hash: 66d5cf9464 spec: nodeSelector: kubernetes.io/os: linux node-role.kubernetes.io/worker: '' type: user-node 1 #...
- 1
- ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
ํน์ ์ Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ ํ๊ธฐ๋ฅผ
Pod
์ค๋ธ์ ํธ์ ์ง์ ์ถ๊ฐํฉ๋๋ค.๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์๋
Pod
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Pod metadata: name: hello-node-6fbccf8d9 #... spec: nodeSelector: region: east type: user-node #...
์ฐธ๊ณ์์ฝ๋ ๊ธฐ์กด Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
3์ฅ. Custom Metrics Autoscaler Operator๋ฅผ ์ฌ์ฉํ์ฌ Pod ์๋ ์ค์ผ์ผ๋ง
3.1. ์ฌ์ฉ์ ์ ์ Metrics Autoscaler Operator ๊ฐ์
๊ฐ๋ฐ์๋ Red Hat OpenShift์ Custom Metrics Autoscaler Operator๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Container Platform์์ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๋ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐํฌ, ์ํ ์ ์ฅ ์ธํธ, ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ๋๋ ์์ ์ Pod ์๋ฅผ ์๋์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์ด๋ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์์ต๋๋ค.
Custom Metrics Autoscaler Operator๋ ์ฟ ๋ฒ๋คํฐ์ค ์ด๋ฒคํธ ๊ธฐ๋ฐ ์๋ ์ค์ผ์ผ๋ฌ(KEDA)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ํ์ Operator๋ก, Pod ๋ฉํธ๋ฆญ ์ด์ธ์ ์ถ๊ฐ ๋ฉํธ๋ฆญ ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ํฌ๋ก๋๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ํ์ฌ Prometheus, CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฐ Apache Kafka ๋ฉํธ๋ฆญ๋ง ์ง์ํฉ๋๋ค.
Custom Metrics Autoscaler Operator๋ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ ์ ์ธ๋ถ ์งํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ํ์ฅ ๋ฐ ์ถ์ํฉ๋๋ค. ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ค๋ฅธ ํ์ฅ ๋ฐฉ๋ฒ์ ๊ณ์ ์ฌ์ฉํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์ค์ผ์ผ๋งํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ด๋ฒคํธ ๋ฐ ๋ฉํธ๋ฆญ์ ์์ค์ธ scalers๋ผ๊ณ ๋ ํ๋ ํธ๋ฆฌ๊ฑฐ ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ๋ฉํธ๋ฆญ API๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ๋ฉํธ๋ฆญ์ OpenShift Container Platform์์ ์ฌ์ฉํ ์ ์๋ ์์์ผ๋ก ๋ณํํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ์ค์ ์ค์ผ์ผ๋ง์ ์ํํ๋ HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ์์ฑํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ค์ผ์ผ๋ง ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค(CR)์ธ ScaledObject
๋๋ ScaledJob
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค. ํ์ฅํ ๋ฐฐํฌ ๋๋ ์์
, ์ค์ผ์ผ๋งํ ์งํ์ ์์ค(trigger) ๋ฐ ํ์ฉ๋ ์ต์ ๋ฐ ์ต๋ ๋ณต์ ๋ณธ ์์ ๊ฐ์ ๊ธฐํ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
์ค์ผ์ผ๋งํ ๊ฐ ์ํฌ๋ก๋์ ๋ํด ํ์ฅ๋ ์ค๋ธ์ ํธ ๋๋ ์ค์ผ์ผ๋ง๋ ์์ ์ ํ๋๋ง ์์ฑํ ์ ์์ต๋๋ค. ๋ํ ๋์ผํ ์ํฌ๋ก๋์์ ํ์ฅ๋ ์ค๋ธ์ ํธ ๋๋ ์ค์ผ์ผ๋ง๋ ์์ ๋ฐ HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
HPA์ ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ 0์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ CR์์ minReplicaCount
๊ฐ์ 0
์ผ๋ก ์ค์ ํ๋ฉด ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ์ํฌ๋ก๋๋ฅผ ๋ณต์ ๋ณธ์ด 0๊ฐ์์ ๋ณต์ ๋ณธ ์๋ก ๋๋ ์ต๋ 0๊ฐ์ ๋ณต์ ๋ณธ์ผ๋ก ์ถ์ํฉ๋๋ค. ์ด๋ฅผ ํ์ฑํ ๋จ๊ณ๋ผ๊ณ ํฉ๋๋ค. ์ต๋ 1๊ฐ์ ๋ณต์ ๋ณธ์ผ๋ก ํ์ฅํ ํ HPA๋ ์ค์ผ์ผ๋ง์ ์ ์ดํฉ๋๋ค. ์ด๋ฅผ ์ค์ผ์ผ๋ง ๋จ๊ณ๋ผ๊ณ ํฉ๋๋ค.
์ผ๋ถ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ ์งํ ์๋ ์ค์ผ์ผ๋ฌ์์ ์ค์ผ์ผ๋งํ๋ ๋ณต์ ๋ณธ ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒฝ์ฐ, ํ์ฑํ ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ๋งค๊ฐ ๋ณ์๋ ํญ์ ํ์ฑํ ์ ๋์ฌ๊ฐ ์ง์ ๋ ๋์ผํ ๋ฌธ๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด threshold
๋งค๊ฐ๋ณ์๊ฐ ์ค์ผ์ผ๋ง์ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ activationThreshold
๊ฐ ํ์ฑํ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ํ์ฑํ ๋ฐ ํ์ฅ ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ๋ฉด ํ์ฅ ์ ์ฑ
์ ๋ฐ๋ผ ์ ์ฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฉํธ๋ฆญ์ด ํนํ ๋ฎ์ ๊ฒฝ์ฐ ํ์ฅ ๋๋ ์ถ์๋์ง ์๋๋ก ๋ ๋์ ํ์ฑํ ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
ํ์ฑํ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฒฐ์ ์ ๋ฐ๋ผ ์ค์ผ์ผ๋ง ๊ฐ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๊ณ๊ฐ
์ด 10
์ผ๋ก ์ค์ ๋๊ณ ํ์ฑํThreshold
๊ฐ 50
๊ฐ์ด๋ฉด ๋ฉํธ๋ฆญ์์ 40
๊ฐ๋ฅผ ๋ณด๊ณ ํ๋ฉด scaler๊ฐ ํ์ฑ ์ํ๊ฐ ์๋๋ฉฐ HPA์ 4๊ฐ์ ์ธ์คํด์ค๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ Pod๊ฐ 0์ผ๋ก ํ์ฅ๋ฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์ Pod ์๋ฅผ ๊ฒํ ํ๊ฑฐ๋ Custom Metrics Autoscaler Operator ๋ก๊ทธ์์ ๋ค์๊ณผ ์ ์ฌํ ๋ฉ์์ง๊ฐ ์๋์ง ํ์ธํ์ฌ ์๋ ์ค์ผ์ผ๋ง์ด ์ํ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
Successfully set ScaleTarget replica count
Successfully updated ScaleTarget
ํ์ํ ๊ฒฝ์ฐ ์ํฌ๋ก๋ ์ค๋ธ์ ํธ์ ์๋ ์ค์ผ์ผ๋ง์ ์ผ์์ ์ผ๋ก ์ผ์ ์ ์งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํด๋ฌ์คํฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ ์ ์๋ ์ค์ผ์ผ๋ง์ ์ผ์ ์ค์งํ ์ ์์ต๋๋ค.
3.2. ์ฌ์ฉ์ ์ ์ Metrics Autoscaler Operator ๋ฆด๋ฆฌ์ค ์ ๋ณด
Custom Metrics Autoscaler Operator for Red Hat OpenShift์ ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๊ฐ์ ์ฌํญ, ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ๋ฅ ๋ฐ ์๋ ค์ง ๋ฌธ์ ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
Custom Metrics Autoscaler Operator๋ Kubernetes ๊ธฐ๋ฐ Event driven Autoscaler(KEDA)๋ฅผ ์ฌ์ฉํ๋ฉฐ OpenShift Container Platform HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ) ์๋จ์ ๋น๋๋ฉ๋๋ค.
Custom Metrics Autoscaler Operator for Red Hat OpenShift๋ ํต์ฌ OpenShift Container Platform๊ณผ ๋ณ๋์ ๋ฆด๋ฆฌ์ค ์ฌ์ดํด๋ก ์ค์น ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๋ก ์ ๊ณต๋ฉ๋๋ค. Red Hat OpenShift Container Platform ๋ผ์ดํ ์ฌ์ดํด ์ ์ฑ ์ ๋ฆด๋ฆฌ์ค ํธํ์ฑ์ ๋ํด ๊ฐ๋จํ ์ค๋ช ํฉ๋๋ค.
3.2.1. ์ง์๋๋ ๋ฒ์
๋ค์ ํ๋ ๊ฐ OpenShift Container Platform ๋ฒ์ ์ ๋ํ Custom Metrics Autoscaler Operator ๋ฒ์ ์ ์ ์ํฉ๋๋ค.
๋ฒ์ | OpenShift Container Platform ๋ฒ์ | ์ ์ ์ถ์์ผ (GA) |
---|---|---|
2.10.1-267 | 4.13 | ์ ์ ์ถ์์ผ (GA) |
2.10.1-267 | 4.12 | ์ ์ ์ถ์์ผ (GA) |
2.10.1-267 | 4.11 | ์ ์ ์ถ์์ผ (GA) |
2.10.1-267 | 4.10 | ์ ์ ์ถ์์ผ (GA) |
3.2.2. ์ฌ์ฉ์ ์ ์ ์งํ Autoscaler Operator 2.10.1-267 ๋ฆด๋ฆฌ์ค ๋ ธํธ
์ด๋ฒ Custom Metrics Autoscaler Operator 2.10.1-267 ๋ฆด๋ฆฌ์ค๋ OpenShift Container Platform ํด๋ฌ์คํฐ์์ Operator๋ฅผ ์คํํ๊ธฐ ์ํ ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๋ฒ๊ทธ ์์ ์ ์ ๊ณตํฉ๋๋ค. Custom Metrics Autoscaler Operator 2.10.1-267์ ๊ตฌ์ฑ ์์๋ RHBA-2023:4089 ์์ ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค.
์ด ๋ฒ์ ์ Custom Metrics Autoscaler Operator๋ฅผ ์ค์นํ๊ธฐ ์ ์ ์ด์ ์ ์ค์นํ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๋ฒ์ ๋๋ ์ปค๋ฎค๋ํฐ ์ง์ KEDA ๋ฒ์ ์ ์ ๊ฑฐํฉ๋๋ค.
3.2.2.1. ๋ฒ๊ทธ ์์
-
์ด์ ์๋
custom-metrics-autoscaler
๋ฐcustom-metrics-autoscaler-adapter
์ด๋ฏธ์ง์ ์๊ฐ๋ ์ ๋ณด๊ฐ ํฌํจ๋์ง ์์์ต๋๋ค. ์ด๋ก ์ธํด ์ปจํธ๋กค๋ฌ๊ฐ ์๊ฐ๋ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ cron ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ ๊ฐ์ฒด๊ฐ ์๋ํ์ง ์์์ต๋๋ค. ์ด๋ฒ ์์ ์ผ๋ก ์ด๋ฏธ์ง ๋น๋์ ์๊ฐ๋ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก cron ํธ๋ฆฌ๊ฑฐ๋ฅผ ํฌํจํ๋ ํ์ฅ ์ค๋ธ์ ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค. (OCPBUGS-15264) -
์ด์ ์๋ Custom Metrics Autoscaler Operator์์ ๋ค๋ฅธ ๋ค์์คํ์ด์ค ๋ฐ ํด๋ฌ์คํฐ ๋ฒ์ ์ค๋ธ์ ํธ์ ์ค๋ธ์ ํธ๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ๊ด๋ฆฌ ์ค๋ธ์ ํธ์ ์์ ๊ถ์ ์๋ํ์ต๋๋ค. ์ด๋ก ์ธํด Custom Metrics Autoscaler Operator์์ API ์๋ฒ๊ฐ ๋๋ ๋ฐ ํ์ํ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ฝ๊ธฐ ์ํด ์ญํ ๋ฐ์ธ๋ฉ์ ์์ฑํ ์ ์์์ต๋๋ค. ์ด๋ก ์ธํด
kube-system
๋ค์ ์คํ์ด์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ฒ ์์ ์ ํตํด Custom Metrics Autoscaler Operator๋ownerReference
ํ๋๋ฅผ ๋ค๋ฅธ ๋ค์์คํ์ด์ค ๋๋ ํด๋ฌ์คํฐ ๋ฒ์ ์ค๋ธ์ ํธ์ ์ค๋ธ์ ํธ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฑด๋๋๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์ ์ค๋ฅ ์์ด ์ญํ ๋ฐ์ธ๋ฉ์ด ์์ฑ๋ฉ๋๋ค. (OCPBUGS-15038) -
์ด์ ์๋ Custom Metrics Autoscaler Operator์์
ownerReferences
ํ๋๋ฅผopenshift-keda
๋ค์์คํ์ด์ค์ ์ถ๊ฐํ์ต๋๋ค. ์ด๋ก ์ธํด ๊ธฐ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ง๋ง ์ด ํ๋๊ฐ ์์ผ๋ฉด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์์๊ฒ ํผ๋์ด ๋ฐ์ํ ์ ์์์ต๋๋ค. ์ด๋ฒ ์์ ์ผ๋ก Custom Metrics Autoscaler Operator๋ownerReference
ํ๋๋ฅผopenshift-keda
๋ค์์คํ์ด์ค์ ์ถ๊ฐํ์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋กopenshift-keda
๋ค์์คํ์ด์ค์ ๋ ์ด์ ๋ถํ์ํownerReference
ํ๋๊ฐ ์์ต๋๋ค. (OCPBUGS-15293) -
์ด์ ๋ฒ์ ์์๋ Pod ID ์ด์ธ์ ์ธ์ฆ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ์ฑ๋ Prometheus ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ ํ
podIdentity
๋งค๊ฐ๋ณ์๊ฐnone
์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์ผ์ผ๋งํ์ง ๋ชปํ์ต๋๋ค. ์ด๋ฒ ์์ ์ผ๋ก OpenShift์ Custom Metrics Autoscaler์์ ์ด์ none
Pod ID ๊ณต๊ธ์ ์ ํ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Prometheus ํธ๋ฆฌ๊ฑฐ๋ Pod ID ์ด์ธ์ ์ธ์ฆ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ์ฑ๋๊ณpodIdentity
๋งค๊ฐ๋ณ์ sset์none
์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ผ์ผ๋งํฉ๋๋ค. (OCPBUGS-15274)
3.2.3. ์ฌ์ฉ์ ์ ์ Metrics Autoscaler Operator 2.10.1 ๋ฆด๋ฆฌ์ค ๋ ธํธ
์ด๋ฒ Custom Metrics Autoscaler Operator 2.10.1 ๋ฆด๋ฆฌ์ค๋ OpenShift Container Platform ํด๋ฌ์คํฐ์์ Operator๋ฅผ ์คํํ๊ธฐ ์ํ ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๋ฒ๊ทธ ์์ ์ ์ ๊ณตํฉ๋๋ค. Custom Metrics Autoscaler Operator 2.10.1์ ๊ตฌ์ฑ ์์๋ RHEA-2023:3199 ์์ ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค.
์ด ๋ฒ์ ์ Custom Metrics Autoscaler Operator๋ฅผ ์ค์นํ๊ธฐ ์ ์ ์ด์ ์ ์ค์นํ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๋ฒ์ ๋๋ ์ปค๋ฎค๋ํฐ ์ง์ KEDA ๋ฒ์ ์ ์ ๊ฑฐํฉ๋๋ค.
3.2.3.1. ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๊ฐ์ ์ฌํญ
3.2.3.1.1. ์ฌ์ฉ์ ์ ์ ์งํ Autoscaler Operator ์ผ๋ฐ ๊ฐ์ฉ์ฑ
Custom Metrics Autoscaler Operator๋ ์ด์ ์ผ๋ฐ์ ์ผ๋ก Custom Metrics Autoscaler Operator ๋ฒ์ 2.10.1์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ฅ๋ ์์ ์ ์ฌ์ฉํ์ฌ ์ค์ผ์ผ๋งํ๋ ๊ฒ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ ์ฉ์ ๋๋ค. ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ Red Hat ํ๋ก๋์ ์๋น์ค ์์ค ๊ณ์ฝ(SLA)์์ ์ง์๋์ง ์์ผ๋ฉฐ ๊ธฐ๋ฅ์ ์ผ๋ก ์์ ํ์ง ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํฅํ ์ ํ ๊ธฐ๋ฅ์ ์กฐ๊ธฐ์ ์ด์ฉํ ์ ์์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ณ ๊ฐ์ด ๊ธฐ๋ฅ์ ํ ์คํธํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Red Hat ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ์ง์ ๋ฒ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ง์ ๋ฒ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
3.2.3.1.2. ์ฑ๋ฅ ์งํ
์ด์ PromQL(Prometheus Query Language)์ ์ฌ์ฉํ์ฌ Custom Metrics Autoscaler Operator์์ ์งํ๋ฅผ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
3.2.3.1.3. ํ์ฅ๋ ์ค๋ธ์ ํธ์ ๋ํ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ง ์ผ์ ์ค์ง
์ด์ ํ์์ ๋ฐ๋ผ ํ์ฅ ์ค๋ธ์ ํธ์ ์๋ ์ค์ผ์ผ๋ง์ ์ผ์ ์ค์งํ๊ณ ์ค๋น๊ฐ ๋๋ฉด ์๋ ์ค์ผ์ผ๋ง์ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
3.2.3.1.4. ํ์ฅ ์ค๋ธ์ ํธ์ ๋ณต์ ๋ณธ ๋์ฒด
์ด์ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ๊ฐ ์์ค์์ ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ค์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋ค์ ๋์ฒดํ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
3.2.3.1.5. ํ์ฅ๋ ์ค๋ธ์ ํธ์ ๋ํด ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ HPA ์ด๋ฆ ์ง์
ํ์ฅ๋ ์ค๋ธ์ ํธ์์ ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ์ ์ฌ์ฉ์ ์ ์ ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค.
3.2.3.1.6. ํ์ฑํ ๋ฐ ์ค์ผ์ผ๋ง ์๊ณ๊ฐ
HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ ๋ณต์ ๋ณธ 0๊ฐ๋ก ์ค์ผ์ผ๋งํ ์ ์์ผ๋ฏ๋ก Custom Metrics Autoscaler Operator๋ ํด๋น ์ค์ผ์ผ๋ง์ ์ํํ์ฌ HPA์์ ์ค์ผ์ผ๋ง์ ์ํํฉ๋๋ค. ์ด์ HPA์์ ๋ณต์ ๋ณธ ์์ ๋ฐ๋ผ ์๋ ์ค์ผ์ผ๋ง์ ์ธ์ํ๋ ์๊ธฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ฅ ์ ์ฑ ์ ํตํด ์ ์ฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
3.2.4. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ Operator 2.8.2-174 ๋ฆด๋ฆฌ์ค ๋ ธํธ
์ด๋ฒ Custom Metrics Autoscaler Operator 2.8.2-174 ๋ฆด๋ฆฌ์ค๋ OpenShift Container Platform ํด๋ฌ์คํฐ์์ Operator๋ฅผ ์คํํ๊ธฐ ์ํ ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๋ฒ๊ทธ ์์ ์ ์ ๊ณตํฉ๋๋ค. Custom Metrics Autoscaler Operator 2.8.2-174์ ๊ตฌ์ฑ ์์๋ RHEA-2023:1683 ์์ ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค.
Custom Metrics Autoscaler Operator ๋ฒ์ 2.8.2-174๋ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ๋๋ค.
3.2.4.1. ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๊ฐ์ ์ฌํญ
3.2.4.1.1. Operator ์ ๊ทธ๋ ์ด๋ ์ง์
์ด์ ์ด์ ๋ฒ์ ์ Custom Metrics Autoscaler Operator์์ ์ ๊ทธ๋ ์ด๋ํ ์ ์์ต๋๋ค. Operator ์ ๊ทธ๋ ์ด๋์ ๋ํ ์์ธํ ๋ด์ฉ์ "ECDHE ๋ฆฌ์์ค"์ "Operator ์ ๋ฐ์ดํธ ์ฑ๋ ๋ณ๊ฒฝ"์ ์ฐธ์กฐํ์ญ์์ค.
3.2.4.1.2. must-gather ์ง์
OpenShift Container Platform must-gather
ํด์ ์ฌ์ฉํ์ฌ Custom Metrics Autoscaler Operator ๋ฐ ํด๋น ๊ตฌ์ฑ ์์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์์ต๋๋ค. ํ์ฌ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ์ ํจ๊ป must-gather
ํด์ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ Operator์ ๋ค๋ฆ
๋๋ค. ์์ธํ ๋ด์ฉ์ "ECDHE ๋ฆฌ์์ค"์ ๋๋ฒ๊น
๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
3.2.5. ์ฌ์ฉ์ ์ ์ Metrics Autoscaler Operator 2.8.2 ๋ฆด๋ฆฌ์ค ์ ๋ณด
์ด๋ฒ Custom Metrics Autoscaler Operator 2.8.2 ๋ฆด๋ฆฌ์ค๋ OpenShift Container Platform ํด๋ฌ์คํฐ์์ Operator๋ฅผ ์คํํ๊ธฐ ์ํ ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๋ฒ๊ทธ ์์ ์ ์ ๊ณตํฉ๋๋ค. Custom Metrics Autoscaler Operator 2.8.2์ ๊ตฌ์ฑ ์์๋ RHSA-2023:1042 ์์ ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค.
Custom Metrics Autoscaler Operator ๋ฒ์ 2.8.2๋ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ๋๋ค.
3.2.5.1. ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๊ฐ์ ์ฌํญ
3.2.5.1.1. ๊ฐ์ฌ ๋ก๊น
Custom Metrics Autoscaler Operator ๋ฐ ๊ด๋ จ ๊ตฌ์ฑ ์์์ ๋ํ ๊ฐ์ฌ ๋ก๊ทธ๋ฅผ ์์งํ๊ณ ๋ณผ ์ ์์ต๋๋ค. ๊ฐ์ฌ ๋ก๊ทธ๋ ์์คํ ์ ๊ฐ๋ณ ์ฌ์ฉ์, ๊ด๋ฆฌ์ ๋๋ ๊ธฐํ ๊ตฌ์ฑ ์์๊ฐ ์์คํ ์ ์ํฅ์ ์ค ํ๋ ์์๋ฅผ ๋ฌธ์ํํ๋ ๋ณด์ ๊ด๋ จ ๋ ์ฝ๋ ์ธํธ์ ๋๋ค.
3.2.5.1.2. Apache Kafka ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ํ์ฅ
์ด์ KEDA Apache kafka ํธ๋ฆฌ๊ฑฐ/scaler๋ฅผ ์ฌ์ฉํ์ฌ Apache Kafka ์ฃผ์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐํฌ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
3.2.5.1.3. CPU ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ค์ผ์ผ๋ง
์ด์ KEDA CPU ํธ๋ฆฌ๊ฑฐ/scaler๋ฅผ ์ฌ์ฉํ์ฌ CPU ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐฐํฌ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
3.2.5.1.4. ๋ฉ๋ชจ๋ฆฌ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ค์ผ์ผ๋ง
์ด์ KEDA ๋ฉ๋ชจ๋ฆฌ ํธ๋ฆฌ๊ฑฐ/scaler๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ฉํธ๋ฆญ์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
3.3. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ์ค์น
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Custom Metrics Autoscaler Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ค์น ์ ๋ค์ 5๊ฐ์ CRD๊ฐ ์์ฑ๋ฉ๋๋ค.
-
ClusterTriggerAuthentication
-
KedaController
-
scaledJob
-
ScaledObject
-
TriggerAuthentication
3.3.1. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ์ค์น
๋ค์ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ Custom Metrics Autoscaler Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Cluster Metrics Autoscaler Operator์ ์ด์ ์ ์ค์นํ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๋ฒ์ ์ ์ ๊ฑฐํฉ๋๋ค.
์ปค๋ฎค๋ํฐ ๊ธฐ๋ฐ KEDA ๋ฒ์ ์ ์ ๊ฑฐํฉ๋๋ค.
๋ํ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ KEDA 1.x ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค ์ ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
$ oc delete crd scaledobjects.keda.k8s.io
$ oc delete crd triggerauthentications.keda.k8s.io
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์์ Operator โ OperatorHub๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅํ Operator ๋ชฉ๋ก์์ Custom Metrics Autoscaler ๋ฅผ ์ ํํ ๋ค์ ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Operator ์ค์น ํ์ด์ง์์ ์ค์น ๋ชจ๋์ ๋ํด ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ค์์คํ์ด์ค(๊ธฐ๋ณธ๊ฐ) ์ต์ ์ด ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ๋ค์์คํ์ด์ค์ Operator๊ฐ ์ค์น๋ฉ๋๋ค.
- ์ค์น๋ ๋ค์์คํ์ด์ค์ ๋ํด openshift-keda ๋ค์์คํ์ด์ค๊ฐ ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. OpenShift Container Platform์ ํด๋ฌ์คํฐ์ ์๋ ๊ฒฝ์ฐ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
Custom Metrics Autoscaler Operator ๊ตฌ์ฑ ์์๋ฅผ ๋์ดํ์ฌ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
- ์ํฌ๋ก๋ โ Pod๋ก ์ด๋ํฉ๋๋ค.
-
๋๋กญ๋ค์ด ๋ฉ๋ด์์
openshift-keda
ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณcustom-metrics-autoscaler-operator-*
Pod๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค. -
์ํฌ๋ก๋ โ ๋ฐฐํฌ ๋ก ์ด๋ํ์ฌ
custom-metrics-autoscaler-operator
๋ฐฐํฌ๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
์ ํ ์ฌํญ: ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ OpenShift CLI์์ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get all -n openshift-keda
์ถ๋ ฅ์ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE pod/custom-metrics-autoscaler-operator-5fd8d9ffd8-xt4xp 1/1 Running 0 18m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/custom-metrics-autoscaler-operator 1/1 1 1 18m NAME DESIRED CURRENT READY AGE replicaset.apps/custom-metrics-autoscaler-operator-5fd8d9ffd8 1 1 1 18m
ํ์ํ CRD๋ฅผ ์์ฑํ๋ECDHEda
Controller
์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค๋ฅผ ์ค์นํฉ๋๋ค.- OpenShift Container Platform ์น ์ฝ์์์ Operator โ ์ค์น๋ Operator๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Custom Metrics Autoscaler ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Operator ์ธ๋ถ ์ ๋ณด ํ์ด์ง์์ DestinationRuleda Controller ํญ์ ํด๋ฆญํฉ๋๋ค.
> :<daController ํญ์์ CreateECDHEdaController ๋ฅผ ํด๋ฆญํ๊ณ ํ์ผ์ ํธ์งํฉ๋๋ค.
kind: KedaController apiVersion: keda.sh/v1alpha1 metadata: name: keda namespace: openshift-keda spec: watchNamespace: '' 1 operator: logLevel: info 2 logEncoder: console 3 metricsServer: logLevel: '0' 4 auditConfig: 5 logFormat: "json" logOutputVolumeClaim: "persistentVolumeClaimName" policy: rules: - level: Metadata omitStages: "RequestReceived" omitManagedFields: false lifetime: maxAge: "2" maxBackup: "1" maxSize: "50" serviceAccount: {}
- 1
- ์ฌ์ฉ์ ์ ์ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ๊ฐ์ํด์ผ ํ๋ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํฉ๋๋ค. ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค. ๋ชจ๋ ๋ค์์คํ์ด์ค๋ฅผ ์กฐ์ฌํ๋ ค๋ฉด ๋น์ด ์๋ ์๋ต ๋๋ ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋น์ด ์์ต๋๋ค.
- 2
- Custom Metrics Autoscaler Operator ๋ก๊ทธ ๋ฉ์์ง์ ์์ธ ์์ค์ ์ง์ ํฉ๋๋ค. ํ์ฉ๋๋ ๊ฐ์
debug
,info
,error
์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์info
์ ๋๋ค. - 3
- Custom Metrics Autoscaler Operator ๋ก๊ทธ ๋ฉ์์ง์ ๋ก๊น ํ์์ ์ง์ ํฉ๋๋ค. ํ์ฉ๋๋ ๊ฐ์
console
๋๋json
์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์console
์ ๋๋ค. - 4
- Custom Metrics Autoscaler Metrics Server์ ๋ก๊น ์์ค์ ์ง์ ํฉ๋๋ค. ํ์ฉ๋๋ ๊ฐ์
info
๋ฐ4
๋๋debug
์ ๋ํด0
์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์0
์ ๋๋ค. - 5
- Custom Metrics Autoscaler Operator์ ๋ํ ๊ฐ์ฌ ๋ก๊น ์ ํ์ฑํํ๊ณ "๊ฐ์ฌ ๋ก๊น ๊ตฌ์ฑ" ์น์ ์ ์ค๋ช ๋ ๋๋ก ์ฌ์ฉํ ๊ฐ์ฌ ์ ์ฑ ์ ์ง์ ํฉ๋๋ค.
- ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ KEDAController๋ฅผ ์์ฑํฉ๋๋ค.
3.4. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ดํด
scalers๋ผ๊ณ ๋ ํ๋ ํธ๋ฆฌ๊ฑฐ๋ Custom Metrics Autoscaler Operator์์ Pod๋ฅผ ํ์ฅํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฉํธ๋ฆญ์ ์ ๊ณตํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ํ์ฌ Prometheus, CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฐ Apache Kafka ํธ๋ฆฌ๊ฑฐ๋ง ์ง์ํฉ๋๋ค.
๋ค์ ์น์
์ ์ค๋ช
๋ ๋๋ก scaledObject
๋๋ scaled Job
์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ค๋ธ์ ํธ์ ๋ํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
3.4.1. Prometheus ํธ๋ฆฌ๊ฑฐ ์ดํด
์ค์น๋ OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ ์ฌ์ฉํ๊ฑฐ๋ ์ธ๋ถ Prometheus ์๋ฒ๋ฅผ ๋ฉํธ๋ฆญ ์์ค๋ก ์ฌ์ฉํ ์ ์๋ Prometheus ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ์ ์์ค๋ก OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ ์ฌ์ฉํ๋ ๋ฐ ํ์ํ ๊ตฌ์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ "์ถ๊ฐ ๋ฆฌ์์ค"๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Prometheus๊ฐ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์ค์ผ์ผ๋งํ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์งํ๋ฅผ ์์งํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์์ ์ต์ ๋ณต์ ๋ณธ์ 0
์ผ๋ก ์ค์ ํ์ง ๋ง์ญ์์ค. ์ ํ๋ฆฌ์ผ์ด์
Pod๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ์ ์ค์ผ์ผ๋งํ ๋ฉํธ๋ฆญ์ด ์์ต๋๋ค.
Prometheus ๋์์ ์ฌ์ฉํ์ฌ ์ค์ผ์ผ๋ง ์ค๋ธ์ ํธ์ ์
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: prom-scaledobject namespace: my-namespace spec: # ... triggers: - type: prometheus 1 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 2 namespace: kedatest 3 metricName: http_requests_total 4 threshold: '5' 5 query: sum(rate(http_requests_total{job="test-app"}[1m])) 6 authModes: basic 7 cortexOrgID: my-org 8 ignoreNullValues: false 9 unsafeSsl: false 10
- 1
- Prometheus๋ฅผ ํธ๋ฆฌ๊ฑฐ ์ ํ์ผ๋ก ์ง์ ํฉ๋๋ค.
- 2
- Prometheus ์๋ฒ์ ์ฃผ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์์์๋ OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ ์ฌ์ฉํฉ๋๋ค.
- 3
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํฉ๋๋ค. OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ ๋ฉํธ๋ฆญ ์์ค๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด ๋งค๊ฐ๋ณ์๊ฐ ํ์ํฉ๋๋ค.
- 4
external.metrics.k8s.io
API์์ ๋ฉํธ๋ฆญ์ ์๋ณํ๋ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ๋ ์ด์์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฉํธ๋ฆญ ์ด๋ฆ์ ๊ณ ์ ํด์ผ ํฉ๋๋ค.- 5
- ์ค์ผ์ผ๋ง์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฐ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํ๋ก ๋ฌถ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
- 6
- ์ฌ์ฉํ Prometheus ์ฟผ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค.
- 7
- ์ฌ์ฉํ ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ง์ ํฉ๋๋ค. Prometheus ์ค์ผ์ผ๋ฌ๋ ์ ๋ฌ์ ์ธ์ฆ( ๋ฒ ์ด๋ฌ ์ธ์ฆ), ๊ธฐ๋ณธ ์ธ์ฆ(
๊ธฐ๋ณธ
์ธ์ฆ) ๋๋ TLS ์ธ์ฆ(tls
)์ ์ง์ํฉ๋๋ค.๋ค์ ์น์ ์์ ์ค๋ช ํ๋ ๋๋ก ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ํน์ ์ธ์ฆ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ํ์์ ๋ฐ๋ผ ์ํฌ๋ฆฟ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
- 8
- 9
- ์ ํ ์ฌํญ: Prometheus ๋์์ด ์์ค๋๋ ๊ฒฝ์ฐ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์งํํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํฉ๋๋ค.
-
true
์ธ ๊ฒฝ์ฐ Prometheus ๋์์ด ์์ค๋๋ฉด ํธ๋ฆฌ๊ฑฐ๊ฐ ๊ณ์ ์๋ํฉ๋๋ค. ์ด๋ ๊ธฐ๋ณธ ๋์์ ๋๋ค. -
false
์ธ ๊ฒฝ์ฐ Prometheus ๋์์ด ์์ค๋๋ฉด ํธ๋ฆฌ๊ฑฐ์์ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
-
- 10
- ์ ํ ์ฌํญ: ์ธ์ฆ์ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ฐ์ด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Prometheus ๋์ ์์ ์์ฒด ์๋ช ๋ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
-
true
์ธ ๊ฒฝ์ฐ ์ธ์ฆ์ ๊ฒ์ฌ๊ฐ ์ํ๋ฉ๋๋ค. -
false
์ธ ๊ฒฝ์ฐ ์ธ์ฆ์ ๊ฒ์ฌ๊ฐ ์ํ๋์ง ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ ๋์์ ๋๋ค.
-
3.4.1.1. OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ ์ฌ์ฉํ๋๋ก ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ๊ตฌ์ฑ
์ค์น๋ OpenShift Container Platform Prometheus ๋ชจ๋ํฐ๋ง์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ์์ ์ฌ์ฉํ๋ ๋ฉํธ๋ฆญ์ ์์ค๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํํด์ผ ํ๋ ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ตฌ์ฑ์ด ์์ต๋๋ค.
์ด๋ฌํ ๋จ๊ณ๋ ์ธ๋ถ Prometheus ์์ค์ ํ์ํ์ง ์์ต๋๋ค.
์ด ์น์ ์ ์ค๋ช ๋ ๋๋ก ๋ค์ ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
- ํ ํฐ์ ๊ฐ์ ธ์ฌ ์๋น์ค ๊ณ์ ์ ์์ฑํฉ๋๋ค.
- ์ญํ ์ ์์ฑํฉ๋๋ค.
- ํด๋น ์ญํ ์ ์๋น์ค ๊ณ์ ์ ์ถ๊ฐํฉ๋๋ค.
- Prometheus์์ ์ฌ์ฉํ๋ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์ค๋ธ์ ํธ์์ ํ ํฐ์ ์ฐธ์กฐํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ์ํฌ๋ก๋ ์์ฑ ๊ตฌ์ฑ ๋งต ์์ฑ ์น์ ์ ์ค๋ช ๋ ๋๋ก OpenShift Container Platform ๋ชจ๋ํฐ๋ง์์ ์ฌ์ฉ์ ์ ์ ์ํฌ๋ก๋ ๋ชจ๋ํฐ๋ง ๋ชจ๋ํฐ๋ง์ด ํ์ฑํ๋์ด์ผ ํฉ๋๋ค.
- Custom Metrics Autoscaler Operator๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
์ ์ฐจ
์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
$ oc project my-project
ํด๋ฌ์คํฐ์ ์๋น์ค ๊ณ์ ์ด ์๋ ๊ฒฝ์ฐ ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์๋น์ค ๊ณ์ ์ ์์ฑํฉ๋๋ค.
$ oc create serviceaccount <service_account>
๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- <service_account>
- ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์๋น์ค ๊ณ์ ์ ํ ๋น๋ ํ ํฐ์ ์ฐพ์ต๋๋ค.
$ oc describe serviceaccount <service_account>
๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- <service_account>
- ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
์ถ๋ ฅ ์
Name: thanos Namespace: my-project Labels: <none> Annotations: <none> Image pull secrets: thanos-dockercfg-nnwgj Mountable secrets: thanos-dockercfg-nnwgj Tokens: thanos-token-9g4n5 1 Events: <none>
- 1
- ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ด ํ ํฐ์ ์ฌ์ฉํฉ๋๋ค.
์๋น์ค ๊ณ์ ํ ํฐ์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: keda-trigger-auth-prometheus spec: secretTargetRef: 1 - parameter: bearerToken 2 name: thanos-token-9g4n5 3 key: token 4 - parameter: ca name: thanos-token-9g4n5 key: ca.crt
CR ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
Thanos ์งํ๋ฅผ ์ฝ๋ ์ญํ ์ ์์ฑํฉ๋๋ค.
๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: thanos-metrics-reader rules: - apiGroups: - "" resources: - pods verbs: - get - apiGroups: - metrics.k8s.io resources: - pods - nodes verbs: - get - list - watch
CR ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
Thanos ์งํ๋ฅผ ์ฝ๊ธฐ ์ํ ์ญํ ๋ฐ์ธ๋ฉ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: thanos-metrics-reader 1 namespace: my-project 2 roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: thanos-metrics-reader subjects: - kind: ServiceAccount name: thanos 3 namespace: my-project 4
CR ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
"์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ ์ดํด"์ ์ค๋ช ๋ ๋๋ก ํ์ฅ ์ค๋ธ์ ํธ ๋๋ ํ์ฅ ์์ ์ ๋ฐฐํฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ ์ค์ผ์ผ๋ง์ ํ์ฑํํ ์ ์์ต๋๋ค. OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ ์์ค, ํธ๋ฆฌ๊ฑฐ ๋๋ scaler๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.
-
triggers.type
์prometheus
์ฌ์ผ ํฉ๋๋ค -
triggers.metadata.serverAddress
๋https://thanos-querier.openshift-monitoring.svc.cluster.local:9092
์ด์ด์ผ ํฉ๋๋ค -
triggers.metadata.authModes
๋๋ฒ ์ด๋ฌ
์ฌ์ผ ํฉ๋๋ค. -
Trigger.metadata.namespace
๋ ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ๋ค์์คํ์ด์ค๋ก ์ค์ ํด์ผ ํฉ๋๋ค. -
triggers.authenticationRef
๋ ์ด์ ๋จ๊ณ์์ ์ง์ ๋ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค.
3.4.2. CPU ํธ๋ฆฌ๊ฑฐ ์ดํด
CPU ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ์ด ํธ๋ฆฌ๊ฑฐ๋ ํด๋ฌ์คํฐ ์งํ๋ฅผ ๋ฉํธ๋ฆญ์ ์์ค๋ก ์ฌ์ฉํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ์ง์ ํ CPU ์ฌ์ฉ๋์ ์ ์งํ๋๋ก ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod๋ฅผ ์ค์ผ์ผ๋งํฉ๋๋ค. ์๋ ์ค์ผ์ผ๋ฌ๋ ์ต์ ๋ฐ ์ต๋ ๊ฐ์ ์ฌ์ด์์ ๋ณต์ ๋ณธ ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ฌ ๋ชจ๋ Pod์์ ์ง์ ๋ CPU ์ฌ์ฉ๋ฅ ์ ์ ์งํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํธ๋ฆฌ๊ฑฐ๋ ์ ์ฒด Pod์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๊ณ ๋ คํฉ๋๋ค. Pod์ ์ปจํ ์ด๋๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ํธ๋ฆฌ๊ฑฐ๋ Pod์ ์๋ ๋ชจ๋ ์ปจํ ์ด๋์ ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๊ณ ๋ คํฉ๋๋ค.
-
์ด ํธ๋ฆฌ๊ฑฐ๋
ScaledJob
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. -
๋ฉ๋ชจ๋ฆฌ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์ค์ผ์ผ๋งํ ๋ ์ฌ๋ฌ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด๋
0
์ผ๋ก ์ค์ผ์ผ๋ง๋์ง ์์ต๋๋ค.
CPU ๋์์ด ์๋ ํ์ฅ๋ ์ค๋ธ์ ํธ์ ์
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: cpu-scaledobject namespace: my-namespace spec: # ... triggers: - type: cpu 1 metricType: Utilization 2 metadata: value: '60' 3 containerName: api 4
- 1
- CPU๋ฅผ ํธ๋ฆฌ๊ฑฐ ์ ํ์ผ๋ก ์ง์ ํฉ๋๋ค.
- 2
- ์ฌ์ฉํ ๋ฉํธ๋ฆญ์ ์ ํ(
Utilization
๋๋AverageValue
)์ ์ง์ ํฉ๋๋ค. - 3
- ์ค์ผ์ผ๋ง์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฐ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํ๋ก ๋ฌถ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
-
Utilization
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ target ๊ฐ์ Pod์ ๋ํด ์์ฒญ๋ ๋ฆฌ์์ค์ ๋ฐฑ๋ถ์จ๋ก ํ์๋๋ ๋ชจ๋ ๊ด๋ จ Pod์์ ๋ฆฌ์์ค ์งํ์ ํ๊ท ๊ฐ์ ๋๋ค. -
AverageValue
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ target ๊ฐ์ ๋ชจ๋ ๊ด๋ จ Pod์ ํ๊ท ์งํ์ ๋๋ค.
-
- 4
- ์ ํ ์ฌํญ: ์ ์ฒด Pod๊ฐ ์๋ ํด๋น ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ฐ๋ผ ์ค์ผ์ผ๋งํ ๊ฐ๋ณ ์ปจํ ์ด๋๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์์ ์์๋
api
๋ผ๋ ์ปจํ ์ด๋๋ง ์ค์ผ์ผ๋งํ ์ ์์ต๋๋ค.
3.4.3. ๋ฉ๋ชจ๋ฆฌ ํธ๋ฆฌ๊ฑฐ ์ดํด
๋ฉ๋ชจ๋ฆฌ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ์ด ํธ๋ฆฌ๊ฑฐ๋ ํด๋ฌ์คํฐ ์งํ๋ฅผ ๋ฉํธ๋ฆญ์ ์์ค๋ก ์ฌ์ฉํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod๋ฅผ ์ค์ผ์ผ๋งํ์ฌ ์ง์ ํ ํ๊ท ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ์งํฉ๋๋ค. ์๋ ์ค์ผ์ผ๋ฌ๋ ์ต์ ๋ฐ ์ต๋ ๊ฐ์ ์ฌ์ด์์ ๋ณต์ ๋ณธ ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ฌ ๋ชจ๋ Pod์์ ์ง์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ ์งํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํธ๋ฆฌ๊ฑฐ๋ ์ ์ฒด Pod์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๊ณ ๋ คํฉ๋๋ค. Pod์ ์ปจํ ์ด๋๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ชจ๋ ์ปจํ ์ด๋์ ํฉ๊ณ์ ๋๋ค.
-
์ด ํธ๋ฆฌ๊ฑฐ๋
ScaledJob
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. -
๋ฉ๋ชจ๋ฆฌ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์ค์ผ์ผ๋งํ ๋ ์ฌ๋ฌ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด๋
0
์ผ๋ก ์ค์ผ์ผ๋ง๋์ง ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์์ด ์๋ ํ์ฅ๋ ์ค๋ธ์ ํธ์ ์
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: memory-scaledobject namespace: my-namespace spec: # ... triggers: - type: memory 1 metricType: Utilization 2 metadata: value: '60' 3 containerName: api 4
- 1
- memory๋ฅผ ํธ๋ฆฌ๊ฑฐ ์ ํ์ผ๋ก ์ง์ ํฉ๋๋ค.
- 2
- ์ฌ์ฉํ ๋ฉํธ๋ฆญ์ ์ ํ(
Utilization
๋๋AverageValue
)์ ์ง์ ํฉ๋๋ค. - 3
- ์ค์ผ์ผ๋ง์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฐ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํ๋ก ๋ฌถ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
-
Utilization
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ target ๊ฐ์ Pod์ ๋ํด ์์ฒญ๋ ๋ฆฌ์์ค์ ๋ฐฑ๋ถ์จ๋ก ํ์๋๋ ๋ชจ๋ ๊ด๋ จ Pod์์ ๋ฆฌ์์ค ์งํ์ ํ๊ท ๊ฐ์ ๋๋ค. -
AverageValue
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ target ๊ฐ์ ๋ชจ๋ ๊ด๋ จ Pod์ ํ๊ท ์งํ์ ๋๋ค.
-
- 4
- ์ ํ ์ฌํญ: ์ ์ฒด Pod๊ฐ ์๋ ํด๋น ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ๋ฐ๋ผ ์ค์ผ์ผ๋งํ ๊ฐ๋ณ ์ปจํ ์ด๋๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์์ ์์๋
api
๋ผ๋ ์ปจํ ์ด๋๋ง ์ค์ผ์ผ๋งํ ์ ์์ต๋๋ค.
3.4.4. Kafka ํธ๋ฆฌ๊ฑฐ ์ดํด
Apache Kafka ์ฃผ์ ๋๋ Kafka ํ๋กํ ์ฝ์ ์ง์ํ๋ ๊ธฐํ ์๋น์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ ๋๋ ์ค์ผ์ผ๋ง ์์
์์ allowIdleConsumers
๋งค๊ฐ๋ณ์๋ฅผ true
๋ก ์ค์ ํ์ง ์๋ ํ Kafka ํํฐ์
์๋ณด๋ค ํฌ๊ฒ ํ์ฅ๋์ง ์์ต๋๋ค.
์๋น์ ๊ทธ๋ฃน์ ์๊ฐ ์ฃผ์ ์ ํํฐ์ ์๋ฅผ ์ด๊ณผํ๋ฉด ์ถ๊ฐ ์๋น์ ๊ทธ๋ฃน์ ์ ํด ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณต์ ๋ณธ ์๋ ๋ค์์ ์ด๊ณผํ์ง ์์ต๋๋ค.
- ์ฃผ์ ๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์ฃผ์ ์ ํํฐ์ ์
- ์ฃผ์ ๊ฐ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์๋น์ ๊ทธ๋ฃน์ ์๋ ๋ชจ๋ ํญ๋ชฉ์ ํํฐ์ ์
-
ํ์ฅ ์ค๋ธ์ ํธ ๋๋ ํ์ฅ ์์
CR์ ์ง์ ๋
maxReplicaCount
allowIdleConsumers
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๊ธฐ๋ณธ ๋์์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
Kafka ๋์์ด ์๋ ํ์ฅ๋ ์ค๋ธ์ ํธ์ ์
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: kafka-scaledobject namespace: my-namespace spec: # ... triggers: - type: kafka 1 metadata: topic: my-topic 2 bootstrapServers: my-cluster-kafka-bootstrap.openshift-operators.svc:9092 3 consumerGroup: my-group 4 lagThreshold: '10' 5 activationLagThreshold: '5' 6 offsetResetPolicy: latest 7 allowIdleConsumers: true 8 scaleToZeroOnInvalidOffset: false 9 excludePersistentLag: false 10 version: '1.0.0' 11 partitionLimitation: '1,2,10-20,31' 12
- 1
- Kafka๋ฅผ ํธ๋ฆฌ๊ฑฐ ์ ํ์ผ๋ก ์ง์ ํฉ๋๋ค.
- 2
- Kafka๊ฐ ์คํ์ ์ง์ฐ์ ์ฒ๋ฆฌํ๋ Kafka ํญ๋ชฉ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 3
- ์ฐ๊ฒฐํ Kafka ๋ธ๋ก์ปค์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค.
- 4
- ์ฃผ์ ์์ ์คํ์ ์ ํ์ธํ๊ณ ๊ด๋ จ ์ง์ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ Kafka ์๋น์ ๊ทธ๋ฃน์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋ง์ ํธ๋ฆฌ๊ฑฐํ๋ ํ๊ท ๋์ ๊ฐ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํ๋ก ๋ฌถ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
5
์ ๋๋ค. - 6
- ์ ํ ์ฌํญ: ํ์ฑํ ๋จ๊ณ์ ๋์ ๊ฐ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํ๋ก ๋ฌถ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
- 7
- ์ ํ ์ฌํญ: Kafka ์๋น์์ ๋ํ Kafka ์คํ์ ์ฌ์ค์ ์ ์ฑ ์ ์ง์ ํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์
latest
๋ฐearliest
์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์latest
์ ๋๋ค. - 8
- ์ ํ ์ฌํญ: Kafka ๋ณต์ ๋ณธ ์๊ฐ ์ฃผ์ ์ ํํฐ์ ์๋ฅผ ์ด๊ณผํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค.
-
true
์ธ ๊ฒฝ์ฐ Kafka ๋ณต์ ๋ณธ ์๋ ์ฃผ์ ์ ํํฐ์ ์๋ฅผ ์ด๊ณผํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ํด ์ํ์ Kafka ์๋น์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. -
false
์ธ ๊ฒฝ์ฐ Kafka ๋ณต์ ๋ณธ ์๋ ์ฃผ์ ์ ํํฐ์ ์๋ฅผ ์ด๊ณผํ ์ ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
-
- 9
- Kafka ํํฐ์ ์ ์ ํจํ ์คํ์ ์ด ์์ ๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํฉ๋๋ค.
-
true
์ธ ๊ฒฝ์ฐ ์๋น์๋ ํด๋น ํํฐ์ ์ ๋ํด 0์ผ๋ก ํ์ฅ๋ฉ๋๋ค. -
false
์ธ ๊ฒฝ์ฐ scaler๋ ํด๋น ํํฐ์ ์ ๋ํ ๋จ์ผ ์๋น์๋ฅผ ์ ์งํฉ๋๋ค. ์ด๋ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
-
- 10
- ์ ํ ์ฌํญ: ํ์ฌ ์คํ์ ์ด ์ด์ ํด๋ง ์ฌ์ดํด์ ํ์ฌ ์คํ์ ๊ณผ ๋์ผํ ํํฐ์ ์ ๋ํด ํธ๋ฆฌ๊ฑฐ์ ํํฐ์ ์ง์ฐ์ ํฌํจํ๊ฑฐ๋ ์ ์ธํ๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค.
-
true
์ธ ๊ฒฝ์ฐ scaler๋ ์ด๋ฌํ ํํฐ์ ์์ ํํฐ์ ์ง์ฐ์ ์ ์ธํฉ๋๋ค. -
false
์ธ ๊ฒฝ์ฐ ํธ๋ฆฌ๊ฑฐ๋ ๋ชจ๋ ํํฐ์ ์ ๋ชจ๋ ์๋น์ ์ง์ฐ์ ํฌํจํฉ๋๋ค. ์ด๋ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
-
- 11
- ์ ํ ์ฌํญ: Kafka ๋ธ๋ก์ปค์ ๋ฒ์ ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํ๋ก ๋ฌถ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
1.0.0
์ ๋๋ค. - 12
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋ง ๋ฒ์๋ฅผ ์ง์ ํ ์ผํ๋ก ๊ตฌ๋ถ๋ ํํฐ์ ID ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค. ์ค์ ๋ ๊ฒฝ์ฐ ์ง์ฐ์ ๊ณ์ฐํ ๋ ๋์ด๋ ID๋ง ๊ณ ๋ คํฉ๋๋ค. ๋ฐ์ดํ๋ก ๋ฌถ์ ๋ฌธ์์ด ๊ฐ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋ชจ๋ ํํฐ์ ์ ๊ณ ๋ คํ๋ ๊ฒ์ ๋๋ค.
3.5. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์ดํด
ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ฌ์ฉํ๋ฉด ํ์ฅ๋ ์ค๋ธ์ ํธ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ํฌํจํ๊ฑฐ๋ ๊ด๋ จ ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ์ค์ผ์ผ๋ง ์์ ์ ํฌํจํ ์ ์์ต๋๋ค. ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ฌ์ฉํ์ฌ OpenShift Container Platform ์ํฌ๋ฆฟ, ํ๋ซํผ ๋ค์ดํฐ๋ธ Pod ์ธ์ฆ ๋ฉ์ปค๋์ฆ, ํ๊ฒฝ ๋ณ์ ๋ฑ์ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ๋์ผํ ๋ค์์คํ์ด์ค์ TriggerAuthentication
์ค๋ธ์ ํธ๋ฅผ ์ ์ํฉ๋๋ค. ์ด ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ํด๋น ๋ค์์คํ์ด์ค์ ์ค๋ธ์ ํธ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๋ ์ฌ๋ฌ ๋ค์์คํ์ด์ค์ ์ค๋ธ์ ํธ ๊ฐ์ ์๊ฒฉ ์ฆ๋ช
์ ๊ณต์ ํ๋ ค๋ฉด ๋ชจ๋ ๋ค์์คํ์ด์ค์์ ์ฌ์ฉํ ์ ์๋ ClusterTriggerAuthentication
์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ธ์ฆ ํธ๋ฆฌ๊ฑฐ ๋ฐ ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ๋์ผํ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์๋ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ์ ์ธ์ฆ ์ฐธ์กฐ์ ์ถ๊ฐ kind
๋งค๊ฐ๋ณ์๊ฐ ํ์ํฉ๋๋ค.
์ํฌ๋ฆฟ์ ์ฌ์ฉํ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: secret-triggerauthentication namespace: my-namespace 1 spec: secretTargetRef: 2 - parameter: user-name 3 name: my-secret 4 key: USER_NAME 5 - parameter: password name: my-secret key: USER_PASSWORD
- 1
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํฉ๋๋ค.
- 2
- ์ด ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ด ๊ถํ ๋ถ์ฌ์ ๋ณด์์ ์ฌ์ฉํ๋๋ก ์ง์ ํฉ๋๋ค.
- 3
- ๋ณด์์ ์ฌ์ฉํ์ฌ ์ ๊ณตํ ์ธ์ฆ ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 4
- ์ฌ์ฉํ ๋ณด์์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ง์ ๋ ๋งค๊ฐ๋ณ์์ ํจ๊ป ์ฌ์ฉํ ์ํฌ๋ฆฟ์ ํค๋ฅผ ์ง์ ํฉ๋๋ค.
์ํฌ๋ฆฟ์ ์ฌ์ฉํ ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์
kind: ClusterTriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: 1 name: secret-cluster-triggerauthentication spec: secretTargetRef: 2 - parameter: user-name 3 name: secret-name 4 key: USER_NAME 5 - parameter: user-password name: secret-name key: USER_PASSWORD
- 1
- ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ๋ค์์คํ์ด์ค๋ ์์ต๋๋ค.
- 2
- ์ด ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ด ๊ถํ ๋ถ์ฌ์ ๋ณด์์ ์ฌ์ฉํ๋๋ก ์ง์ ํฉ๋๋ค.
- 3
- ๋ณด์์ ์ฌ์ฉํ์ฌ ์ ๊ณตํ ์ธ์ฆ ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 4
- ์ฌ์ฉํ ๋ณด์์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ง์ ๋ ๋งค๊ฐ๋ณ์์ ํจ๊ป ์ฌ์ฉํ ์ํฌ๋ฆฟ์ ํค๋ฅผ ์ง์ ํฉ๋๋ค.
ํ ํฐ์ ์ฌ์ฉํ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: token-triggerauthentication namespace: my-namespace 1 spec: secretTargetRef: 2 - parameter: bearerToken 3 name: my-token-2vzfq 4 key: token 5 - parameter: ca name: my-token-2vzfq key: ca.crt
- 1
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํฉ๋๋ค.
- 2
- ์ด ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ด ๊ถํ ๋ถ์ฌ์ ๋ณด์์ ์ฌ์ฉํ๋๋ก ์ง์ ํฉ๋๋ค.
- 3
- ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ ๊ณตํ ์ธ์ฆ ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 4
- ์ฌ์ฉํ ํ ํฐ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ง์ ๋ ๋งค๊ฐ๋ณ์์ ํจ๊ป ์ฌ์ฉํ ํ ํฐ์ ํค๋ฅผ ์ง์ ํฉ๋๋ค.
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: env-var-triggerauthentication namespace: my-namespace 1 spec: env: 2 - parameter: access_key 3 name: ACCESS_KEY 4 containerName: my-container 5
- 1
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํฉ๋๋ค.
- 2
- ์ด ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ด ๊ถํ ๋ถ์ฌ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ ํฉ๋๋ค.
- 3
- ์ด ๋ณ์๋ก ์ค์ ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 4
- ํ๊ฒฝ ๋ณ์์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ ํ ์ฌํญ: ์ธ์ฆ์ด ํ์ํ ์ปจํ ์ด๋๋ฅผ ์ง์ ํฉ๋๋ค. ์ปจํ ์ด๋๋ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ์
scaleTargetRef
์์ ์ฐธ์กฐํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฆฌ์์ค์ ์์ด์ผ ํฉ๋๋ค.
Pod ์ธ์ฆ ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: pod-id-triggerauthentication namespace: my-namespace 1 spec: podIdentity: 2 provider: aws-eks 3
- 1
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํฉ๋๋ค.
- 2
- ์ด ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์์ ๊ถํ ๋ถ์ฌ์ ํ๋ซํผ ๋ค์ดํฐ๋ธ Pod ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ก ์ง์ ํฉ๋๋ค.
- 3
- Pod ID๋ฅผ ์ง์ ํฉ๋๋ค. ์ง์๋๋ ๊ฐ์
none
,azure
,aws-eks
, ๋๋aws-kiam
์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์none
์ ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- OpenShift Container Platform ๋ณด์์ ๋ํ ์์ธํ ๋ด์ฉ์ Pod์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ์ ๊ณต์ ์ฐธ์กฐํ์ญ์์ค.
3.5.1. ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์ฌ์ฉ
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ์ ์์ฑํ ๋ค์ ํ์ฅ๋ ์ค๋ธ์ ํธ ๋๋ ํ์ฅ๋ ์์ ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐํ์ฌ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ๋ฐ ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Custom Metrics Autoscaler Operator๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
๋ณด์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
Secret
์ค๋ธ์ ํธ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.์ํฌ๋ฆฟ ์
apiVersion: v1 kind: Secret metadata: name: my-secret data: user-name: <base64_USER_NAME> password: <base64_USER_PASSWORD>
ํ๋ก์ธ์ค
TriggerAuthentication
๋๋ClusterTriggerAuthentication
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.์ค๋ธ์ ํธ๋ฅผ ์ ์ํ๋ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
์ํฌ๋ฆฟ์ ์ฌ์ฉํ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์
kind: TriggerAuthentication apiVersion: keda.sh/v1alpha1 metadata: name: prom-triggerauthentication namespace: my-namespace spec: secretTargetRef: - parameter: user-name name: my-secret key: USER_NAME - parameter: password name: my-secret key: USER_PASSWORD
TriggerAuthentication
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f <file-name>.yaml
scaled
Object
YAML ํ์ผ์ ์์ฑํ๊ฑฐ๋ ํธ์งํฉ๋๋ค.์ค์ผ์ผ๋ง ์ค๋ธ์ ํธ์ ์
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: scaledobject namespace: my-namespace spec: scaleTargetRef: name: example-deployment maxReplicaCount: 100 minReplicaCount: 0 pollingInterval: 30 triggers: - authenticationRef: type: prometheus metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest # replace <NAMESPACE> metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "basic" - authenticationRef: 1 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 2 name: prom-cluster-triggerauthentication kind: ClusterTriggerAuthentication metadata: name: prom-cluster-triggerauthentication type: object
์ฐธ๊ณ๋ค์์คํ์ด์ค ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ๊ณผ ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ๋ชจ๋ ์ง์ ํ ํ์๋ ์์ต๋๋ค.
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc apply -f <file-name>
3.6. ํ์ฅ ์ค๋ธ์ ํธ์ ๋ํ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ์ผ์ ์ค์ง
ํ์์ ๋ฐ๋ผ ์ํฌ๋ก๋ ์๋ ์ค์ผ์ผ๋ง์ ์ผ์ ์ค์งํ๊ณ ๋ค์ ์์ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ํด๋ฌ์คํฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ ์ ์๋ ์ค์ผ์ผ๋ง์ ์ค์งํ๊ฑฐ๋ ๋๋ฝ๋์ง ์์ ์ํฌ๋ก๋๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฆฌ์์ค ๋ถ์กฑ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
3.6.1. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ์ผ์ ์ค์ง
ํ์ฅ๋ ์ค๋ธ์ ํธ์ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ์ autoscaling.keda.sh/paused-replicas
์ฃผ์์ ์ถ๊ฐํ์ฌ ํ์ฅ ์ค๋ธ์ ํธ์ ์๋ ์ค์ผ์ผ๋ง์ ์ผ์ ์ค์งํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ ํด๋น ์ํฌ๋ก๋์ ๋ณต์ ๋ณธ์ ์ง์ ๋ ๊ฐ์ผ๋ก ์ค์ผ์ผ๋งํ๊ณ ์ฃผ์์ด ์ ๊ฑฐ๋ ๋๊น์ง ์๋ ์ค์ผ์ผ๋ง์ ์ผ์ ์ค์งํฉ๋๋ค.
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" # ...
ํ๋ก์ธ์ค
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ํฌ๋ก๋์ ๋ํ
scaledObject
CR์ ํธ์งํฉ๋๋ค.$ oc edit ScaledObject scaledobject
๋ค์ ๊ฐ์ ์ฌ์ฉํ์ฌ
autoscaling.keda.sh/paused-replicas
์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" 1 creationTimestamp: "2023-02-08T14:41:01Z" generation: 1 name: scaledobject namespace: my-project resourceVersion: '65729' uid: f5aec682-acdf-4232-a783-58b5b82f5dd0
- 1
- Custom Metrics Autoscaler Operator๊ฐ ๋ณต์ ๋ณธ์ ์ง์ ๋ ๊ฐ์ผ๋ก ์ค์ผ์ผ๋งํ๊ณ ์๋ ์ค์ผ์ผ๋ง์ ์ค์งํ๋๋ก ์ง์ ํฉ๋๋ค.
3.6.2. ํ์ฅ ์ค๋ธ์ ํธ์ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ๋ค์ ์์
ํด๋น scaled Object์ ๋ํ
์์ํ ์ ์์ต๋๋ค.
autoscaling.keda.sh/paused-replicas
์ฃผ์์ ์ ๊ฑฐํ์ฌ ์ผ์ ์ค์ง๋ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ๋ค์
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" # ...
ํ๋ก์ธ์ค
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ํฌ๋ก๋์ ๋ํ
scaledObject
CR์ ํธ์งํฉ๋๋ค.$ oc edit ScaledObject scaledobject
autoscaling.keda.sh/paused-replicas
์ฃผ์์ ์ ๊ฑฐํฉ๋๋ค.apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "4" 1 creationTimestamp: "2023-02-08T14:41:01Z" generation: 1 name: scaledobject namespace: my-project resourceVersion: '65729' uid: f5aec682-acdf-4232-a783-58b5b82f5dd0
- 1
- ์ผ์ ์ค์ง๋ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ๋ค์ ์์ํ๋ ค๋ฉด ์ด ์ฃผ์์ ์ ๊ฑฐํฉ๋๋ค.
3.7. ๊ฐ์ฌ ๋ก๊ทธ ์์ง
์์คํ ์ ๊ฐ๋ณ ์ฌ์ฉ์, ๊ด๋ฆฌ์ ๋๋ ๊ธฐํ ๊ตฌ์ฑ ์์๊ฐ ์์คํ ์ ์ํฅ์ ์ค ํ๋ ์์๋ฅผ ๋ฌธ์ํํ๋ ๋ณด์ ๊ด๋ จ ๋ ์ฝ๋ ์ธํธ์ธ ๊ฐ์ฌ ๋ก๊ทธ๋ฅผ ์์งํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๊ฐ์ฌ ๋ก๊ทธ๋ ์๋ ์ค์ผ์ผ๋ง ์์ฒญ์ด ๋ฐ์ํ๋ ์์น๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํํ ์๋ ํ์ฅ ์์ฒญ์ ์ํด ๋ฐฑ์๋๊ฐ ๊ณผ๋ถํ๋๋ ๊ฒฝ์ฐ ์ฃผ์ ์ ๋ณด์ ๋๋ค. ์ด๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
3.7.1. ๊ฐ์ฌ ๋ก๊น ๊ตฌ์ฑ
CloudEventda Controller
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ํธ์งํ์ฌ Custom Metrics Autoscaler Operator์ ๋ํ ๊ฐ์ฌ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ก๊ทธ๋ CloudEventda Controller
CR์ ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์ ์ฌ์ฉํ์ฌ ๋ณด์๋๋ ๋ณผ๋ฅจ์ ๊ฐ์ฌ ๋ก๊ทธ ํ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Custom Metrics Autoscaler Operator๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
CloudEventda
Controller ์ฌ์ฉ์
์ง์ ๋ฆฌ์์ค๋ฅผ ํธ์งํ์ฌauditConfig
์คํ ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.kind: KedaController apiVersion: keda.sh/v1alpha1 metadata: name: keda namespace: openshift-keda spec: # ... metricsServer: # ... auditConfig: logFormat: "json" 1 logOutputVolumeClaim: "pvc-audit-log" 2 policy: rules: 3 - level: Metadata omitStages: "RequestReceived" 4 omitManagedFields: false 5 lifetime: 6 maxAge: "2" maxBackup: "1" maxSize: "50"
- 1
- audit ๋ก๊ทธ์ ์ถ๋ ฅ ํ์(
legacy
๋๋json
)์ ์ง์ ํฉ๋๋ค. - 2
- ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ธฐ์กด ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์ ์ง์ ํฉ๋๋ค. API ์๋ฒ์ ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ์ด ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด ํ๋๋ฅผ ๋น์ ๋๋ฉด ๋ก๊ทธ ๋ฐ์ดํฐ๊ฐ stdout์ผ๋ก ์ ์ก๋ฉ๋๋ค.
- 3
- ๊ธฐ๋กํด์ผ ํ๋ ์ด๋ฒคํธ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ผ ํ๋์ง ์ง์ ํฉ๋๋ค.
-
none
: ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ์ง ์์ต๋๋ค. -
metadata
: ์ฌ์ฉ์, ํ์์คํฌํ ๋ฑ๊ณผ ๊ฐ์ ์์ฒญ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ง ๊ธฐ๋กํฉ๋๋ค. ์์ฒญ ํ ์คํธ์ ์๋ต ํ ์คํธ๋ฅผ ๊ธฐ๋กํ์ง ๋ง์ญ์์ค. ์ด๋ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. -
request: ๋ฉํ๋ฐ์ดํฐ์ ์์ฒญ
ํ ์คํธ๋ง ๊ธฐ๋กํ์ง๋ง ์๋ต ํ ์คํธ๋ ๊ธฐ๋กํ์ง ์์ต๋๋ค. ์ด ์ต์ ์ ๋ฆฌ์์ค๊ฐ ์๋ ์์ฒญ์๋ ์ ์ฉ๋์ง ์์ต๋๋ค. -
RequestResponse
: ์ด๋ฒคํธ ๋ฉํ๋ฐ์ดํฐ, ์์ฒญ ํ ์คํธ ๋ฐ ์๋ต ํ ์คํธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์ด ์ต์ ์ ๋ฆฌ์์ค๊ฐ ์๋ ์์ฒญ์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
-
- 4
- ์ด๋ฒคํธ๊ฐ ์์ฑ๋์ง ์๋ ๋จ๊ณ๋ฅผ ์ง์ ํฉ๋๋ค.
- 5
- ์์ฒญ ๋ฐ ์๋ต ๋ณธ๋ฌธ์ ๊ด๋ฆฌ ํ๋๋ฅผ API ๊ฐ์ฌ ๋ก๊ทธ์ ์์ฑํ์ง ๋ชปํ๋๋ก ํ๋ ค๋ฉด
true
๋ก ํ๋๋ฅผ ์๋ตํ ์ง ์๋๋ฉด ํ๋๋ฅผ ์๋ตํfalse
๋ฅผ ์๋ตํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. - 6
- ๊ฐ์ฌ ๋ก๊ทธ์ ํฌ๊ธฐ ๋ฐ ์๋ช ์ ์ง์ ํฉ๋๋ค.
-
maxAge
: ํ์ผ ์ด๋ฆ์ ์ธ์ฝ๋ฉ๋ ํ์์คํฌํ์ ๋ฐ๋ผ ๊ฐ์ฌ ๋ก๊ทธ ํ์ผ์ ์ ์งํ๋ ์ต๋ ์ผ ์์ ๋๋ค. -
maxBackup
: ์ ์งํ ๊ฐ์ฌ ๋ก๊ทธ ํ์ผ์ ์ต๋ ์์ ๋๋ค. ๋ชจ๋ ๊ฐ์ฌ ๋ก๊ทธ ํ์ผ์ ์ ์งํ๋ ค๋ฉด0
์ผ๋ก ์ค์ ํฉ๋๋ค. -
maxSize
: ๊ฐ์ฌ ๋ก๊ทธ ํ์ผ์ ์ต๋ ํฌ๊ธฐ(MB)๊ฐ ์ํ๋๊ธฐ ์ ์ ์ด๋ฃจ์ด์ง๋๋ค.
-
๊ฒ์ฆ
๊ฐ์ฌ ๋ก๊ทธ ํ์ผ์ ์ง์ ํ์ธํฉ๋๋ค.
keda-metrics-apiserver-*
Pod ์ด๋ฆ์ ๊ฐ์ ธ์ต๋๋ค.oc get pod -n openshift-keda
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE custom-metrics-autoscaler-operator-5cb44cd75d-9v4lv 1/1 Running 0 8m20s keda-metrics-apiserver-65c7cc44fd-rrl4r 1/1 Running 0 2m55s keda-operator-776cbb6768-zpj5b 1/1 Running 0 2m55s
๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc logs keda-metrics-apiserver-<hash>|grep -i metadata 1
- 1
- ์ ํ ์ฌํญ:
grep
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ก๊ทธ ์์ค์ ์ง์ ํ ์ ์์ต๋๋ค.๋ฉํ๋ฐ์ดํฐ
, ์์ฒญ ,
.Request
Response
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc logs keda-metrics-apiserver-65c7cc44fd-rrl4r|grep -i metadata
์ถ๋ ฅ ์
... {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Metadata","auditID":"4c81d41b-3dab-4675-90ce-20b87ce24013","stage":"ResponseComplete","requestURI":"/healthz","verb":"get","user":{"username":"system:anonymous","groups":["system:unauthenticated"]},"sourceIPs":["10.131.0.1"],"userAgent":"kube-probe/1.26","responseStatus":{"metadata":{},"code":200},"requestReceivedTimestamp":"2023-02-16T13:00:03.554567Z","stageTimestamp":"2023-02-16T13:00:03.555032Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":""}} ...
๋๋ ํน์ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
keda-metrics-apiserver-*
Pod์ ๋ก๊ทธ์ธํ๋ ค๋ฉด ๋ค์๊ณผ ์ ์ฌํ ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.$ oc rsh pod/keda-metrics-apiserver-<hash> -n openshift-keda
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc rsh pod/keda-metrics-apiserver-65c7cc44fd-rrl4r -n openshift-keda
/var/audit-policy/
๋๋ ํฐ๋ฆฌ๋ก ๋ณ๊ฒฝํฉ๋๋ค.sh-4.4$ cd /var/audit-policy/
์ฌ์ฉ ๊ฐ๋ฅํ ๋ก๊ทธ๋ฅผ ๋์ดํฉ๋๋ค.
sh-4.4$ ls
์ถ๋ ฅ ์
log-2023.02.17-14:50 policy.yaml
ํ์ํ ๊ฒฝ์ฐ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
sh-4.4$ cat <log_name>/<pvc_name>|grep -i <log_level> 1
- 1
- ์ ํ ์ฌํญ:
grep
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ก๊ทธ ์์ค์ ์ง์ ํ ์ ์์ต๋๋ค.๋ฉํ๋ฐ์ดํฐ
, ์์ฒญ ,
.Request
Response
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
sh-4.4$ cat log-2023.02.17-14:50/pvc-audit-log|grep -i Request
์ถ๋ ฅ ์
... {"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"Request","auditID":"63e7f68c-04ec-4f4d-8749-bf1656572a41","stage":"ResponseComplete","requestURI":"/openapi/v2","verb":"get","user":{"username":"system:aggregator","groups":["system:authenticated"]},"sourceIPs":["10.128.0.1"],"responseStatus":{"metadata":{},"code":304},"requestReceivedTimestamp":"2023-02-17T13:12:55.035478Z","stageTimestamp":"2023-02-17T13:12:55.038346Z","annotations":{"authorization.k8s.io/decision":"allow","authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"system:discovery\" of ClusterRole \"system:discovery\" to Group \"system:authenticated\""}} ...
3.8. ๋๋ฒ๊น ๋ฐ์ดํฐ ์์ง
์ง์ ์ฌ๋ก๋ฅผ ์ฌ๋ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ์ ๋ํ ๋๋ฒ๊น ์ ๋ณด๋ฅผ Red Hat ์ง์์ ์ ๊ณตํ๋ฉด ๋์์ด ๋ฉ๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์ ์ ๋ณด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
-
must-gather
ํด์ ์ฌ์ฉํ์ฌ ์์ง๋ ๋ฐ์ดํฐ์ ๋๋ค. - ๊ณ ์ ํ ํด๋ฌ์คํฐ ID์ ๋๋ค.
must-gather
ํด์ ์ฌ์ฉํ์ฌ ๋ค์ ํญ๋ชฉ์ ํฌํจํ์ฌ Custom Metrics Autoscaler Operator ๋ฐ ํด๋น ๊ตฌ์ฑ ์์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์์ต๋๋ค.
-
openshift-keda
๋ค์์คํ์ด์ค์ ํด๋น ํ์ ์ค๋ธ์ ํธ์ ๋๋ค. - Custom Metric Autoscaler Operator ์ค์น ์ค๋ธ์ ํธ์ ๋๋ค.
- Custom Metric Autoscaler Operator CRD ์ค๋ธ์ ํธ์ ๋๋ค.
3.8.1. ๋๋ฒ๊น ๋ฐ์ดํฐ ์์ง
๋ค์ ๋ช
๋ น์ Custom Metrics Autoscaler Operator์ ๋ํ must-gather
ํด์ ์คํํฉ๋๋ค.
$ oc adm must-gather --image="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
ํ์ค OpenShift Container Platform must-gather
๋ช
๋ น oc adm must-gather
, Custom Metrics Autoscaler Operator ๋ฐ์ดํฐ๋ฅผ ์์งํ์ง ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
์ญํ ์ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค. -
OpenShift Container Platform CLI(
oc
)๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
must-gather
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๋ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.์ฐธ๊ณํด๋ฌ์คํฐ์์ ์ ํ๋ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ถ๊ฐ ๋จ๊ณ๋ฅผ ์ํํด์ผ ํฉ๋๋ค. ๋ฏธ๋ฌ ๋ ์ง์คํธ๋ฆฌ์ ์ ๋ขฐํ ์ ์๋ CA๊ฐ ์๋ ๊ฒฝ์ฐ ๋จผ์ ์ ๋ขฐํ ์ ์๋ CA๋ฅผ ํด๋ฌ์คํฐ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ ํ๋ ๋คํธ์ํฌ์ ๋ชจ๋ ํด๋ฌ์คํฐ์ ๋ํด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๊ธฐ๋ณธ
must-gather
์ด๋ฏธ์ง๋ฅผ ์ด๋ฏธ์ง ์คํธ๋ฆผ์ผ๋ก ๊ฐ์ ธ์์ผ ํฉ๋๋ค.$ oc import-image is/must-gather -n openshift
๋ค์ ์ค ํ๋๋ฅผ ์ํํฉ๋๋ค.
Custom Metrics Autoscaler Operator
must-gather
๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.$ oc adm must-gather --image="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
must-gather
๋ช ๋ น์ ์ฌ์ฉ์ ์ ์ ์ด๋ฏธ์ง๋ Operator ํจํค์ง ๋งค๋ํ์คํธ์์ ์ง์ ๊ฐ์ ธ์์ Custom Metric Autoscaler Operator๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ํด๋ฌ์คํฐ์์ ์๋ํฉ๋๋ค.Custom Metric Autoscaler Operator ์ ๋ณด ์ธ์ ๊ธฐ๋ณธ
must-gather
๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Custom Metrics Autoscaler Operator ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์์ ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํฉ๋๋ค.
$ IMAGE="$(oc get packagemanifests openshift-custom-metrics-autoscaler-operator \ -n openshift-marketplace \ -o jsonpath='{.status.channels[?(@.name=="stable")].currentCSVDesc.annotations.containerImage}')"
์ฌ์ฉ์ ์ ์ Metrics Autoscaler Operator ์ด๋ฏธ์ง์ ํจ๊ป
oc adm must-gather
๋ฅผ ์ฌ์ฉํฉ๋๋ค.$ oc adm must-gather --image-stream=openshift/must-gather --image=${IMAGE}
์ 3.1. Custom Metric Autoscaler์ must-gather ์ถ๋ ฅ ์:
โโโ openshift-keda โโโ apps โ โโโ daemonsets.yaml โ โโโ deployments.yaml โ โโโ replicasets.yaml โ โโโ statefulsets.yaml โโโ apps.openshift.io โ โโโ deploymentconfigs.yaml โโโ autoscaling โ โโโ horizontalpodautoscalers.yaml โโโ batch โ โโโ cronjobs.yaml โ โโโ jobs.yaml โโโ build.openshift.io โ โโโ buildconfigs.yaml โ โโโ builds.yaml โโโ core โ โโโ configmaps.yaml โ โโโ endpoints.yaml โ โโโ events.yaml โ โโโ persistentvolumeclaims.yaml โ โโโ pods.yaml โ โโโ replicationcontrollers.yaml โ โโโ secrets.yaml โ โโโ services.yaml โโโ discovery.k8s.io โ โโโ endpointslices.yaml โโโ image.openshift.io โ โโโ imagestreams.yaml โโโ k8s.ovn.org โ โโโ egressfirewalls.yaml โ โโโ egressqoses.yaml โโโ keda.sh โ โโโ kedacontrollers โ โ โโโ keda.yaml โ โโโ scaledobjects โ โ โโโ example-scaledobject.yaml โ โโโ triggerauthentications โ โโโ example-triggerauthentication.yaml โโโ monitoring.coreos.com โ โโโ servicemonitors.yaml โโโ networking.k8s.io โ โโโ networkpolicies.yaml โโโ openshift-keda.yaml โโโ pods โ โโโ custom-metrics-autoscaler-operator-58bd9f458-ptgwx โ โ โโโ custom-metrics-autoscaler-operator โ โ โ โโโ custom-metrics-autoscaler-operator โ โ โ โโโ logs โ โ โ โโโ current.log โ โ โ โโโ previous.insecure.log โ โ โ โโโ previous.log โ โ โโโ custom-metrics-autoscaler-operator-58bd9f458-ptgwx.yaml โ โโโ custom-metrics-autoscaler-operator-58bd9f458-thbsh โ โ โโโ custom-metrics-autoscaler-operator โ โ โโโ custom-metrics-autoscaler-operator โ โ โโโ logs โ โโโ keda-metrics-apiserver-65c7cc44fd-6wq4g โ โ โโโ keda-metrics-apiserver โ โ โ โโโ keda-metrics-apiserver โ โ โ โโโ logs โ โ โ โโโ current.log โ โ โ โโโ previous.insecure.log โ โ โ โโโ previous.log โ โ โโโ keda-metrics-apiserver-65c7cc44fd-6wq4g.yaml โ โโโ keda-operator-776cbb6768-fb6m5 โ โโโ keda-operator โ โ โโโ keda-operator โ โ โโโ logs โ โ โโโ current.log โ โ โโโ previous.insecure.log โ โ โโโ previous.log โ โโโ keda-operator-776cbb6768-fb6m5.yaml โโโ policy โ โโโ poddisruptionbudgets.yaml โโโ route.openshift.io โโโ routes.yaml
์์ ๋๋ ํฐ๋ฆฌ์ ์์ฑ๋
must-gather
๋๋ ํฐ๋ฆฌ์ ์์ถ ํ์ผ์ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด Linux ์ด์ ์ฒด์ ๋ฅผ ์ฌ์ฉํ๋ ์ปดํจํฐ์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ 1
- 1
must-gather-local.5421342344627712289/
๋ฅผ ์ค์ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
- Red Hat Customer Portal์์ ํด๋น ์ง์ ์ฌ๋ก์ ์์ถ ํ์ผ์ ์ฒจ๋ถํฉ๋๋ค.
3.9. Operator ๋ฉํธ๋ฆญ ๋ณด๊ธฐ
Custom Metrics Autoscaler Operator๋ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ํฐ๋ง ๊ตฌ์ฑ ์์์์ ๊ฐ์ ธ์ค๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์งํ๋ฅผ ํ์ํฉ๋๋ค. PromQL(Prometheus Query Language)์ ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ์ ์ฟผ๋ฆฌํ์ฌ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ ์ง๋จํ ์ ์์ต๋๋ค. ์ปจํธ๋กค๋ฌ Pod๊ฐ ๋ค์ ์์๋๋ฉด ๋ชจ๋ ๋ฉํธ๋ฆญ์ด ์ฌ์ค์ ๋ฉ๋๋ค.
3.9.1. ์ฑ๋ฅ ์งํ ์ก์ธ์ค
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ์ ์ก์ธ์คํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
- OpenShift Container Platform ์น ์ฝ์์์ ๊ด๋ฆฌ์ ํ๋ฉด์ ์ ํํฉ๋๋ค.
- Observe โ Metrics ๋ฅผ ์ ํํฉ๋๋ค.
- ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค๋ ค๋ฉด Expression ํ๋์ PromQL ์ฟผ๋ฆฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ฟผ๋ฆฌ ์ถ๊ฐ๋ฅผ ์ ํํฉ๋๋ค.
3.9.1.1. ์ ๊ณต๋ Operator ์งํ
Custom Metrics Autoscaler Operator๋ OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ๋ณผ ์ ์๋ ๋ค์ ๋ฉํธ๋ฆญ์ ๋ ธ์ถํฉ๋๋ค.
๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
---|---|
|
ํน์ ์ค์ผ์ผ๋ฌ๊ฐ ํ์ฑ ์ํ์ธ์ง ์๋๋ฉด ๋นํ์ฑ์ธ์ง ์ฌ๋ถ์
๋๋ค. ๊ฐ |
| ๋์ ํ๊ท ์ ๊ณ์ฐํ๋ HPA(Horizontal Pod Autoscaler)์์ ์ฌ์ฉํ๋ ๊ฐ ์ค์ผ์ผ๋ฌ์ ๋ฉํธ๋ฆญ์ ํ์ฌ ๊ฐ์ ๋๋ค. |
| ๊ฐ ์ค์ผ์ผ๋ฌ์์ ํ์ฌ ๋ฉํธ๋ฆญ์ ๊ฒ์ํ๋ ๋๊ธฐ ์๊ฐ์ ๋๋ค. |
| ๊ฐ ํ์ฅ๊ธฐ์ ๋ฐ์ํ ์ค๋ฅ ์์ ๋๋ค. |
| ๋ชจ๋ scalers์ ๋ํด ๋ฐ์ํ ์ด ์ค๋ฅ ์์ ๋๋ค. |
| ์ค์ผ์ผ๋ง๋ ๊ฐ obejct์ ๋ํด ๋ฐ์ํ ์ค๋ฅ ์์ ๋๋ค. |
| ๊ฐ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ํ์ ๊ฐ ๋ค์์คํ์ด์ค์ ์๋ ์ด ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์ ์์ ๋๋ค. |
| ํธ๋ฆฌ๊ฑฐ ์ ํ๋ณ ์ด ํธ๋ฆฌ๊ฑฐ ์์ ๋๋ค. |
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ Admission Webhook ๋ฉํธ๋ฆญ
์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ Admission Webhook์์๋ ๋ค์ Prometheus ๋ฉํธ๋ฆญ๋ ๋ ธ์ถํฉ๋๋ค.
๋ฉํธ๋ฆญ ์ด๋ฆ | ์ค๋ช |
---|---|
| ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ ๊ฒ์ฆ ์์ ๋๋ค. |
| ๊ฒ์ฆ ์ค๋ฅ ์์ ๋๋ค. |
3.10. ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ์ถ๊ฐ ๋ฐฉ๋ฒ ์ดํด
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ฐฐํฌ, ์ํ ์ ์ฅ ์ธํธ ๋๋ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์ ๋ํ scaledObject
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํฉ๋๋ค. ์์
์ ๋ํ scaledJob
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํฉ๋๋ค.
์ค์ผ์ผ๋งํ ๊ฐ ์ํฌ๋ก๋์ ๋ํด ํ๋์ ํ์ฅ ์ค๋ธ์ ํธ๋ง ์์ฑํ ์ ์์ต๋๋ค. ๋ํ ๋์ผํ ์ํฌ๋ก๋์์ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ์ HPA(์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
3.10.1. ์ํฌ๋ก๋์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ์ถ๊ฐ
Deployment
,StatefulSet
๋๋ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ค๋ธ์ ํธ๋ก ์์ฑ๋ ์ํฌ๋ก๋์ ๋ํ ์ฌ์ฉ์ ์ ์
์งํ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Custom Metrics Autoscaler Operator๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ผ์ผ๋ง์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
oc describe PodMetrics <pod-name>
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ์ด ๋ค์๊ณผ ์ ์ฌํ๊ฒ ํ์๋๊ณ Usage์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์๋ฉ๋๋ค.$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
์ถ๋ ฅ ์
Name: openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Namespace: openshift-kube-scheduler Labels: <none> Annotations: <none> API Version: metrics.k8s.io/v1beta1 Containers: Name: wait-for-host-port Usage: Memory: 0 Name: scheduler Usage: Cpu: 8m Memory: 45440Ki Kind: PodMetrics Metadata: Creation Timestamp: 2019-05-23T18:47:56Z Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal Timestamp: 2019-05-23T18:47:56Z Window: 1m0s Events: <none>
์ค์ผ์ผ๋งํ๋ ค๋ ์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ Pod์๋ ์ง์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ ํ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Pod ์ฌ์์ ์
apiVersion: v1 kind: Pod # ... spec: containers: - name: app image: images.my-company.example/app:v4 resources: limits: memory: "128Mi" cpu: "500m" # ...
ํ๋ก์ธ์ค
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค. <
;2>
์ด๋ฆ, ์ค๋ธ์ ํธ ์ด๋ฆ <4&
gt; ๋ฐ ์ค๋ธ์ ํธ ์ข ๋ฅ <5>
๋ง ํ์ํฉ๋๋ค.์ค์ผ์ผ๋ง ์ค๋ธ์ ํธ์ ์
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "0" 1 name: scaledobject 2 namespace: my-namespace spec: scaleTargetRef: apiVersion: apps/v1 3 name: example-deployment 4 kind: Deployment 5 envSourceContainerName: .spec.template.spec.containers[0] 6 cooldownPeriod: 200 7 maxReplicaCount: 100 8 minReplicaCount: 0 9 metricsServer: 10 auditConfig: logFormat: "json" logOutputVolumeClaim: "persistentVolumeClaimName" policy: rules: - level: Metadata omitStages: "RequestReceived" omitManagedFields: false lifetime: maxAge: "2" maxBackup: "1" maxSize: "50" fallback: 11 failureThreshold: 3 replicas: 6 pollingInterval: 30 12 advanced: restoreToOriginalReplicaCount: false 13 horizontalPodAutoscalerConfig: name: keda-hpa-scale-down 14 behavior: 15 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 100 periodSeconds: 15 triggers: - type: prometheus 16 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: basic - authenticationRef: 17 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 18 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- ์ ํ ์ฌํญ: Custom Metrics Autoscaler Operator๊ฐ "์์ ์ ๋ํ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ์ฌ์ฉ" ์น์ ์ ์ค๋ช ๋ ๋๋ก ๋ณต์ ๋ณธ์ ์ง์ ๋ ๊ฐ์ผ๋ก ์ค์ผ์ผ๋งํ๊ณ ์๋ ์ค์ผ์ผ๋ง์ ์ค์งํ๋๋ก ์ง์ ํฉ๋๋ค.
- 2
- ์ด ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 3
- ์ ํ ์ฌํญ: ๋์ ๋ฆฌ์์ค์ API ๋ฒ์ ์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
apps/v1
์ ๋๋ค. - 4
- ์ค์ผ์ผ๋งํ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ ํ์
Deployment
,StatefulSet
๋๋CustomResource
๋ก ์ง์ ํฉ๋๋ค. - 6
- ์ ํ ์ฌํญ: ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์ํฌ๋ฆฟ์ ๋ณด์ ํ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๋ฆฌ์์ค์ ์ปจํ ์ด๋ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
.spec.template.spec.containers[0]
์ ๋๋ค. - 7
- ์ ํ ์ฌํญ์ ๋๋ค.
minReplicaCount
๋ฅผ0
300
์ ๋๋ค. - 8
- ์ ํ ์ฌํญ: ํ์ฅ ์ ์ต๋ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
100
์ ๋๋ค. - 9
- ์ ํ ์ฌํญ: ์ถ์ ์ ์ต์ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 10
- ์ ํ ์ฌํญ: "๊ฐ์ฌ ๋ก๊น ๊ตฌ์ฑ" ์น์ ์ ์ค๋ช ๋ ๋๋ก ๊ฐ์ฌ ๋ก๊ทธ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
- 11
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋ง๊ธฐ๊ฐ
failureThreshold
๋งค๊ฐ๋ณ์์ ์ ์๋ ํ์์ ๋ํ ์์ค์์ ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ค์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋์ฒดํ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค. ๋์ฒด ๋์์ ๋ํ ์์ธํ ๋ด์ฉ์ KEDA ์ค๋ช ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. - 12
- ์ ํ ์ฌํญ: ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ฐ๊ฒฉ(์ด)์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
30
์ ๋๋ค. - 13
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ๊ฐ ์ญ์ ๋ ํ ๋์ ๋ฆฌ์์ค๋ฅผ ์๋ ๋ณต์ ๋ณธ ์๋ก ํ์ฅํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
false
์ด๋ฉฐ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ๊ฐ ์ญ์ ๋ ๋ ๋ณต์ ๋ณธ ์๋ฅผ ์ ์งํฉ๋๋ค. - 14
- ์ ํ ์ฌํญ: ์ํ Pod ์๋ ์ค์ผ์ผ๋ฌ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
keda-hpa-{scaled-object-name}
์ ๋๋ค. - 15
- ์ ํ ์ฌํญ: "์ค์ผ์ด๋ฉ ์ ์ฑ " ์น์ ์ ์ค๋ช ๋ ๋๋ก Pod๋ฅผ ํ์ฅ ๋๋ ํ์ฅํ๋ ๋ฐ ์ฌ์ฉํ ์ค์ผ์ผ๋ง ์ ์ฑ ์ ์ง์ ํฉ๋๋ค.
- 16
- "์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ดํด" ์น์ ์ ์ค๋ช ๋ ๋๋ก ์ค์ผ์ผ๋ง ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์์์๋ OpenShift Container Platform ๋ชจ๋ํฐ๋ง์ ์ฌ์ฉํฉ๋๋ค.
- 17
- ์ ํ ์ฌํญ: "์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์์ฑ" ์น์ ์ ์ค๋ช ๋ ๋๋ก ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ง์ ํฉ๋๋ค.
- 18
- ์ ํ ์ฌํญ: "์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์์ฑ" ์น์ ์ ์ค๋ช ๋ ๋๋ก ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ง์ ํฉ๋๋ค.
์ฐธ๊ณ๋ค์์คํ์ด์ค ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ๊ณผ ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ๋ชจ๋ ์ง์ ํ ํ์๋ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
๊ฒ์ฆ
๋ช ๋ น ์ถ๋ ฅ์ ๋ณด๊ณ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get scaledobject <scaled_object_name>
์ถ๋ ฅ ์
NAME SCALETARGETKIND SCALETARGETNAME MIN MAX TRIGGERS AUTHENTICATION READY ACTIVE FALLBACK AGE scaledobject apps/v1.Deployment example-deployment 0 50 prometheus prom-triggerauthentication True True True 17s
์ถ๋ ฅ์์ ๋ค์ ํ๋๋ฅผ ๊ธฐ๋กํด ๋ก๋๋ค.
-
lg
GERS: ์ฌ์ฉ ์ค์ธ ํธ๋ฆฌ๊ฑฐ ๋๋ scaler๋ฅผ ๋ํ๋ ๋๋ค. -
AUTHENTICATION
: ์ฌ์ฉ๋๋ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ด๋ฆ์ ๋ํ๋ ๋๋ค. READY
: ์ค์ผ์ผ๋ง์ ์์ํ ์ค๋น๊ฐ ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.-
True
์ธ ๊ฒฝ์ฐ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ๊ฐ ์ค๋น๋ฉ๋๋ค. -
False
์ธ ๊ฒฝ์ฐ ์์ฑํ ์ค๋ธ์ ํธ ์ค ํ๋ ์ด์์ ์๋ ๋ฌธ์ ๋ก ์ธํด ํ์ฅ๋ ์ค๋ธ์ ํธ๊ฐ ์ค๋น๋์ง ์์ต๋๋ค.
-
:
์ค์ผ์ผ๋ง์ด ์งํ๋๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.-
True
์ธ ๊ฒฝ์ฐ ํ์ฅ์ด ์ํ๋ฉ๋๋ค. -
False
์ธ ๊ฒฝ์ฐ ๋ฉํธ๋ฆญ์ด ์๊ฑฐ๋ ์์ฑํ ์ค๋ธ์ ํธ ์ค ํ๋ ์ด์์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค์ผ์ผ๋ง์ด ์ํ๋์ง ์์ต๋๋ค.
-
FALLBACK
: ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์์ค์์ ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ฌ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.-
False
์ธ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ์์ ์งํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. -
True
์ธ ๊ฒฝ์ฐ ๋ฉํธ๋ฆญ์ด ์๊ฑฐ๋ ์์ฑํ ์ค๋ธ์ ํธ ์ค ํ๋ ์ด์์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์งํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
-
-
3.10.2. ์์ ์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ์ถ๊ฐ
๋ชจ๋ Job
์ค๋ธ์ ํธ์ ๋ํ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํ์ฅ๋ ์์ ์ ์ฌ์ฉํ์ฌ ์ค์ผ์ผ๋งํ๋ ๊ฒ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ ์ฉ์ ๋๋ค. ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ Red Hat ํ๋ก๋์ ์๋น์ค ์์ค ๊ณ์ฝ(SLA)์์ ์ง์๋์ง ์์ผ๋ฉฐ ๊ธฐ๋ฅ์ ์ผ๋ก ์์ ํ์ง ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํฅํ ์ ํ ๊ธฐ๋ฅ์ ์กฐ๊ธฐ์ ์ด์ฉํ ์ ์์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ณ ๊ฐ์ด ๊ธฐ๋ฅ์ ํ ์คํธํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Red Hat ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ์ง์ ๋ฒ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ง์ ๋ฒ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Custom Metrics Autoscaler Operator๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
kind: ScaledJob apiVersion: keda.sh/v1alpha1 metadata: name: scaledjob namespace: my-namespace spec: failedJobsHistoryLimit: 5 jobTargetRef: activeDeadlineSeconds: 600 1 backoffLimit: 6 2 parallelism: 1 3 completions: 1 4 template: 5 metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] maxReplicaCount: 100 6 pollingInterval: 30 7 successfulJobsHistoryLimit: 5 8 failedJobsHistoryLimit: 5 9 envSourceContainerName: 10 rolloutStrategy: gradual 11 scalingStrategy: 12 strategy: "custom" customScalingQueueLengthDeduction: 1 customScalingRunningJobPercentage: "0.5" pendingPodConditions: - "Ready" - "PodScheduled" - "AnyOtherCustomPodCondition" multipleScalersCalculation : "max" triggers: - type: prometheus 13 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "bearer" - authenticationRef: 14 name: prom-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 15 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- ์์ ์ ์คํํ ์ ์๋ ์ต๋ ๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค.
- 2
- ์์ ์ฌ์๋ ํ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
6
์ ๋๋ค. - 3
- ์ ํ ์ฌํญ: ์์ ์ด ๋ณ๋ ฌ๋ก ์คํํด์ผ ํ๋ Pod ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค.-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
- 4
- ์ ํ ์ฌํญ: ์์ ์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ํ์ํ๋ ๋ฐ ํ์ํ ์ฑ๊ณต์ ์ธ Pod ์๋ฃ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค. - ์๋ฃ ํ์๊ฐ ๊ณ ์ ๋ ๋ณ๋ ฌ ์์ ์ ๊ฒฝ์ฐ ์๋ฃ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.
-
์์
ํ๊ฐ ์๋ ๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ์ง ์์ผ๋ฉด
parallelism
๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋ฉ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
- 5
- ์ปจํธ๋กค๋ฌ์์ ์์ฑํ๋ Pod์ ํ ํ๋ฆฟ์ ์ง์ ํฉ๋๋ค.
- 6
- ์ ํ ์ฌํญ: ํ์ฅ ์ ์ต๋ ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
100
์ ๋๋ค. - 7
- ์ ํ ์ฌํญ: ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ฐ๊ฒฉ(์ด)์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
30
์ ๋๋ค. - 8
- ์ ํ ์ฌํญ: ์ฑ๊ณตํ ์์ ์๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
100
์ ๋๋ค. - 9
- ์ ํ ์ฌํญ: ์ ์งํด์ผ ํ๋ ์คํจํ ์์ ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
100
์ ๋๋ค. - 10
- ์ ํ ์ฌํญ: ์ฌ์ฉ์ ์ ์ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์ํฌ๋ฆฟ์ ๋ณด์ ํ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๋ฆฌ์์ค์ ์ปจํ ์ด๋ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
.spec.template.spec.containers[0]
์ ๋๋ค. - 11
- ์ ํ ์ฌํญ: ํ์ฅ๋ ์์ ์ด ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ๊ธฐ์กด ์์ ์ด ์ข ๋ฃ๋๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค.
-
๊ธฐ๋ณธ๊ฐ
: ์๋ ์ค์ผ์ผ๋ฌ๋ ์ฐ๊ฒฐ๋ ํ์ฅ ์์ ์ด ์ ๋ฐ์ดํธ๋๋ฉด ๊ธฐ์กด ์์ ์ ์ข ๋ฃํฉ๋๋ค. ์๋ ์ค์ผ์ผ๋ฌ๋ ์ต์ ์ฌ์์ผ๋ก ์์ ์ ๋ค์ ์์ฑํฉ๋๋ค. -
๊ด๋ จ๋ ์ค์ผ์ผ๋ง ์์
์ด ์
๋ฐ์ดํธ๋๋ฉด ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ๊ธฐ์กด ์์
์ ์ข
๋ฃํ์ง ์์ต๋๋ค.
์๋ ์ค์ผ์ผ๋ฌ๋ ์ต์ ์ฌ์์ ์ฌ์ฉํ์ฌ ์ ์์ ์ ์์ฑํฉ๋๋ค.
-
- 12
- ์ ํ ์ฌํญ: ์ค์ผ์ผ๋ง ์ ๋ต์
๊ธฐ๋ณธ
,์ฌ์ฉ์ ์ง์
๋๋์ ํํ
. ๊ธฐ๋ณธ๊ฐ์default
์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์ "๋ฆฌ์์ค" ์น์ ์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. - 13
- "์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ดํด" ์น์ ์ ์ค๋ช ๋ ๋๋ก ์ค์ผ์ผ๋ง ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ง์ ํฉ๋๋ค.
- 14
- ์ ํ ์ฌํญ: "์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์์ฑ" ์น์ ์ ์ค๋ช ๋ ๋๋ก ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ง์ ํฉ๋๋ค.
- 15
- ์ ํ ์ฌํญ: "์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ ์์ฑ" ์น์ ์ ์ค๋ช ๋ ๋๋ก ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ง์ ํฉ๋๋ค.์ฐธ๊ณ
๋ค์์คํ์ด์ค ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ๊ณผ ํด๋ฌ์คํฐ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ๋ชจ๋ ์ง์ ํ ํ์๋ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
๊ฒ์ฆ
๋ช ๋ น ์ถ๋ ฅ์ ๋ณด๊ณ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get scaledjob <scaled_job_name>
์ถ๋ ฅ ์
NAME MAX TRIGGERS AUTHENTICATION READY ACTIVE AGE scaledjob 100 prometheus prom-triggerauthentication True True 8s
์ถ๋ ฅ์์ ๋ค์ ํ๋๋ฅผ ๊ธฐ๋กํด ๋ก๋๋ค.
-
lg
GERS: ์ฌ์ฉ ์ค์ธ ํธ๋ฆฌ๊ฑฐ ๋๋ scaler๋ฅผ ๋ํ๋ ๋๋ค. -
AUTHENTICATION
: ์ฌ์ฉ๋๋ ํธ๋ฆฌ๊ฑฐ ์ธ์ฆ์ ์ด๋ฆ์ ๋ํ๋ ๋๋ค. READY
: ์ค์ผ์ผ๋ง์ ์์ํ ์ค๋น๊ฐ ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.-
True
์ธ ๊ฒฝ์ฐ ์ค์ผ์ผ๋ง๋ ์ค๋ธ์ ํธ๊ฐ ์ค๋น๋ฉ๋๋ค. -
False
์ธ ๊ฒฝ์ฐ ์์ฑํ ์ค๋ธ์ ํธ ์ค ํ๋ ์ด์์ ์๋ ๋ฌธ์ ๋ก ์ธํด ํ์ฅ๋ ์ค๋ธ์ ํธ๊ฐ ์ค๋น๋์ง ์์ต๋๋ค.
-
:
์ค์ผ์ผ๋ง์ด ์งํ๋๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.-
True
์ธ ๊ฒฝ์ฐ ํ์ฅ์ด ์ํ๋ฉ๋๋ค. -
False
์ธ ๊ฒฝ์ฐ ๋ฉํธ๋ฆญ์ด ์๊ฑฐ๋ ์์ฑํ ์ค๋ธ์ ํธ ์ค ํ๋ ์ด์์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค์ผ์ผ๋ง์ด ์ํ๋์ง ์์ต๋๋ค.
-
-
3.11. Custom Metrics Autoscaler Operator ์ ๊ฑฐ
OpenShift Container Platform ํด๋ฌ์คํฐ์์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. Custom Metrics Autoscaler Operator๋ฅผ ์ ๊ฑฐํ ํ Operator์ ๊ด๋ จ๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
KedaController
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ๋จผ์ ์ญ์ ํฉ๋๋ค. KedaController
CR์ ์ญ์ ํ์ง ์์ผ๋ฉด openshift-keda
ํ๋ก์ ํธ๋ฅผ ์ญ์ ํ ๋ OpenShift Container Platform์ด ์ค๋จ๋ ์ ์์ต๋๋ค. CR์ ์ญ์ ํ๊ธฐ ์ ์ Custom Metrics Autoscaler Operator๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ CR์ ์ญ์ ํ ์ ์์ต๋๋ค.
3.11.1. Custom Metrics Autoscaler Operator ์ค์น ์ ๊ฑฐ
๋ค์ ์ ์ฐจ์ ๋ฐ๋ผ OpenShift Container Platform ํด๋ฌ์คํฐ์์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Custom Metrics Autoscaler Operator๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
- OpenShift Container Platform ์น ์ฝ์์์ Operator โ ์ค์น๋ Operator๋ฅผ ํด๋ฆญํฉ๋๋ค.
- openshift-keda ํ๋ก์ ํธ๋ก ์ ํํฉ๋๋ค.
ECDHEda
Controller ์ฌ์ฉ์
์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค.- CustomMetricsAutoscaler Operator๋ฅผ ์ฐพ์ECDHEda Controller ํญ์ ํด๋ฆญํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ๋ค์ DeleteECDHEdaController๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ ๊ฑฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Custom Metrics Autoscaler Operator๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- Operators โ ์ค์น๋ Operators๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
CustomMetricsAutoscaler Operator๋ฅผ ์ฐพ์ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ Operator ์ค์น ์ ๊ฑฐ๋ฅผ ์ ํํฉ๋๋ค.
- ์ ๊ฑฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ํ ์ฌํญ: OpenShift CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ CRD๋ฅผ ์ญ์ ํฉ๋๋ค.
-
clustertriggerauthentications.keda.sh
-
kedacontrollers.keda.sh
-
scaledjobs.keda.sh
-
scaledobjects.keda.sh
-
triggerauthentications.keda.sh
$ oc delete crd clustertriggerauthentications.keda.sh kedacontrollers.keda.sh scaledjobs.keda.sh scaledobjects.keda.sh triggerauthentications.keda.sh
CRD๋ฅผ ์ญ์ ํ๋ฉด ๊ด๋ จ ์ญํ , ํด๋ฌ์คํฐ ์ญํ , ์ญํ ๋ฐ์ธ๋ฉ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋์ผ๋ก ์ญ์ ํด์ผ ํ๋ ๋ช ๊ฐ์ง ํด๋ฌ์คํฐ ์ญํ ์ด ์์ ์ ์์ต๋๋ค.
-
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ํด๋ฌ์คํฐ ์ญํ ์ ๋์ดํฉ๋๋ค.
$ oc get clusterrole | grep keda.sh
๋์ด๋ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ํด๋ฌ์คํฐ ์ญํ ์ ์ญ์ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc delete clusterrole.keda.sh-v1alpha1-admin
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ํด๋ฌ์คํฐ ์ญํ ๋ฐ์ธ๋ฉ์ ๋์ดํฉ๋๋ค.
$ oc get clusterrolebinding | grep keda.sh
๋์ด๋ ์ฌ์ฉ์ ์ ์ ์งํ ์๋ ์ค์ผ์ผ๋ฌ ํด๋ฌ์คํฐ ์ญํ ๋ฐ์ธ๋ฉ์ ์ญ์ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc delete clusterrolebinding.keda.sh-v1alpha1-admin
์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ ์๋ ์ค์ผ์ผ๋ฌ ํ๋ก์ ํธ๋ฅผ ์ญ์ ํฉ๋๋ค.
$ oc delete project openshift-keda
Cluster Metric Autoscaler Operator๋ฅผ ์ญ์ ํฉ๋๋ค.
$ oc delete operator/openshift-custom-metrics-autoscaler-operator.openshift-keda
4์ฅ. ๋ ธ๋์ ๋ํ Pod ๋ฐฐ์น ์ ์ด(์์ฝ)
4.1. ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น ์ ์ด
Pod ์์ฝ์ ํด๋ฌ์คํฐ ๋ด ๋ ธ๋์ ๋ํ ์ Pod ๋ฐฐ์น๋ฅผ ๊ฒฐ์ ํ๋ ๋ด๋ถ ํ๋ก์ธ์ค์ ๋๋ค.
์ค์ผ์ค๋ฌ ์ฝ๋๋ ์ Pod๊ฐ ์์ฑ๋ ๋ ํด๋น Pod๋ฅผ ๊ฐ์ํ๊ณ ์ด๋ฅผ ํธ์คํ ํ๋ ๋ฐ ๊ฐ์ฅ ์ ํฉํ ๋ ธ๋๋ฅผ ํ์ธํ ์ ์๋๋ก ๊น๋ํ๊ฒ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ง์คํฐ API๋ฅผ ์ฌ์ฉํ์ฌ Pod์ ๋ํ ๋ฐ์ธ๋ฉ(Pod์ ๋ ธ๋์ ๋ฐ์ธ๋ฉ)์ ์์ฑํฉ๋๋ค.
- ๊ธฐ๋ณธ Pod ์์ฝ
- OpenShift Container Platform์๋ ๋๋ถ๋ถ์ ์ฌ์ฉ์์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค. ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ ๊ณ ์ ํด๊ณผ ์ฌ์ฉ์ ์ ์ ํด์ ๋ชจ๋ ์ฌ์ฉํ์ฌ Pod์ ๊ฐ์ฅ ์ ํฉํ ํญ๋ชฉ์ ๊ฒฐ์ ํฉ๋๋ค.
- ๊ณ ๊ธ Pod ์์ฝ
์ Pod๊ฐ ๋ฐฐ์น๋๋ ์์น๋ฅผ ๋ ๋ง์ด ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ OpenShift Container Platform ๊ณ ๊ธ ์์ฝ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด Pod๊ฐ ํ์ํ๊ฑฐ๋ ํน์ ๋ ธ๋์์ ๋๋ ํน์ Pod์ ํจ๊ป ์คํํ๋ ๊ธฐ๋ณธ ์ค์ ์ด ์๋๋ก Pod๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ค์ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
4.1.1. ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ ์ ๋ณด
๊ธฐ๋ณธ OpenShift Container Platform Pod ์ค์ผ์ค๋ฌ๋ ํด๋ฌ์คํฐ ๋ด์ ๋ ธ๋์ ๋ํ ์ Pod ๋ฐฐ์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. Pod์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๊ตฌ์ฑ๋ ํ๋กํ์ ๋ฐ๋ผ ์ ํฉํ ๋ ธ๋๋ฅผ ์ฐพ์ต๋๋ค. ์์ ํ ๋ ๋ฆฝ์ ์ด๋ฉฐ ๋ ๋ฆฝ ์คํํ ์๋ฃจ์ ์ผ๋ก ์กด์ฌํฉ๋๋ค. Pod๋ฅผ ์์ ํ์ง ์์ต๋๋ค. Pod๋ฅผ ํน์ ๋ ธ๋์ ์ฐ๊ฒฐํ๋ Pod์ ๋ํ ๋ฐ์ธ๋ฉ์ ์์ฑํฉ๋๋ค.
4.1.1.1. ๊ธฐ๋ณธ ์์ฝ ์ดํด
๊ธฐ์กด ์ผ๋ฐ ์ค์ผ์ค๋ฌ๋ 3๋จ๊ณ ์์ ์์ Pod๋ฅผ ํธ์คํ ํ ๋ ธ๋๋ฅผ ์ ํํ๋ ๊ธฐ๋ณธ ํ๋ซํผ ์ ๊ณต ์ค์ผ์ค๋ฌ ์์ง์ ํด๋นํฉ๋๋ค.
- ๋ ธ๋ ํํฐ๋ง
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ธ๋๋ฅผ ์ง์ ๋ ์ ์ฝ ์กฐ๊ฑด ๋๋ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ํํฐ๋งํฉ๋๋ค. ์ด ์์ ์ ์์ ์ ๋๋ ํํฐ๋ผ๋ ํํฐ ํจ์ ๋ชฉ๋ก์ ํตํด ๊ฐ ๋ ธ๋ ๋ฅผ ์คํํ์ฌ ์ํ๋ฉ๋๋ค.
- ํํฐ๋ง๋ ๋ ธ๋ ๋ชฉ๋ก์ ์ฐ์ ์์ ์ง์
- ์ด ์์ ์ ์ผ๋ จ์ ์ฐ์ ์์ ๋๋ ์คํฌ๋ํ์ ํตํด ๊ฐ ๋ ธ๋๋ฅผ ์ ๋ฌํ๋ฉด 0~10 ์ฌ์ด์ ์ ์๋ฅผ ์ง์ ํ๋ ํจ์์ ๋๋ค. 0์ Pod๋ฅผ ํธ์คํ ํ๋ ๋ฐ ์ ํฉํ์ง ์์์ ๋ํ๋ด๊ณ 10์ด ํ์๋ฉ๋๋ค. ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ์ ๊ฐ ์ ์ ์ง์ ํจ์์ ๋ํด ๊ฐ๋จํ ๊ฐ์ค์น (์ ์ ์ซ์ ๊ฐ)๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๊ฐ ์ ์ ํจ์์์ ์ ๊ณตํ๋ ๋ ธ๋ ์ ์์ ๊ฐ์ค์น(๋๋ถ๋ถ ์ ์์ ๊ธฐ๋ณธ ๊ฐ์ค์น๋ 1์)๋ฅผ ๊ณฑํ ๋ค์ ๋ชจ๋ ์ ์์์ ์ ๊ณตํ๋ ๊ฐ ๋ ธ๋์ ์ ์๋ฅผ ์ถ๊ฐํ์ฌ ๊ฒฐํฉ๋ฉ๋๋ค. ๊ด๋ฆฌ์๊ฐ ์ด ๊ฐ์ค์น ํน์ฑ์ ์ฌ์ฉํ์ฌ ์ผ๋ถ ์ ์์ ๋ ๋์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์์ต๋๋ค.
- ์ต์ ์ ๋ ธ๋ ์ ํ
- ๋ ธ๋๋ ํด๋น ์ ์์ ๋ฐ๋ผ ์ ๋ ฌ๋๋ฉฐ ์ ์๊ฐ ๊ฐ์ฅ ๋์ ๋ ธ๋๊ฐ Pod๋ฅผ ํธ์คํ ํ๋๋ก ์ ํ๋ฉ๋๋ค. ์ฌ๋ฌ ๋ ธ๋์ ์ ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ ํด๋น ๋ ธ๋ ์ค ํ๋๊ฐ ๋ฌด์์๋ก ์ ํ๋ฉ๋๋ค.
4.1.2. ์ค์ผ์ค๋ฌ ์ฌ์ฉ ์ฌ๋ก
OpenShift Container Platform ๋ด์์ ์์ฝํ๋ ์ค์ ์ฌ์ฉ ์ฌ๋ก ์ค ํ๋๋ ์ ์ฐํ ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ์ ์ฑ ์ ์ง์ํ๋ ๊ฒ์ ๋๋ค.
4.1.2.1. ์ธํ๋ผ ํ ํด๋ก์ง ์์ค
๊ด๋ฆฌ์๋ ๋
ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ์ฌ ์ธํ๋ผ(๋
ธ๋)์ ๋ค์ํ ํ ํด๋ก์ง ์์ค์ ์ ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด region=r1
, zone=z1
, rack=s1
๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฌํ ๋ผ๋ฒจ ์ด๋ฆ์๋ ํน๋ณํ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ๊ด๋ฆฌ์๋ ๋์/๋น๋ฉ/๋ฐฉ๊ณผ ๊ฐ์ ์ธํ๋ผ ์์ค์ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ง์ ํ ์ ์์ต๋๋ค. ๋ํ ๊ด๋ฆฌ์๋ ์ธํ๋ผ ํ ํด๋ก์ง์ ์ํ๋ ์์ ์์ค์ ์ ์ํ ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ธ ๊ฐ์ง ์์ค์ด ์ ํฉํฉ๋๋ค(์: region
โ zones
โ racks
). ๊ด๋ฆฌ์๋ ๋ชจ๋ ์กฐํฉ์ ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ์ง์ ํ ์ ์์ต๋๋ค.
4.1.2.2. ์ ์ฌ์ฑ
๊ด๋ฆฌ์๋ ์์์ ํ ํด๋ก์ง ์์ค ๋๋ ์ฌ๋ฌ ์์ค์๋ ์ ์ฌ์ฑ์ ์ง์ ํ๋๋ก ์ค์ผ์ค๋ฌ๋ฅผ ๊ตฌ์ฑํ ์ ์์ด์ผ ํฉ๋๋ค. ํน์ ์์ค์ ์ ์ฌ์ฑ์ ๋์ผํ ์๋น์ค์ ์ํ๋ ๋ชจ๋ Pod๊ฐ ๋์ผํ ์์ค์ ์ํ๋ ๋ ธ๋์ ์์ฝ๋จ์ ๋ํ๋ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ด๋ฆฌ์๊ฐ ํผ์ด Pod๊ฐ ์ง๋ฆฌ์ ์ผ๋ก ๋๋ฌด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ง ์๋๋ก ํ ์ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๊ธฐ ์๊ฐ ์๊ตฌ ์ฌํญ์ด ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋์ผํ ์ ์ฌ์ฑ ๊ทธ๋ฃน ๋ด์์ Pod๋ฅผ ํธ์คํ ํ ์ ์๋ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์์ฝํ์ง ์์ต๋๋ค.
Pod๋ฅผ ์์ฝํ ์์น๋ฅผ ๋ ์ ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๋ํ Pod ๋ฐฐ์น ์ ์ด ๋ฐ ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ์ฌ์ฉํ์ฌ ๊ธฐํ Pod์ ๊ด๋ จ๋ Pod ๋ฐฐ์น๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ด๋ฆฌ์๋ ์ด๋ฌํ ๊ณ ๊ธ ์์ฝ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฝํ ์ ์๋ ๋ ธ๋๋ฅผ ์ง์ ํ๊ณ ๊ธฐํ Pod์ ๊ด๋ จ๋ ์์ฝ์ ๊ฐ์ ์ ์ฉํ๊ฑฐ๋ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
4.1.2.3. ์ ์ฌ์ฑ ๋ฐฉ์ง
๊ด๋ฆฌ์๋ ์์์ ํ ํด๋ก์ง ์์ค ๋๋ ์ฌ๋ฌ ์์ค์๋ ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ง์ ํ๋๋ก ์ค์ผ์ค๋ฌ๋ฅผ ๊ตฌ์ฑํ ์ ์์ด์ผ ํฉ๋๋ค. ํน์ ์์ค์ ์ ์ฌ์ฑ ๋ฐฉ์ง(๋๋ '๋ถ๋ฐฐ')๋ ๋์ผํ ์๋น์ค์ ์ํ๋ ๋ชจ๋ Pod๊ฐ ํด๋น ์์ค์ ์ํ๋ ๋ ธ๋์ ๋ถ๋ฐฐ๋์ด ์์์ ๋ํ๋ ๋๋ค. ์ด ๊ฒฝ์ฐ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๋ถ๋ฐฐ๋ฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ์ ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ ธ๋์์ ๊ฐ๋ฅํ ํ ๊ท ๋ฑํ๊ฒ ์๋น์ค Pod์ ๊ท ํ์ ๋ง์ถ๋ ค๊ณ ํฉ๋๋ค.
Pod๋ฅผ ์์ฝํ ์์น๋ฅผ ๋ ์ ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๋ํ Pod ๋ฐฐ์น ์ ์ด ๋ฐ ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ์ฌ์ฉํ์ฌ ๊ธฐํ Pod์ ๊ด๋ จ๋ Pod ๋ฐฐ์น๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ด๋ฆฌ์๋ ์ด๋ฌํ ๊ณ ๊ธ ์์ฝ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฝํ ์ ์๋ ๋ ธ๋๋ฅผ ์ง์ ํ๊ณ ๊ธฐํ Pod์ ๊ด๋ จ๋ ์์ฝ์ ๊ฐ์ ์ ์ฉํ๊ฑฐ๋ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
4.2. ์ค์ผ์ค๋ฌ ํ๋กํ์ ์ฌ์ฉํ์ฌ Pod ์์ฝ
์์ฝ ํ๋กํ์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ๋ด์ ๋ ธ๋์ Pod๋ฅผ ์์ฝํ๋๋ก OpenShift Container Platform์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
4.2.1. ์ค์ผ์ค๋ฌ ํ๋กํ ์ ๋ณด
์ค์ผ์ค๋ฌ ํ๋กํ์ ์ง์ ํ์ฌ ๋ ธ๋์ Pod๋ฅผ ์์ฝํ๋ ๋ฐฉ๋ฒ์ ์ ์ดํ ์ ์์ต๋๋ค.
๋ค์ ์ค์ผ์ค๋ฌ ํ๋กํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
LowNodeUtilization
- ์ด ํ๋กํ์ ์ฌ๋ฌ ๋ ธ๋์ Pod๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ์ฌ ๋ ธ๋๋น ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ค์ ๋๋ค. ์ด ํ๋กํ์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ ๋์์ ์ ๊ณตํฉ๋๋ค.
HighNodeUtilization
- ์ด ํ๋กํ์ ๊ฐ๋ฅํ ํ ๋ง์ Pod๋ฅผ ๊ฐ๋ฅํ ํ ์์์ ๋ ธ๋์ ๋ฐฐ์นํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ธ๋ ์๊ฐ ์ต์ํ๋๊ณ ๋ ธ๋๋น ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ๋์ด๋ฉ๋๋ค.
NoScoring
- ๋ชจ๋ ์ ์ ํ๋ฌ๊ทธ์ธ์ ๋นํ์ฑํํ์ฌ ๊ฐ์ฅ ๋น ๋ฅธ ์ค์ผ์ค๋ง ์ฃผ๊ธฐ๋ฅผ ์ํด ๋๊ธฐ ์๊ฐ์ด ์งง์ ํ๋กํ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ณด๋ค ์ ์ํ๊ฒ ๋ ๋์ ์์ฝ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค.
4.2.2. ์ค์ผ์ค๋ฌ ํ๋กํ ๊ตฌ์ฑ
์ค์ผ์ค๋ฌ ํ๋กํ์ ์ฌ์ฉํ๋๋ก ์ค์ผ์ค๋ฌ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
์ญํ ์ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค.
์ ์ฐจ
Scheduler
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc edit scheduler cluster
spec.profile
ํ๋์ ์ฌ์ฉํ ํ๋กํ์ ์ง์ ํฉ๋๋ค.apiVersion: config.openshift.io/v1 kind: Scheduler metadata: name: cluster #... spec: mastersSchedulable: false profile: HighNodeUtilization 1 #...
- 1
LowNodeUtilization
,HighNodeUtilization
๋๋NoScoring
์ผ๋ก ์ค์ ํฉ๋๋ค.
- ํ์ผ์ ์ ์ฅํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค.
4.3. ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ Pod์ ์๋์ ์ธ Pod ๋ฐฐ์น
์ ์ฌ์ฑ์ ์์ฝํ ๋ ธ๋๋ฅผ ์ ์ดํ๋ Pod์ ์์ฑ์ ๋๋ค. ์ ์ฌ์ฑ ๋ฐฉ์ง๋ Pod๊ฐ ๋ ธ๋์์ ์์ฝ๋์ง ์๋๋ก ํ๋ Pod์ ์์ฑ์ ๋๋ค.
OpenShift Container Platform์์ Pod ์ ์ฌ์ฑ ๋ฐ Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ Pod์ ํค/๊ฐ ๋ผ๋ฒจ์ ๋ฐ๋ผ Pod๋ฅผ ์์ฝํ ์ ์๋ ๋ ธ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
4.3.1. Pod ์ ์ฌ์ฑ ์ดํด
Pod ์ ์ฌ์ฑ ๋ฐ Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ Pod์ ํค/๊ฐ ๋ผ๋ฒจ์ ๋ฐ๋ผ Pod๋ฅผ ์์ฝํ ์ ์๋ ๋ ธ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- Pod ์ ์ฌ์ฑ์ ์ฌ์ฉํ๋ฉด ์ Pod์ ๋ผ๋ฒจ ์ ํ๊ธฐ๊ฐ ํ์ฌ Pod์ ๋ผ๋ฒจ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ Pod์ ๋์ผํ ๋ ธ๋์์ ์ Pod๋ฅผ ์ฐพ๋๋ก ์ค์ผ์ค๋ฌ์ ์ง์ํ ์ ์์ต๋๋ค.
- Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ๋ฉด ์ Pod์ ๋ผ๋ฒจ ์ ํ๊ธฐ๊ฐ ํ์ฌ Pod์ ๋ผ๋ฒจ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ์์ ๋์ผํ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod์ ๋์ผํ ๋ ธ๋์์ ์ Pod๋ฅผ ์ฐพ์ง ์๋๋ก ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ ์ฌ์ฑ ๊ท์น์ ์ฌ์ฉํ์ฌ ์๋น์ค ๋ด์์ ๋๋ ๋ค๋ฅธ ์๋น์ค์ Pod์ ๊ด๋ จํ์ฌ Pod๋ฅผ ๋ถ๋ฐฐํ๊ฑฐ๋ ํจํค์งํ ์ ์์ต๋๋ค. ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ์ฌ์ฉํ๋ฉด ํน์ ์๋น์ค์ Pod๊ฐ ์ฒซ ๋ฒ์งธ ์๋น์ค์ Pod ์ฑ๋ฅ์ ๋ฐฉํดํ๋ ๊ฒ์ผ๋ก ์๋ ค์ง ๋ค๋ฅธ ์๋น์ค์ Pod์ ๋์ผํ ๋ ธ๋์ ์์ฝ๋์ง ์๋๋ก ํ ์ ์์ต๋๋ค. ๋๋ ์๋น์ค์ Pod๋ฅผ ๋ ธ๋, ๊ฐ์ฉ์ฑ ์์ญ ๋๋ ๊ฐ์ฉ์ฑ ์งํฉ์ ๋ถ๋ฐฐํ์ฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๋ผ๋ฒจ ์ ํ๊ธฐ๋ ์ฌ๋ฌ Pod ๋ฐฐํฌ๊ฐ ์๋ Pod์ ์ผ์นํ ์ ์์ต๋๋ค. ์ผ์นํ๋ Pod๋ฅผ ๋ฐฉ์งํ๋๋ก ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ๊ตฌ์ฑํ ๋ ๋ผ๋ฒจ์ ๊ณ ์ ํ ์กฐํฉ์ ์ฌ์ฉํฉ๋๋ค.
Pod ์ ์ฌ์ฑ ๊ท์น์๋ ํ์ ๋ฐ ๊ธฐ๋ณธ ๋ ๊ฐ์ง์ ์ ํ์ด ์์ต๋๋ค.
๋ ธ๋์ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ๋จผ์ ํ์ ๊ท์น์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ๊ท์น์ ๊ท์น์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๊ฐ ๊ท์น์ ์ ์ฉํ๋ ค๊ณ ํ์ง๋ง ๋ฐ๋์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค.
Pod ์ฐ์ ์์ ๋ฐ ์ ์ ์ค์ ์ ๋ฐ๋ผ ์ ์ฌ์ฑ ์๊ตฌ ์ฌํญ์ ์๋ฐํ์ง ์์ผ๋ฉด ์ค์ผ์ค๋ฌ์์ Pod์ ์ ์ ํ ๋ ธ๋๋ฅผ ์ฐพ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ Pod๋ฅผ ์์ฝํ์ง ๋ชปํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ํฉ์ ๋ฐฉ์งํ๋ ค๋ฉด ์ฐ์ ์์๊ฐ ๊ฐ์ Pod๋ฅผ ์ฌ์ฉํ์ฌ Pod ์ ์ฌ์ฑ์ ์ ์คํ๊ฒ ๊ตฌ์ฑํฉ๋๋ค.
Pod
์ฌ์ ํ์ผ์ ํตํด Pod ์ ์ฌ์ฑ/์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ํ์ ๊ท์น, ๊ธฐ๋ณธ ๊ท์น ๋๋ ๋ ๋ค ์ง์ ํ ์ ์์ต๋๋ค. ๋ ๋ค ์ง์ ํ๋ ๊ฒฝ์ฐ ๋
ธ๋๋ ๋จผ์ ํ์ ๊ท์น์ ์ถฉ์กฑํ ๋ค์ ๊ธฐ๋ณธ ๊ท์น์ ์ถฉ์กฑํ๋ ค๊ณ ํฉ๋๋ค.
๋ค์ ์์ ์์๋ Pod ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ํด ๊ตฌ์ฑ๋ Pod
์ฌ์์ ๋ณด์ฌ์ค๋๋ค.
์ด ์์ ์์ Pod ์ ์ฌ์ฑ ๊ท์น์ ๋
ธ๋์ ์ด๋ฏธ ์คํ ์ค์ธ Pod๊ฐ ํ ๊ฐ ์ด์ ์๊ณ ํค๊ฐ security
์ด๊ณ ๊ฐ์ด S1
์ธ ๋ผ๋ฒจ์ด ์๋ ๊ฒฝ์ฐ์๋ง ๋
ธ๋์ Pod๋ฅผ ์์ฝํ ์ ์์์ ๋ํ๋
๋๋ค. Pod ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ๋
ธ๋์์ ์ด๋ฏธ Pod๋ฅผ ์คํ ์ค์ด๊ณ ํค๊ฐ security
์ด๊ณ ๊ฐ์ด S2
์ธ ๋ผ๋ฒจ์ด ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ๋
ธ๋์ ์์ฝํ์ง ์๋ ๊ฒ์ ์ ํธํจ์ ๋ํ๋
๋๋ค.
Pod ์ ์ฌ์ฑ์ด ํฌํจ๋ ์ํ Pod
๊ตฌ์ฑ ํ์ผ
apiVersion: v1 kind: Pod metadata: name: with-pod-affinity spec: affinity: podAffinity: 1 requiredDuringSchedulingIgnoredDuringExecution: 2 - labelSelector: matchExpressions: - key: security 3 operator: In 4 values: - S1 5 topologyKey: failure-domain.beta.kubernetes.io/zone containers: - name: with-pod-affinity image: docker.io/ocpqe/hello-pod
- 1
- Pod ์ ์ฌ์ฑ์ ๊ตฌ์ฑํ๋ ์คํ ์์ ๋๋ค.
- 2
- ํ์ํ ๊ท์น์ ์ ์ํฉ๋๋ค.
- 3 5
- ๊ท์น์ ์ ์ฉํ๋ ค๋ฉด ์ผ์นํด์ผ ํ๋ ํค ๋ฐ ๊ฐ(๋ผ๋ฒจ)์ ๋๋ค.
- 4
- ์ด ์ฐ์ฐ์๋ ๊ธฐ์กด Pod์ ๋ผ๋ฒจ๊ณผ ์ Pod ์ฌ์์ ์๋
matchExpression
๋งค๊ฐ๋ณ์์ ๊ฐ ์งํฉ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.In
,NotIn
,Exists
๋๋DoesNotExist
์ผ ์ ์์ต๋๋ค.
Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๊ฐ ํฌํจ๋ ์ํ Pod
๊ตฌ์ฑ ํ์ผ
apiVersion: v1 kind: Pod metadata: name: with-pod-antiaffinity spec: affinity: podAntiAffinity: 1 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 3 podAffinityTerm: labelSelector: matchExpressions: - key: security 4 operator: In 5 values: - S2 topologyKey: kubernetes.io/hostname containers: - name: with-pod-affinity image: docker.io/ocpqe/hello-pod
- 1
- Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ๊ตฌ์ฑํ๋ ์คํ ์์ ๋๋ค.
- 2
- ๊ธฐ๋ณธ ๊ท์น์ ์ ์ํฉ๋๋ค.
- 3
- ๊ธฐ๋ณธ ๊ท์น์ ๊ฐ์ค์น๋ฅผ ์ง์ ํฉ๋๋ค. ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ๋์ ๋ ธ๋๊ฐ ์ฐ์ ํฉ๋๋ค.
- 4
- ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ด ์ ์ฉ๋๋ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ Pod ๋ผ๋ฒจ์ ๋ํ ์ค๋ช ์ ๋๋ค. ๋ผ๋ฒจ์ ํค์ ๊ฐ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ด ์ฐ์ฐ์๋ ๊ธฐ์กด Pod์ ๋ผ๋ฒจ๊ณผ ์ Pod ์ฌ์์ ์๋
matchExpression
๋งค๊ฐ๋ณ์์ ๊ฐ ์งํฉ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.In
,NotIn
,Exists
๋๋DoesNotExist
์ผ ์ ์์ต๋๋ค.
๋ฐํ์ ์ ๋ ธ๋์ ๋ผ๋ฒจ์ด ๋ณ๊ฒฝ๋์ด Pod์ ์ ์ฌ์ฑ ๊ท์น์ด ๋ ์ด์ ์ถฉ์กฑ๋์ง ์๋ ๊ฒฝ์ฐ Pod๊ฐ ๋ ธ๋์์ ๊ณ์ ์คํ๋ฉ๋๋ค.
4.3.2. Pod ์ ์ฌ์ฑ ๊ท์น ๊ตฌ์ฑ
๋ค์ ๋จ๊ณ์์๋ ๋ผ๋ฒจ์ด ์๋ Pod ๋ฐ ์ ์ฌ์ฑ์ ์ฌ์ฉํ์ฌ ํด๋น Pod์ ์์ฝํ ์ ์๋ Pod๋ฅผ ์์ฑํ๋ ๊ฐ๋จํ 2-Pod ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
์์ฝ๋ Pod์ ์ ํธ๋๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ ์ฐจ
Pod ์ฌ์์์ ํน์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: security-s1 labels: security: S1 spec: containers: - name: security-s1 image: docker.io/ocpqe/hello-pod
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <pod-spec>.yaml
๋ค๋ฅธ Pod๋ฅผ ์์ฑํ ๋ ์ ์ฌ์ฑ์ ์ถ๊ฐํ๋๋ก ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋ค์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: security-s1-east #... spec affinity 1 podAffinity: requiredDuringSchedulingIgnoredDuringExecution: 2 - labelSelector: matchExpressions: - key: security 3 values: - S1 operator: In 4 topologyKey: topology.kubernetes.io/zone 5 #...
- 1
- Pod ์ ์ฌ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
- 2
requiredDuringSchedulingIgnoredDuringExecution
๋งค๊ฐ๋ณ์ ๋๋preferredDuringSchedulingIgnoredDuringExecution
๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.- 3
- ์ถฉ์กฑํด์ผ ํ๋
ํค์
๊ฐ์
์ง์ ํฉ๋๋ค. ์ Pod๋ฅผ ๋ค๋ฅธ Pod์ ํจ๊ป ์์ฝํ๋ ค๋ฉด ์ฒซ ๋ฒ์งธ Pod์ ๋ผ๋ฒจ๊ณผ ๋์ผํkey
๋ฐvalues
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - 4
์ฐ์ฐ์
๋ฅผ ์ง์ ํฉ๋๋ค. ์ฐ์ฐ์๋In
,NotIn
,Exists
๋๋DoesNotExist
์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ด ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ฐ์ฐ์In
์ ์ฌ์ฉํฉ๋๋ค.- 5
- ์ด๋ฌํ ํ ํด๋ก์ง ๋๋ฉ์ธ์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋ฉฐ ๋ฏธ๋ฆฌ ์ฑ์์ ธ ์๋ Kubernetes ๋ผ๋ฒจ์ธ
topologyKey
๋ฅผ ์ง์ ํฉ๋๋ค.
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <pod-spec>.yaml
4.3.3. Pod ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น ๊ตฌ์ฑ
๋ค์ ๋จ๊ณ์์๋ ๋ผ๋ฒจ์ด ์๋ Pod ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ธฐ๋ณธ ๊ท์น์ ์ฌ์ฉํ์ฌ ํด๋น Pod์ ์์ฝํ์ง ์๋ Pod๋ฅผ ์์ฑํ๋ ๊ฐ๋จํ 2-Pod ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
์์ฝ๋ Pod์ ์ ํธ๋๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
Pod ์ฌ์์์ ํน์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: security-s1 labels: security: S1 spec: containers: - name: security-s1 image: docker.io/ocpqe/hello-pod
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <pod-spec>.yaml
๋ค๋ฅธ Pod๋ฅผ ์์ฑํ ๋ ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋ค์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: security-s2-east #... spec affinity 1 podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 3 podAffinityTerm: labelSelector: matchExpressions: - key: security 4 values: - S1 operator: In 5 topologyKey: kubernetes.io/hostname 6 #...
- 1
- Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- 2
requiredDuringSchedulingIgnoredDuringExecution
๋งค๊ฐ๋ณ์ ๋๋preferredDuringSchedulingIgnoredDuringExecution
๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.- 3
- ๊ธฐ๋ณธ ๊ท์น์ ๊ฒฝ์ฐ ๋ ธ๋์ ๊ฐ์ค์น 1-100์ ์ง์ ํฉ๋๋ค. ๊ฐ์ค์น๊ฐ ๋์ ๋ ธ๋๊ฐ ์ฐ์ ํฉ๋๋ค.
- 4
- ์ถฉ์กฑํด์ผ ํ๋
ํค์
๊ฐ์
์ง์ ํฉ๋๋ค. ์ Pod๋ฅผ ๋ค๋ฅธ Pod์ ํจ๊ป ์์ฝํ์ง ์์ผ๋ ค๋ฉด ์ฒซ ๋ฒ์งธ Pod์ ๋ผ๋ฒจ๊ณผ ๋์ผํkey
๋ฐvalues
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - 5
์ฐ์ฐ์
๋ฅผ ์ง์ ํฉ๋๋ค. ์ฐ์ฐ์๋In
,NotIn
,Exists
๋๋DoesNotExist
์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ด ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ฐ์ฐ์In
์ ์ฌ์ฉํฉ๋๋ค.- 6
- ์ด๋ฌํ ํ ํด๋ก์ง ๋๋ฉ์ธ์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฏธ๋ฆฌ ์ฑ์์ง Kubernetes ๋ผ๋ฒจ ์ธ
topologyKey
๋ฅผ ์ง์ ํฉ๋๋ค.
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <pod-spec>.yaml
4.3.4. ์ํ Pod ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น
๋ค์ ์์ ์์๋ Pod ์ ์ฌ์ฑ ๋ฐ Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
4.3.4.1. Pod ์ ์ฌ์ฑ
๋ค์ ์์ ์์๋ ์ผ์นํ๋ ๋ผ๋ฒจ ๋ฐ ๋ผ๋ฒจ ์ ํ๊ธฐ๊ฐ ์๋ Pod์ Pod ์ ์ฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
Pod team4์๋ ๋ผ๋ฒจ
team:4
๊ฐ ์์ต๋๋ค.apiVersion: v1 kind: Pod metadata: name: team4 labels: team: "4" #... spec: containers: - name: ocp image: docker.io/ocpqe/hello-pod #...
Pod team4a์๋
podAffinity
์๋์ ๋ผ๋ฒจ ์ ํ๊ธฐteam:4
๊ฐ ์์ต๋๋ค.apiVersion: v1 kind: Pod metadata: name: team4a #... spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: team operator: In values: - "4" topologyKey: kubernetes.io/hostname containers: - name: pod-affinity image: docker.io/ocpqe/hello-pod #...
- team4a Pod๋ team4 Pod์ ๋์ผํ ๋ ธ๋์ ์์ฝ๋ฉ๋๋ค.
4.3.4.2. Pod ์ ์ฌ์ฑ ๋ฐฉ์ง
๋ค์ ์์ ์์๋ ์ผ์นํ๋ ๋ผ๋ฒจ ๋ฐ ๋ผ๋ฒจ ์ ํ๊ธฐ๊ฐ ์๋ Pod์ Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
Pod pod-s1์๋ ๋ผ๋ฒจ
security:s1
์ด ์์ต๋๋ค.apiVersion: v1 kind: Pod metadata: name: pod-s1 labels: security: s1 #... spec: containers: - name: ocp image: docker.io/ocpqe/hello-pod #...
Pod pod-s2์๋
podAntiAffinity
์๋์ ๋ผ๋ฒจ ์ ํ๊ธฐsecurity:s1
์ด ์์ต๋๋ค.apiVersion: v1 kind: Pod metadata: name: pod-s2 #... spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - s1 topologyKey: kubernetes.io/hostname containers: - name: pod-antiaffinity image: docker.io/ocpqe/hello-pod #...
-
Pod pod-s2๋
pod-s1
๊ณผ ๋์ผํ ๋ ธ๋์ ์์ฝํ ์ ์์ต๋๋ค.
4.3.4.3. ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์๋ Pod ์ ์ฌ์ฑ
๋ค์ ์์ ์์๋ ์ผ์นํ๋ ๋ผ๋ฒจ ๋ฐ ๋ผ๋ฒจ ์ ํ๊ธฐ๊ฐ ์๋ Pod์ Pod ์ ์ฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
Pod pod-s1์๋ ๋ผ๋ฒจ
security:s1
์ด ์์ต๋๋ค.apiVersion: v1 kind: Pod metadata: name: pod-s1 labels: security: s1 #... spec: containers: - name: ocp image: docker.io/ocpqe/hello-pod #...
Pod pod-s2์๋ ๋ผ๋ฒจ ์ ํ๊ธฐ
security:s2
๊ฐ ์์ต๋๋ค.apiVersion: v1 kind: Pod metadata: name: pod-s2 #... spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - s2 topologyKey: kubernetes.io/hostname containers: - name: pod-affinity image: docker.io/ocpqe/hello-pod #...
security:s2
๋ผ๋ฒจ์ด ์๋ Pod๊ฐ ํฌํจ๋ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ Pod pod-s2๋ ์์ฝ๋์ง ์์ต๋๋ค. ํด๋น ๋ผ๋ฒจ์ด ์๋ ๊ธฐํ Pod๊ฐ ์๋ ๊ฒฝ์ฐ ์ Pod๋ ๋ณด๋ฅ ์ค์ธ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE IP NODE pod-s2 0/1 Pending 0 32s <none>
4.4. ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๋ํ Pod ๋ฐฐ์น ์ ์ด
์ ์ฌ์ฑ์ ์์ฝํ ๋ ธ๋๋ฅผ ์ ์ดํ๋ Pod์ ์์ฑ์ ๋๋ค.
OpenShift Container Platform ๋ ธ๋ ์ ์ฌ์ฑ์ ์ค์ผ์ค๋ฌ์์ Pod๋ฅผ ๋ฐฐ์นํ ์ ์๋ ์์น๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ท์น ์งํฉ์ ๋๋ค. ๊ท์น์ ๋ ธ๋์ ์ฌ์ฉ์ ์ ์ ๋ผ๋ฒจ๊ณผ Pod์ ์ง์ ๋ ๋ผ๋ฒจ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํฉ๋๋ค.
4.4.1. ๋ ธ๋ ์ ์ฌ์ฑ ์ดํด
๋ ธ๋ ์ ์ฌ์ฑ์ ์ฌ์ฉํ๋ฉด Pod์์ Pod๋ฅผ ๋ฐฐ์นํ ์ ์๋ ๋ ธ๋ ๊ทธ๋ฃน์ ๋ํ ์ ์ฌ์ฑ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ ธ๋๋ ๋ฐฐ์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ํน์ CPU ๋๋ ํน์ ๊ฐ์ฉ์ฑ ์์ญ์ด ์๋ ๋ ธ๋์์๋ง ์คํํ๋๋ก Pod๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น์๋ ํ์ ๋ฐ ๊ธฐ๋ณธ ๋ ๊ฐ์ง์ ์ ํ์ด ์์ต๋๋ค.
๋ ธ๋์ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ๋จผ์ ํ์ ๊ท์น์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ ๊ท์น์ ๊ท์น์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๊ฐ ๊ท์น์ ์ ์ฉํ๋ ค๊ณ ํ์ง๋ง ๋ฐ๋์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค.
๋ ธ๋์ ๋ผ๋ฒจ์ด ๋ฐํ์์ ๋ณ๊ฒฝ๋์ด Pod์ ๋ํ ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น์ด ๋ ์ด์ ์ถฉ์กฑ๋์ง ์์ผ๋ฉด Pod๊ฐ ํด๋น ๋ ธ๋์์ ๊ณ์ ์คํ๋ฉ๋๋ค.
๋
ธ๋ ์ ์ฌ์ฑ์ Pod
์ฌ์ ํ์ผ์ ํตํด ๊ตฌ์ฑํฉ๋๋ค. ํ์ ๊ท์น, ๊ธฐ๋ณธ ๊ท์น ๋๋ ๋ ๋ค ์ง์ ํ ์ ์์ต๋๋ค. ๋ ๋ค ์ง์ ํ๋ ๊ฒฝ์ฐ ๋
ธ๋๋ ๋จผ์ ํ์ ๊ท์น์ ์ถฉ์กฑํ ๋ค์ ๊ธฐ๋ณธ ๊ท์น์ ์ถฉ์กฑํ๋ ค๊ณ ํฉ๋๋ค.
๋ค์ ์์ ๋ ํค๊ฐ e2e-az-NorthSouth
์ด๊ณ ๊ฐ์ด e2e-az-North
๋๋ e2e-az-South
์ธ ๋ผ๋ฒจ์ด ์๋ ๋
ธ๋์ Pod๋ฅผ ๋ฐฐ์นํด์ผ ํ๋ ๊ท์น์ด ์๋ Pod
์ฌ์์
๋๋ค.
๋ ธ๋ ์ ์ฌ์ฑ ํ์ ๊ท์น์ด ์๋ Pod ๊ตฌ์ฑ ํ์ผ์ ์
apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: 1 requiredDuringSchedulingIgnoredDuringExecution: 2 nodeSelectorTerms: - matchExpressions: - key: e2e-az-NorthSouth 3 operator: In 4 values: - e2e-az-North 5 - e2e-az-South 6 containers: - name: with-node-affinity image: docker.io/ocpqe/hello-pod #...
- 1
- ๋ ธ๋ ์ ์ฌ์ฑ์ ๊ตฌ์ฑํ๋ ์คํ ์์ ๋๋ค.
- 2
- ํ์ํ ๊ท์น์ ์ ์ํฉ๋๋ค.
- 3 5 6
- ๊ท์น์ ์ ์ฉํ๋ ค๋ฉด ์ผ์นํด์ผ ํ๋ ํค/๊ฐ(๋ผ๋ฒจ)์ ๋๋ค.
- 4
- ์ฐ์ฐ์๋ ๋ ธ๋์ ๋ผ๋ฒจ๊ณผ
Pod
์ฌ์์ ์๋matchExpression
๋งค๊ฐ๋ณ์์ ๊ฐ ์งํฉ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค. ์ด ๊ฐ์In
,NotIn
,Exists
,DoesNotExist
,Lt
๋๋Gt
์ผ ์ ์์ต๋๋ค.
๋ค์ ์์ ๋ Pod์ ๋ํด ํค๊ฐ e2e-az-EastWest
์ด๊ณ ๊ฐ์ด e2e-az-East
๋๋ e2e-az-West
์ธ ๋ผ๋ฒจ์ด ์๋ ๋
ธ๋๋ฅผ ์ ํธํ๋ ๊ธฐ๋ณธ ๊ท์น์ด ์๋ ๋
ธ๋ ์ฌ์์
๋๋ค.
๋ ธ๋ ์ ์ฌ์ฑ ๊ธฐ๋ณธ ๊ท์น์ด ์๋ Pod ๊ตฌ์ฑ ํ์ผ์ ์
apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: 1 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 1 3 preference: matchExpressions: - key: e2e-az-EastWest 4 operator: In 5 values: - e2e-az-East 6 - e2e-az-West 7 containers: - name: with-node-affinity image: docker.io/ocpqe/hello-pod #...
- 1
- ๋ ธ๋ ์ ์ฌ์ฑ์ ๊ตฌ์ฑํ๋ ์คํ ์์ ๋๋ค.
- 2
- ๊ธฐ๋ณธ ๊ท์น์ ์ ์ํฉ๋๋ค.
- 3
- ๊ธฐ๋ณธ ๊ท์น์ ๊ฐ์ค์น๋ฅผ ์ง์ ํฉ๋๋ค. ๊ฐ์ค์น๊ฐ ๋์ ๋ ธ๋๊ฐ ์ฐ์ ํฉ๋๋ค.
- 4 6 7
- ๊ท์น์ ์ ์ฉํ๋ ค๋ฉด ์ผ์นํด์ผ ํ๋ ํค/๊ฐ(๋ผ๋ฒจ)์ ๋๋ค.
- 5
- ์ฐ์ฐ์๋ ๋ ธ๋์ ๋ผ๋ฒจ๊ณผ
Pod
์ฌ์์ ์๋matchExpression
๋งค๊ฐ๋ณ์์ ๊ฐ ์งํฉ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค. ์ด ๊ฐ์In
,NotIn
,Exists
,DoesNotExist
,Lt
๋๋Gt
์ผ ์ ์์ต๋๋ค.
๋ช
์์ ์ธ ๋
ธ๋ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ฐ๋
์ ์์ง๋ง NotIn
๋๋ DoesNotExist
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๋์์ ๋ณต์ ํฉ๋๋ค.
๋ ธ๋ ์ ์ฌ์ฑ ๋ฐ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ๋์ผํ Pod ๊ตฌ์ฑ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์ ์ฌํญ์ ์ ์ํ์ญ์์ค.
-
nodeSelector
์nodeAffinity
๋ฅผ ๋ ๋ค ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ Pod๋ฅผ ํ๋ณด ๋ ธ๋์ ์์ฝํ๊ธฐ ์ํด์๋ ๋ ์ํ๋ฅผ ๋ชจ๋ ์ถฉ์กฑํด์ผ ํฉ๋๋ค. -
nodeAffinity
์ ํ๊ณผ ์ฐ๊ฒฐ๋nodeSelectorTerms
๋ฅผ ์ฌ๋ฌ ๊ฐ ์ง์ ํ๋ ๊ฒฝ์ฐnodeSelectorTerms
์ค ํ๋๋ฅผ ์ถฉ์กฑํ๋ฉด Pod๋ฅผ ๋ ธ๋์ ์์ฝํ ์ ์์ต๋๋ค. -
nodeSelectorTerms
์ ์ฐ๊ฒฐ๋matchExpressions
๋ฅผ ์ฌ๋ฌ ๊ฐ ์ง์ ํ๋ ๊ฒฝ์ฐ ๋ชจ๋matchExpressions
๋ฅผ ์ถฉ์กฑํ ๋๋ง Pod๋ฅผ ๋ ธ๋์ ์์ฝํ ์ ์์ต๋๋ค.
4.4.2. ํ์ ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น ๊ตฌ์ฑ
๋ ธ๋์ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ๋จผ์ ํ์ ๊ท์น์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
๋ค์ ๋จ๊ณ์์๋ ํ๋์ ๋ ธ๋ ๋ฐ ์ค์ผ์ค๋ฌ์์ ํด๋น ๋ ธ๋์ ๋ฐฐ์นํด์ผ ํ๋ ํ๋์ Pod๋ฅผ ์์ฑํ๋ ๊ฐ๋จํ ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
oc label node
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.$ oc label node node1 e2e-az-name=e2e-az1
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ์ด๋ธ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: <node_name> labels: e2e-az-name: e2e-az1 #...
Pod ์ฌ์์์ ํน์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
์ฐธ๊ณ์์ฝ๋ Pod์ ์ ํธ๋๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ถ๋ ฅ ์
apiVersion: v1 kind: Pod metadata: name: s1 spec: affinity: 1 nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: 2 nodeSelectorTerms: - matchExpressions: - key: e2e-az-name 3 values: - e2e-az1 - e2e-az2 operator: In 4 #...
- 1
- Pod ์ ์ฌ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
- 2
requiredDuringSchedulingIgnoredDuringExecution
๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.- 3
- ์ถฉ์กฑํด์ผ ํ๋
ํค์
๊ฐ์
์ง์ ํฉ๋๋ค. ํธ์งํ ๋ ธ๋์ ์ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ๋ ธ๋์ ๋ผ๋ฒจ๊ณผ ๋์ผํkey
๋ฐvalues
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - 4
์ฐ์ฐ์
๋ฅผ ์ง์ ํฉ๋๋ค. ์ฐ์ฐ์๋In
,NotIn
,Exists
๋๋DoesNotExist
์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ด ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ฐ์ฐ์In
์ ์ฌ์ฉํฉ๋๋ค.
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
4.4.3. ๊ธฐ๋ณธ ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น ๊ตฌ์ฑ
๊ธฐ๋ณธ ๊ท์น์ ๊ท์น์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ๊ฐ ๊ท์น์ ์ ์ฉํ๋ ค๊ณ ํ์ง๋ง ๋ฐ๋์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค.
ํ๋ก์ธ์ค
๋ค์ ๋จ๊ณ์์๋ ํ๋์ ๋ ธ๋ ๋ฐ ์ค์ผ์ค๋ฌ์์ ํด๋น ๋ ธ๋์ ๋ฐฐ์นํ๋ ค๊ณ ํ๋ ํ๋์ Pod๋ฅผ ์์ฑํ๋ ๊ฐ๋จํ ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
oc label node
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.$ oc label node node1 e2e-az-name=e2e-az3
ํน์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
์ฐธ๊ณ์์ฝ๋ Pod์ ์ ํธ๋๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
apiVersion: v1 kind: Pod metadata: name: s1 spec: affinity: 1 nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 3 preference: matchExpressions: - key: e2e-az-name 4 values: - e2e-az3 operator: In 5 #...
- 1
- Pod ์ ์ฌ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
- 2
preferredDuringSchedulingIgnoredDuringExecution
๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.- 3
- ๋ ธ๋์ ๊ฐ์ค์น๋ฅผ ์ซ์ 1~100์ผ๋ก ์ง์ ํฉ๋๋ค. ๊ฐ์ค์น๊ฐ ๋์ ๋ ธ๋๊ฐ ์ฐ์ ํฉ๋๋ค.
- 4
- ์ถฉ์กฑํด์ผ ํ๋
ํค์
๊ฐ์
์ง์ ํฉ๋๋ค. ํธ์งํ ๋ ธ๋์ ์ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ๋ ธ๋์ ๋ผ๋ฒจ๊ณผ ๋์ผํkey
๋ฐvalues
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - 5
์ฐ์ฐ์
๋ฅผ ์ง์ ํฉ๋๋ค. ์ฐ์ฐ์๋In
,NotIn
,Exists
๋๋DoesNotExist
์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ด ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ฐ์ฐ์In
์ ์ฌ์ฉํฉ๋๋ค.
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
4.4.4. ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น ์ํ
๋ค์ ์์ ์์๋ ๋ ธ๋ ์ ์ฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
4.4.4.1. ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์๋ ๋ ธ๋ ์ ์ฌ์ฑ
๋ค์ ์์ ์์๋ ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์๋ ๋ ธ๋ ๋ฐ Pod์ ๋ ธ๋ ์ ์ฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
Node1 ๋ ธ๋์๋ ๋ผ๋ฒจ
zone:us
๊ฐ ์์ต๋๋ค.$ oc label node node1 zone=us
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ์ด๋ธ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: <node_name> labels: zone: us #...
pod-s1 Pod์๋ ํ์ ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น์ ๋ฐ๋ผ
zone
๋ฐus
ํค/๊ฐ ์์ด ์์ต๋๋ค.$ cat pod-s1.yaml
์ถ๋ ฅ ์
apiVersion: v1 kind: Pod metadata: name: pod-s1 spec: containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "zone" operator: In values: - us #...
pod-s1 Pod๋ฅผ Node1์ ์์ฝํ ์ ์์ต๋๋ค.
$ oc get pod -o wide
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE IP NODE pod-s1 1/1 Running 0 4m IP1 node1
4.4.4.2. ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์๋ ๋ ธ๋ ์ ์ฌ์ฑ
๋ค์ ์์ ์์๋ ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์๋ ๋ ธ๋ ๋ฐ Pod์ ๋ ธ๋ ์ ์ฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
Node1 ๋ ธ๋์๋ ๋ผ๋ฒจ
zone:emea
๊ฐ ์์ต๋๋ค.$ oc label node node1 zone=emea
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ์ด๋ธ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: <node_name> labels: zone: emea #...
pod-s1 Pod์๋ ํ์ ๋ ธ๋ ์ ์ฌ์ฑ ๊ท์น์ ๋ฐ๋ผ
zone
๋ฐus
ํค/๊ฐ ์์ด ์์ต๋๋ค.$ cat pod-s1.yaml
์ถ๋ ฅ ์
apiVersion: v1 kind: Pod metadata: name: pod-s1 spec: containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "zone" operator: In values: - us #...
pod-s1 Pod๋ Node1์ ์์ฝํ ์ ์์ต๋๋ค.
$ oc describe pod pod-s1
์ถ๋ ฅ ์
... Events: FirstSeen LastSeen Count From SubObjectPath Type Reason --------- -------- ----- ---- ------------- -------- ------ 1m 33s 8 default-scheduler Warning FailedScheduling No nodes are available that match all of the following predicates:: MatchNodeSelector (1).
4.4.5. ์ถ๊ฐ ๋ฆฌ์์ค
4.5. ๊ณผ๋ค ํ ๋น๋ ๋ ธ๋์ Pod ๋ฐฐ์น
๊ณผ๋ค ํ ๋น ์ํ์์๋ ์ปจํ ์ด๋ ์ปดํจํ ๋ฆฌ์์ค ์์ฒญ๊ณผ ์ ํ์ ํฉ์ด ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ์ด๊ณผํฉ๋๋ค. ์ฉ๋์ ๋ง๊ฒ ๋ณด์ฅ๋ ์ฑ๋ฅ์ ์ ์ถฉํ ์ ์๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๊ณผ๋ค ํ ๋น์ด ๋ฐ๋์งํ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์๋ ์์ฒญ ๋ฐ ์ ํ์ ํตํด ๋ ธ๋์ ๋ฆฌ์์ค ๊ณผ๋ค ํ ๋น์ ํ์ฉํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ค์ผ์ค๋ฌ๋ ์์ฒญ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ์์ฝํ๊ณ ์ต์ ์๋น์ค ๋ณด์ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ํ์ ๋ ธ๋์์ ์ฌ์ฉํ ์ ์๋ ์ปดํจํ ๋ฆฌ์์ค์ ์์ ์ ํํฉ๋๋ค.
4.5.1. ๊ณผ๋ค ํ ๋น ์ดํด
๊ด๋ฆฌ์๋ ์์ฒญ ๋ฐ ์ ํ์ ํตํด ๋ ธ๋์ ๋ฆฌ์์ค ๊ณผ๋ค ํ ๋น์ ํ์ฉํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ค์ผ์ค๋ฌ๋ ์์ฒญ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ์์ฝํ๊ณ ์ต์ ์๋น์ค ๋ณด์ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ํ์ ๋ ธ๋์์ ์ฌ์ฉํ ์ ์๋ ์ปดํจํ ๋ฆฌ์์ค์ ์์ ์ ํํฉ๋๋ค.
OpenShift Container Platform ๊ด๋ฆฌ์๋ ๊ฐ๋ฐ์ ์ปจํ
์ด๋์ ์ค์ ๋ ์์ฒญ๊ณผ ์ ํ ์ฌ์ด์ ๋น์จ์ ๋ฎ์ด์ฐ๋๋ก ๋ง์คํฐ๋ฅผ ๊ตฌ์ฑํ์ฌ ๋
ธ๋์์ ๊ณผ๋ค ํ ๋น ์์ค์ ์ ์ดํ๊ณ ์ปจํ
์ด๋ ๋ฐ๋๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ ํ ๋ฐ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ๋ ํ๋ก์ ํธ๋ณ LimitRange
์ค๋ธ์ ํธ์ ํจ๊ป ์ปจํ
์ด๋ ์ ํ ๋ฐ ์์ฒญ์ ์กฐ์ ํ์ฌ ์ํ๋ ์์ค์ ๊ณผ๋ค ํ ๋น์ ๊ตฌํํฉ๋๋ค.
์ปจํ
์ด๋์ ์ ํ์ด ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค. ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ ์ฉํ๋ ค๋ฉด ๊ฐ๋ณ ํ๋ก์ ํธ๋ณ๋ก ๋๋ ํ๋ก์ ํธ ํ
ํ๋ฆฟ์ ๊ธฐ๋ณธ ์ ํ์ ์ฌ์ฉํ์ฌ LimitRange
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ฌํ ๋ฎ์ด์ฐ๊ธฐ ์ดํ์๋ ํ๋ก์ ํธ์ ๋ชจ๋ LimitRange
์ค๋ธ์ ํธ์์ ์ปจํ
์ด๋ ์ ํ ๋ฐ ์์ฒญ์ ์ ํจ์ฑ์ ๊ฒ์ฌํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋ฐ์๊ฐ ์ต์ ์ ํ์ ๊ฐ๊น์ด ์ ํ์ ์ง์ ํ๊ณ ์์ฒญ์์ ์ต์ ์ ํ ๋ฏธ๋ง์ ๋ฎ์ด์ฐ๋๋ก ํ์ฌ Pod๋ฅผ ๊ธ์งํ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ ์๋ชป๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅํ ์์
์์ ํด๊ฒฐํด์ผ ํ์ง๋ง ํ์ฌ๋ ์ด ๊ธฐ๋ฅ๊ณผ LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ฃผ์ํด์ ๊ตฌ์ฑํ์ญ์์ค.
4.5.2. ๋ ธ๋ ๊ณผ๋ค ํ ๋น ์ดํด
์ค๋ฒ ์ปค๋ฐ๋ ํ๊ฒฝ์์๋ ์ต์์ ์์คํ ๋์์ ์ ๊ณตํ๋๋ก ๋ ธ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ ธ๋๊ฐ ์์๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํ ์ปค๋ ์กฐ์ ๊ฐ๋ฅํ ํ๋๊ทธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋ฉ๋๋ค. ์ปค๋์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ง๋์ง ์๋ ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์คํจํด์๋ ์๋ฉ๋๋ค.
์ด ๋์์ ํ์ธํ๊ธฐ ์ํด OpenShift Container Platform์ vm.overcommit_memory
๋งค๊ฐ๋ณ์๋ฅผ 1
๋ก ์ค์ ํ์ฌ ๊ธฐ๋ณธ ์ด์ ์ฒด์ ์ค์ ์ ์ฌ์ ์ํ์ฌ ์ปค๋์ด ํญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค๋ฒ ์ปค๋ฐํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
OpenShift Container Platform์ vm.panic_on_oom
๋งค๊ฐ๋ณ์๋ฅผ 0
์ผ๋ก ์ค์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ ์ปค๋์ด ํจ๋ ์ํ๊ฐ๋์ง ์๋๋ก ๊ตฌ์ฑํฉ๋๋ค. 0์ผ๋ก ์ค์ ํ๋ฉด ์ปค๋์์ OOM (๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ) ์ํ์ผ ๋ oom_killer๋ฅผ ํธ์ถํ์ฌ ์ฐ์ ์์์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํฉ๋๋ค.
๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ํ์ฌ ์ค์ ์ ๋ณผ ์ ์์ต๋๋ค.
$ sysctl -a |grep commit
์ถ๋ ฅ ์
#... vm.overcommit_memory = 0 #...
$ sysctl -a |grep panic
์ถ๋ ฅ ์
#... vm.panic_on_oom = 0 #...
์์ ํ๋๊ทธ๋ ์ด๋ฏธ ๋ ธ๋์ ์ค์ ๋์ด ์์ด์ผํ๋ฉฐ ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๊ฐ ๋ ธ๋์ ๋ํด ๋ค์ ๊ตฌ์ฑ์ ์ํํ ์๋ ์์ต๋๋ค.
- CPU CFS ํ ๋น๋์ ์ฌ์ฉํ์ฌ CPU ์ ํ ๋นํ์ฑํ ๋๋ ์คํ
- ์์คํ ํ๋ก์ธ์ค์ ๋ฆฌ์์ค ์์ฝ
- Quality of Service (QoS) ๊ณ์ธต์์์ ๋ฉ๋ชจ๋ฆฌ ์์ฝ
4.6. ๋ ธ๋ ํ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น ์ ์ด
ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ธ๋์์ ์์ฝํด์ผ ํ๋ (๋๋ ์์ฝํด์๋ ์ ๋๋) Pod๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
4.6.1. ํ ์ธํธ(Taints) ๋ฐ ํจ๋ฌ๋ ์ด์ (Tolerations)์ ์ดํด
ํ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด Pod์ ์ผ์นํ๋ ํ์ฉ ์ค์ฐจ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ ธ๋์์ Pod ์์ฝ์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
Node
์ฌ์(NodeSpec
)์ ํตํด ๋
ธ๋์ ํ
์ธํธ๋ฅผ ์ ์ฉํ๊ณ Pod
์ฌ์(PodSpec
)์ ํตํด Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ ์ฉํฉ๋๋ค. ๋
ธ๋์ ํ
์ธํธ๋ฅผ ์ ์ฉํ ๋ Pod์์ ํ
์ธํธ๋ฅผ ํ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ์ค์ผ์ค๋ฌ์์ ํด๋น ๋
ธ๋์ Pod๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
๋ ธ๋ ์ฌ์์ ํ ์ธํธ ์
apiVersion: v1 kind: Node metadata: name: my-node #... spec: taints: - effect: NoExecute key: key1 value: value1 #...
Pod
์ฌ์์ ํ์ฉ ์ค์ฐจ ์
apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoExecute" tolerationSeconds: 3600 #...
ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ key, value ๋ฐ effect๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์ | ์ค๋ช | ||||||
---|---|---|---|---|---|---|---|
|
| ||||||
|
| ||||||
| ๋ค์ ๋ช ๋ น ์ค ํ๋๋ฅผ ์คํํฉ๋๋ค.
| ||||||
|
|
์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์
NoSchedule
ํ ์ธํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ๋ ธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๊ฐ๋๋node-role.kubernetes.io/master=:NoSchedule
ํ ์ธํธ๊ฐ ์์ด์ผ ํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: v1 kind: Node metadata: annotations: machine.openshift.io/machine: openshift-machine-api/ci-ln-62s7gtb-f76d1-v8jxv-master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-cdc1ab7da414629332cc4c3926e6e59c name: my-node #... spec: taints: - effect: NoSchedule key: node-role.kubernetes.io/master #...
ํจ๋ฌ๋ ์ด์ ์ ํ ์ธํธ์ ์ผ์นํฉ๋๋ค.
operator
๋งค๊ฐ๋ณ์๊ฐEqual
๋ก ์ค์ ๋ ๊ฒฝ์ฐ:-
key
๋งค๊ฐ๋ณ์๋ ๋์ผํฉ๋๋ค. -
value
๋งค๊ฐ๋ณ์๋ ๋์ผํฉ๋๋ค. -
effect
๋งค๊ฐ๋ณ์๋ ๋์ผํฉ๋๋ค.
-
operator
๋งค๊ฐ๋ณ์๊ฐExists
๋ก ์ค์ ๋ ๊ฒฝ์ฐ:-
key
๋งค๊ฐ๋ณ์๋ ๋์ผํฉ๋๋ค. -
effect
๋งค๊ฐ๋ณ์๋ ๋์ผํฉ๋๋ค.
-
๋ค์ ํ ์ธํธ๋ OpenShift Container Platform์ ๋น๋๋ฉ๋๋ค.
-
node.kubernetes.io/not-ready
: ๋ ธ๋๊ฐ ์ค๋น ์ํ์ ์์ง ์์ต๋๋ค. ์ด๋ ๋ ธ๋ ์กฐ๊ฑดReady=False
์ ํด๋นํฉ๋๋ค. -
node.kubernetes.io/unreachable
: ๋ ธ๋๊ฐ ๋ ธ๋ ์ปจํธ๋กค๋ฌ์์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ด๋ ๋ ธ๋ ์กฐ๊ฑดReady=Unknown
์ ํด๋นํฉ๋๋ค. -
node.kubernetes.io/memory-pressure
: ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ ๋ ธ๋ ์กฐ๊ฑดMemoryPressure=True
์ ํด๋นํฉ๋๋ค. -
node.kubernetes.io/disk-pressure
: ๋ ธ๋์ ๋์คํฌ ๋ถ์กฑ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ ๋ ธ๋ ์กฐ๊ฑดDiskPressure=True
์ ํด๋นํฉ๋๋ค. -
node.kubernetes.io/network-unavailable
: ๋ ธ๋ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. -
node.kubernetes.io/unschedulable
: ๋ ธ๋๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. -
node.cloudprovider.kubernetes.io/uninitialized
: ๋ ธ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ธ๋ถ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ก ์์๋๋ฉด ์ด ํ ์ธํธ ๋ ธ๋์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ์ผ๋ก ํ์๋ฉ๋๋ค. cloud-controller-manager์ ์ปจํธ๋กค๋ฌ๊ฐ ์ด ๋ ธ๋๋ฅผ ์ด๊ธฐํํ๋ฉด kubelet์ด ์ด ํ ์ธํธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. node.kubernetes.io/pid-pressure
: ๋ ธ๋์ pid ์๋ ฅ์ด ์์ต๋๋ค. ์ด๋ ๋ ธ๋ ์กฐ๊ฑดPIDPressure=True
์ ํด๋นํฉ๋๋ค.์ค์OpenShift Container Platform์ ๊ธฐ๋ณธ pid.available
evictionHard
๋ฅผ ์ค์ ํ์ง ์์ต๋๋ค.
4.6.1.1. tolerationSeconds๋ฅผ ์ฌ์ฉํ์ฌ pod ์ ๊ฑฐ๋ฅผ ์ง์ฐํ๋ ๋ฐฉ๋ฒ
Pod
์ฌ์ ๋๋ MachineSet
์ค๋ธ์ ํธ์ tolerationSeconds
๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๋ฉด Pod๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ ์ ๋
ธ๋์ ๋ฐ์ธ๋ฉ๋๋ ์๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. NoExecute
ํจ๊ณผ๊ฐ ์๋ ํ
์ธํธ๊ฐ tolerationSeconds
๋งค๊ฐ๋ณ์๊ฐ ์๋ ํ
์ธํธ๋ฅผ ํ์ฉํ๋ Pod์ธ ๋
ธ๋์ ์ถ๊ฐ๋๋ฉด ํด๋น ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ๋๊น์ง Pod๊ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
์ถ๋ ฅ ์
apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoExecute" tolerationSeconds: 3600 #...
์ฌ๊ธฐ์์ ์ด Pod๊ฐ ์คํ ์ค์ด์ง๋ง ์ผ์นํ๋ ํ์ฉ ์ค์ฐจ๊ฐ ์์ผ๋ฉด Pod๋ 3,600์ด ๋์ ๋ ธ๋์ ๋ฐ์ธ๋ฉ๋ ํ ์ ๊ฑฐ๋ฉ๋๋ค. ์ด ์๊ฐ ์ด์ ์ ํ ์ธํธ๊ฐ ์ ๊ฑฐ๋๋ฉด pod๊ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
4.6.1.2. ์ฌ๋ฌ ํ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๋์ผํ ๋ ธ๋์ ์ฌ๋ฌ ํ ์ธํธ๋ฅผ ๋ฐฐ์นํ๊ณ ๋์ผํ pod์ ์ฌ๋ฌ ํจ๋ฌ๋ ์ด์ ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. OpenShift Container Platform์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
- Pod์ ์ผ์นํ๋ ํจ๋ฌ๋ ์ด์ ์ด ์๋ ํ ์ธํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
๋๋จธ์ง ์ผ์นํ์ง ํ ์ธํธ๋ pod์์ ๋ค์ effect๋ฅผ ๊ฐ์ต๋๋ค.
-
effect๊ฐ
NoSchedule
์ธ ์ผ์นํ์ง ์๋ ํ ์ธํธ๊ฐ ํ๋ ์ด์์๋ ๊ฒฝ์ฐ OpenShift Container Platform์ ํด๋น ๋ ธ๋์ pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. -
effect๊ฐ
NoSchedule
์ธ ์ผ์นํ์ง ์๋ ํ ์ธํธ๊ฐ ์์ง๋ง effect๊ฐPreferNoSchedule
์ธ ์ผ์นํ์ง ์๋ ํ ์ธํธ๊ฐ ํ๋ ์ด์์๋ ๊ฒฝ์ฐ, OpenShift ์ปจํ ์ด๋ ํ๋ซํผ์ ๋ ธ๋์ pod๋ฅผ ์์ฝ ์๋ํ์ง ์์ต๋๋ค. ํจ๊ณผ๊ฐ
NoExecute
์ธ ์ผ์นํ์ง ์๋ ํ ์ธํธ๊ฐ ํ๋ ์ด์ ์๋ ๊ฒฝ์ฐ OpenShift Container Platform์ Pod๊ฐ ๋ ธ๋์์ ์ด๋ฏธ ์คํ๋๊ณ ์์ผ๋ฉด ๋ ธ๋์์ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค. Pod๊ฐ ๋ ธ๋์์ ์์ง ์คํ๋๊ณ ์์ง ์์ผ๋ฉด Pod๊ฐ ๋ ธ๋์ ์์ฝ๋์ง ์์ต๋๋ค.- ํ ์ธํธ๋ฅผ ํ์ฉํ์ง Pod๋ ์ฆ์ ์ ๊ฑฐ๋ฉ๋๋ค.
-
Pod
์ฌ์์tolerationSeconds
๋ฅผ ์ง์ ํ์ง ์์ ํ ์ธํธ๋ฅผ ํ์ฉํ๋ Pod๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. -
tolerationSeconds
๊ฐ ์ง์ ๋ ํ ์ธํธ๋ฅผ ํ์ฉํ๋ Pod๋ ์ง์ ๋ ์๊ฐ ๋์ ๋ฐ์ธ๋ฉ๋ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
-
effect๊ฐ
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ ธ๋์ ๋ค์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
$ oc adm taint nodes node1 key1=value1:NoSchedule
$ oc adm taint nodes node1 key1=value1:NoExecute
$ oc adm taint nodes node1 key2=value2:NoSchedule
Pod์๋ ๋ค์๊ณผ ๊ฐ์ ํจ๋ฌ๋ ์ด์ ์ด ์์ต๋๋ค.
apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule" - key: "key1" operator: "Equal" value: "value1" effect: "NoExecute" #...
์ด ๊ฒฝ์ฐ ์ธ ๋ฒ์งธ ํ ์ธํธ์ ์ผ์นํ๋ ํจ๋ฌ๋ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ pod๋ฅผ ๋ ธ๋์ ์์ฝํ ์ ์์ต๋๋ค. ์ธ ๋ฒ์งธ ํ ์ธํธ๋ pod์์ ํ์ฉ๋์ง ์๋ ์ธ ๋ฒ์งธ ํ ์ธํธ ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ ํ ์ธํธ๊ฐ ์ถ๊ฐ๋ ๋ ๋ ธ๋์์ ์ด๋ฏธ ์คํ๋๊ณ ์๋ ๊ฒฝ์ฐ pod๊ฐ ๊ณ์ ์คํ๋ฉ๋๋ค.
4.6.1.3. Pod ์์ฝ ๋ฐ ๋ ธ๋ ์ํ (taint node by condition)
์ํ๋ณ ๋
ธ๋ ํ
์ธํธ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฐ ๋์คํฌ ๋ถ์กฑ๊ณผ ๊ฐ์ ์ํ๋ฅผ ๋ณด๊ณ ํ๋ ๋
ธ๋๋ฅผ ์๋์ผ๋ก ํ
์ธํธํฉ๋๋ค. ๋
ธ๋๊ฐ ์ํ๋ฅผ ๋ณด๊ณ ํ๋ฉด ์ํ๊ฐ ํด์ ๋ ๋๊น์ง ํ
์ธํธ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ํ
์ธํธ์๋ NoSchedule
effect๊ฐ ์์ต๋๋ค. ์ฆ, pod์ ์ผ์นํ๋ ํจ๋ฌ๋ ์ด์
์ด ์์ผ๋ฉด ๋
ธ๋์์ pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค.
์ค์ผ์ค๋ฌ๋ pod๋ฅผ ์์ฝํ๊ธฐ ์ ์ ๋ ธ๋์์ ์ด๋ฌํ ํ ์ธํธ๋ฅผ ํ์ธํฉ๋๋ค. ํ ์ธํธ๊ฐ ์๋ ๊ฒฝ์ฐ pod๋ ๋ค๋ฅธ ๋ ธ๋์ ์์ฝ๋ฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ์ค์ ๋ ธ๋ ์ํ๊ฐ ์๋ ํ ์ธํธ๋ฅผ ํ์ธํ๊ธฐ ๋๋ฌธ์ ์ ์ ํ pod ํจ๋ฌ๋ ์ด์ ์ ์ถ๊ฐํ์ฌ ์ด๋ฌํ ๋ ธ๋ ์ํ ์ค ์ผ๋ถ๋ฅผ ๋ฌด์ํ๋๋ก ์ค์ผ์ค๋ฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฐ๋ชฌ ์ธํธ ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ ๋ฐ๋ชฌ์ ๋ค์๊ณผ ๊ฐ์ ํ์ฉ ์ค์ฐจ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
- node.kubernetes.io/memory-pressure
- node.kubernetes.io/disk-pressure
- node.kubernetes.io/unschedulable (1.10 ์ด์)
- node.kubernetes.io/network-unavailable (ํธ์คํธ ๋คํธ์ํฌ ๋ง)
๋ฐ๋ชฌ ์ธํธ์ ์์์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ์ QoS ํด๋์ค๊ฐ ์๋ Pod์ node.kubernetes.io/memory-pressure
ํ์ฉ ์ค์ฐจ๋ ์ถ๊ฐํฉ๋๋ค. ์ด๋ Kubernetes๊ฐ Guaranteed
๋๋ Burstable
QoS ํด๋์ค์์ Pod๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ BestEffort
Pod๋ ์ํฅ์ ๋ฐ๋ ๋
ธ๋์ ์์ฝ๋์ง ์์ต๋๋ค.
4.6.1.4. ์ํ ๋ณ pod ์ ๊ฑฐ (taint-based evictions)
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ Taint-Based Evictions ๊ธฐ๋ฅ์ not-ready
๋ฐ unreachable
๊ณผ ๊ฐ์ ํน์ ์ํ์ ์๋ ๋
ธ๋์์ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋
ธ๋์ ์ด๋ฌํ ์ํ ์ค ํ๋๊ฐ ๋ฐ์ํ๋ฉด OpenShift Container Platform์ ์๋์ผ๋ก ๋
ธ๋์ ํ
์ธํธ๋ฅผ ์ถ๊ฐํ๊ณ pod๋ฅผ ์ ๊ฑฐํ์ฌ ๋ค๋ฅธ ๋๋์์ ๋ค์ ์์ฝํ๊ธฐ ์์ํฉ๋๋ค.
Taint Based Evictions์๋ NoExecute
ํจ๊ณผ๊ฐ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์ ํ
์ธํธ๋ฅผ ํ์ฉํ์ง ์๋ Pod๋ ์ฆ์ ์ ๊ฑฐ๋๊ณ ํ
์ธํธ๋ฅผ ํ์ฉํ๋ ๋ชจ๋ Pod๋ tolerationSeconds
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
tolerationSeconds
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋
ธ๋ ์กฐ๊ฑด์ด ์ค์ ๋ ๋
ธ๋์ Pod๊ฐ ๋ฐ์ธ๋ฉ๋๋ ๊ธฐ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. tolerationSeconds
๊ธฐ๊ฐ ํ์๋ ์ด ์ํ๊ฐ ๊ณ์๋๋ฉด ํ
์ธํธ๊ฐ ๋
ธ๋์ ๋จ์ ์๊ณ ํ์ฉ ์ค์ฐจ๊ฐ ์ผ์นํ๋ Pod๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค. tolerationSeconds
๊ธฐ๊ฐ ์ ์ ์ํ ์กฐ๊ฑด์ด ์ง์์ง๋ฉด ํ์ฉ ์ค์ฐจ๊ฐ ์ผ์นํ๋ Pod๊ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
๊ฐ์ด ์๋ tolerationSeconds
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ค๋น๋์ง ์๊ณ ์ฐ๊ฒฐํ ์ ์๋ ๋
ธ๋ ์ํ๋ก ์ธํด Pod๊ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
OpenShift Container Platform์ ์๋๊ฐ ์ ํ๋ ๋ฐฉ์์ผ๋ก pod๋ฅผ ์ ๊ฑฐํ์ฌ ๋ง์คํฐ๊ฐ ๋ ธ๋์์ ๋ถํ ๋๋ ๋ฑ์ ์๋๋ฆฌ์ค์์ ๋๊ท๋ชจ pod ์ ๊ฑฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ ๋ ์์ญ์ ๋
ธ๋ ์ค 5 % ์ด์์ด ๋น์ ์์ด๋ฉด ๋
ธ๋ ๋ผ์ดํ์ฌ์ดํด ์ปจํธ๋กค๋ฌ์์ ํด๋น ์์ญ์ ์ํ๋ฅผ PartialDisruption
์ผ๋ก ๋ณ๊ฒฝํ๊ณ Pod ์ ๊ฑฐ ๋น์จ์ด ๊ฐ์๋ฉ๋๋ค. ์ด ์ํ์ ์๊ท๋ชจ ํด๋ฌ์คํฐ(๊ธฐ๋ณธ์ ์ผ๋ก 50๊ฐ ๋
ธ๋ ์ดํ)์ ๊ฒฝ์ฐ ์ด ์์ญ์ ๋
ธ๋๋ ํ
์ธํธ๋์ง ์๊ณ ์ ๊ฑฐ๊ฐ ์ค์ง๋ฉ๋๋ค.
์์ธํ ๋ด์ฉ์ Kubernetes ์ค๋ช ์ ์ ์ ๊ฑฐ์ ๋ํ ์๋ ์ ํ ์ ์ฐธ์กฐํ์ญ์์ค.
Pod
๊ตฌ์ฑ์์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ง์ ํ์ง ์๋ ๊ฒฝ์ฐ OpenShift Container Platform์ ์๋์ผ๋ก node.kubernetes.io/not-ready
๋ฐ node.kubernetes.io/unreachable
์ ํ์ฉ ์ค์ฐจ๋ฅผ tolerationSeconds=300
์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
#...
spec:
tolerations:
- key: node.kubernetes.io/not-ready
operator: Exists
effect: NoExecute
tolerationSeconds: 300 1
- key: node.kubernetes.io/unreachable
operator: Exists
effect: NoExecute
tolerationSeconds: 300
#...
- 1
- ์ด๋ฌํ ํจ๋ฌ๋ ์ด์ ์ ์ด๋ฌํ ๋ ธ๋ ์ํ ๋ฌธ์ ์ค ํ๋๊ฐ ๊ฐ์ง๋ ํ ๊ธฐ๋ณธ pod ๋์์ 5 ๋ถ ๋์ ๋ฐ์ธ๋ฉ๋ ์ํ๋ก ์ ์งํ ์ ์๋๋ก ํฉ๋๋ค.
ํ์์ ๋ฐ๋ผ ์ด๋ฌํ ํจ๋ฌ๋ ์ด์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์์ ๋ก์ปฌ ์ํ๊ฐ ์๋ ๊ฒฝ์ฐ ๋คํธ์ํฌ ํํฐ์ ๋ฑ์ ๋ฐ๋ผ pod๋ฅผ ๋ ธ๋์ ๋ ์ค๋ ๋ฐ์ธ๋ฉํ์ฌ ํํฐ์ ์ ๋ณต๊ตฌํ๊ณ pod ์ ๊ฑฐ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋ฐ๋ชฌ ์ธํธ์ ์ํด ์์ฑ๋ Pod๋ tolerationSeconds
๊ฐ ์๋ ๋ค์ ํ
์ธํธ์ NoExecute
ํ์ฉ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค.
-
node.kubernetes.io/unreachable
-
node.kubernetes.io/not-ready
๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ฌํ ๋ ธ๋ ์ํ๋ก ์ธํด ๋ฐ๋ชฌ ์ธํธ Pod๊ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
4.6.1.5. ๋ชจ๋ ํ ์ธํธ ํ์ฉ
key
๋ฐ values
๋งค๊ฐ๋ณ์ ์์ด operator: "Exists"
ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ์ฌ ๋ชจ๋ ํ
์ธํธ๋ฅผ ํ์ฉํ๋๋ก Pod๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด ํ์ฉ ์ค์ฐจ๊ฐ ์๋ Pod๋ ํ
์ธํธ๊ฐ ์๋ ๋
ธ๋์์ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
๋ชจ๋ ํ
์ธํธ๋ฅผ ํ์ฉํ๋ Pod
์ฌ์
apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - operator: "Exists" #...
4.6.2. ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ถ๊ฐ
Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ๊ณ ๋ ธ๋์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ธ๋์ ์์ฝํ๊ฑฐ๋ ์์ฝํ์ง ์์์ผ ํ๋ Pod๋ฅผ ๋ ธ๋์์ ์ ์ดํ ์ ์์ต๋๋ค. ๊ธฐ์กด Pod ๋ฐ ๋ ธ๋์ ๊ฒฝ์ฐ ๋จผ์ Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ ๋ค์ ๋ ธ๋์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ๋ ธ๋์์ Pod๊ฐ ์ ๊ฑฐ๋์ง ์๋๋ก ํฉ๋๋ค.
ํ๋ก์ธ์ค
tolerations
์คํ ์๋ฅผ ํฌํจํ๋๋กPod
์ฌ์์ ํธ์งํ์ฌ Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํฉ๋๋ค.Equal ์ฐ์ฐ์๊ฐ ์๋ Pod ๊ตฌ์ฑ ํ์ผ ์ํ
apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key1" 1 value: "value1" operator: "Equal" effect: "NoExecute" tolerationSeconds: 3600 2 #...
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Exists ์ฐ์ฐ์๊ฐ ์๋ Pod ๊ตฌ์ฑ ํ์ผ ์ํ
apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key1" operator: "Exists" 1 effect: "NoExecute" tolerationSeconds: 3600 #...
- 1
Exists
์ฐ์ฐ์๋value
๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ด ์์์๋ key
key1
, valuevalue1
, ํ ์ธํธ effectNoExecute
๋ฅผ ๊ฐ๋node1
์ ํ ์ธํธ๋ฅผ ๋ฐฐ์นํฉ๋๋ค.ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ ๊ตฌ์ฑ ์์ ํ ์ด๋ธ์ ์ค๋ช ๋ ๋งค๊ฐ๋ณ์๋ก ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
$ oc adm taint nodes <node_name> <key>=<value>:<effect>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc adm taint nodes node1 key1=value1:NoExecute
์ด ๋ช ๋ น์ ํค๊ฐ
key1
, ๊ฐ์ดvalue1
, ํจ๊ณผ๊ฐNoExecute
์ธnode1
์ ํ ์ธํธ๋ฅผ ๋ฐฐ์นํฉ๋๋ค.์ฐธ๊ณ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์
NoSchedule
ํ ์ธํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ๋ ธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๊ฐ๋๋node-role.kubernetes.io/master=:NoSchedule
ํ ์ธํธ๊ฐ ์์ด์ผ ํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: v1 kind: Node metadata: annotations: machine.openshift.io/machine: openshift-machine-api/ci-ln-62s7gtb-f76d1-v8jxv-master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-cdc1ab7da414629332cc4c3926e6e59c name: my-node #... spec: taints: - effect: NoSchedule key: node-role.kubernetes.io/master #...
Pod์ ํ์ฉ ์ค์ฐจ๊ฐ ๋ ธ๋์ ํ ์ธํธ์ ์ผ์นํฉ๋๋ค. ํ์ฉ ์ค์ฐจ ์ค ํ๋๊ฐ ์๋ Pod๋ฅผ
node1
์ ์์ฝํ ์ ์์ต๋๋ค.
4.6.2.1. ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ ์ถ๊ฐ
๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋
ธ๋์ ํ
์ธํธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. MachineSet
์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋๋ ํ
์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ฐ์ดํธ๋ฉ๋๋ค. ํ์ฉ ์ค์ฐจ๋ ๋
ธ๋์ ์ง์ ์ถ๊ฐ๋ ํ
์ธํธ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋จธ์ ์ธํธ์ ์ํด ์ถ๊ฐ๋ ํ
์ธํธ์ ์๋ตํฉ๋๋ค.
ํ๋ก์ธ์ค
tolerations
์คํ ์๋ฅผ ํฌํจํ๋๋กPod
์ฌ์์ ํธ์งํ์ฌ Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํฉ๋๋ค.Equal
์ฐ์ฐ์๊ฐ ์๋ Pod ๊ตฌ์ฑ ํ์ผ์ ์apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key1" 1 value: "value1" operator: "Equal" effect: "NoExecute" tolerationSeconds: 3600 2 #...
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Exists
์ฐ์ฐ์๊ฐ ์๋ pod ๊ตฌ์ฑ ํ์ผ์ ์apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key1" operator: "Exists" effect: "NoExecute" tolerationSeconds: 3600 #...
MachineSet
์ค๋ธ์ ํธ์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.ํ ์ธํธํ ๋ ธ๋์
MachineSet
YAML์ ํธ์งํ๊ฑฐ๋ ์MachineSet
์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.$ oc edit machineset <machineset>
spec.template.spec
์น์ ์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.๋จธ์ ์ธํธ ์ฌ์์ ํ ์ธํธ ์
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: my-machineset #... spec: #... template: #... spec: taints: - effect: NoExecute key: key1 value: value1 #...
์ด ์์ ์์๋ ํค๊ฐ
key1
, ๊ฐ์ดvalue1
, ํ ์ธํธ ํจ๊ณผ๊ฐNoExecute
์ธ ํ ์ธํธ๋ฅผ ๋ ธ๋์ ๋ฐฐ์นํฉ๋๋ค.๋จธ์ ์ธํธ๋ฅผ 0 ์ผ๋ก ์ถ์ํฉ๋๋ค.
$ oc scale --replicas=0 machineset <machineset> -n openshift-machine-api
์์ ์ ๋ณด๋๋ ๋ค์ YAML์ ์ ์ฉํ์ฌ ๋จธ์ ์ธํธ๋ฅผ ์ค์ผ์ผ๋งํ ์ ์์ต๋๋ค.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: <machineset> namespace: openshift-machine-api spec: replicas: 0
๋จธ์ ์ด ์ ๊ฑฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
ํ์์ ๋ฐ๋ผ ๋จธ์ ์ธํธ๋ฅผ ํ์ฅํฉ๋๋ค.
$ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
$ oc edit machineset <machineset> -n openshift-machine-api
๋จธ์ ์ด ์์๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ํ ์ธํธ๋
MachineSet
์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์ถ๊ฐ๋ฉ๋๋ค.
4.6.2.2. ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ฅผ ๋ ธ๋์ ๋ฐ์ธ๋ฉ
ํน์ ์ฌ์ฉ์ ์งํฉ์์ ๋ ์ ์ ์ผ๋ก ์ฌ์ฉํ๋๋ก ๋ ธ๋ ์ธํธ๋ฅผ ์ ์ฉ์ผ๋ก ์ง์ ํ๋ ค๋ฉด ํด๋น Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ๋ ธ๋์ ํด๋น ํ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ํ์ฉ ์ค์ฐจ๊ฐ ์๋ Pod๋ ํ ์ธํธ๋ ๋ ธ๋ ๋๋ ํด๋ฌ์คํฐ์ ๊ธฐํ ๋ ธ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ ์ธํธ๋ ๋ ธ๋์๋ง Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ๋์ผํ ๋ ธ๋ ์ธํธ์๋ ๋ผ๋ฒจ์ ์ถ๊ฐํ๊ณ ํด๋น ๋ผ๋ฒจ์ด ์๋ ๋ ธ๋์๋ง Pod๋ฅผ ์์ฝํ ์ ์๋๋ก Pod์ ๋ ธ๋ ์ ์ฌ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
ํ๋ก์ธ์ค
์ฌ์ฉ์๊ฐ ํด๋น ๋ ธ๋ ๋ง ์ฌ์ฉํ ์ ์๋๋ก ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ํด๋น ๋ ธ๋์ ํด๋น ํ ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc adm taint nodes node1 dedicated=groupName:NoSchedule
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ํ ์ธํธ๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: my-node #... spec: taints: - key: dedicated value: groupName effect: NoSchedule #...
- ์ฌ์ฉ์ ์ ์ ์น์ธ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ์ฌ Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
4.6.2.3. ๋ ธ๋ ์ ํ๊ธฐ ๋ฐ ํ์ฉ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ์์ฑ
๋ ธ๋ ์ ํ๊ธฐ ๋ฐ ํ์ฉ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ ธ๋์ Pod ๋ฐฐ์น๋ฅผ ์ ์ดํ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋ก์ ํธ์์ ์์ฑ๋ ํ์ ๋ฆฌ์์ค๋ ํ์ฉ ์ค์ฐจ์ ์ผ์นํ๋ ํ ์ธํธ๊ฐ ์๋ ๋ ธ๋์ ์์ฝ๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ ธ๋๋ฅผ ์ง์ ํธ์งํ์ฌ ๋ ธ๋ ์ ํ์ ๋ ์ด๋ธ์ด ํ๋ ์ด์์ ๋ ธ๋์ ์ถ๊ฐ๋์ด ์์ต๋๋ค.
- ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ ธ๋๋ฅผ ์ง์ ํธ์งํ์ฌ ํ ์ธํธ๊ฐ ํ๋ ์ด์์ ๋ ธ๋์ ์ถ๊ฐ๋์ด ์์ต๋๋ค.
ํ๋ก์ธ์ค
metadata.annotations
์น์ ์์ ๋ ธ๋ ์ ํ๊ธฐ ๋ฐ ํ์ฉ ์ค์ฐจ๋ฅผ ์ง์ ํ์ฌProject
๋ฆฌ์์ค ์ ์๋ฅผ ์์ฑํฉ๋๋ค.project.yaml
ํ์ผ ์kind: Project apiVersion: project.openshift.io/v1 metadata: name: <project_name> 1 annotations: openshift.io/node-selector: '<label>' 2 scheduler.alpha.kubernetes.io/defaultTolerations: >- [{"operator": "Exists", "effect": "NoSchedule", "key": "<key_name>"} 3 ]
- 1
- ํ๋ก์ ํธ ์ด๋ฆ์ ๋๋ค.
- 2
- ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ ๋ ์ด๋ธ์ ๋๋ค.
- 3
- ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ ๊ตฌ์ฑ ์์ ํ ์ด๋ธ์ ์ค๋ช ๋ ํ์ฉ ์ค์ฐจ ๋งค๊ฐ๋ณ์์ ๋๋ค. ์ด ์์์๋ ๋ ธ๋์ ๊ธฐ์กด pod๋ฅผ ์ ์งํ ์ ์๋
NoSchedule
ํจ๊ณผ์ ๊ฐ์ ์ฌ์ฉํ์ง ์๋Exists
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
oc apply
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc apply -f project.yaml
<project_name>
๋ค์์คํ์ด์ค์์ ์์ฑ๋ ํ์ ๋ฆฌ์์ค๋ ์ด์ ์ง์ ๋ ๋
ธ๋์์ ์์ฝํด์ผ ํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- ๋ ธ๋์ ์๋์ผ๋ก ๋๋ ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ ์ถ๊ฐ
- ํ๋ก์ ํธ ์์ค ๋ ธ๋ ์ ํ๊ธฐ ์์ฑ
- Operator ์ํฌ๋ก๋์ Pod ๋ฐฐ์น
4.6.2.4. ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ ์ฌ์ฉํ์ฌ ํน์ ํ๋์จ์ด๋ก ๋ ธ๋ ์ ์ด
์๊ท๋ชจ ๋ ธ๋ ํ์ ์งํฉ์ ํน์ ํ๋์จ์ด๊ฐ ์๋ ํด๋ฌ์คํฐ์์๋ ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ํ๋์จ์ด๊ฐ ํ์ํ์ง ์์ Pod๋ฅผ ํด๋น ๋ ธ๋์์ ๋ถ๋ฆฌํ์ฌ ํน์ ํ๋์จ์ด๊ฐ ํ์ํ Pod๋ฅผ ์ํด ๋ ธ๋๋ฅผ ๋จ๊ฒจ ๋ ์ ์์ต๋๋ค. ๋ํ ํน์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํน์ ํ๋์จ์ด๊ฐ ํ์ํ Pod๋ฅผ ์์ฒญํ ์๋ ์์ต๋๋ค.
์ด ์์ ์ ํน์ ํ๋์จ์ด๊ฐ ํ์ํ Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ๊ณ ํน์ ํ๋์จ์ด๊ฐ ์๋ ๋ ธ๋๋ฅผ ํ ์ธํธํ์ฌ ์ํํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
ํน์ ํ๋์จ์ด๊ฐ ์๋ ๋ ธ๋๋ฅผ ํน์ Pod์ฉ์ผ๋ก ์์ฝํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ํน์ ํ๋์จ์ด๊ฐ ํ์ํ Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "disktype" value: "ssd" operator: "Equal" effect: "NoSchedule" tolerationSeconds: 3600 #...
๋ค์ ๋ช ๋ น ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ํ๋์จ์ด๊ฐ ์๋ ๋ ธ๋์ ํ ์ธํธ๋ฅผ ์ค์ ํฉ๋๋ค.
$ oc adm taint nodes <node-name> disktype=ssd:NoSchedule
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
$ oc adm taint nodes <node-name> disktype=ssd:PreferNoSchedule
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ํ ์ธํธ๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: my_node #... spec: taints: - key: disktype value: ssd effect: PreferNoSchedule #...
4.6.3. ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ ๊ฑฐ
ํ์์ ๋ฐ๋ผ ๋ ธ๋์์ ํ ์ธํธ๋ฅผ ์ ๊ฑฐํ๊ณ Pod์์ ํจ๋ฌ๋ ์ด์ ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋จผ์ Pod์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ถ๊ฐํ ๋ค์ ๋ ธ๋์์ Pod๊ฐ ์ ๊ฑฐ๋์ง ์๋๋ก ๋ ธ๋์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
ํ ์ธํธ ๋ฐ ํจ๋ฌ๋ ์ด์ ์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ ธ๋์์ ํ ์ธํธ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc adm taint nodes <node-name> <key>-
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc adm taint nodes ip-10-0-132-248.ec2.internal key1-
์ถ๋ ฅ ์
node/ip-10-0-132-248.ec2.internal untainted
Pod์์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด
Pod
์ฌ์์ ํธ์งํ์ฌ ํ์ฉ ์ค์ฐจ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: my-pod #... spec: tolerations: - key: "key2" operator: "Exists" effect: "NoExecute" tolerationSeconds: 3600 #...
4.7. ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ ธ๋์ Pod ๋ฐฐ์น
๋ ธ๋ ์ ํ๊ธฐ๋ ๋ ธ๋์ ์ฌ์ฉ์ ์ ์ ๋ผ๋ฒจ ๋ฐ Pod์ ์ง์ ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ ํค/๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋ ๋งต์ ์ง์ ํฉ๋๋ค.
๋ ธ๋์์ Pod๋ฅผ ์คํํ๋ ค๋ฉด ๋ ธ๋์ ๋ผ๋ฒจ๊ณผ ๋์ผํ ํค/๊ฐ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ Pod์ ์์ด์ผ ํฉ๋๋ค.
4.7.1. ๋ ธ๋ ์ ํ๊ธฐ ์ ๋ณด
Pod์ ๋ ธ๋ ์ ํ๊ธฐ์ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod๊ฐ ์์ฝ๋๋ ์์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด OpenShift Container Platform์์ ์ผ์นํ๋ ๋ผ๋ฒจ์ด ํฌํจ๋ ๋ ธ๋์ Pod๋ฅผ ์์ฝํฉ๋๋ค.
๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ ธ๋์ ํน์ Pod๋ฅผ ๋ฐฐ์นํ๊ณ , ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ ํน์ ๋ ธ๋์ ์ Pod๋ฅผ ๋ฐฐ์นํ๊ณ , ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ ธ๋์ ํ๋ก์ ํธ์ ์ Pod๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์๊ฐ ์์ฑํ๋ ๋ชจ๋ Pod์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ํฌํจํ์ฌ ์ง๋ฆฌ์ ์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ๋
ธ๋์๋ง Pod๋ฅผ ๋ฐฐํฌํ ์ ์๋ ์ธํ๋ผ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ์์ ์์ ํด๋ฌ์คํฐ๋ ๋ ์ง์ญ์ ๋ถ๋ฐฐ๋ ๋ฐ์ดํฐ์ผํฐ 5๊ฐ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ฏธ๊ตญ์์๋ ๋
ธ๋์ ๋ผ๋ฒจ์ us-east
, us-central
๋๋ us-west
๋ก ์ง์ ํฉ๋๋ค. ์์์ ํํ์ ์ง์ญ(APAC)์์๋ ๋
ธ๋์ ๋ผ๋ฒจ์ apac-east
๋๋ apac-west
๋ก ์ง์ ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์์ฑํ Pod์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ์ฌ ํด๋น ๋
ธ๋์ Pod๊ฐ ์์ฝ๋๋๋ก ํ ์ ์์ต๋๋ค.
Pod
์ค๋ธ์ ํธ์ ๋
ธ๋ ์ ํ๊ธฐ๊ฐ ํฌํจ๋์ด ์์ง๋ง ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์๋ ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์์ฝํ์ง ์์ต๋๋ค.
๋์ผํ Pod ๊ตฌ์ฑ์ ๋ ธ๋ ์ ํ๊ธฐ ๋ฐ ๋ ธ๋ ์ ์ฌ์ฑ์ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ๋ค์ ๊ท์น์์ ๋ ธ๋์ ๋ํ Pod ๋ฐฐ์น๋ฅผ ์ ์ดํฉ๋๋ค.
-
nodeSelector
์nodeAffinity
๋ฅผ ๋ ๋ค ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ Pod๋ฅผ ํ๋ณด ๋ ธ๋์ ์์ฝํ๊ธฐ ์ํด์๋ ๋ ์ํ๋ฅผ ๋ชจ๋ ์ถฉ์กฑํด์ผ ํฉ๋๋ค. -
nodeAffinity
์ ํ๊ณผ ์ฐ๊ฒฐ๋nodeSelectorTerms
๋ฅผ ์ฌ๋ฌ ๊ฐ ์ง์ ํ๋ ๊ฒฝ์ฐnodeSelectorTerms
์ค ํ๋๋ฅผ ์ถฉ์กฑํ๋ฉด Pod๋ฅผ ๋ ธ๋์ ์์ฝํ ์ ์์ต๋๋ค. -
nodeSelectorTerms
์ ์ฐ๊ฒฐ๋matchExpressions
๋ฅผ ์ฌ๋ฌ ๊ฐ ์ง์ ํ๋ ๊ฒฝ์ฐ ๋ชจ๋matchExpressions
๋ฅผ ์ถฉ์กฑํ ๋๋ง Pod๋ฅผ ๋ ธ๋์ ์์ฝํ ์ ์์ต๋๋ค.
- ํน์ Pod ๋ฐ ๋ ธ๋์ ๋ ธ๋ ์ ํ๊ธฐ
๋ ธ๋ ์ ํ๊ธฐ ๋ฐ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ํน์ Pod๊ฐ ์์ฝ๋ ๋ ธ๋๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
๋ ธ๋ ์ ํ๊ธฐ์ ๋ผ๋ฒจ์ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Pod์ ์ผ์ ์ด ์กฐ์ ๋์ง ์๋๋ก ๋ ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ ๋ค์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ Pod์ ์ถ๊ฐํฉ๋๋ค.
์ฐธ๊ณ์์ฝ๋ ๊ธฐ์กด Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ฐฐํฌ ๊ตฌ์ฑ๊ณผ ๊ฐ์ด Pod๋ฅผ ์ ์ดํ๋ ์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ ์ง์ ํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์
Node
์ค๋ธ์ ํธ์๋region: east
๋ผ๋ฒจ์ด ์์ต๋๋ค.๋ผ๋ฒจ์ด ์๋
Node
์ค๋ธ์ ํธ ์ํkind: Node apiVersion: v1 metadata: name: ip-10-0-131-14.ec2.internal selfLink: /api/v1/nodes/ip-10-0-131-14.ec2.internal uid: 7bc2580a-8b8e-11e9-8e01-021ab4174c74 resourceVersion: '478704' creationTimestamp: '2019-06-10T14:46:08Z' labels: kubernetes.io/os: linux failure-domain.beta.kubernetes.io/zone: us-east-1a node.openshift.io/os_version: '4.5' node-role.kubernetes.io/worker: '' failure-domain.beta.kubernetes.io/region: us-east-1 node.openshift.io/os_id: rhcos beta.kubernetes.io/instance-type: m4.large kubernetes.io/hostname: ip-10-0-131-14 beta.kubernetes.io/arch: amd64 region: east 1 type: user-node #...
- 1
- Pod ๋ ธ๋ ์ ํ๊ธฐ์ ์ผ์นํด์ผ ํ๋ ๋ผ๋ฒจ์ ๋๋ค.
Pod์๋
type: user-node,region: east
๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์์ต๋๋ค.๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์๋
Pod
์ค๋ธ์ ํธ ์ํapiVersion: v1 kind: Pod metadata: name: s1 #... spec: nodeSelector: 1 region: east type: user-node #...
- 1
- ๋ ธ๋ ๋ผ๋ฒจ๊ณผ ์ผ์นํด์ผ ํ๋ ๋ ธ๋ ์ ํ๊ธฐ์ ๋๋ค. ๋ ธ๋์๋ ๊ฐ ๋ ธ๋ ์ ํ๊ธฐ์ ๋ํ ๋ ์ด๋ธ์ด ์์ด์ผ ํฉ๋๋ค.
์์ Pod ์ฌ์์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํ๋ฉด ์์ ๋ ธ๋์ ์์ฝํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ
๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํด๋ฌ์คํฐ์์ Pod๋ฅผ ์์ฑํ ๋ OpenShift Container Platform์์ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ Pod์ ์ถ๊ฐํ๊ณ ์ผ์นํ๋ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ๋ ธ๋์์ Pod๋ฅผ ์์ฝํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์
Scheduler
์ค๋ธ์ ํธ์๋ ๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์คregion=east
๋ฐtype=user-node
๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์์ต๋๋ค.์ค์ผ์ค๋ฌ Operator ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์ ์
apiVersion: config.openshift.io/v1 kind: Scheduler metadata: name: cluster #... spec: defaultNodeSelector: type=user-node,region=east #...
ํด๋น ํด๋ฌ์คํฐ์ ๋ ธ๋์๋
type=user-node,region=east
๋ผ๋ฒจ์ด ์์ต๋๋ค.Node
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Node metadata: name: ci-ln-qg1il3k-f76d1-hlmhl-worker-b-df2s4 #... labels: region: east type: user-node #...
๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์๋
Pod
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Pod metadata: name: s1 #... spec: nodeSelector: region: east #...
์์ ํด๋ฌ์คํฐ์์ ์์ Pod ์ฌ์์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํ๋ฉด Pod๊ฐ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ์ ํจ๊ป ์์ฑ๋์ด ๋ผ๋ฒจ์ด ์ง์ ๋ ๋ ธ๋์ ์์ฝ๋ฉ๋๋ค.
Pod๊ฐ ๋ผ๋ฒจ์ด ์ง์ ๋ ๋ ธ๋์ ์๋ Pod ๋ชฉ๋ก์ ์
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-s1 1/1 Running 0 20s 10.131.2.6 ci-ln-qg1il3k-f76d1-hlmhl-worker-b-df2s4 <none> <none>
์ฐธ๊ณPod๋ฅผ ์์ฑํ๋ ํ๋ก์ ํธ์ ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น ์ ํ๊ธฐ๊ฐ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ณด๋ค ์ฐ์ ํฉ๋๋ค. Pod์ ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์์ผ๋ฉด Pod๊ฐ ์์ฑ๋๊ฑฐ๋ ์์ฝ๋์ง ์์ต๋๋ค.
- ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ
ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ํ๋ก์ ํธ์์ Pod๋ฅผ ์์ฑํ ๋ OpenShift Container Platform์์ Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๊ณ ๋ผ๋ฒจ์ด ์ผ์นํ๋ ๋ ธ๋์ Pod๋ฅผ ์์ฝํฉ๋๋ค. ํด๋ฌ์คํฐ ์์ค ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์ฐ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ํ๋ก์ ํธ์๋
region=east
๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์์ต๋๋ค.Namespace
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Namespace metadata: name: east-region annotations: openshift.io/node-selector: "region=east" #...
๋ค์ ๋ ธ๋์๋
type=user-node,region=east
๋ผ๋ฒจ์ด ์์ต๋๋ค.Node
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Node metadata: name: ci-ln-qg1il3k-f76d1-hlmhl-worker-b-df2s4 #... labels: region: east type: user-node #...
์ด ์์ ํ๋ก์ ํธ์์ ์์ Pod ์ฌ์์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํ๋ฉด Pod๊ฐ ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ์ ํจ๊ป ์์ฑ๋์ด ๋ผ๋ฒจ์ด ์ง์ ๋ ๋ ธ๋์ ์์ฝ๋ฉ๋๋ค.
Pod
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Pod metadata: namespace: east-region #... spec: nodeSelector: region: east type: user-node #...
Pod๊ฐ ๋ผ๋ฒจ์ด ์ง์ ๋ ๋ ธ๋์ ์๋ Pod ๋ชฉ๋ก์ ์
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-s1 1/1 Running 0 20s 10.131.2.6 ci-ln-qg1il3k-f76d1-hlmhl-worker-b-df2s4 <none> <none>
Pod์ ๋ค๋ฅธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํ๋ก์ ํธ์ Pod๊ฐ ์์ฑ๋๊ฑฐ๋ ์์ฝ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ Pod๋ฅผ ์์ ํ๋ก์ ํธ์ ๋ฐฐํฌํ๋ฉด Pod๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์ ํจํ์ง ์์
Pod
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Pod metadata: name: west-region #... spec: nodeSelector: region: west #...
4.7.2. ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น ์ ์ด
Pod์ ๋ ธ๋ ์ ํ๊ธฐ์ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ Pod๊ฐ ์์ฝ๋๋ ์์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด OpenShift Container Platform์์ ์ผ์นํ๋ ๋ผ๋ฒจ์ด ํฌํจ๋ ๋ ธ๋์ Pod๋ฅผ ์์ฝํฉ๋๋ค.
๋ ธ๋, ๋จธ์ ์ธํธ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค. ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ฉด ๋ ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋๋ ๊ฒฝ์ฐ ์ ๋ ธ๋์ ๋ผ๋ฒจ์ด ์ง์ ๋ฉ๋๋ค. ๋ ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋ ๊ฒฝ์ฐ ๋ ธ๋ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ์ถ๊ฐ๋ ๋ผ๋ฒจ์ด ์ ์ง๋์ง ์์ต๋๋ค.
๊ธฐ์กด Pod์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ReplicaSet
์ค๋ธ์ ํธ, DaemonSet
์ค๋ธ์ ํธ, StatefulSet
์ค๋ธ์ ํธ, Deployment
์ค๋ธ์ ํธ ๋๋ DeploymentConfig
์ค๋ธ์ ํธ์ ๊ฐ์ด ํด๋น Pod์ ์ ์ด ์ค๋ธ์ ํธ์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด ์ ์ด ์ค๋ธ์ ํธ ์๋์ ๊ธฐ์กด Pod๋ ๋ผ๋ฒจ์ด ์ผ์นํ๋ ๋
ธ๋์์ ์ฌ์์ฑ๋ฉ๋๋ค. ์ Pod๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ Pod ์ฌ์์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค. Pod์ ์ ์ด ์ค๋ธ์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์ญ์ ํ๊ณ Pod ์ฌ์์ ํธ์งํ๊ณ Pod๋ฅผ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค.
์์ฝ๋ ๊ธฐ์กด Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๊ธฐ์กด Pod์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํด๋น Pod์ ์ ์ด ์ค๋ธ์ ํธ๋ฅผ ๊ฒฐ์ ํ์ญ์์ค. ์๋ฅผ ๋ค์ด router-default-66d5cf9464-m2g75
Pod๋ router-default-66d5cf9464
๋ณต์ ๋ณธ ์ธํธ์์ ์ ์ดํฉ๋๋ค.
$ oc describe pod router-default-66d5cf9464-7pwkc
์ถ๋ ฅ ์
kind: Pod apiVersion: v1 metadata: #... Name: router-default-66d5cf9464-7pwkc Namespace: openshift-ingress # ... Controlled By: ReplicaSet/router-default-66d5cf9464 # ...
์น ์ฝ์์์ Pod YAML์ ownerReferences
์๋์ ์ ์ด ์ค๋ธ์ ํธ๊ฐ ๋์ด๋ฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: router-default-66d5cf9464-7pwkc # ... ownerReferences: - apiVersion: apps/v1 kind: ReplicaSet name: router-default-66d5cf9464 uid: d81dd094-da26-11e9-a48a-128e7edf0312 controller: true blockOwnerDeletion: true # ...
ํ๋ก์ธ์ค
๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ ธ๋๋ฅผ ์ง์ ํธ์งํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
๋ ธ๋๋ฅผ ์์ฑํ ๋ ๋จธ์ ์ธํธ์์ ๊ด๋ฆฌํ๋ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ค๋ฉด
MachineSet
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
MachineSet
์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.$ oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-api
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc patch MachineSet abc612-msrtw-worker-us-east-1c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: xf2bd-infra-us-east-2a namespace: openshift-machine-api spec: template: spec: metadata: labels: region: "east" type: "user-node" #...
oc edit
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ผ๋ฒจ์ดMachineSet
์ค๋ธ์ ํธ์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit MachineSet abc612-msrtw-worker-us-east-1c -n openshift-machine-api
MachineSet
์ค๋ธ์ ํธ์ ์apiVersion: machine.openshift.io/v1beta1 kind: MachineSet # ... spec: # ... template: metadata: # ... spec: metadata: labels: region: east type: user-node # ...
๋ผ๋ฒจ์ ๋ ธ๋์ ์ง์ ์ถ๊ฐํฉ๋๋ค.
๋ ธ๋์
Node
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc label nodes <name> <key>=<value>
์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc label nodes ip-10-0-142-25.ec2.internal type=user-node region=east
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: hello-node-6fbccf8d9 labels: type: "user-node" region: "east" #...
๋ผ๋ฒจ์ด ๋ ธ๋์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get nodes -l type=user-node,region=east
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION ip-10-0-142-25.ec2.internal Ready worker 17m v1.23.0
Pod์ ์ผ์นํ๋ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๊ธฐ์กด ๋ฐ ํฅํ Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด Pod์ ์ ์ด ์ค๋ธ์ ํธ์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ผ๋ฒจ์ด ์๋
ReplicaSet
์ค๋ธ์ ํธ์ ์kind: ReplicaSet apiVersion: apps/v1 metadata: name: hello-node-6fbccf8d9 # ... spec: # ... template: metadata: creationTimestamp: null labels: ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default pod-template-hash: 66d5cf9464 spec: nodeSelector: kubernetes.io/os: linux node-role.kubernetes.io/worker: '' type: user-node 1 #...
- 1
- ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
ํน์ ์ Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ ํ๊ธฐ๋ฅผ
Pod
์ค๋ธ์ ํธ์ ์ง์ ์ถ๊ฐํฉ๋๋ค.๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์๋
Pod
์ค๋ธ์ ํธ์ ์apiVersion: v1 kind: Pod metadata: name: hello-node-6fbccf8d9 #... spec: nodeSelector: region: east type: user-node #...
์ฐธ๊ณ์์ฝ๋ ๊ธฐ์กด Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
4.7.3. ๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ ์์ฑ
Pod์ ๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ์ ๋ ธ๋์ ๋ผ๋ฒจ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ์ ์์ฑ๋๋ ๋ชจ๋ Pod๋ฅผ ํน์ ๋ ธ๋๋ก ์ ํํ ์ ์์ต๋๋ค.
ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํด๋ฌ์คํฐ์์ Pod๋ฅผ ์์ฑํ๋ฉด OpenShift Container Platform์์ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ Pod์ ์ถ๊ฐํ๊ณ ๋ผ๋ฒจ์ด ์ผ์นํ๋ ๋ ธ๋์ Pod๋ฅผ ์์ฝํฉ๋๋ค.
Scheduler Operator CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ํธ์งํ์ฌ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๋ ธ๋, ๋จธ์ ์ธํธ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค. ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ฉด ๋ ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋๋ ๊ฒฝ์ฐ ์ ๋ ธ๋์ ๋ผ๋ฒจ์ด ์ง์ ๋ฉ๋๋ค. ๋ ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋ ๊ฒฝ์ฐ ๋ ธ๋ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ์ถ๊ฐ๋ ๋ผ๋ฒจ์ด ์ ์ง๋์ง ์์ต๋๋ค.
Pod์ ํค/๊ฐ ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ํค์๋ ๋ค๋ฅธ ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
Scheduler Operator CR์ ํธ์งํ์ฌ ๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
$ oc edit scheduler cluster
๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ Scheduler Operator CR์ ์
apiVersion: config.openshift.io/v1 kind: Scheduler metadata: name: cluster ... spec: defaultNodeSelector: type=user-node,region=east 1 mastersSchedulable: false
- 1
- ์ ์ ํ
<key>:<value>
์์ ์ฌ์ฉํ์ฌ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ณ๊ฒฝ ํ
openshift-kube-apiserver
ํ๋ก์ ํธ์ pod๊ฐ ์ฌ๋ฐฐํฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด ์์ ์ ๋ช ๋ถ ์ ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ Pod๊ฐ ์ฌ๋ฐฐํฌ๋ ํ ์ ์ฉ๋ฉ๋๋ค.๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ ธ๋๋ฅผ ์ง์ ํธ์งํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
๋ ธ๋๋ฅผ ์์ฑํ ๋ ๋จธ์ ์ธํธ์์ ๊ด๋ฆฌํ๋ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ค๋ฉด ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
MachineSet
์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.$ oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-api 1
- 1
- ๊ฐ ๋ผ๋ฒจ์
<key>/<value>
์์ ์ถ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc patch MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: <machineset> namespace: openshift-machine-api spec: template: spec: metadata: labels: region: "east" type: "user-node"
oc edit
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ผ๋ฒจ์ดMachineSet
์ค๋ธ์ ํธ์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit MachineSet abc612-msrtw-worker-us-east-1c -n openshift-machine-api
MachineSet
์ค๋ธ์ ํธ์ ์apiVersion: machine.openshift.io/v1beta1 kind: MachineSet ... spec: ... template: metadata: ... spec: metadata: labels: region: east type: user-node ...
0
์ผ๋ก ์ถ์ํ๊ณ ๋ ธ๋๋ฅผ ํ์ฅํ์ฌ ํด๋น ๋จธ์ ์ธํธ์ ๊ด๋ จ๋ ๋ ธ๋๋ฅผ ๋ค์ ๋ฐฐํฌํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc scale --replicas=0 MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
$ oc scale --replicas=1 MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
๋ ธ๋๊ฐ ์ค๋น๋๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
oc get
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ผ๋ฒจ์ด ๋ ธ๋์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.$ oc get nodes -l <key>=<value>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get nodes -l type=user-node
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION ci-ln-l8nry52-f76d1-hl7m7-worker-c-vmqzp Ready worker 61s v1.23.0
๋ผ๋ฒจ์ ๋ ธ๋์ ์ง์ ์ถ๊ฐํฉ๋๋ค.
๋ ธ๋์
Node
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc label nodes <name> <key>=<value>
์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc label nodes ci-ln-l8nry52-f76d1-hl7m7-worker-b-tgq49 type=user-node region=east
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: <node_name> labels: type: "user-node" region: "east"
oc get
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ด ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.$ oc get nodes -l <key>=<value>,<key>=<value>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get nodes -l type=user-node,region=east
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION ci-ln-l8nry52-f76d1-hl7m7-worker-b-tgq49 Ready worker 17m v1.23.0
4.7.4. ํ๋ก์ ํธ ์์ค ๋ ธ๋ ์ ํ๊ธฐ ์์ฑ
ํ๋ก์ ํธ์ ๋ ธ๋ ์ ํ๊ธฐ์ ํจ๊ป ๋ ธ๋์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ํด๋น ํ๋ก์ ํธ์์ ์์ฑ๋๋ ๋ชจ๋ Pod๋ฅผ ๋ผ๋ฒจ์ด ์ง์ ๋ ๋ ธ๋๋ก ์ ํํ ์ ์์ต๋๋ค.
์ด ํ๋ก์ ํธ์์ Pod๋ฅผ ์์ฑํ๋ฉด OpenShift Container Platform์์ ํ๋ก์ ํธ์ Pod์ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๊ณ ํ๋ก์ ํธ์ ๋ผ๋ฒจ์ด ์ผ์นํ๋ ๋ ธ๋์ Pod๋ฅผ ์์ฝํฉ๋๋ค. ํด๋ฌ์คํฐ ์์ค ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์ฐ์ ํฉ๋๋ค.
openshift.io/node-selector
๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ๋๋ก Namespace
์ค๋ธ์ ํธ๋ฅผ ํธ์งํ์ฌ ํ๋ก์ ํธ์ ๋
ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋
ธ๋, ๋จธ์ ์ธํธ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค. ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ฉด ๋
ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋๋ ๊ฒฝ์ฐ ์ ๋
ธ๋์ ๋ผ๋ฒจ์ด ์ง์ ๋ฉ๋๋ค. ๋
ธ๋ ๋๋ ๋จธ์ ์ด ์ค๋จ๋ ๊ฒฝ์ฐ ๋
ธ๋ ๋๋ ๋จธ์ ๊ตฌ์ฑ์ ์ถ๊ฐ๋ ๋ผ๋ฒจ์ด ์ ์ง๋์ง ์์ต๋๋ค.
Pod
์ค๋ธ์ ํธ์ ๋
ธ๋ ์ ํ๊ธฐ๊ฐ ํฌํจ๋์ด ์์ง๋ง ์ผ์นํ๋ ๋
ธ๋ ์ ํ๊ธฐ๊ฐ ์๋ ํ๋ก์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์์ฝํ์ง ์์ต๋๋ค. ํด๋น ์ฌ์์์ Pod๋ฅผ ์์ฑํ๋ฉด ๋ค์ ๋ฉ์์ง์ ์ ์ฌํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ค๋ฅ ๋ฉ์์ง์ ์
Error from server (Forbidden): error when creating "pod.yaml": pods "pod-4" is forbidden: pod node label selector conflicts with its project node label selector
Pod์ ํค/๊ฐ ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ ํธ ํค์๋ ๋ค๋ฅธ ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๊ธฐ๋ณธ ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ๋ค์์คํ์ด์ค๋ฅผ ํธ์งํ์ฌ
openshift.io/node-selector
๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.$ oc edit namespace <name>
์ถ๋ ฅ ์
apiVersion: v1 kind: Namespace metadata: annotations: openshift.io/node-selector: "type=user-node,region=east" 1 openshift.io/description: "" openshift.io/display-name: "" openshift.io/requester: kube:admin openshift.io/sa.scc.mcs: s0:c30,c5 openshift.io/sa.scc.supplemental-groups: 1000880000/10000 openshift.io/sa.scc.uid-range: 1000880000/10000 creationTimestamp: "2021-05-10T12:35:04Z" labels: kubernetes.io/metadata.name: demo name: demo resourceVersion: "145537" uid: 3f8786e3-1fcb-42e3-a0e3-e2ac54d15001 spec: finalizers: - kubernetes
- 1
- ์ ์ ํ
<key>:<value>
์์ด ํฌํจ๋openshift.io/node-selector
๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ ธ๋๋ฅผ ์ง์ ํธ์งํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
๋ ธ๋๋ฅผ ์์ฑํ ๋ ๋จธ์ ์ธํธ์์ ๊ด๋ฆฌํ๋ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ค๋ฉด
MachineSet
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
MachineSet
์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.$ oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-api
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc patch MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋จธ์ ์ธํธ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: <machineset> namespace: openshift-machine-api spec: template: spec: metadata: labels: region: "east" type: "user-node"
oc edit
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ผ๋ฒจ์ดMachineSet
์ค๋ธ์ ํธ์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
์ถ๋ ฅ ์
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: ... spec: ... template: metadata: ... spec: metadata: labels: region: east type: user-node
ํด๋น ๋จธ์ ์ธํธ์ ๊ด๋ จ๋ ๋ ธ๋๋ฅผ ์ฌ๋ฐฐํฌํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc scale --replicas=0 MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
$ oc scale --replicas=1 MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
๋ ธ๋๊ฐ ์ค๋น๋๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
oc get
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ผ๋ฒจ์ด ๋ ธ๋์ ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.$ oc get nodes -l <key>=<value>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get nodes -l type=user-node,region=east
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION ci-ln-l8nry52-f76d1-hl7m7-worker-c-vmqzp Ready worker 61s v1.23.0
๋ผ๋ฒจ์ ๋ ธ๋์ ์ง์ ์ถ๊ฐํฉ๋๋ค.
๋ผ๋ฒจ์ ์ถ๊ฐํ
Node
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc label <resource> <name> <key>=<value>
์๋ฅผ ๋ค์ด ๋ ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc label nodes ci-ln-l8nry52-f76d1-hl7m7-worker-c-tgq49 type=user-node region=east
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: <node_name> labels: type: "user-node" region: "east"
oc get
๋ช ๋ น์ ์ฌ์ฉํ์ฌNode
์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ด ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.$ oc get nodes -l <key>=<value>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get nodes -l type=user-node,region=east
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION ci-ln-l8nry52-f76d1-hl7m7-worker-b-tgq49 Ready worker 17m v1.23.0
4.8. Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น ์ ์ด
Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ๋ ธ๋, ์์ญ, ์ง์ญ ๋๋ ๊ธฐํ ์ฌ์ฉ์ ์ ์ ํ ํด๋ก์ง ๋๋ฉ์ธ์์ Pod์ ๋ฐฐ์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
4.8.1. Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด ์ ๋ณด
Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ๋ฉด ์ ์ฒด ์ฅ์ ๋๋ฉ์ธ์์ Pod ๋ฐฐํฌ๋ฅผ ์ธ๋ฐํ๊ฒ ์ ์ดํ์ฌ ๊ณ ๊ฐ์ฉ์ฑ์ ์คํํ๊ณ ๋ฆฌ์์ค๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
OpenShift Container Platform ๊ด๋ฆฌ์๋ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ์ฌ ์ง์ญ, ์์ญ, ๋ ธ๋ ๋๋ ๊ธฐํ ์ฌ์ฉ์ ์ ์ ๋๋ฉ์ธ๊ณผ ๊ฐ์ ํ ํด๋ก์ง ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ ธ๋์ ์ด๋ฌํ ๋ผ๋ฒจ์ด ์ค์ ๋๋ฉด ์ฌ์ฉ์๊ฐ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ํ์ฌ ์ด๋ฌํ ํ ํด๋ก์ง ๋๋ฉ์ธ ์ ๋ฐ์์ Pod ๋ฐฐ์น๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
ํจ๊ป ๊ทธ๋ฃนํํ Pod, Pod๋ฅผ ๋ถ๋ฐฐํ ํ ํด๋ก์ง ๋๋ฉ์ธ, ํ์ฉ ๊ฐ๋ฅํ ๋ถ์ผ์น๋ฅผ ์ง์ ํฉ๋๋ค. ์ ์ฝ ์กฐ๊ฑด์ผ๋ก ์ธํด ๋ถ๋ฐฐ ์ ๋์ผํ ๋ค์์คํ์ด์ค ๋ด์ Pod๋ง ์ผ์นํ๊ณ ํจ๊ป ๊ทธ๋ฃนํ๋ฉ๋๋ค.
4.8.2. Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ์ฑ
๋ค์ ๋จ๊ณ์์๋ ์์ญ์ ๋ฐ๋ผ ์ง์ ๋ ๋ผ๋ฒจ๊ณผ ์ผ์นํ๋ Pod๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ฌ๋ฌ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ง๋ง ์๋ก ์ถฉ๋ํ์ง ์๋๋ก ํด์ผ ํฉ๋๋ค. Pod๋ฅผ ๋ฐฐ์นํ๋ ค๋ฉด ๋ชจ๋ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ๋ ธ๋์ ํ์ ๋ผ๋ฒจ์ ์ถ๊ฐํ์ต๋๋ค.
ํ๋ก์ธ์ค
Pod
์ฌ์์ ์์ฑํ๊ณ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ ํฉ๋๋ค.pod-spec.yaml
ํ์ผ์ ์apiVersion: v1 kind: Pod metadata: name: my-pod labels: region: us-east spec: topologySpreadConstraints: - maxSkew: 1 1 topologyKey: topology.kubernetes.io/zone 2 whenUnsatisfiable: DoNotSchedule 3 labelSelector: 4 matchLabels: region: us-east 5 containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod
- 1
- ๋ ํ ํด๋ก์ง ๋๋ฉ์ธ ๊ฐ ์ต๋ Pod ์ ์ฐจ์ด์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
1
์ด๊ณ ๊ฐ0
์ ์ง์ ํ ์ ์์ต๋๋ค. - 2
- ๋ ธ๋ ๋ผ๋ฒจ์ ํค์ ๋๋ค. ์ด ํค ๋ฐ ๋์ผํ ๊ฐ์ด ์๋ ๋ ธ๋๋ ๋์ผํ ํ ํด๋ก์ง์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- 3
- ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ค์ผ์ค๋ฌ์ Pod๋ฅผ ์์ฝํ์ง ์๋๋ก ์ง์ํ๋
DoNotSchedule
์ ๋๋ค. Pod๋ฅผ ๊ณ์ ์์ฝํ๊ธฐ ์ํดScheduleAnyway
๋ก ์ค์ ํ์ง๋ง ์ค์ผ์ค๋ฌ๋ ํด๋ฌ์คํฐ์ ๋ถ๊ท ํ์ด ๋ ์ฌํด์ง์ง ์๋๋ก ๋ถ์ผ์น์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํฉ๋๋ค. - 4
- ์ด ๋ผ๋ฒจ ์ ํ๊ธฐ์ ์ผ์นํ๋ Pod๋ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํ๊ธฐ ์ํด ๋ถ๋ฐฐ๋ ๋ ๊ณ์ฐ๋๊ณ ๊ทธ๋ฃน์ผ๋ก ์ธ์๋ฉ๋๋ค. ๋ผ๋ฒจ ์ ํ๊ธฐ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ์ง ์์ผ๋ฉด ์ผ์นํ๋ Pod๊ฐ ์์ต๋๋ค.
- 5
- ์ด
Pod
์ฌ์๋ ๋์ค์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ณ์ฐ๋๋๋ก ํ๋ ค๋ฉด ํด๋น ๋ผ๋ฒจ์ ์ด ๋ผ๋ฒจ ์ ํ๊ธฐ์ ์ผ์นํ๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f pod-spec.yaml
4.8.3. Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์
๋ค์ ์์ ์์๋ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
4.8.3.1. ๋จ์ผ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์
์ด ์์ Pod
์ฌ์์์๋ ํ๋์ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ํฉ๋๋ค. region ๋ ์ด๋ธ์ด ์ง์ ๋ Pod์ ์ผ์นํฉ๋๋ค. us-east
๋ ์์ญ์ ๋ฐฐํฌ๋๊ณ , 1
์ ์คํ๋ฅผ ์ง์ ํ๊ณ , ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์์ฝํ์ง ์์ต๋๋ค.
kind: Pod apiVersion: v1 metadata: name: my-pod labels: region: us-east spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: region: us-east containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod
4.8.3.2. ๋ค์ค Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์
์ด ์์ Pod
์ฌ์์์๋ ๋ ๊ฐ์ Pod ํ ํด๋ก์ง ๋ถ๋ฐฐ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ํฉ๋๋ค. ๋ ๋ค region: us-east
๋ ์ด๋ธ์ด ์ง์ ๋ Pod์ ์ผ์นํ๊ณ , ๋ถ์ผ์น๋ฅผ 1
๋ก ์ง์ ํ๊ณ , ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ Pod๋ฅผ ์์ฝํ์ง ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์ ์ฝ ์กฐ๊ฑด์์๋ ์ฌ์ฉ์ ์ ์ ๋ผ๋ฒจ node
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ๋ฐฐํฌํ๊ณ , ๋ ๋ฒ์งธ๋ ์ ์ฝ ์กฐ๊ฑด์์๋ ์ฌ์ฉ์ ์ ์ ๋ผ๋ฒจ rack
์ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ๋ฐฐํฌํฉ๋๋ค. Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ชจ๋ ์ถฉ์กฑํด์ผ ํฉ๋๋ค.
kind: Pod apiVersion: v1 metadata: name: my-pod-2 labels: region: us-east spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: node whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: region: us-east - maxSkew: 1 topologyKey: rack whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: region: us-east containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod
4.8.4. ์ถ๊ฐ ๋ฆฌ์์ค
4.9. ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ ์คํ
๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์ ํจ๊ป ์ฌ๋ฌ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ๋ฅผ ์คํํ๊ณ ๊ฐ Pod์ ์ฌ์ฉํ ์ค์ผ์ค๋ฌ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
OpenShift Container Platform์์ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ง์๋์ง๋ง Red Hat์ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ๊ธฐ๋ฅ์ ์ง์ ์ง์ํ์ง ์์ต๋๋ค.
๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น ์ ์ด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
ํน์ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด ํด๋น Pod
์ฌ์์ ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
4.9.1. ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ ๋ฐฐํฌ
ํด๋ฌ์คํฐ์ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ๋ฅผ ํฌํจํ๋ ค๋ฉด ๋ฐฐํฌ์ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ ์ด๋ฏธ์ง๋ฅผ ํฌํจํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
์ญํ ์ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค. ์ค์ผ์ค๋ฌ ๋ฐ์ด๋๋ฆฌ๊ฐ ์์ต๋๋ค.
์ฐธ๊ณ์ค์ผ์ค๋ฌ ๋ฐ์ด๋๋ฆฌ ์์ฑ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด Kubernetes ์ค๋ช ์์์ ๋ค์ค ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ญ์์ค. Red Hat์์๋ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ์ค์ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๋ค.
- ์ค์ผ์ค๋ฌ ๋ฐ์ด๋๋ฆฌ๊ฐ ํฌํจ๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ์ฌ ๋ ์ง์คํธ๋ฆฌ๋ก ํธ์ํ์ต๋๋ค.
ํ๋ก์ธ์ค
์ค์ผ์ค๋ฌ ๊ตฌ์ฑ ํ์ผ์ ๋ณด์ ํ ๊ตฌ์ฑ ๋งต์ด ํฌํจ๋ ํ์ผ์ ์์ฑํฉ๋๋ค.
scheduler-config-map.yaml
์ ์apiVersion: v1 kind: ConfigMap metadata: name: scheduler-config namespace: kube-system 1 data: scheduler-config.yaml: | 2 apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration profiles: - schedulerName: custom-scheduler 3 leaderElection: leaderElect: false
- 1
- ์ด ์ ์ฐจ์์๋
kube-system
๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง๋ง ์ ํํ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. - 2
- ์ด ์ ์ฐจ์ ๋ท๋ถ๋ถ์์
Deployment
๋ฆฌ์์ค๋ฅผ ์ ์ํ ๋--config
์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํ์ผ์ ์ค์ผ์ค๋ฌ ๋ช ๋ น์ ์ ๋ฌํฉ๋๋ค. - 3
- ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ์ค์ผ์ค๋ฌ ํ๋กํ์ ์ ์ํฉ๋๋ค. ์ด ์ค์ผ์ค๋ฌ ์ด๋ฆ์
Pod
๊ตฌ์ฑ์์schedulerName
์ ์ ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
config map์ ์์ฑํฉ๋๋ค.
$ oc create -f scheduler-config-map.yaml
์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ๋ํ ๋ฐฐํฌ ๋ฆฌ์์ค๊ฐ ํฌํจ๋ ํ์ผ์ ์์ฑํฉ๋๋ค.
custom-scheduler.yaml
ํ์ผ์ ์apiVersion: v1 kind: ServiceAccount metadata: name: custom-scheduler namespace: kube-system 1 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: custom-scheduler-as-kube-scheduler subjects: - kind: ServiceAccount name: custom-scheduler namespace: kube-system 2 roleRef: kind: ClusterRole name: system:kube-scheduler apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: custom-scheduler-as-volume-scheduler subjects: - kind: ServiceAccount name: custom-scheduler namespace: kube-system 3 roleRef: kind: ClusterRole name: system:volume-scheduler apiGroup: rbac.authorization.k8s.io --- apiVersion: apps/v1 kind: Deployment metadata: labels: component: scheduler tier: control-plane name: custom-scheduler namespace: kube-system 4 spec: selector: matchLabels: component: scheduler tier: control-plane replicas: 1 template: metadata: labels: component: scheduler tier: control-plane version: second spec: serviceAccountName: custom-scheduler containers: - command: - /usr/local/bin/kube-scheduler - --config=/etc/config/scheduler-config.yaml 5 image: "<namespace>/<image_name>:<tag>" 6 livenessProbe: httpGet: path: /healthz port: 10259 scheme: HTTPS initialDelaySeconds: 15 name: kube-second-scheduler readinessProbe: httpGet: path: /healthz port: 10259 scheme: HTTPS resources: requests: cpu: '0.1' securityContext: privileged: false volumeMounts: - name: config-volume mountPath: /etc/config hostNetwork: false hostPID: false volumes: - name: config-volume configMap: name: scheduler-config
- 1 2 3 4
- ์ด ์ ์ฐจ์์๋
kube-system
๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง๋ง ์ ํํ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. - 5
- ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ๋ํ ๋ช ๋ น์๋ ๋ค๋ฅธ ์ธ์๊ฐ ํ์ํ ์ ์์ต๋๋ค.
- 6
- ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ฉ์ผ๋ก ์์ฑํ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํฉ๋๋ค.
ํด๋ฌ์คํฐ์ ๋ฐฐํฌ ๋ฆฌ์์ค๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f custom-scheduler.yaml
๊ฒ์ฆ
์ค์ผ์ค๋ฌ Pod๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
$ oc get pods -n kube-system
์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ Pod๋
์คํ ์ค
์ผ๋ก ๋์ด๋ฉ๋๋ค.NAME READY STATUS RESTARTS AGE custom-scheduler-6cd7c4b8bc-854zb 1/1 Running 0 2m
4.9.2. ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฐฐํฌ
์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ๊ฐ ํด๋ฌ์คํฐ์ ๋ฐฐํฌ๋ ํ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ ๋์ ํด๋น ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ๋๋ก Pod๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๊ฐ ์ค์ผ์ค๋ฌ์๋ ํด๋ฌ์คํฐ์์ ๋ฆฌ์์ค๋ฅผ ๋ณ๋๋ก ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ ์ค์ผ์ค๋ฌ๋ ์์ฒด ๋ ธ๋ ์งํฉ์์ ์๋ํด์ผ ํฉ๋๋ค.
๋ ๊ฐ ์ด์์ ์ค์ผ์ค๋ฌ๊ฐ ๋์ผํ ๋ ธ๋์์ ์๋ํ๋ ๊ฒฝ์ฐ ์๋ก ๊ฐ์ ํ์ฌ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค์ ๋์ผํ ๋ ธ๋์ ๋ ๋ง์ Pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ์ฌ Pod๊ฐ ๊ฑฐ๋ถ๋ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
์ญํ ์ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค. - ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ๊ฐ ํด๋ฌ์คํฐ์ ๋ฐฐํฌ๋์์ต๋๋ค.
ํ๋ก์ธ์ค
ํด๋ฌ์คํฐ์์ ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด(RBAC)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ ์ด๋ฆ์
system:kube-scheduler
ํด๋ฌ์คํฐ ์ญํ ์ ์ถ๊ฐํฉ๋๋ค.system:kube-scheduler
ํด๋ฌ์คํฐ ์ญํ ์ ํธ์งํฉ๋๋ค.$ oc edit clusterrole system:kube-scheduler
์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ์ด๋ฆ์
๋ฆฌ์ค
๋ฐ๋์
๋ฆฌ์์ค์ ๋ํresourceNames
๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: "2021-07-07T10:19:14Z" labels: kubernetes.io/bootstrapping: rbac-defaults name: system:kube-scheduler resourceVersion: "125" uid: 53896c70-b332-420a-b2a4-f72c822313f2 rules: ... - apiGroups: - coordination.k8s.io resources: - leases verbs: - create - apiGroups: - coordination.k8s.io resourceNames: - kube-scheduler - custom-scheduler 1 resources: - leases verbs: - get - update - apiGroups: - "" resources: - endpoints verbs: - create - apiGroups: - "" resourceNames: - kube-scheduler - custom-scheduler 2 resources: - endpoints verbs: - get - update ...
Pod
๊ตฌ์ฑ์ ์์ฑํ๊ณschedulerName
๋งค๊ฐ๋ณ์์์ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.custom-scheduler-example.yaml
ํ์ผ์ ์apiVersion: v1 kind: Pod metadata: name: custom-scheduler-example labels: name: custom-scheduler-example spec: schedulerName: custom-scheduler 1 containers: - name: pod-with-second-annotation-container image: docker.io/ocpqe/hello-pod
- 1
- ์ฌ์ฉํ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ์ด๋ฆ(์ด ์์์๋
custom-scheduler
)์ ๋๋ค. ์ค์ผ์ค๋ฌ ์ด๋ฆ์ ์ ๊ณตํ์ง ์์ผ๋ฉด Pod๊ฐ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์์ฝ๋ฉ๋๋ค.
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f custom-scheduler-example.yaml
๊ฒ์ฆ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ Pod๊ฐ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get pod custom-scheduler-example
custom-scheduler-example
Pod๋ ์ถ๋ ฅ์ ๋์ด๋ฉ๋๋ค.NAME READY STATUS RESTARTS AGE custom-scheduler-example 1/1 Running 0 4m
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ๊ฐ Pod๋ฅผ ์์ฝํ๋์ง ํ์ธํฉ๋๋ค.
$ oc describe pod custom-scheduler-example
์ค์ผ์ค๋ฌ,
custom-scheduler
๋ ๋ค์ ์๋ฆฐ ์ถ๋ ฅ์ ํ์๋ ๋๋ก ๋์ด๋ฉ๋๋ค.Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled <unknown> custom-scheduler Successfully assigned default/custom-scheduler-example to <node_name>
4.9.3. ์ถ๊ฐ ๋ฆฌ์์ค
4.10. Descheduler๋ฅผ ์ฌ์ฉํ์ฌ Pod ์ ๊ฑฐ
์ค์ผ์ค๋ฌ๋ ์ Pod๋ฅผ ํธ์คํ ํ๋ ๋ฐ ๊ฐ์ฅ ์ ํฉํ ๋ ธ๋๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ๊ณ Descheduler๋ ๋ ์ ํฉํ ๋ ธ๋์ ๋ค์ ์์ฝํ ์ ์๋๋ก ์คํ ์ค์ธ Pod๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
4.10.1. Descheduler ์ ๋ณด
Descheduler๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์ ๋ต์ ๋ฐ๋ผ Pod๋ฅผ ์ ๊ฑฐํ์ฌ Pod๋ฅผ ๋ ์ ์ ํ ๋ ธ๋์ ๋ค์ ์์ฝํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์คํ ์ค์ธ Pod์ ์ผ์ ์ ์กฐ์ ํ๋ฉด ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
- ๋ ธ๋๊ฐ ์ถฉ๋ถํ ์ฌ์ฉ๋์ง ์์๊ฑฐ๋ ๋๋ฌด ๋ง์ด ์ฌ์ฉ๋์์ต๋๋ค.
- ์ค์ผ ๋๋ ๋ผ๋ฒจ๊ณผ ๊ฐ์ Pod ๋ฐ ๋ ธ๋ ์ ํธ๋ ์๊ตฌ ์ฌํญ์ด ๋ณ๊ฒฝ๋์์ผ๋ฉฐ, ์๋ ์ผ์ ๊ฒฐ์ ์ด ๋ ์ด์ ํน์ ๋ ธ๋์ ์ ํฉํ์ง ์์ต๋๋ค.
- ๋ ธ๋ ์ฅ์ ๋ก Pod๋ฅผ ์ด๋ํด์ผ ํฉ๋๋ค.
- ์ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์ ์ถ๊ฐ๋์์ต๋๋ค.
- Pod๊ฐ ๋๋ฌด ๋ง์ด ์ฌ์์๋์์ต๋๋ค.
Descheduler๋ ์ ๊ฑฐ๋ Pod์ ๊ต์ฒด๋ฅผ ์์ฝํ์ง ์์ต๋๋ค. ์ ๊ฑฐ๋ Pod์ ๋ํ ์ด๋ฌํ ์์ ์ ์ค์ผ์ค๋ฌ์์ ์๋์ผ๋ก ์ํํฉ๋๋ค.
Descheduler๊ฐ ๋ ธ๋์์ Pod๋ฅผ ์ ๊ฑฐํ๋๋ก ๊ฒฐ์ ํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค.
-
openshift-*
๋ฐkube-system
๋ค์์คํ์ด์ค์ Pod๋ ์ ๊ฑฐ๋์ง ์์ต๋๋ค. -
priorityClassName
์ดsystem-cluster-critical
๋๋system-node-critical
๋ก ์ค์ ๋ ์ค์ Pod๋ ์ ๊ฑฐ๋์ง ์์ต๋๋ค. - ๋ณต์ ์ปจํธ๋กค๋ฌ, ๋ณต์ ๋ณธ ์ธํธ, ๋ฐฐํฌ ๋๋ ์์ ์ ํฌํจ๋์ง ์๋ ์ ์ , ๋ฏธ๋ฌ๋ง ๋๋ ๋ ๋ฆฝํ Pod๋ ๋ค์ ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
- ๋ฐ๋ชฌ ์ธํธ์ ์ฐ๊ฒฐ๋ Pod๋ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง๊ฐ ์๋ Pod๋ ์ ๊ฑฐ๋์ง ์์ต๋๋ค.
- ์ต์์ Pod๊ฐ ๋ฒ์คํธ ๊ฐ๋ฅ Pod ๋ฐ ๋ณด์ฅ๋ Pod๋ณด๋ค ๋จผ์ ์ ๊ฑฐ๋ฉ๋๋ค.
-
descheduler.alpha.kubernetes.io/evict
์ฃผ์์ด ์๋ ๋ชจ๋ Pod ์ ํ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด ์ฃผ์์ ์ ๊ฑฐ๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ฌ๋ฅผ ๋ฎ์ด์ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ์ฌ์ฉ์๋ ์ ๊ฑฐํ Pod๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ Pod๋ฅผ ๋ค์ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ค์ ์์ฑ๋๋์ง์ ์ฌ๋ถ๋ฅผ ์์์ผ ํฉ๋๋ค. - PDB(Pod ์ค๋จ ์์ฐ)๊ฐ ์ ์ฉ๋๋ Pod๋ ์ผ์ ์กฐ์ ์์ ํด๋น PDB๋ฅผ ์๋ฐํ๋ ๊ฒฝ์ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค. Pod๋ PDB๋ฅผ ์ฒ๋ฆฌํ๋ ์ ๊ฑฐ ํ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฑฐํฉ๋๋ค.
4.10.2. Descheduler ํ๋กํ
๋ค์ Descheduler ํ๋กํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
AffinityAndTaints
์ด ํ๋กํ์ Pod ๊ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง, ๋ ธ๋ ์ ์ฌ์ฑ, ๋ ธ๋ ํ ์ธํธ๋ฅผ ์๋ฐํ๋ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ ๋ต์ ํ์ฑํํฉ๋๋ค.
-
RemovePodsViolatingInterPodAntiAffinity
: Pod ๊ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์๋ฐํ๋ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค. -
RemovePodsViolatingNodeAffinity
: ๋ ธ๋ ์ ์ฌ์ฑ์ ์๋ฐํ๋ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค. RemovePodsViolatingNodeTaints
: ๋ ธ๋์์NoSchedule
ํ ์ธํธ๋ฅผ ์๋ฐํ๋ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.๋ ธ๋ ์ ์ฌ์ฑ ์ ํ์ด
requiredDuringSchedulingIgnoredDuringExecution
์ธ Pod๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
-
TopologyAndDuplicates
์ด ํ๋กํ์ ๋ ธ๋ ๊ฐ์ ์ ์ฌํ Pod ๋๋ ๋์ผํ ํ ํด๋ก์ง ๋๋ฉ์ธ์ Pod๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๊ธฐ ์ํด Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ ๋ต์ ํ์ฑํํฉ๋๋ค.
-
RemovePodsViolatingTopologySpreadConstraint
:DoNotSchedule
์ ์ฝ ์กฐ๊ฑด์ ์๋ฐํ๋ ๊ฒฝ์ฐ ๊ท ํ์ด ๋ง์ง ์๋ ํ ํด๋ก์ง ๋๋ฉ์ธ์ ์ฐพ์ ๋ ํฐ ๋๋ฉ์ธ์์ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค. -
RemoveDuplicates
: ๋์ผํ ๋ ธ๋์์ ์คํ ์ค์ธ ๋ณต์ ๋ณธ ์ธํธ, ๋ณต์ ์ปจํธ๋กค๋ฌ, ๋ฐฐํฌ ๋๋ ์์ ๊ณผ ์ฐ๊ฒฐ๋ Pod๊ฐ ํ๋๋ฟ์ธ์ง ํ์ธํฉ๋๋ค. Pod๊ฐ ๋ ๊ฐ ์ด์์ธ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ์์ Pod๋ฅผ ๋ ์ ๋ฐฐํฌํ๊ธฐ ์ํด ์ด๋ฌํ ์ค๋ณต Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
LifecycleAndUtilization
์ด ํ๋กํ์ ์ฅ๊ธฐ ์คํ Pod๋ฅผ ์ ๊ฑฐํ๊ณ ๋ ธ๋ ๊ฐ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ๊ท ํ์ ์กฐ์ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ ๋ต์ ํ์ฑํํฉ๋๋ค.
RemovePodsHavingTooManyRestarts
: ์ปจํ ์ด๋๊ฐ ๋๋ฌด ์ฌ๋ฌ ๋ฒ ๋ค์ ์์๋ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.๋ชจ๋ ์ปจํ ์ด๋(Init Container ํฌํจ)์์ ๋ค์ ์์๋๋ Pod๋ 100๊ฐ ์ด์์ ๋๋ค.
LowNodeUtilization
: ํ์ฉ๋๊ฐ ๋ฎ์ ๋ ธ๋๋ฅผ ์ฐพ๊ณ , Pod ์ฌ์์ฑ ์ Pod๊ฐ ์ด์ฒ๋ผ ํ์ฉ๋๊ฐ ๋ฎ์ ๋ ธ๋์ ์์ฝ๋๋๋ก ๊ฐ๋ฅํ๋ฉด ๊ณผ๋ํ๊ฒ ์ฌ์ฉ๋ ๋ ธ๋์์ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.๋ชจ๋ ์๊ณ๊ฐ(CPU, ๋ฉ๋ชจ๋ฆฌ, Pod ์)์์ ์ฌ์ฉ๋์ด 20% ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ ๋ ธ๋๋ ํ์ฉ๋๊ฐ ๋ฎ์ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
๋ชจ๋ ์๊ณ๊ฐ(CPU, ๋ฉ๋ชจ๋ฆฌ, Pod ์)์์ ์ฌ์ฉ๋์ด 50%๋ฅผ ์ด๊ณผํ๋ฉด ๋ ธ๋๋ ๊ณผ๋ํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
PodLifeTime
: ๋๋ฌด ์ค๋๋ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.๊ธฐ๋ณธ์ ์ผ๋ก 24์๊ฐ์ด ์ง๋ Pod๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค. Pod ์๋ช ๊ฐ์ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค.
SoftTopologyAndDuplicates
์ด ํ๋กํ์
whenUnsatisfiable: ScheduleAnyway
์ ๊ฐ์ ์ํํธ ํ ํด๋ก์ง ์ ์ฝ ์กฐ๊ฑด์ด ์๋ Pod๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ์ ์ธํ๊ณTopologyAndDuplicates
์ ๋์ผํฉ๋๋ค.์ฐธ๊ณsoftTopologyAndDuplicates์
๋ฅผ ๋ชจ๋ ํ์ฑํํ์ง ๋ง์ญ์์ค. ๋ ๊ฒฐ๊ณผ ๋ชจ๋ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.TopologyAndDuplicates
EvictPodsWithLocalStorage
- ์ด ํ๋กํ์ ์ฌ์ฉํ๋ฉด ๋ก์ปฌ ์คํ ๋ฆฌ์ง๊ฐ ์๋ Pod๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
EvictPodsWithPVC
- ์ด ํ๋กํ์ ์ฌ์ฉํ๋ฉด ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์ด ์๋ Pod๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
4.10.3. Descheduler ์ค์น
Descheduler๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. Descheduler๋ฅผ ํ์ฑํํ๋ ค๋ฉด OperatorHub์์ Kube Descheduler Operator๋ฅผ ์ค์นํ๊ณ Descheduler ํ๋กํ์ ํ ๊ฐ ์ด์ ํ์ฑํํด์ผ ํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
- OpenShift Container Platform ์น ์ฝ์์ ์ก์ธ์คํฉ๋๋ค.
ํ๋ก์ธ์ค
- OpenShift Container Platform ์น ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
Kube Descheduler Operator์ ํ์ํ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ด๋ฆฌ โ ๋ค์์คํ์ด์ค๋ก ์ด๋ํ์ฌ ๋ค์์คํ์ด์ค ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
-
์ด๋ฆ ํ๋์
openshift-kube-descheduler-operator
๋ฅผ ์ ๋ ฅํ๊ณ Labels ํ๋์openshift.io/cluster-monitoring=true
๋ฅผ ์ ๋ ฅํ์ฌ Descheduler ์งํ๋ฅผ ํ์ฑํํ ํ ์์ฑ ์ ํด๋ฆญํฉ๋๋ค.
Kube Descheduler Operator๋ฅผ ์ค์นํฉ๋๋ค.
- Operators โ OperatorHub๋ก ์ด๋ํฉ๋๋ค.
- ํํฐ ๋ฐ์ค์ Kube Descheduler Operator๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Kube Descheduler Operator๋ฅผ ์ ํํ๊ณ ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Operator ์ค์น ํ์ด์ง์์ ํด๋ฌ์คํฐ์ ํน์ ๋ค์์คํ์ด์ค๋ฅผ ์ ํํฉ๋๋ค. ๋๋กญ๋ค์ด ๋ฉ๋ด์์ openshift-kube-descheduler-operator๋ฅผ ์ ํํฉ๋๋ค.
- ์ ๋ฐ์ดํธ ์ฑ๋ ๋ฐ ์น์ธ ์ ๋ต ๊ฐ์ ์ํ๋ ๊ฐ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
- ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
Descheduler ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- Operator โ ์ค์น๋ Operator ํ์ด์ง์์ Kube Descheduler Operator๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Kube Descheduler ํญ์ ์ ํํ๊ณ KubeDescheduler ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
ํ์์ ๋ฐ๋ผ ์ค์ ์ ํธ์งํฉ๋๋ค.
ํ๋กํ ์น์ ์ ํ์ฅํ์ฌ ํ์ฑํํ ํ๋กํ์ ํ๋ ์ด์ ์ ํํฉ๋๋ค.
AffinityAndTaints
ํ๋กํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค. ํ๋กํ ์ถ๊ฐ ๋ฅผ ํด๋ฆญํ์ฌ ์ถ๊ฐ ํ๋กํ์ ์ ํํฉ๋๋ค.์ฐธ๊ณTopologyAndDuplicates
์softTopologyAndDuplicates
๋ฅผ ๋ชจ๋ ํ์ฑํํ์ง ๋ง์ญ์์ค. ๋ ๊ฒฐ๊ณผ ๋ชจ๋ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.-
์ ํ ์ฌํญ: ํ๋กํ ์ฌ์ฉ์ ์ง์ ์น์
์ ํ์ฅํ์ฌ
LifecycleAndUtilization
ํ๋กํ์ ์ฌ์ฉ์ ์ ์ Pod ์๋ช ๊ฐ์ ์ค์ ํฉ๋๋ค. ์ ํจํ ๋จ์๋s
,m
๋๋h
์ ๋๋ค. ๊ธฐ๋ณธ Pod ์๋ช ์ 24์๊ฐ์ ๋๋ค. -
์ ํ ์ฌํญ: Descheduling Interval Seconds ํ๋๋ฅผ ์ฌ์ฉํ์ฌ Descheduler ์คํ ๊ฐ๊ฒฉ์ ์ด ๋จ์๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
3600
์ด์ ๋๋ค.
- ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
๋์ค์ OpenShift CLI(oc
)๋ฅผ ์ฌ์ฉํ์ฌ Descheduler์ ํ๋กํ ๋ฐ ์ค์ ์ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค. ์น ์ฝ์์์ Descheduler ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํ๋กํ์ ์กฐ์ ํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก AffinityAndTaints
ํ๋กํ์ด ํ์ฑํ๋ฉ๋๋ค.
4.10.4. Descheduler ํ๋กํ ๊ตฌ์ฑ
Descheduler์์ Pod๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ๋กํ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ๊ถํ
ํ๋ก์ธ์ค
KubeDescheduler
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
spec.profiles
์น์ ์ ํ๋ ์ด์์ ํ๋กํ์ ์ง์ ํฉ๋๋ค.apiVersion: operator.openshift.io/v1 kind: KubeDescheduler metadata: name: cluster namespace: openshift-kube-descheduler-operator spec: deschedulingIntervalSeconds: 3600 logLevel: Normal managementState: Managed operatorLogLevel: Normal profileCustomizations: podLifetime: 48h 1 profiles: 2 - AffinityAndTaints - TopologyAndDuplicates 3 - LifecycleAndUtilization - EvictPodsWithLocalStorage - EvictPodsWithPVC
- 1
- ์ ํ ์ฌํญ:
LifecycleAndUtilization
ํ๋กํ์ ์ฌ์ฉ์ ์ ์ Pod ์๋ช ๊ฐ์ ํ์ฑํํฉ๋๋ค. ์ ํจํ ๋จ์๋s
,m
๋๋h
์ ๋๋ค. ๊ธฐ๋ณธ Pod ์๋ช ์ 24์๊ฐ์ ๋๋ค. - 2
- ์ฌ์ฉํ ํ๋กํ์ ํ๋ ์ด์ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋กํ:
AffinityAndTaints
,TopologyAndDuplicates
,LifecycleAndUtilization
,softTopologyAndDuplicates
,EvictPodsWithLocalStorage
, andEvictPodsWithPVC
. - 3
TopologyAndDuplicates
์softTopologyAndDuplicates
๋ฅผ ๋ชจ๋ ํ์ฑํํ์ง ๋ง์ญ์์ค. ๋ ๊ฒฐ๊ณผ ๋ชจ๋ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
์ฌ๋ฌ ํ๋กํ์ ํ์ฑํํ ์ ์์ผ๋ฉฐ ํ๋กํ์ ์ง์ ํ๋ ์์๋ ์ค์ํ์ง ์์ต๋๋ค.
- ํ์ผ์ ์ ์ฅํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค.
4.10.5. Descheduler ๊ฐ๊ฒฉ ๊ตฌ์ฑ
Descheduler ์คํ ๊ฐ๊ฒฉ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 3600์ด(1์๊ฐ)์ ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ๊ถํ
ํ๋ก์ธ์ค
KubeDescheduler
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
deschedulingIntervalSeconds
ํ๋๋ฅผ ์ํ๋ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.apiVersion: operator.openshift.io/v1 kind: KubeDescheduler metadata: name: cluster namespace: openshift-kube-descheduler-operator spec: deschedulingIntervalSeconds: 3600 1 ...
- 1
- Descheduler ์คํ ๊ฐ๊ฒฉ์ ์ด ๋จ์๋ก ์ค์ ํฉ๋๋ค. ์ด ํ๋ ๊ฐ์ด
0
์ด๋ฉด Descheduler๊ฐ ํ ๋ฒ ์คํ๋๊ณ ์ข ๋ฃ๋ฉ๋๋ค.
- ํ์ผ์ ์ ์ฅํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค.
4.10.6. Descheduler ์ค์น ์ ๊ฑฐ
Descheduler ์ธ์คํด์ค๋ฅผ ์ ๊ฑฐํ๊ณ Kube Descheduler Operator๋ฅผ ์ค์น ์ ๊ฑฐํ์ฌ ํด๋ฌ์คํฐ์์ Descheduler๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด ํ๋ก์ธ์ค๋ KubeDescheduler
CRD ๋ฐ openshift-kube-descheduler-operator
๋ค์์คํ์ด์ค๋ ์ ๋ฆฌํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
- OpenShift Container Platform ์น ์ฝ์์ ์ก์ธ์คํฉ๋๋ค.
ํ๋ก์ธ์ค
- OpenShift Container Platform ์น ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
Descheduler ์ธ์คํด์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
- Operator โ ์ค์น๋ Operator ํ์ด์ง์์ Kube Descheduler Operator๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Kube Descheduler ํญ์ ์ ํํฉ๋๋ค.
-
ํด๋ฌ์คํฐ ํญ๋ชฉ ์์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ KubeDescheduler ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
- ํ์ธ ๋ํ ์์์์ ์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Kube Descheduler Operator๋ฅผ ์ค์น ์ ๊ฑฐํฉ๋๋ค.
- Operators โ ์ค์น๋ Operator๋ก ์ด๋ํฉ๋๋ค.
-
Kube Descheduler Operator ์์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ Operator ์ค์น ์ ๊ฑฐ๋ฅผ ์ ํํฉ๋๋ค.
- ํ์ธ ๋ํ ์์์์ ์ค์น ์ ๊ฑฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
openshift-kube-descheduler-operator
๋ค์์คํ์ด์ค๋ฅผ ์ญ์ ํฉ๋๋ค.- ๊ด๋ฆฌ โ ๋ค์์คํ์ด์ค๋ก ์ด๋ํฉ๋๋ค.
-
ํํฐ ๋ฐ์ค์
openshift-kube-descheduler-operator
๋ฅผ ์ ๋ ฅํฉ๋๋ค. -
openshift-kube-descheduler-operator ํญ๋ชฉ ์์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ ๋ค์์คํ์ด์ค ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
-
ํ์ธ ๋ํ ์์์์
openshift-kube-descheduler-operator
๋ฅผ ์ ๋ ฅํ๊ณ ์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
KubeDescheduler
CRD๋ฅผ ์ญ์ ํฉ๋๋ค.- Administration โ Custom Resource Definitions๋ก ์ด๋ํฉ๋๋ค.
-
ํํฐ ๋ฐ์ค์
KubeDescheduler
๋ฅผ ์ ๋ ฅํฉ๋๋ค. -
KubeDescheduler ํญ๋ชฉ ์์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ CustomResourceDefinition ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
- ํ์ธ ๋ํ ์์์์ ์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
4.11. ๋ณด์กฐ ์ค์ผ์ค๋ฌ
4.11.1. ๋ณด์กฐ ์ค์ผ์ค๋ฌ ๊ฐ์
Secondary Scheduler Operator๋ฅผ ์ค์นํ์ฌ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์ ํจ๊ป ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ์คํํ์ฌ Pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค.
4.11.1.1. Secondary Scheduler Operator ์ ๋ณด
Red Hat OpenShift์ฉ Secondary Scheduler Operator๋ OpenShift Container Platform์ ์ฌ์ฉ์ ์ง์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ Pod๋ฅผ ์์ฝํ๊ธฐ ์ํด ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์ ํจ๊ป ์คํ๋ฉ๋๋ค. Pod ๊ตฌ์ฑ์ ์ฌ์ฉํ ์ค์ผ์ค๋ฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์๋ /bin/kube-scheduler
๋ฐ์ด๋๋ฆฌ๊ฐ ์์ด์ผ ํ๋ฉฐ Kubernetes ์ค์ผ์ค๋ง ํ๋ ์์ํฌ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
Secondary Scheduler Operator๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Container Platform์ ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ๋ฐฐํฌํ ์ ์์ง๋ง Red Hat์ ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ์ ๊ธฐ๋ฅ์ ์ง์ ์ง์ํ์ง ์์ต๋๋ค.
Secondary Scheduler Operator๋ ๋ณด์กฐ ์ค์ผ์ค๋ฌ์ ํ์ํ ๊ธฐ๋ณธ ์ญํ ๋ฐ ์ญํ ๋ฐ์ธ๋ฉ์ ์์ฑํฉ๋๋ค. ๋ณด์กฐ ์ค์ผ์ค๋ฌ์ ๋ํด KubeSchedulerConfiguration
๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ์ฌ ํ์ฑํ ๋๋ ๋นํ์ฑํํ ์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ์ ์ง์ ํ ์ ์์ต๋๋ค.
4.11.2. Red Hat OpenShift ๋ฆด๋ฆฌ์ค ๋ ธํธ์ฉ secondary Scheduler Operator
Red Hat OpenShift์ฉ Secondary Scheduler Operator๋ฅผ ์ฌ์ฉํ๋ฉด OpenShift Container Platform ํด๋ฌ์คํฐ์ ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ด ๋ฆด๋ฆฌ์ค ๋ ธํธ์์๋ Red Hat OpenShift์ฉ Secondary Scheduler Operator์ ๊ฐ๋ฐ์ ์ถ์ ํฉ๋๋ค.
Red Hat OpenShift์ฉ Secondary Scheduler Operator๊ฐ ๋์ ๋๋ฉด์ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ ๋ฐฐํฌ ์ง์์ ๋ค์ OpenShift Container Platform ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค.
์์ธํ ๋ด์ฉ์ Secondary Scheduler Operator ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
4.11.2.1. Secondary Scheduler Operator for Red Hat OpenShift 1.0.1 ๋ฆด๋ฆฌ์ค ๋ ธํธ
์ถ์ ๋ ์ง: 2022-07-28
Red Hat OpenShift 1.0.1์ฉ Secondary Scheduler Operator๋ ๋ค์ ๊ถ๊ณ ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Red Hat OpenShift 1.0.0์ Secondary Scheduler Operator๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ OpenShift Container Platform์ ๋ค์ ๋ง์ด๋ ๋ฆด๋ฆฌ์ค๋ก ์ ๋ฐ์ดํธํ ๋ ๋ฒ์ 1.0.1๋ก ์๋ ์ ๊ทธ๋ ์ด๋ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
4.11.2.1.1. ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๊ฐ์ ์ฌํญ
- Red Hat OpenShift 1.0.1์ Secondary Scheduler Operator์ ์ต๋ OpenShift Container Platform ๋ฒ์ ์ 4.11์ ๋๋ค.
4.11.2.1.2. ๋ฒ๊ทธ ์์
- ์ด์ ๋ฒ์ ์์๋ ๋ณด์กฐ ์ค์ผ์ค๋ฌ CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ด ์ญ์ ๋ ํ ๋ณด์กฐ ์ค์ผ์ค๋ฌ ๋ฐฐํฌ๊ฐ ์ญ์ ๋์ง ์์ Secondary Scheduler Operator ๋ฐ ํผ์ฐ์ฐ์๊ฐ ์์ ํ ์ ๊ฑฐ๋์ง ์์์ต๋๋ค. ๋ณด์กฐ ์ค์ผ์ค๋ฌ CR์ด ์ญ์ ๋ ๋ ๋ณด์กฐ ์ค์ผ์ค๋ฌ ๋ฐฐํฌ๊ฐ ์ญ์ ๋์ด Secondary Scheduler Operator๋ฅผ ์์ ํ ์ ๊ฑฐํ ์ ์์ต๋๋ค. (BZ#2100923)
4.11.2.1.3. ํ์ธ๋ ๋ฌธ์
- ํ์ฌ๋ ๋ณด์กฐ ์ค์ผ์ค๋ฌ Operator๋ฅผ ํตํด ๊ตฌ์ฑ ๋งต, CRD ๋๋ RBAC ์ ์ฑ ๊ณผ ๊ฐ์ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ์ ํ์ํ ์ญํ ๋ฐ ์ญํ ๋ฐ์ธ๋ฉ ์ด์ธ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ธ๋ถ์์ ์ ์ฉํด์ผ ํฉ๋๋ค. (BZ#2071684)
4.11.2.2. Red Hat OpenShift 1.0.0์ฉ Secondary Scheduler Operator ๋ฆด๋ฆฌ์ค ๋ ธํธ
์ถ์ ๋ ์ง: 2022-04-18
Red Hat OpenShift 1.0.0์ Secondary Scheduler Operator์ ๋ํด ๋ค์ ๊ถ๊ณ ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
4.11.2.2.1. ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๊ฐ์ ์ฌํญ
- ์ด๋ Red Hat OpenShift์ฉ Secondary Scheduler Operator์ ์ด๊ธฐ ๋ฆด๋ฆฌ์ค์ ๋๋ค.
4.11.2.2.2. ํ์ธ๋ ๋ฌธ์
- ํ์ฌ๋ ๋ณด์กฐ ์ค์ผ์ค๋ฌ Operator๋ฅผ ํตํด ๊ตฌ์ฑ ๋งต, CRD ๋๋ RBAC ์ ์ฑ ๊ณผ ๊ฐ์ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ์ ํ์ํ ์ญํ ๋ฐ ์ญํ ๋ฐ์ธ๋ฉ ์ด์ธ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ธ๋ถ์์ ์ ์ฉํด์ผ ํฉ๋๋ค. (BZ#2071684)
4.11.3. ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod ์์ฝ
๋ณด์กฐ ์ค์ผ์ค๋ฌ Operator๋ฅผ ์ค์นํ๊ณ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ๋ฐฐํฌํ๊ณ Pod ์ ์์์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ์ค์ ํ์ฌ OpenShift Container Platform์์ ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
4.11.3.1. Secondary Scheduler Operator ์ค์น
์น ์ฝ์์ ์ฌ์ฉํ์ฌ Red Hat OpenShift์ฉ Secondary Scheduler Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. - OpenShift Container Platform ์น ์ฝ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
Red Hat OpenShift์ฉ Secondary Scheduler Operator์ ํ์ํ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ด๋ฆฌ โ ๋ค์์คํ์ด์ค๋ก ์ด๋ํ์ฌ ๋ค์์คํ์ด์ค ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
-
์ด๋ฆ ํ๋์
openshift-secondary-scheduler-operator
๋ฅผ ์ ๋ ฅํ๊ณ ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
Red Hat OpenShift์ฉ Secondary Scheduler Operator๋ฅผ ์ค์นํฉ๋๋ค.
- Operators โ OperatorHub๋ก ์ด๋ํฉ๋๋ค.
- Red Hat OpenShift์ Secondary Scheduler Operator๋ฅผ ํํฐ ์์์ ์ ๋ ฅํฉ๋๋ค.
- Red Hat OpenShift์ Secondary Scheduler Operator๋ฅผ ์ ํํ๊ณ ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
Operator ์ค์น ํ์ด์ง์์ ๋ค์์ ์ํํฉ๋๋ค.
- Update ์ฑ๋์ stable ์ผ๋ก ์ค์ ๋์ด Red Hat OpenShift์ฉ Secondary Scheduler Operator์ ์์ ์ ์ธ ์ต์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ค์นํฉ๋๋ค.
- ํด๋ฌ์คํฐ์์ ํน์ ๋ค์์คํ์ด์ค ๋ฅผ ์ ํํ๊ณ ๋๋กญ๋ค์ด ๋ฉ๋ด์์ openshift-secondary-scheduler-operator ๋ฅผ ์ ํํฉ๋๋ค.
์ ๋ฐ์ดํธ ์น์ธ ์ ๋ต์ ์ ํํฉ๋๋ค.
- ์๋ ์ ๋ต์ ์ฌ์ฉํ๋ฉด Operator ์ ๋ฒ์ ์ด ์ค๋น๋ ๋ OLM(Operator Lifecycle Manager)์ด ์๋์ผ๋ก Operator๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
- ์๋ ์ ๋ต์ ์ฌ์ฉํ๋ ค๋ฉด ์ ์ ํ ์๊ฒฉ ์ฆ๋ช ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ Operator ์ ๋ฐ์ดํธ๋ฅผ ์น์ธํด์ผ ํฉ๋๋ค.
- ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒ์ฆ
- Operators โ ์ค์น๋ Operator๋ก ์ด๋ํฉ๋๋ค.
- Red Hat OpenShift์ Secondary Scheduler Operator ๊ฐ ์ฑ๊ณต ์ํ๋ก ๋์ด๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
4.11.3.2. ๋ณด์กฐ ์ค์ผ์ค๋ฌ ๋ฐฐํฌ
Secondary Scheduler Operator๋ฅผ ์ค์นํ ํ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ ์ ์กฐ๊ฑด
-
cluster-admin
๊ถํ์ด ์๋ ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. - OpenShift Container Platform ์น ์ฝ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- Red Hat OpenShift์ฉ Secondary Scheduler Operator๊ฐ ์ค์น๋์ด ์์ต๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
๋ณด์กฐ ์ค์ผ์ค๋ฌ์ ๋ํ ๊ตฌ์ฑ์ ์ ์งํ๋ ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.
- ์ํฌ๋ก๋ โ ConfigMap์ผ๋ก ์ด๋ํฉ๋๋ค.
- ConfigMap ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
YAML ํธ์ง๊ธฐ์์ ํ์ํ
KubeSchedulerConfiguration
๊ตฌ์ฑ์ด ํฌํจ๋ ๊ตฌ์ฑ ๋งต ์ ์๋ฅผ ์ ๋ ฅํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.apiVersion: v1 kind: ConfigMap metadata: name: "secondary-scheduler-config" 1 namespace: "openshift-secondary-scheduler-operator" 2 data: "config.yaml": | apiVersion: kubescheduler.config.k8s.io/v1beta3 kind: KubeSchedulerConfiguration 3 leaderElection: leaderElect: false profiles: - schedulerName: secondary-scheduler 4 plugins: 5 score: disabled: - name: NodeResourcesBalancedAllocation - name: NodeResourcesLeastAllocated
- 1
- ๊ตฌ์ฑ ๋งต์ ์ด๋ฆ์ ๋๋ค. ์ด๋ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ ํ๋์
SecondaryScheduler
CR์ ์์ฑํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. - 2
- ๊ตฌ์ฑ ๋งต์
openshift-secondary-scheduler-operator
๋ค์์คํ์ด์ค์ ์์ฑํด์ผ ํฉ๋๋ค. - 3
- ๋ณด์กฐ ์ค์ผ์ค๋ฌ์
KubeSchedulerConfiguration
๋ฆฌ์์ค์ ๋๋ค. ์์ธํ ๋ด์ฉ์ Kubernetes API ๋ฌธ์์KubeSchedulerConfiguration
์ ์ฐธ์กฐํ์ญ์์ค. - 4
- ๋ณด์กฐ ์ค์ผ์ค๋ฌ์ ์ด๋ฆ์ ๋๋ค.
spec.schedulerName
ํ๋๋ฅผ ์ด ๊ฐ์ผ๋ก ์ค์ ํ๋ Pod๋ ์ด ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ก ์์ฝ๋ฉ๋๋ค. - 5
- ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ ํ๋ฌ๊ทธ์ธ์ ๋๋ค. ๋ชฉ๋ก์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ์ Kubernetes ๋ฌธ์์ ์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ์ ์ฐธ์กฐํ์ญ์์ค.
- ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
SecondaryScheduler
CR์ ์์ฑํฉ๋๋ค.- Operators โ ์ค์น๋ Operator๋ก ์ด๋ํฉ๋๋ค.
- Red Hat OpenShift์ ๋ํด Secondary Scheduler Operator๋ฅผ ์ ํํฉ๋๋ค.
- Secondary Scheduler ํญ์ ์ ํํ๊ณ Create SecondaryScheduler ๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
Name ํ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก
ํด๋ฌ์คํฐ
; ์ด ์ด๋ฆ์ ๋ณ๊ฒฝํ์ง ๋ง์ญ์์ค. -
Scheduler ๊ตฌ์ฑ ํ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก
secondary-scheduler-config
๋ก ์ค์ ๋ฉ๋๋ค. ์ด ๊ฐ์ด ์ด ์ ์ฐจ์ ์๋ถ๋ถ์์ ์์ฑ๋ ๊ตฌ์ฑ ๋งต์ ์ด๋ฆ๊ณผ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค. Scheduler Image ํ๋์ ์ฌ์ฉ์ ์ ์ ์ค์ผ์ค๋ฌ์ ์ด๋ฏธ์ง ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
์ค์Red Hat์ ์ฌ์ฉ์ ์ ์ ๋ณด์กฐ ์ค์ผ์ค๋ฌ ๊ธฐ๋ฅ์ ์ง์ ์ง์ํ์ง ์์ต๋๋ค.
- ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
4.11.3.3. ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod ์์ฝ
๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด Pod ์ ์์์ schedulerName
ํ๋๋ฅผ ์ค์ ํฉ๋๋ค.
์ ์ ์กฐ๊ฑด
-
cluster-admin
๊ถํ์ด ์๋ ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. - OpenShift Container Platform ์น ์ฝ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- Red Hat OpenShift์ฉ Secondary Scheduler Operator๊ฐ ์ค์น๋์ด ์์ต๋๋ค.
- ๋ณด์กฐ ์ค์ผ์ค๋ฌ๊ฐ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
- ์ํฌ๋ก๋ โ Pod๋ก ์ด๋ํฉ๋๋ค.
- ํฌ๋ ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
YAML ํธ์ง๊ธฐ์์ ์ํ๋ Pod ๊ตฌ์ฑ์ ์ ๋ ฅํ๊ณ
schedulerName
ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: nginx namespace: default spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 schedulerName: secondary-scheduler 1
- 1
schedulerName
ํ๋๋ ๋ณด์กฐ ์ค์ผ์ค๋ฌ๋ฅผ ๊ตฌ์ฑํ ๋ ๊ตฌ์ฑ ๋งต์ ์ ์๋ ์ด๋ฆ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.
- ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
๊ฒ์ฆ
- OpenShift CLI์ ๋ก๊ทธ์ธํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์ค๋ช ํฉ๋๋ค.
$ oc describe pod nginx -n default
์ถ๋ ฅ ์
Name: nginx Namespace: default Priority: 0 Node: ci-ln-t0w4r1k-72292-xkqs4-worker-b-xqkxp/10.0.128.3 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 12s secondary-scheduler Successfully assigned default/nginx to ci-ln-t0w4r1k-72292-xkqs4-worker-b-xqkxp ...
-
์ด๋ฒคํธ ํ์์
Successfully assigned <namespace>/<pod_name>๊ณผ ์ ์ฌํ ๋ฉ์์ง๊ฐ ์๋ ์ด๋ฒคํธ๋ฅผ <node_name>์ผ๋ก
์ฐพ์ต๋๋ค. "From" ์ด์์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๊ฐ ์๋ ๋ณด์กฐ ์ค์ผ์ค๋ฌ์์ ์ด๋ฒคํธ๊ฐ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
์ฐธ๊ณ๋ํ
openshift-secondary-scheduler-namespace
์secondary-scheduler-*
Pod ๋ก๊ทธ๋ฅผ ํ์ธํ์ฌ ๋ณด์กฐ ์ค์ผ์ค๋ฌ์์ Pod๋ฅผ ์์ฝํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
4.11.4. Secondary Scheduler Operator ์ค์น ์ ๊ฑฐ
Operator๋ฅผ ์ ๊ฑฐํ๊ณ ๊ด๋ จ ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐํ์ฌ OpenShift Container Platform์์ Red Hat OpenShift์ Secondary Scheduler Operator๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
4.11.4.1. Secondary Scheduler Operator ์ค์น ์ ๊ฑฐ
์น ์ฝ์์ ์ฌ์ฉํ์ฌ Red Hat OpenShift์ฉ Secondary Scheduler Operator๋ฅผ ์ค์น ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. - OpenShift Container Platform ์น ์ฝ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- Red Hat OpenShift์ฉ Secondary Scheduler Operator๊ฐ ์ค์น๋์ด ์์ต๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
Red Hat OpenShift Operator์ฉ Secondary Scheduler Operator๋ฅผ ์ค์น ์ ๊ฑฐํฉ๋๋ค.
- Operators โ ์ค์น๋ Operator๋ก ์ด๋ํฉ๋๋ค.
-
Secondary Scheduler Operator ํญ๋ชฉ ์์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ Operator ์ค์น ์ ๊ฑฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํ์ธ ๋ํ ์์์์ ์ค์น ์ ๊ฑฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
4.11.4.2. Secondary Scheduler Operator ๋ฆฌ์์ค ์ ๊ฑฐ
์ ํ์ ์ผ๋ก Red Hat OpenShift์ฉ Secondary Scheduler Operator๋ฅผ ์ ๊ฑฐํ ํ ํด๋ฌ์คํฐ์์ ๊ด๋ จ ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. - OpenShift Container Platform ์น ์ฝ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์ ๋ก๊ทธ์ธํฉ๋๋ค.
Secondary Scheduler Operator๊ฐ ์ค์นํ CRD๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- Administration โ CustomResourceDefinitions ๋ก ์ด๋ํฉ๋๋ค.
-
Name ํ๋์
SecondaryScheduler
๋ฅผ ์ ๋ ฅํ์ฌ CRD๋ฅผ ํํฐ๋งํฉ๋๋ค. -
SecondaryScheduler CRD ์์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ์ ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
openshift-secondary-scheduler-operator
๋ค์์คํ์ด์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค.- ๊ด๋ฆฌ โ ๋ค์์คํ์ด์ค๋ก ์ด๋ํฉ๋๋ค.
-
openshift-secondary-scheduler-operator ์์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ ๋ค์์คํ์ด์ค ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
-
ํ์ธ ๋ํ ์์์์ ํ๋์
openshift-secondary-scheduler-operator
๋ฅผ ์ ๋ ฅํ๊ณ ์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
5์ฅ. ์์ ๋ฐ DaemonSet ์ฌ์ฉ
5.1. ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์์ ์๋์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์คํ
๊ด๋ฆฌ์๋ ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์์ฑ ๋ฐ ์ฌ์ฉํ์ฌ OpenShift Container Platform ํด๋ฌ์คํฐ์ ํน์ ๋ ธ๋ ๋๋ ๋ชจ๋ ๋ ธ๋์์ Pod ๋ณต์ ๋ณธ์ ์คํํ ์ ์์ต๋๋ค.
๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ (๋๋ ์ผ๋ถ) ๋ ธ๋์์ ํ๋์ Pod ๋ณต์ฌ๋ณธ์ ์คํํ ์ ์์ต๋๋ค. ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์ ์ถ๊ฐ๋๋ฉด Pod๋ ํด๋น ํด๋ฌ์คํฐ์ ์ถ๊ฐ๋ฉ๋๋ค. ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์์ ์ ๊ฑฐ๋๋ฉด ํด๋น Pod๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ์ ๊ฑฐ๋ฉ๋๋ค. ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ญ์ ํ๋ฉด ๋ฐ๋ชฌ ์ธํธ์์ ์์ฑํ Pod๊ฐ ์ ๋ฆฌ๋ฉ๋๋ค.
๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ์์ฑํ๊ฑฐ๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ๋ก๊น Pod๋ฅผ ์คํํ๊ฑฐ๋ ๋ชจ๋ ๋ ธ๋์ ๋ชจ๋ํฐ๋ง ์์ด์ ํธ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
๋ณด์์์ ์ด์ ๋ก ํด๋ฌ์คํฐ ๊ด๋ฆฌ์์ ํ๋ก์ ํธ ๊ด๋ฆฌ์๊ฐ ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ฐ๋ชฌ ์ธํธ์ ๋ํ ์์ธํ ๋ด์ฉ์ Kubernetes ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ฐ๋ชฌ ์ธํธ ์์ฝ์ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ์ ํธํ๋์ง ์์ต๋๋ค. ๋นํ์ฑํํ์ง ๋ชปํ๋ฉด ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ์ ๋ณํฉ๋์ด ๋ฐ๋ชฌ ์ธํธ๊ฐ ์ ํ๋ฉ๋๋ค. ์ด๋ก ์ธํด ๋ณํฉ๋ ๋ ธ๋ ์ ํ๊ธฐ์์ ์ ํํ์ง ์์ ๋ ธ๋์ Pod๊ฐ ์์ฃผ ๋ค์ ์์ฑ๋๊ณ ์ด๋ก ์ธํด ํด๋ฌ์คํฐ์ ๋ถํ์ํ ๋ถํ๊ฐ ๋ฐ์ํฉ๋๋ค.
5.1.1. ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ก ์์ฝ
๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์ ๊ฒฉ ๋ ธ๋์์ ํ๋์ Pod ๋ณต์ฌ๋ณธ์ ์คํํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Pod๊ฐ ์คํ๋๋ ๋ ธ๋๋ Kubernetes ์ค์ผ์ค๋ฌ์์ ์ ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ๋ชฌ ์ธํธ Pod๋ ๋ฐ๋ชฌ ์ธํธ ์ปจํธ๋กค๋ฌ์์ ์์ฑํ๊ณ ์์ฝํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
-
์ผ๊ด๋์ง ์๋ Pod ๋์: ์์ฝ ๋๊ธฐ ์ค์ธ ์ ์ Pod๊ฐ ์์ฑ๋๊ณ ๋ณด๋ฅ ์ค ์ํ์ด์ง๋ง ๋ฐ๋ชฌ ์ธํธ Pod๋
Pending
์ํ๊ฐ ์๋๋๋ค. ์ด๋ก ์ธํด ์ฌ์ฉ์๊ฐ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค. - Pod ์ ์ ์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์์ ์ฒ๋ฆฌํฉ๋๋ค. ์ ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด ๋ฐ๋ชฌ ์ธํธ ์ปจํธ๋กค๋ฌ์์ Pod ์ฐ์ ์์ ๋ฐ ์ ์ ์ ๊ณ ๋ คํ์ง ์๊ณ ์์ฝ์ ๊ฒฐ์ ํฉ๋๋ค.
OpenShift Container Platform์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ ScheduleDaemonSetPods ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด spec.nodeName
์ฉ์ด ๋์ NodeAffinity
์ฉ์ด๋ฅผ ๋ฐ๋ชฌ ์ธํธ Pod์ ์ถ๊ฐํ์ฌ ๋ฐ๋ชฌ ์ธํธ ์ปจํธ๋กค๋ฌ ๋์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ Pod๋ฅผ ๋์ ํธ์คํธ์ ๋ฐ์ธ๋ฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ชฌ ์ธํธ Pod์ ๋
ธ๋ ์ ์ฌ์ฑ์ด ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๊ต์ฒด๋ฉ๋๋ค. ๋ฐ๋ชฌ ์ธํธ ์ปจํธ๋กค๋ฌ๋ ๋ฐ๋ชฌ ์ธํธ Pod๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํ ๋๋ง ์ด๋ฌํ ์์
์ ์ํํ๋ฉฐ ๋ฐ๋ชฌ ์ธํธ์ spec.template
๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
kind: Pod apiVersion: v1 metadata: name: hello-node-6fbccf8d9-9tmzr #... spec: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchFields: - key: metadata.name operator: In values: - target-host-name #...
๋ํ ๋ฐ๋ชฌ ์ธํธ Pod์ node.kubernetes.io/unschedulable:NoSchedule
ํ์ฉ ์ค์ฐจ๊ฐ ์๋์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค. ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ๋ ๋ฐ๋ชฌ ์ธํธ Pod๋ฅผ ์์ฝํ ๋ ์์ฝํ ์ ์๋ ๋
ธ๋๋ฅผ ๋ฌด์ํฉ๋๋ค.
5.1.2. ๋ฐ๋ชฌ ์ธํธ ์์ฑ
๋ฐ๋ชฌ ์ธํธ๋ฅผ ์์ฑํ ๋ nodeSelector
ํ๋๋ ๋ฐ๋ชฌ ์ธํธ์์ ๋ณต์ ๋ณธ์ ๋ฐฐํฌํด์ผ ํ๋ ๋
ธ๋๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์คํ์ด์ค ์ฃผ์
openshift.io/node-selector
๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ์ฌ ๋ค์์คํ์ด์ค์์ ๊ธฐ๋ณธ ํ๋ก์ ํธ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ๋นํ์ฑํํ์ญ์์ค.$ oc patch namespace myproject -p \ '{"metadata": {"annotations": {"openshift.io/node-selector": ""}}}'
์์ ์ ๋ณด๋๋ ๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ค์์คํ์ด์ค์ ๋ํ ๊ธฐ๋ณธ ํ๋ก์ ํธ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
apiVersion: v1 kind: Namespace metadata: name: <namespace> annotations: openshift.io/node-selector: '' #...
์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ๋ฎ์ด์๋๋ค.
$ oc adm new-project <name> --node-selector=""
์ ์ฐจ
๋ฐ๋ชฌ ์ธํธ๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ฐ๋ชฌ ์ธํธ yaml ํ์ผ์ ์ ์ํฉ๋๋ค.
apiVersion: apps/v1 kind: DaemonSet metadata: name: hello-daemonset spec: selector: matchLabels: name: hello-daemonset 1 template: metadata: labels: name: hello-daemonset 2 spec: nodeSelector: 3 role: worker containers: - image: openshift/hello-openshift imagePullPolicy: Always name: registry ports: - containerPort: 80 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log serviceAccount: default terminationGracePeriodSeconds: 10 #...
- 1
- ๋ฐ๋ชฌ ์ธํธ์ ์ํ๋ Pod๋ฅผ ๊ฒฐ์ ํ๋ ๋ผ๋ฒจ ์ ํ๊ธฐ์ ๋๋ค.
- 2
- Pod ํ ํ๋ฆฟ์ ๋ผ๋ฒจ ์ ํ๊ธฐ์ ๋๋ค. ์์ ๋ผ๋ฒจ ์ ํ๊ธฐ์ ์ผ์นํด์ผ ํฉ๋๋ค.
- 3
- ๋ฐฐํฌํด์ผ ํ๋ ๋ ธ๋ Pod ๋ณต์ ๋ณธ์ ๊ฒฐ์ ํ๋ ๋ ธ๋ ์ ํ๊ธฐ์ ๋๋ค. ๋ ธ๋์ ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์์ด์ผ ํฉ๋๋ค.
๋ฐ๋ชฌ ์ธํธ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f daemonset.yaml
Pod๊ฐ ์์ฑ๋์๊ณ ๊ฐ ๋ ธ๋์ Pod ๋ณต์ ๋ณธ์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
daemonset Pod๋ฅผ ์ฐพ์ต๋๋ค.
$ oc get pods
์ถ๋ ฅ ์
hello-daemonset-cx6md 1/1 Running 0 2m hello-daemonset-e3md9 1/1 Running 0 2m
Pod๋ฅผ ๋ณด๊ณ Pod๊ฐ ๋ ธ๋์ ๋ฐฐ์น๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc describe pod/hello-daemonset-cx6md|grep Node
์ถ๋ ฅ ์
Node: openshift-node01.hostname.com/10.14.20.134
$ oc describe pod/hello-daemonset-e3md9|grep Node
์ถ๋ ฅ ์
Node: openshift-node02.hostname.com/10.14.20.137
- ๋ฐ๋ชฌ ์ธํธ Pod ํ ํ๋ฆฟ์ ์ ๋ฐ์ดํธํด๋ ๊ธฐ์กด Pod ๋ณต์ ๋ณธ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
- ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ญ์ ํ ๋ค์ ๋ค๋ฅธ ํ ํ๋ฆฟ๊ณผ ๋์ผํ ๋ผ๋ฒจ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์์ฑํ๋ฉด ๊ธฐ์กด Pod ๋ณต์ ๋ณธ์ ์ผ์นํ๋ ๋ผ๋ฒจ์ด ์๋ ๋ณต์ ๋ณธ์ผ๋ก ์ธ์ํ๋ฏ๋ก Pod ํ ํ๋ฆฟ์ ์ผ์นํ์ง ์๋ ํญ๋ชฉ์ด ์๋๋ผ๋ ๋ณต์ ๋ณธ์ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์ ๋ณต์ ๋ณธ์ ์์ฑํ์ง ์์ต๋๋ค.
- ๋ ธ๋ ๋ผ๋ฒจ์ ๋ณ๊ฒฝํ๋ฉด ๋ฐ๋ชฌ ์ธํธ์์ ์ ๋ผ๋ฒจ๊ณผ ์ผ์นํ๋ ๋ ธ๋์ Pod๋ฅผ ์ถ๊ฐํ๊ณ ์ ๋ผ๋ฒจ๊ณผ ์ผ์นํ์ง ์๋ ๋ ธ๋์์ Pod๋ฅผ ์ญ์ ํฉ๋๋ค.
๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์ด์ ๋ณต์ ๋ณธ ๋๋ ๋ ธ๋๋ฅผ ์ญ์ ํ์ฌ ์ Pod ๋ณต์ ๋ณธ์ ๊ฐ์ ๋ก ์์ฑํฉ๋๋ค.
5.2. ์์ ์ ์ฌ์ฉํ์ฌ Pod์์ ์์ ์คํ
์์ ์ OpenShift Container Platform ํด๋ฌ์คํฐ์์ ์์ ์ ์คํํฉ๋๋ค.
์์
์์๋ ์์
์ ์ ๋ฐ์ ์ธ ์งํ๋ฅ ์ ์ถ์ ํ๊ณ ํ์ฑ ์ํ์ ์๊ฑฐ๋ ์ฑ๊ณต ๋๋ ์คํจํ Pod์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ํ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. ์์
์ ์ญ์ ํ๋ฉด ์์ฑ๋ Pod ๋ณต์ ๋ณธ์ด ๋ชจ๋ ์ ๋ฆฌ๋ฉ๋๋ค. ์์
์ Kubernetes API์ ์ผ๋ถ์ด๋ฉฐ ๋ค๋ฅธ ์ค๋ธ์ ํธ ์ ํ๊ณผ ๊ฐ์ด oc
๋ช
๋ น์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์์ ์ฌ์ ์ํ
apiVersion: batch/v1 kind: Job metadata: name: pi spec: parallelism: 1 1 completions: 1 2 activeDeadlineSeconds: 1800 3 backoffLimit: 6 4 template: 5 metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: OnFailure 6 #...
- 1
- Pod ๋ณต์ ๋ณธ์ ๋ณ๋ ฌ๋ก ์คํํด์ผ ํ๋ ์์ ์ ๋๋ค.
- 2
- ์์ ์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ํ์ํ๋ ค๋ฉด Pod๊ฐ ์๋ฃ๋์ด์ผ ํฉ๋๋ค.
- 3
- ์์ ์ ์คํํ ์ ์๋ ์ต๋ ๊ธฐ๊ฐ์ ๋๋ค.
- 4
- ์์ ์ฌ์๋ ํ์์ ๋๋ค.
- 5
- ์ปจํธ๋กค๋ฌ์์ ์์ฑํ๋ Pod์ ์ฌ์ฉํ ํ ํ๋ฆฟ์ ๋๋ค.
- 6
- Pod์ ์ฌ์์ ์ ์ฑ ์ ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- Kubernetes ๋ฌธ์์ ์์
5.2.1. ์์ ๋ฐ cron ์์ ์ดํด
์์
์์๋ ์์
์ ์ ๋ฐ์ ์ธ ์งํ๋ฅ ์ ์ถ์ ํ๊ณ ํ์ฑ ์ํ์ ์๊ฑฐ๋ ์ฑ๊ณต ๋๋ ์คํจํ Pod์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ํ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. ์์
์ ์ญ์ ํ๋ฉด ์์
์์ ์์ฑํ Pod๊ฐ ๋ชจ๋ ์ ๋ฆฌ๋ฉ๋๋ค. ์์
์ Kubernetes API์ ์ผ๋ถ์ด๋ฉฐ ๋ค๋ฅธ ์ค๋ธ์ ํธ ์ ํ๊ณผ ๊ฐ์ด oc
๋ช
๋ น์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
OpenShift Container Platform์๋ ํ ๋ฒ ์คํ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์๋ ๋ ๊ฐ์ง ๋ฆฌ์์ค ์ ํ์ด ์์ต๋๋ค.
- Job
์ผ๋ฐ์ ์ธ ์์ ์ ์์ ์ ์์ฑํ๊ณ ์์ ์ด ์๋ฃ๋๋์ง ํ์ธํ๋ ํ ๋ฒ ์คํ ์ค๋ธ์ ํธ์ ๋๋ค.
๋ค์์ ์์ ์ผ๋ก ์คํํ๋ ๋ฐ ์ ํฉํ ์ธ ๊ฐ์ง ์ฃผ์ ์์ ์ ํ์ ๋๋ค.
๋น๋ณ๋ ฌ ์์ :
- Pod๊ฐ ์คํจํ์ง ์๋ ํ ํ๋์ Pod๋ง ์์ํ๋ ์์ ์ ๋๋ค.
- Pod๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋๋ฉด ์์ ์ด ์๋ฃ๋ฉ๋๋ค.
์๋ฃ ํ์๊ฐ ๊ณ ์ ๋ ๋ณ๋ ฌ ์์ :
- ์ฌ๋ฌ Pod๋ฅผ ์์ํ๋ ์์ ์ ๋๋ค.
-
์ด ์์
์ ์ ์ฒด ์์
์ ๋ํ๋ด๋ฉฐ
1
์์completions
๊ฐ ์ฌ์ด์ ๊ฐ ๊ฐ์ ๋ํด ํ๋์ ์ฑ๊ณต์ ์ธ Pod๊ฐ ์์ ๋ ์๋ฃ๋ฉ๋๋ค.
์์ ํ๊ฐ ์๋ ๋ณ๋ ฌ ์์ :
- ์ง์ ๋ Pod์ ์ฌ๋ฌ ๋ณ๋ ฌ ์์ ์ ํ๋ก์ธ์ค๊ฐ ์๋ ์์ ์ ๋๋ค.
- OpenShift Container Platform์ Pod๋ฅผ ์กฐ์ ํ์ฌ ๊ฐ๊ฐ์ ์์ ์ ๊ฒฐ์ ํ๊ฑฐ๋ ์ธ๋ถ ๋๊ธฐ์ด ์๋น์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ฐ Pod๋ ๋ชจ๋ ํผ์ด Pod๊ฐ ์๋ฃ๋์๋์ง ๋ฐ ์ ์ฒด ์์ ์ด ์ํ๋์๋์ง๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
- ์์ ์์ ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋ Pod๊ฐ ์๋ ๊ฒฝ์ฐ ์ Pod๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
- ํ๋ ์ด์์ Pod๊ฐ ์ฑ๊ณต์ผ๋ก ์ข ๋ฃ๋๊ณ ๋ชจ๋ Pod๊ฐ ์ข ๋ฃ๋๋ฉด ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ฉ๋๋ค.
์ฑ๊ณต์ผ๋ก ์ข ๋ฃ๋ Pod๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค๋ฅธ Pod์์ ์ด ์์ ์ ๋ํด ์์ ์ ์ํํ๊ฑฐ๋ ์ถ๋ ฅ์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค. Pod๋ ๋ชจ๋ ์ข ๋ฃ ํ๋ก์ธ์ค์ ์์ด์ผ ํฉ๋๋ค.
๋ค์ํ ์ ํ์ ์์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ Kubernetes ์ค๋ช ์์ ์์ ํจํด์ ์ฐธ์กฐํ์ญ์์ค.
- cron ์์
cron ์์ ์ ์ฌ์ฉํ์ฌ ์์ ์ด ์ฌ๋ฌ ๋ฒ ์คํ๋๋๋ก ์์ฝํ ์ ์์ต๋๋ค.
cron ์์ ์ ์์ ์คํ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์๋๋ก ํ์ฉํ์ฌ ์ผ๋ฐ ์์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋น๋๋ฉ๋๋ค. cron ์์ ์ Kubernetes API์ ์ผ๋ถ์ด๋ฉฐ ๋ค๋ฅธ ์ค๋ธ์ ํธ ์ ํ๊ณผ ๊ฐ์ด
oc
๋ช ๋ น์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.cron ์์ ์ ๋ฐฑ์ ์คํ ๋๋ ์ด๋ฉ์ผ ์ ์ก๊ณผ ๊ฐ์ ์ฃผ๊ธฐ์ ์ด๊ณ ๋ฐ๋ณต์ ์ธ ์์ ์ ์์ฑํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. cron ์์ ์์๋ ํ๋์ด ์ ์ ๊ธฐ๊ฐ์ ์์ ์ ์์ฝํ๋ ค๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ๊ฐ๋ณ ์์ ์ ํน์ ์๊ฐ์ ์์ฝํ ์๋ ์์ต๋๋ค. cron ์์ ์ cronjob ์ปจํธ๋กค๋ฌ๋ฅผ ์คํํ๋ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์ ๊ตฌ์ฑ๋ ์๊ฐ๋์ ๋ฐ๋ผ
Job
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.์ฃผ์cron ์์ ์์๋
Job
์ค๋ธ์ ํธ๋ฅผ ๋๋ต์ ์ผ๋ก ์ผ์ ์คํ ์๊ฐ๋น ํ ๋ฒ ์์ฑํ์ง๋ง, ์์ ์ ์์ฑํ์ง ๋ชปํ๊ฑฐ๋ ๋ ๊ฐ์ ์์ ์ด ์์ฑ๋๋ ์ํฉ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์์ ์ด idempotent์ฌ์ผ ํ๊ณ ๊ธฐ๋ก ์ ํ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
5.2.1.1. ์์ ์์ฑ ๋ฐฉ๋ฒ ์ดํด
๋ ๋ฆฌ์์ค ์ ํ ๋ชจ๋ ๋ค์ ์ฃผ์ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ ์์ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
- Pod ํ ํ๋ฆฟ: OpenShift Container Platform์์ ์์ฑํ๋ Pod๋ฅผ ์ค๋ช ํฉ๋๋ค.
parallelism
๋งค๊ฐ๋ณ์: ์์ ์ ์คํํด์ผ ํ๋ ์์์ ์์ ์ ๋ณ๋ ฌ๋ก ์คํ๋๋ Pod ์๋ฅผ ์ง์ ํฉ๋๋ค.-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
completions
๋งค๊ฐ๋ณ์: ์์ ์ ์๋ฃํ๋ ๋ฐ ํ์ํ ์ฑ๊ณต์ ์ธ Pod ์๋ฃ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค. - ์๋ฃ ํ์๊ฐ ๊ณ ์ ๋ ๋ณ๋ ฌ ์์ ์ ๊ฒฝ์ฐ ๊ฐ์ ์ง์ ํฉ๋๋ค.
-
์์
ํ๊ฐ ์๋ ๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ๊ฐ์ ์ค์ ํ์ง ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
parallelism
์ ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
5.2.1.2. ์ต๋ ์์ ๊ธฐ๊ฐ ์ค์ ๋ฐฉ๋ฒ ์ดํด
์์
์ ์ ์ํ ๋ activeDeadlineSeconds
ํ๋๋ฅผ ์ค์ ํ์ฌ ์ต๋ ๊ธฐ๊ฐ์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ด ๋จ์๋ก ์ง์ ๋๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋์ด ์์ง ์์ต๋๋ค. ์ค์ ํ์ง ์์ผ๋ฉด ์ต๋ ๊ธฐ๊ฐ์ด ์ ์ฉ๋์ง ์์ต๋๋ค.
์ต๋ ๊ธฐ๊ฐ์ ์์คํ ์์ ์ฒซ ๋ฒ์งธ Pod๊ฐ ์์ฝ๋๋ ์์ ๋ถํฐ ๊ณ์ฐ๋๋ฉฐ ์์ ์ ํ์ฑ ์ํ๋ก ์ ์งํ ์ ์๋ ๊ธฐ๊ฐ์ ์ ์ํฉ๋๋ค. ์ ์ฒด ์คํ ์๊ฐ์ ์ถ์ ํฉ๋๋ค. ์ง์ ๋ ํ์์์์ ๋๋ฌํ๋ฉด OpenShift Container Platform์์ ์์ ์ ์ข ๋ฃํฉ๋๋ค.
5.2.1.3. Pod๊ฐ ์คํจํ๋ ๊ฒฝ์ฐ ์์ ๋ฐฑ์คํ ์ ์ฑ ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ ์ดํด
๊ตฌ์ฑ์ ๋
ผ๋ฆฌ์ ์ค๋ฅ ๋๋ ๊ธฐํ ์ ์ฌํ ์ด์ ๋ก ์ธํด ์ค์ ๋ ์ฌ์๋ ํ์๋ฅผ ์ด๊ณผํ๋ฉด ์์
์ด ์คํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค. ์์
๊ณผ ์ฐ๊ฒฐ๋ ์คํจํ Pod๋ ๊ธ๊ฒฉํ ๋ฐฑ์คํ ์ง์ฐ(10s
, 20s
, 40s
โฆ)์ 6๋ถ์ผ๋ก ์ ํํ์ฌ ์ปจํธ๋กค๋ฌ์์ ๋ค์ ์์ฑํฉ๋๋ค. ์ปจํธ๋กค๋ฌ ํ์ธ ์ค ์คํจํ ์ Pod๊ฐ ํ์๋์ง ์์ผ๋ฉด ์ ํ์ด ์ฌ์ค์ ๋ฉ๋๋ค.
spec.backoffLimit
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์์
์ ์ฌ์๋ ํ์๋ฅผ ์ค์ ํฉ๋๋ค.
5.2.1.4. ์ํฐํฉํธ๋ฅผ ์ ๊ฑฐํ๋๋ก cron ์์ ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
cron ์์ ์์๋ ์์ ๋๋ Pod์ ๊ฐ์ ์ํฐํฉํธ ๋ฆฌ์์ค๋ฅผ ๋จ๊ฒจ ๋ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ์ด์ ์์ ๊ณผ Pod๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฆฌ๋๋๋ก ๊ธฐ๋ก ์ ํ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. cron ์์ ์ฌ์ ๋ด์๋ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ๋ด๋นํ๋ ๋ค์ ๋ ํ๋๊ฐ ์์ต๋๋ค.
-
.spec.successfulJobsHistoryLimit
. ์ ์งํด์ผ ํ๋ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ์์ ์ ์์ ๋๋ค(๊ธฐ๋ณธ๊ฐ: 3). -
.spec.failedJobsHistoryLimit
. ์ ์งํด์ผ ํ๋ ์คํจํ ์์ ์ ์์ ๋๋ค(๊ธฐ๋ณธ๊ฐ: 1).
๋ ์ด์ ํ์ํ์ง ์์ cron ์์ ์ ์ญ์ ํฉ๋๋ค.
$ oc delete cronjob/<cron_job_name>
์ด๋ ๊ฒ ํ๋ฉด ๋ถํ์ํ ์ํฐํฉํธ๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
-
spec.suspend
๋ฅผ true๋ก ์ค์ ํ์ฌ ์ถ๊ฐ ์คํ์ ์ค๋จํ ์ ์์ต๋๋ค. ๋ชจ๋ ํ์ ์คํ์false
๋ก ์ฌ์ค์ ํ ๋๊น์ง ์ผ์ ์ค๋จ๋ฉ๋๋ค.
5.2.1.5. ์๋ ค์ง ์ ํ ์ฌํญ
์์ ์ฌ์ ์ฌ์์ ์ ์ฑ ์ ์์ ์ปจํธ๋กค๋ฌ๊ฐ ์๋Pod์๋ง ์ ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ปจํธ๋กค๋ฌ๋ ์์ ์ ์๋ฃํ ๋๊น์ง ๊ณ์ ์ฌ์๋ํ๋๋ก ํ๋ ์ฝ๋ฉ๋์ด ์์ต๋๋ค.
๋ฐ๋ผ์ restartPolicy: Never
๋๋ --restart=Never
๋ restartPolicy: OnFailure
๋๋ --restart=OnFailure
์ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ์ฆ ์์
์ด ์คํจํ๋ฉด ์์
์ด ์ฑ๊ณตํ ๋๊น์ง (๋๋ ์์
์ ์๋์ผ๋ก ์ญ์ ํ ๋๊น์ง) ์๋์ผ๋ก ์ฌ์์๋ฉ๋๋ค. ์ด ์ ์ฑ
์ ์ฌ์์์ ์ํํ๋ ํ์ ์์คํ
๋ง ์ค์ ํฉ๋๋ค.
Never
์ ์ฑ
์์๋ ์์
์ปจํธ๋กค๋ฌ์์ ์ฌ์์์ ์ํํฉ๋๋ค. ์๋ํ ๋๋ง๋ค ์์
์ปจํธ๋กค๋ฌ์์ ์์
์ํ์ ์คํจ ์๋ฅผ ๋๋ฆฌ๊ณ ์ Pod๋ฅผ ์์ฑํฉ๋๋ค. ์ฆ ์คํจํ ๋๋ง๋ค Pod ์๊ฐ ์ฆ๊ฐํฉ๋๋ค.
OnFailure
์ ์ฑ
์์๋ kubelet์์ ์ฌ์์์ ์ํํฉ๋๋ค. ์๋ํ ๋๋ง๋ค ์์
์ํ์ ์คํจ ํ์๊ฐ ๋์ด๋๋ ๊ฒ์ ์๋๋๋ค. ๋ํ kubelet์ ๋์ผํ ๋
ธ๋์์ Pod๋ฅผ ์์ํ์ฌ ์คํจํ ์์
์ ์ฌ์๋ํฉ๋๋ค.
5.2.2. ์์ ์์ฑ
์์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ์ฌ OpenShift Container Platform์์ ์์ ์ ์์ฑํฉ๋๋ค.
ํ๋ก์ธ์ค
์์ ์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: batch/v1 kind: Job metadata: name: pi spec: parallelism: 1 1 completions: 1 2 activeDeadlineSeconds: 1800 3 backoffLimit: 6 4 template: 5 metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: OnFailure 6 #...
- 1
- ์ ํ ์ฌํญ: ์์ ์ด ๋ณ๋ ฌ๋ก ์คํํด์ผ ํ๋ Pod ๋ณต์ ๋ณธ ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค.-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
- 2
- ์ ํ ์ฌํญ: ์์ ์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ํ์ํ๋ ๋ฐ ํ์ํ ์ฑ๊ณต์ ์ธ Pod ์๋ฃ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
1
์ ๋๋ค. - ์๋ฃ ํ์๊ฐ ๊ณ ์ ๋ ๋ณ๋ ฌ ์์ ์ ๊ฒฝ์ฐ ์๋ฃ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.
-
์์
ํ๊ฐ ์๋ ๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ๊ฐ์ ์ค์ ํ์ง ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
parallelism
์ ๋๋ค.
-
๋น๋ณ๋ ฌ ์์
์ ๊ฒฝ์ฐ ์ค์ ๋์ง ์์ ์ํ๋ก ๋ก๋๋ค. ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์
- 3
- ์ ํ ์ฌํญ: ์์ ์ ์คํํ ์ ์๋ ์ต๋ ๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค.
- 4
- ์ ํ ์ฌํญ: ์์ ์ฌ์๋ ํ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ํ๋์ ๊ธฐ๋ณธ๊ฐ์ 6์ ๋๋ค.
- 5
- ์ปจํธ๋กค๋ฌ์์ ์์ฑํ๋ Pod์ ์ฌ์ฉํ ํ ํ๋ฆฟ์ ์ง์ ํฉ๋๋ค.
- 6
- Pod ์ฌ์์ ์ ์ฑ ์ ์ง์ ํฉ๋๋ค.
-
Never
. ์์ ์ ์ฌ์์ํ์ง ์์ต๋๋ค. -
OnFailure
. ์คํจํ๋ ๊ฒฝ์ฐ์๋ง ์์ ์ ์ฌ์์ํฉ๋๋ค. Always
์์ ์ ํญ์ ์ฌ์์ํฉ๋๋ค.OpenShift Container Platform์์ ์คํจํ ์ปจํ ์ด๋์ ์ฌ์์ ์ ์ฑ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ Kubernetes ์ค๋ช ์์ ์์ ์ํ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
-
์์ ์ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
oc create job
์ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ช
๋ น์ผ๋ก ์์
์ ์์ฑํ๊ณ ์์ํ ์๋ ์์ต๋๋ค. ๋ค์ ๋ช
๋ น์์๋ ์ด์ ์์ ์์ ์ง์ ํ ๊ฒ๊ณผ ์ ์ฌํ ์์
์ ์์ฑํ๊ณ ์์ํฉ๋๋ค.
$ oc create job pi --image=perl -- perl -Mbignum=bpi -wle 'print bpi(2000)'
5.2.3. cron ์์ ์์ฑ
์์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ์ฌ OpenShift Container Platform์์ cron ์์ ์ ์์ฑํฉ๋๋ค.
ํ๋ก์ธ์ค
cron ์์ ์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: batch/v1 kind: CronJob metadata: name: pi spec: schedule: "*/1 * * * *" 1 concurrencyPolicy: "Replace" 2 startingDeadlineSeconds: 200 3 suspend: true 4 successfulJobsHistoryLimit: 3 5 failedJobsHistoryLimit: 1 6 jobTemplate: 7 spec: template: metadata: labels: 8 parent: "cronjobpi" spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: OnFailure 9 #...
- 1
- cron ํ์์ ์ง์ ๋ ์์ ์ ์ค์ผ์ค์ ๋๋ค. ์ด ์์ ์์๋ ์์ ์ ๋ถ๋ง๋ค ์คํ๋ฉ๋๋ค.
- 2
- cron ์์ ๋ด์ ๋์ ์์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ ์ ํ์ ๋์์ฑ ์ ์ฑ ์ ๋๋ค. ๋ค์ ๋์์ฑ ์ ์ฑ ์ค ํ๋๋ง ์ง์ ํ ์ ์์ต๋๋ค. ์ง์ ํ์ง ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ๋์ ์คํ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
-
Allow
๋ cron ์์ ์ด ๋์์ ์คํ๋๋๋ก ํ์ฉํฉ๋๋ค. -
Forbid
๋ ๋์ ์คํ์ ๊ธ์งํ๊ณ ์ด์ ์คํ์ด ์์ง ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ ๋ค์ ์คํ์ ๊ฑด๋๋๋๋ค. -
Replace
๋ ํ์ฌ ์คํ ์ค์ธ ์์ ์ ์ทจ์ํ๊ณ ์ ์์ ์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
-
- 3
- ์ด๋ ํ ์ด์ ๋ก ์์ฝ๋ ์๊ฐ์ ๋์น๋ ๊ฒฝ์ฐ ์์ ์ ์์ํ๋ ์ ํ์ ๋ฐ๋๋ผ์ธ(์ด)์ ๋๋ค. ๋๋ฝ๋ ์์ ์คํ์ ์คํจํ ์์ ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ง์ ํ์ง ์์ผ๋ฉด ๋ฐ๋๋ผ์ธ์ด ์์ต๋๋ค.
- 4
- cron ์์ ์ ์ค์ง๋ฅผ ํ์ฉํ๋ ์ ํ์ ํ๋๊ทธ์ ๋๋ค.
true
๋ก ์ค์ ํ๋ฉด ์ดํ์ ๋ชจ๋ ์คํ์ด ์ผ์ ์ค์ง๋ฉ๋๋ค. - 5
- ์ ์งํด์ผ ํ๋ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ์์ ์ ์์ ๋๋ค(๊ธฐ๋ณธ๊ฐ: 3).
- 6
- ์ ์งํด์ผ ํ๋ ์คํจํ ์์ ์ ์์ ๋๋ค(๊ธฐ๋ณธ๊ฐ: 1).
- 7
- ์์ ํ ํ๋ฆฟ์ ๋๋ค. ์ด ํ ํ๋ฆฟ์ ์์ ์์ ์ ์ ์ฌํฉ๋๋ค.
- 8
- ์ด cron ์์ ์์ ์์ฑํ ์์ ์ ๋ผ๋ฒจ์ ์ค์ ํฉ๋๋ค.
- 9
- Pod์ ์ฌ์์ ์ ์ฑ ์ ๋๋ค. ์ด ์ ์ฑ ์ ์์ ์ปจํธ๋กค๋ฌ์ ์ ์ฉ๋์ง ์์ต๋๋ค.์ฐธ๊ณ
.spec.successfulJobsHistoryLimit
๋ฐ.spec.failedJobsHistoryLimit
ํ๋๋ ์ ํ ์ฌํญ์ ๋๋ค. ํด๋น ํ๋๋ ์ ์งํด์ผ ํ๋ ์๋ฃ๋ ์์ ์ ๋ฐ ์คํจํ ์์ ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๊ฐ3
๊ณผ1
๋ก ์ค์ ๋ฉ๋๋ค. ์ ํ์0
์ผ๋ก ์ค์ ํ๋ฉด ํด๋น ์ข ๋ฅ์ ์์ ์ ์๋ฃํ ํ ์์ ์ ์ ์งํ์ง ์์ต๋๋ค.
cron ์์ ์ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
oc create cronjob
์ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ช
๋ น์ผ๋ก cron ์์
์ ์์ฑํ๊ณ ์์ํ ์๋ ์์ต๋๋ค. ๋ค์ ๋ช
๋ น์์๋ ์ด์ ์์ ์์ ์ง์ ํ ๊ฒ๊ณผ ์ ์ฌํ cron ์์
์ ์์ฑํ๊ณ ์์ํฉ๋๋ค.
$ oc create cronjob pi --image=perl --schedule='*/1 * * * *' -- perl -Mbignum=bpi -wle 'print bpi(2000)'
oc create cronjob
์ ์ฌ์ฉํ๋ฉด --schedule
์ต์
์์ cron ํ์์ผ๋ก ๋ ์ผ์ ์ ์๋ฝํฉ๋๋ค.
6์ฅ. ๋ ธ๋ ์์
6.1. OpenShift Container Platform ํด๋ฌ์คํฐ์์ ๋ ธ๋ ๋ณด๊ธฐ ๋ฐ ๋์ด
ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋์ดํ์ฌ ๋ ธ๋์ ์ํ, ์๋ช , ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ธ๋ถ ์ ๋ณด์ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๋ ธ๋ ๊ด๋ฆฌ ์์ ์ ์ํํ ๋ CLI๋ ์ค์ ๋ ธ๋ ํธ์คํธ๋ฅผ ๋ํ๋ด๋ ๋ ธ๋ ์ค๋ธ์ ํธ์ ์ํธ ์์ฉํฉ๋๋ค. ๋ง์คํฐ๋ ๋ ธ๋ ์ค๋ธ์ ํธ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ์ ๊ฒ์์ ๋ ธ๋๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
6.1.1. ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋ ๋์ด ์ ๋ณด
ํด๋ฌ์คํฐ์ ๋ ธ๋์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ๋ฉด ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ด๋ฉ๋๋ค.
$ oc get nodes
๋ค์ ์์ ๋ ์ ์ ๋ ธ๋๊ฐ ์๋ ํด๋ฌ์คํฐ์ ๋๋ค.
$ oc get nodes
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION master.example.com Ready master 7h v1.23.0 node1.example.com Ready worker 7h v1.23.0 node2.example.com Ready worker 7h v1.23.0
๋ค์ ์์ ๋ ํ๋์ ๋น์ ์ ๋ ธ๋๊ฐ ์๋ ํด๋ฌ์คํฐ์ ๋๋ค.
$ oc get nodes
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION master.example.com Ready master 7h v1.23.0 node1.example.com NotReady,SchedulingDisabled worker 7h v1.23.0 node2.example.com Ready worker 7h v1.23.0
NotReady
์ํ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์กฐ๊ฑด์ ์ด ์น์ ์ ๋ท๋ถ๋ถ์ ๋์ ์์ต๋๋ค.-wide
์ต์ ์ ๋ ธ๋์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.$ oc get nodes -o wide
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master.example.com Ready master 171m v1.23.0 10.0.129.108 <none> Red Hat Enterprise Linux CoreOS 48.83.202103210901-0 (Ootpa) 4.18.0-240.15.1.el8_3.x86_64 cri-o://1.23.0-30.rhaos4.10.gitf2f339d.el8-dev node1.example.com Ready worker 72m v1.23.0 10.0.129.222 <none> Red Hat Enterprise Linux CoreOS 48.83.202103210901-0 (Ootpa) 4.18.0-240.15.1.el8_3.x86_64 cri-o://1.23.0-30.rhaos4.10.gitf2f339d.el8-dev node2.example.com Ready worker 164m v1.23.0 10.0.142.150 <none> Red Hat Enterprise Linux CoreOS 48.83.202103210901-0 (Ootpa) 4.18.0-240.15.1.el8_3.x86_64 cri-o://1.23.0-30.rhaos4.10.gitf2f339d.el8-dev
๋ค์ ๋ช ๋ น์์๋ ๋จ์ผ ๋ ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ๋์ดํฉ๋๋ค.
$ oc get node <node>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get node node1.example.com
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION node1.example.com Ready worker 7h v1.23.0
๋ค์ ๋ช ๋ น์ ํ์ฌ ์กฐ๊ฑด์ ์ด์ ๋ฅผ ํฌํจํ์ฌ ํน์ ๋ ธ๋์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
$ oc describe node <node>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc describe node node1.example.com
์ถ๋ ฅ ์
Name: node1.example.com 1 Roles: worker 2 Labels: beta.kubernetes.io/arch=amd64 3 beta.kubernetes.io/instance-type=m4.large beta.kubernetes.io/os=linux failure-domain.beta.kubernetes.io/region=us-east-2 failure-domain.beta.kubernetes.io/zone=us-east-2a kubernetes.io/hostname=ip-10-0-140-16 node-role.kubernetes.io/worker= Annotations: cluster.k8s.io/machine: openshift-machine-api/ahardin-worker-us-east-2a-q5dzc 4 machineconfiguration.openshift.io/currentConfig: worker-309c228e8b3a92e2235edd544c62fea8 machineconfiguration.openshift.io/desiredConfig: worker-309c228e8b3a92e2235edd544c62fea8 machineconfiguration.openshift.io/state: Done volumes.kubernetes.io/controller-managed-attach-detach: true CreationTimestamp: Wed, 13 Feb 2019 11:05:57 -0500 Taints: <none> 5 Unschedulable: false Conditions: 6 Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- OutOfDisk False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasSufficientDisk kubelet has sufficient disk space available MemoryPressure False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:05:57 -0500 KubeletHasSufficientPID kubelet has sufficient PID available Ready True Wed, 13 Feb 2019 15:09:42 -0500 Wed, 13 Feb 2019 11:07:09 -0500 KubeletReady kubelet is posting ready status Addresses: 7 InternalIP: 10.0.140.16 InternalDNS: ip-10-0-140-16.us-east-2.compute.internal Hostname: ip-10-0-140-16.us-east-2.compute.internal Capacity: 8 attachable-volumes-aws-ebs: 39 cpu: 2 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 8172516Ki pods: 250 Allocatable: attachable-volumes-aws-ebs: 39 cpu: 1500m hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 7558116Ki pods: 250 System Info: 9 Machine ID: 63787c9534c24fde9a0cde35c13f1f66 System UUID: EC22BF97-A006-4A58-6AF8-0A38DEEA122A Boot ID: f24ad37d-2594-46b4-8830-7f7555918325 Kernel Version: 3.10.0-957.5.1.el7.x86_64 OS Image: Red Hat Enterprise Linux CoreOS 410.8.20190520.0 (Ootpa) Operating System: linux Architecture: amd64 Container Runtime Version: cri-o://1.16.0-0.6.dev.rhaos4.3.git9ad059b.el8-rc2 Kubelet Version: v1.23.0 Kube-Proxy Version: v1.23.0 PodCIDR: 10.128.4.0/24 ProviderID: aws:///us-east-2a/i-04e87b31dc6b3e171 Non-terminated Pods: (13 in total) 10 Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits --------- ---- ------------ ---------- --------------- ------------- openshift-cluster-node-tuning-operator tuned-hdl5q 0 (0%) 0 (0%) 0 (0%) 0 (0%) openshift-dns dns-default-l69zr 0 (0%) 0 (0%) 0 (0%) 0 (0%) openshift-image-registry node-ca-9hmcg 0 (0%) 0 (0%) 0 (0%) 0 (0%) openshift-ingress router-default-76455c45c-c5ptv 0 (0%) 0 (0%) 0 (0%) 0 (0%) openshift-machine-config-operator machine-config-daemon-cvqw9 20m (1%) 0 (0%) 50Mi (0%) 0 (0%) openshift-marketplace community-operators-f67fh 0 (0%) 0 (0%) 0 (0%) 0 (0%) openshift-monitoring alertmanager-main-0 50m (3%) 50m (3%) 210Mi (2%) 10Mi (0%) openshift-monitoring grafana-78765ddcc7-hnjmm 100m (6%) 200m (13%) 100Mi (1%) 200Mi (2%) openshift-monitoring node-exporter-l7q8d 10m (0%) 20m (1%) 20Mi (0%) 40Mi (0%) openshift-monitoring prometheus-adapter-75d769c874-hvb85 0 (0%) 0 (0%) 0 (0%) 0 (0%) openshift-multus multus-kw8w5 0 (0%) 0 (0%) 0 (0%) 0 (0%) openshift-sdn ovs-t4dsn 100m (6%) 0 (0%) 300Mi (4%) 0 (0%) openshift-sdn sdn-g79hg 100m (6%) 0 (0%) 200Mi (2%) 0 (0%) Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted.) Resource Requests Limits -------- -------- ------ cpu 380m (25%) 270m (18%) memory 880Mi (11%) 250Mi (3%) attachable-volumes-aws-ebs 0 0 Events: 11 Type Reason Age From Message ---- ------ ---- ---- ------- Normal NodeHasSufficientPID 6d (x5 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientPID Normal NodeAllocatableEnforced 6d kubelet, m01.example.com Updated Node Allocatable limit across pods Normal NodeHasSufficientMemory 6d (x6 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientMemory Normal NodeHasNoDiskPressure 6d (x6 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasNoDiskPressure Normal NodeHasSufficientDisk 6d (x6 over 6d) kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientDisk Normal NodeHasSufficientPID 6d kubelet, m01.example.com Node m01.example.com status is now: NodeHasSufficientPID Normal Starting 6d kubelet, m01.example.com Starting kubelet. #...
- 1
- ๋ ธ๋์ ์ด๋ฆ์ ๋๋ค.
- 2
- ๋ ธ๋์ ์ญํ (
master
๋๋worker
)์ ๋๋ค. - 3
- ๋ ธ๋์ ์ ์ฉ๋๋ ๋ผ๋ฒจ์ ๋๋ค.
- 4
- ๋ ธ๋์ ์ ์ฉ๋๋ ์ฃผ์์ ๋๋ค.
- 5
- ๋ ธ๋์ ์ ์ฉ๋๋ ํ ์ธํธ์ ๋๋ค.
- 6
- ๋ ธ๋ ์กฐ๊ฑด ๋ฐ ์ํ์ ๋๋ค.
conditions
์คํ ์๋Ready
,PIDPressure
,PIDPressure
,MemoryPressure
,DiskPressure
OutOfDisk
์ํ๋ฅผ ๋์ดํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์ ์ด ์น์ ์ ๋ท๋ถ๋ถ์ ์ค๋ช ๋์ด ์์ต๋๋ค. - 7
- ๋ ธ๋์ IP ์ฃผ์ ๋ฐ ํธ์คํธ ์ด๋ฆ์ ๋๋ค.
- 8
- Pod ๋ฆฌ์์ค ๋ฐ ํ ๋น ๊ฐ๋ฅํ ๋ฆฌ์์ค์ ๋๋ค.
- 9
- ๋ ธ๋ ํธ์คํธ์ ๋ํ ์ ๋ณด์ ๋๋ค.
- 10
- ๋ ธ๋์ Pod์ ๋๋ค.
- 11
- ๋ ธ๋์์ ๋ณด๊ณ ํ ์ด๋ฒคํธ์ ๋๋ค.
๋ ธ๋์ ํ์๋ ์ ๋ณด ์ค์ ๋ค์ ๋ ธ๋ ์ํ๊ฐ ์ด ์น์ ์ ํ์๋ ๋ช ๋ น์ ์ถ๋ ฅ์ ํ์๋ฉ๋๋ค.
์ํ | ์ค๋ช |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Pod๋ ๋ ธ๋์ ๋ฐฐ์นํ๋๋ก ์์ฝํ ์ ์์ต๋๋ค. |
6.1.2. ํด๋ฌ์คํฐ์ ๋ ธ๋์ ์๋ Pod ๋์ด
ํน์ ๋ ธ๋์ ๋ชจ๋ Pod๋ฅผ ๋์ดํ ์ ์์ต๋๋ค.
์ ์ฐจ
ํ๋ ์ด์์ ๋ ธ๋์ ์๋ ๋ชจ๋ Pod ๋๋ ์ ํํ Pod๋ฅผ ๋์ดํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc describe node <node1> <node2>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc describe node ip-10-0-128-218.ec2.internal
์ ํํ ๋ ธ๋์์ ๋ชจ๋ Pod ๋๋ ์ ํํ Pod๋ฅผ ๋์ดํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc describe --selector=<node_selector>
$ oc describe node --selector=kubernetes.io/os
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
$ oc describe -l=<pod_selector>
$ oc describe node -l node-role.kubernetes.io/worker
์ข ๋ฃ๋ Pod๋ฅผ ํฌํจํ์ฌ ํน์ ๋ ธ๋์ ๋ชจ๋ Pod๋ฅผ ๋์ดํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc get pod --all-namespaces --field-selector=spec.nodeName=<nodename>
6.1.3. ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ฌ์ฉ๋ ํต๊ณ ๋ณด๊ธฐ
์ปจํ ์ด๋์ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๋ ธ๋์ ๋ํ ์ฌ์ฉ๋ ํต๊ณ๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ์ฉ๋ ํต๊ณ์๋ CPU, ๋ฉ๋ชจ๋ฆฌ, ์คํ ๋ฆฌ์ง ์ฌ์ฉ๋์ด ํฌํจ๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณด๋ ค๋ฉด
cluster-reader
๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. - ์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณด๋ ค๋ฉด ๋ฉํธ๋ฆญ์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
์ ์ฐจ
์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc adm top nodes
์ถ๋ ฅ ์
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% ip-10-0-12-143.ec2.compute.internal 1503m 100% 4533Mi 61% ip-10-0-132-16.ec2.compute.internal 76m 5% 1391Mi 18% ip-10-0-140-137.ec2.compute.internal 398m 26% 2473Mi 33% ip-10-0-142-44.ec2.compute.internal 656m 43% 6119Mi 82% ip-10-0-146-165.ec2.compute.internal 188m 12% 3367Mi 45% ip-10-0-19-62.ec2.compute.internal 896m 59% 5754Mi 77% ip-10-0-44-193.ec2.compute.internal 632m 42% 5349Mi 72%
๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ์ฌ์ฉ๋ ํต๊ณ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc adm top node --selector=''
ํํฐ๋งํ ์ ํ๊ธฐ(๋ผ๋ฒจ ์ฟผ๋ฆฌ)๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
=
,==
,!=
๊ฐ ์ง์๋ฉ๋๋ค.
6.2. ๋ ธ๋ ์์
๊ด๋ฆฌ์๋ ์ฌ๋ฌ ์์ ์ ์ํํ์ฌ ํด๋ฌ์คํฐ์ ํจ์จ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
6.2.1. ๋ ธ๋์์ Pod๋ฅผ ๋น์ฐ๋ ๋ฐฉ๋ฒ ์ดํด
Pod๋ฅผ ๋น์ฐ๋ฉด ํ๋ ์ด์์ ์ง์ ๋ ๋ ธ๋์์ ๋ชจ๋ Pod ๋๋ ์ ํํ Pod๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค.
๋ณต์ ์ปจํธ๋กค๋ฌ์์ ์ง์ํ๋ Pod๋ง ๋น์ธ ์ ์์ต๋๋ค. ๋ณต์ ์ปจํธ๋กค๋ฌ๋ ๋ค๋ฅธ ๋ ธ๋์์ ์ Pod๋ฅผ ์์ฑํ๊ณ ์ง์ ๋ ๋ ธ๋์์ ๊ธฐ์กด Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
๋ณต์ ์ปจํธ๋กค๋ฌ์์ ์ง์ํ์ง ์๋ ๋ฒ ์ด Pod๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. Pod ์ ํ๊ธฐ๋ฅผ ์ง์ ํ์ฌ Pod์ ํ์ ์งํฉ์ ๋น์ธ ์ ์์ต๋๋ค. Pod ์ ํ๊ธฐ๋ ๋ผ๋ฒจ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฏ๋ก ๋ผ๋ฒจ์ด ์ง์ ๋ Pod๋ฅผ ๋ชจ๋ ๋น์๋๋ค.
์ ์ฐจ
Pod ๋น์ฐ๊ธฐ๋ฅผ ์ํํ๊ธฐ ์ ์ ๋ ธ๋๋ฅผ ์์ฝ ๋ถ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค.
๋ ธ๋๋ฅผ ์์ฝ ๋ถ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค.
$ oc adm cordon <node1>
์ถ๋ ฅ ์
node/<node1> cordoned
๋ ธ๋ ์ํ๊ฐ
Ready,SchedulingDisabled
์ธ์ง ํ์ธํฉ๋๋ค.$ oc get node <node1>
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION <node1> Ready,SchedulingDisabled worker 1d v1.24.0
๋ค์ ๋ฉ์๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ๋น์๋๋ค.
ํ๋ ์ด์์ ๋ ธ๋์ ์๋ ๋ชจ๋ Pod ๋๋ ์ ํํ Pod๋ฅผ ๋น์๋๋ค.
$ oc adm drain <node1> <node2> [--pod-selector=<pod_selector>]
--force
์ต์ ์ ์ฌ์ฉํ์ฌ ๋ฒ ์ด Pod๋ฅผ ๊ฐ์ ์ญ์ ํฉ๋๋ค.true
๋ก ์ค์ ํ๋ฉด ๋ณต์ ์ปจํธ๋กค๋ฌ, ๋ณต์ ๋ณธ ์ธํธ, ์์ , ๋ฐ๋ชฌ ์ธํธ ๋๋ ์ํ ์ ์ฅ ์ธํธ์์ ๊ด๋ฆฌํ์ง ์๋ Pod๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๊ณ์ ์ญ์ ํฉ๋๋ค.$ oc adm drain <node1> <node2> --force=true
--grace-period
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ Pod๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ ์๊ฐ(์ด)์ ์ค์ ํฉ๋๋ค. ์์์ธ ๊ฒฝ์ฐ Pod์ ์ง์ ๋ ๊ธฐ๋ณธ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค.$ oc adm drain <node1> <node2> --grace-period=-1
true
๋ก ์ค์ ๋--ignore-daemonsets
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ชฌ ์ธํธ์์ ๊ด๋ฆฌํ๋ Pod๋ฅผ ๋ฌด์ํฉ๋๋ค.$ oc adm drain <node1> <node2> --ignore-daemonsets=true
--timeout
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ข ๋ฃํ๊ธฐ ์ ์ ๋๊ธฐํ๋ ์๊ฐ์ ์ค์ ํฉ๋๋ค. ๊ฐ์ด0
์ด๋ฉด ์๊ฐ์ด ์ ํ๋์ง ์์ต๋๋ค.$ oc adm drain <node1> <node2> --timeout=5s
--delete-emptydir-data
ํ๋๊ทธ๋ฅผtrue
๋ก ์ค์ ํ์ฌemptyDir
๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ Pod๊ฐ ์๋ ๊ฒฝ์ฐ์๋ Pod๋ฅผ ์ญ์ ํฉ๋๋ค. ๋ ธ๋๊ฐ ๋๋ ์ด๋๋๋ฉด ๋ก์ปฌ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ฉ๋๋ค.$ oc adm drain <node1> <node2> --delete-emptydir-data=true
--dry-run
์ต์ ์true
๋ก ์ค์ ํ์ฌ ์ค์ ๋ก ๋น์ฐ๊ธฐ๋ฅผ ์ํํ์ง ์๊ณ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ค๋ธ์ ํธ๋ฅผ ๋์ดํฉ๋๋ค.$ oc adm drain <node1> <node2> --dry-run=true
ํน์ ๋ ธ๋ ์ด๋ฆ(์:
<node1> <node2>
)์ ์ง์ ํ๋ ๋์--selector=<node_selector>
์ต์ ์ ์ฌ์ฉํ์ฌ ์ ํํ ๋ ธ๋์์ Pod๋ฅผ ๋น์ธ ์ ์์ต๋๋ค.
์๋ฃ๋๋ฉด ๋ ธ๋๋ฅผ ์์ฝ ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค.
$ oc adm uncordon <node1>
6.2.2. ๋ ธ๋์์ ๋ผ๋ฒจ์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ ์ดํด
๋ ธ๋์์ ์์์ ๋ผ๋ฒจ์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
๋จธ์ ์์ ๋ ธ๋๋ฅผ ๋ฐฑ์ ํด๋ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด ๋ ธ๋ ๋ผ๋ฒจ์ด ์ ์ง๋์ง ์์ต๋๋ค.
MachineSet
์ค๋ธ์ ํธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋จธ์ ์ธํธ์ ํฌํจ๋ ๊ธฐ์กด ๋จธ์ ์๋ ์ ์ฉ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์กด MachineSet
์ค๋ธ์ ํธ์์ ํธ์ง ๋๋ ์ถ๊ฐ๋ ๋ผ๋ฒจ์ ๋จธ์ ์ธํธ์ ์ฐ๊ฒฐ๋ ๊ธฐ์กด ๋จธ์ ๋ฐ ๋
ธ๋๋ก ์ ๋ฌ๋์ง ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ๋ ธ๋์์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๋ฐ์ดํธํฉ๋๋ค.
$ oc label node <node> <key_1>=<value_1> ... <key_n>=<value_n>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc label nodes webconsole-7f7f6 unhealthy=true
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ ์ด๋ธ์ ์ ์ฉํ ์๋ ์์ต๋๋ค.
kind: Node apiVersion: v1 metadata: name: webconsole-7f7f6 labels: unhealthy: 'true' #...
๋ค์ ๋ช ๋ น์ ๋ค์์คํ์ด์ค์ ๋ชจ๋ Pod๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
$ oc label pods --all <key_1>=<value_1>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc label pods --all status=unhealthy
6.2.3. ๋ ธ๋๋ฅผ ์์ฝ ๊ฐ๋ฅ ๋๋ ์์ฝ ๋ถ๊ฐ๋ฅ์ผ๋ก ํ์ํ๋ ๋ฐฉ๋ฒ ์ดํด
๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๊ฐ Ready
์ธ ์ ์ ๋
ธ๋๋ ์์ฝ ๊ฐ๋ฅ์ผ๋ก ํ์๋ฉ๋๋ค. ์ฆ ๋
ธ๋์ ์ Pod๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์๋์ผ๋ก ๋
ธ๋๋ฅผ ์์ฝ ๋ถ๊ฐ๋ก ํ์ํ๋ฉด ์ Pod๊ฐ ๋
ธ๋์ ์์ฝ๋์ง ์๋๋ก ์ฐจ๋จ๋ฉ๋๋ค. ๋
ธ๋์ ๊ธฐ์กด Pod์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ํ๋ ์ด์์ ๋ ธ๋๋ฅผ ์์ฝ ๋ถ๊ฐ๋ก ํ์ํฉ๋๋ค.
์ถ๋ ฅ ์
$ oc adm cordon <node>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc adm cordon node1.example.com
์ถ๋ ฅ ์
node/node1.example.com cordoned NAME LABELS STATUS node1.example.com kubernetes.io/hostname=node1.example.com Ready,SchedulingDisabled
๋ค์ ๋ช ๋ น์ ํ์ฌ ์์ฝํ ์ ์๋ ํ๋ ์ด์์ ๋ ธ๋๋ฅผ ์์ฝ ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค.
$ oc adm uncordon <node1>
๋๋ ํน์ ๋ ธ๋ ์ด๋ฆ(์:
<node>
)์ ์ง์ ํ๋ ๋์--selector=<node_selector>
์ต์ ์ ์ฌ์ฉํ์ฌ ์ ํํ ๋ ธ๋๋ฅผ ์์ฝ ๊ฐ๋ฅ ๋๋ ์์ฝ ๋ถ๊ฐ๋ก ํ์ํ ์ ์์ต๋๋ค.
6.2.4. ๋ ธ๋ ์ญ์
6.2.4.1. ํด๋ฌ์คํฐ์์ ๋ ธ๋ ์ญ์
CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด Kubernetes์์ ๋ ธ๋ ์ค๋ธ์ ํธ๊ฐ ์ญ์ ๋์ง๋ง ๋ ธ๋์ ์กด์ฌํ๋ Pod๋ ์ญ์ ๋์ง ์์ต๋๋ค. ๋ณต์ ์ปจํธ๋กค๋ฌ์์ ์ง์ํ์ง ์๋ ๊ธฐ๋ณธ Pod๋ OpenShift Container Platform์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ณต์ ์ปจํธ๋กค๋ฌ์์ ์ง์ํ๋ Pod๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ ธ๋๋ก ๋ค์ ์์ฝ๋ฉ๋๋ค. ๋ก์ปฌ ๋งค๋ํ์คํธ Pod๋ฅผ ์ญ์ ํด์ผ ํฉ๋๋ค.
์ ์ฐจ
OpenShift Container Platform ํด๋ฌ์คํฐ์์ ๋
ธ๋๋ฅผ ์ญ์ ํ๋ ค๋ฉด ํด๋น MachineSet
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.
๋ฒ ์ด ๋ฉํ์์ ํด๋ฌ์คํฐ๋ฅผ ์คํ ์ค์ธ ๊ฒฝ์ฐ MachineSet
์ค๋ธ์ ํธ๋ฅผ ํธ์งํ์ฌ ๋
ธ๋๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ๋จธ์ ์ธํธ๋ ํด๋ฌ์คํฐ๊ฐ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ํตํฉ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋์ ์๋์ผ๋ก ์ญ์ ํ๊ธฐ ์ ์ ์ค์ผ์ค ์์ฝ์ ์ทจ์ํ๊ณ ๋
ธ๋๋ฅผ ๋๋ ์ด๋ํด์ผ ํฉ๋๋ค.
ํด๋ฌ์คํฐ์ ์๋ ๋จธ์ ์ธํธ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get machinesets -n openshift-machine-api
๋จธ์ ์ธํธ๋ <clusterid>-worker-<aws-region-az> ํ์์ผ๋ก ๋์ด๋ฉ๋๋ค.
๋จธ์ ์ธํธ๋ฅผ ์ค์ผ์ผ๋งํฉ๋๋ค.
$ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
$ oc edit machineset <machineset> -n openshift-machine-api
์์ ์ ๋ณด๋๋ ๋ค์ YAML์ ์ ์ฉํ์ฌ ๋จธ์ ์ธํธ๋ฅผ ์ค์ผ์ผ๋งํ ์ ์์ต๋๋ค.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: <machineset> namespace: openshift-machine-api spec: replicas: 2 #...
์ถ๊ฐ ๋ฆฌ์์ค
- ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ์ค์ผ์ผ๋งํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋จธ์ ์ธํธ ์๋ ์ค์ผ์ผ๋ง์ ์ฐธ์กฐํ์ญ์์ค.
6.2.4.2. ๋ฒ ์ด ๋ฉํ ํด๋ฌ์คํฐ์์ ๋ ธ๋ ์ญ์
CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด Kubernetes์์ ๋ ธ๋ ์ค๋ธ์ ํธ๊ฐ ์ญ์ ๋์ง๋ง ๋ ธ๋์ ์กด์ฌํ๋ Pod๋ ์ญ์ ๋์ง ์์ต๋๋ค. ๋ณต์ ์ปจํธ๋กค๋ฌ์์ ์ง์ํ์ง ์๋ ๊ธฐ๋ณธ Pod๋ OpenShift Container Platform์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ณต์ ์ปจํธ๋กค๋ฌ์์ ์ง์ํ๋ Pod๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ ธ๋๋ก ๋ค์ ์์ฝ๋ฉ๋๋ค. ๋ก์ปฌ ๋งค๋ํ์คํธ Pod๋ฅผ ์ญ์ ํด์ผ ํฉ๋๋ค.
์ ์ฐจ
๋ค์ ๋จ๊ณ๋ฅผ ์๋ฃํ์ฌ ๋ฒ ์ด ๋ฉํ์์ ์คํ ์ค์ธ OpenShift Container Platform ํด๋ฌ์คํฐ์์ ๋ ธ๋๋ฅผ ์ญ์ ํฉ๋๋ค.
๋ ธ๋๋ฅผ ์์ฝ ๋ถ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค.
$ oc adm cordon <node_name>
๋ ธ๋์ ๋ชจ๋ Pod๋ฅผ ๋๋ ์ด๋ํฉ๋๋ค.
$ oc adm drain <node_name> --force=true
๋ ธ๋๊ฐ ์คํ๋ผ์ธ ์ํ์ด๊ฑฐ๋ ์๋ตํ์ง ์๋ ๊ฒฝ์ฐ ์ด ๋จ๊ณ๊ฐ ์คํจํ ์ ์์ต๋๋ค. ๋ ธ๋๊ฐ ์๋ตํ์ง ์๋๋ผ๋ ๊ณต์ ์คํ ๋ฆฌ์ง์ ์ฐ๋ ์ํฌ๋ก๋๋ฅผ ๊ณ์ ์คํ๋๊ณ ์์ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์์์ ๋ฐฉ์งํ๋ ค๋ฉด ๊ณ์ํ๊ธฐ ์ ์ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด์ ์ ์์ ๋๋๋ค.
ํด๋ฌ์คํฐ์์ ๋ ธ๋๋ฅผ ์ญ์ ํฉ๋๋ค.
$ oc delete node <node_name>
๋ ธ๋ ์ค๋ธ์ ํธ๊ฐ ํด๋ฌ์คํฐ์์ ์ญ์ ๋์ด๋ ์ฌ๋ถํ ํ ๋๋ kubelet ์๋น์ค๊ฐ ์ฌ์์๋๋ฉด ํด๋ฌ์คํฐ์ ๋ค์ ์ฐธ์ฌํ ์ ์์ต๋๋ค. ๋ ธ๋์ ๋ ธ๋์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ญ์ ํ๋ ค๋ฉด ๋ ธ๋๋ฅผ ํด์ ํด์ผ ํฉ๋๋ค.
- ๋ฌผ๋ฆฌ ํ๋์จ์ด์ ์ ์์ ๋ ๊ฒฝ์ฐ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์ ๋ค์ ์ฐธ์ฌํ ์ ์๋๋ก ํด๋น ํ๋์จ์ด๋ฅผ ๋ค์ ์ผญ๋๋ค.
6.3. ๋ ธ๋ ๊ด๋ฆฌ
OpenShift Container Platform์์๋ KubeletConfig CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์ฌ์ฉํ์ฌ ๋
ธ๋์ ๊ตฌ์ฑ์ ๊ด๋ฆฌํฉ๋๋ค. KubeletConfig
์ค๋ธ์ ํธ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ๊ด๋ฆฌํ ๋จธ์ ๊ตฌ์ฑ์ด ์์ฑ๋์ด ๋
ธ๋์ ์ค์ ์ ๋ฎ์ด์๋๋ค.
๊ตฌ์ฑ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์๊ฒฉ ๋จธ์ ์ ๋ก๊ทธ์ธํ๋ ๊ฒ์ ์ง์๋์ง ์์ต๋๋ค.
6.3.1. ๋ ธ๋ ์์
ํด๋ฌ์คํฐ ๋๋ ๋จธ์ ํ์ ๊ตฌ์ฑํ๋ ค๋ฉด CRD(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ์) ๋๋ kubeletConfig
์ค๋ธ์ ํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. OpenShift Container Platform์์๋ CRD๋ฅผ ํตํด ๋์
๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ ๋ฐ Machine Config Controller๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค.
kubeletConfig
์ค๋ธ์ ํธ์ ํ๋๋ ์
์คํธ๋ฆผ Kubernetes์ kubelet์ผ๋ก ์ง์ ์ ๋ฌ๋๋ฏ๋ก ํด๋น ํ๋์ ๊ฒ์ฆ์ kubelet ์์ฒด์์ ์ง์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ํด๋น ํ๋์ ์ ํจํ ๊ฐ์ ๊ด๋ จ Kubernetes ์ค๋ช
์๋ฅผ ์ฐธ์กฐํ์ญ์์ค. kubeletConfig
์ค๋ธ์ ํธ์์ ์๋ชป๋ ๊ฐ์ผ๋ก ์ธํด ํด๋ฌ์คํฐ ๋
ธ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ ์ ์์ต๋๋ค.
์ ์ฐจ
๊ตฌ์ฑํ๋ ค๋ ๋ ธ๋ ์ ํ์ ์ ์ CRD์ธ ๋จธ์ ๊ตฌ์ฑ ํ๊ณผ ์ฐ๊ฒฐ๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค. ๋ค์ ์ค ํ๋๋ฅผ ์คํํฉ๋๋ค.
์ํ๋ ๋จธ์ ๊ตฌ์ฑ ํ์ ํ์ฌ ๋ผ๋ฒจ์ ํ์ธํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get machineconfigpool --show-labels
์ถ๋ ฅ ์
NAME CONFIG UPDATED UPDATING DEGRADED LABELS master rendered-master-e05b81f5ca4db1d249a1bf32f9ec24fd True False False operator.machineconfiguration.openshift.io/required-for-upgrade= worker rendered-worker-f50e78e1bc06d8e82327763145bfcf62 True False False
์ํ๋ ๋จธ์ ๊ตฌ์ฑ ํ์ ์ฌ์ฉ์ ์ ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc label machineconfigpool worker custom-kubelet=enabled
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ๋ํ
kubeletconfig
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
custom-config CR ๊ตฌ์ฑ ์ํ
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: custom-config 1 spec: machineConfigPoolSelector: matchLabels: custom-kubelet: enabled 2 kubeletConfig: 3 podsPerCore: 10 maxPods: 250 systemReserved: cpu: 2000m memory: 1Gi #...
CR ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f master-kube-config.yaml
๋๋ถ๋ถ์ Kubelet ๊ตฌ์ฑ ์ต์ ์ ์ฌ์ฉ์๊ฐ ์ค์ ํ ์ ์์ต๋๋ค. ๋ค์ ์ต์ ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
- CgroupDriver
- ClusterDNS
- ClusterDomain
- StaticPodPath
๋จ์ผ ๋
ธ๋์ 50๊ฐ ์ด์์ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๋
ธ๋ ๊ฐ์ Pod ์์ฝ์ ๋ถ๊ท ํ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋
ธ๋์ ์ด๋ฏธ์ง ๋ชฉ๋ก์ด ๊ธฐ๋ณธ์ ์ผ๋ก 50๊ฐ๋ก ๋จ์ถ๋๊ธฐ ๋๋ฌธ์
๋๋ค. KubeletConfig
์ค๋ธ์ ํธ๋ฅผ ํธ์งํ๊ณ nodeStatusMaxImages
์ ๊ฐ์ -1
๋ก ์ค์ ํ์ฌ ์ด๋ฏธ์ง ์ ํ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
6.3.2. ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ์์ฝ ๊ฐ๋ฅ์ผ๋ก ๊ตฌ์ฑ
์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ์์ฝํ ์ ์๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฆ, ์ Pod๋ฅผ ๋ง์คํฐ ๋ ธ๋์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ ์์ฝํ ์ ์์ต๋๋ค.
๋ง์คํฐ๋ ์์ฝ ๊ฐ๋ฅ์ผ๋ก ์ค์ ํ ์ ์์ง๋ง ์์ ์ ๋ ธ๋๋ ์ ์งํด์ผ ํฉ๋๋ค.
๋ฒ ์ด ๋ฉํ ํด๋ฌ์คํฐ์ ์์ ์ ๋ ธ๋ ์์ด OpenShift Container Platform์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฝ ๊ฐ๋ฅ์ผ๋ก ํ์๋ฉ๋๋ค.
mastersSchedulable
ํ๋๋ฅผ ๊ตฌ์ฑํ์ฌ ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋๋ฅผ ์์ฝํ ์ ์๋๋ก ํ์ฉํ๊ฑฐ๋ ํ์ฉํ์ง ์์ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์์ฝ ๋ถ๊ฐ์์ ์์ฝ ๊ฐ๋ฅ์ผ๋ก ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ถ๊ฐ ์๋ธ์คํฌ๋ฆฝ์ ์ด ํ์ํฉ๋๋ค. ๊ทธ ์ด์ ๋ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๊ฐ ์์ ์ ๋ ธ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ์ฐจ
schedulers.config.openshift.io
๋ฆฌ์์ค๋ฅผ ํธ์งํฉ๋๋ค.$ oc edit schedulers.config.openshift.io cluster
mastersSchedulable
ํ๋๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.apiVersion: config.openshift.io/v1 kind: Scheduler metadata: creationTimestamp: "2019-09-10T03:04:05Z" generation: 1 name: cluster resourceVersion: "433" selfLink: /apis/config.openshift.io/v1/schedulers/cluster uid: a636d30a-d377-11e9-88d4-0a60097bee62 spec: mastersSchedulable: false 1 status: {} #...
- 1
- ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ์์ฝํ ์ ์๋๋ก ํ๋ ค๋ฉด
true
๋ก ์ค์ ํฉ๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ์์ฝํ ์ ์๋๋ก ํ๋ ค๋ฉดfalse
๋ก ์ค์ ํฉ๋๋ค.
- ํ์ผ์ ์ ์ฅํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค.
6.3.3. SELinux ๋ถ์ธ ์ค์
OpenShift Container Platform์ ์ฌ์ฉํ๋ฉด RHCOS(Red Hat Enterprise Linux CoreOS) ๋
ธ๋์์ SELinux ๋ถ์ธ์ ํ์ฑํ ๋ฐ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๋ค์ ์ ์ฐจ์์๋ MCO(Machine Config Operator)๋ฅผ ์ฌ์ฉํ์ฌ ๋
ธ๋์์ SELinux ๋ถ์ธ์ ์์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค. ์ด ์ ์ฐจ์์๋ container_manage_cgroup
์ ์์ ๋ถ์ธ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ๊ฐ์ ํ์ํ ๋ถ์ธ๋ก ์์ ํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- OpenShift CLI(oc)๊ฐ ์ค์น๋์ด ์์ต๋๋ค.
์ ์ฐจ
๋ค์ ์์ ํ์๋
MachineConfig
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 99-worker-setsebool spec: config: ignition: version: 3.2.0 systemd: units: - contents: | [Unit] Description=Set SELinux booleans Before=kubelet.service [Service] Type=oneshot ExecStart=/sbin/setsebool container_manage_cgroup=on RemainAfterExit=true [Install] WantedBy=multi-user.target graphical.target enabled: true name: setsebool.service #...
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์
MachineConfig
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f 99-worker-setsebool.yaml
MachineConfig
์ค๋ธ์ ํธ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ ํ ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ๋
ธ๋๊ฐ ์ ์์ ์ผ๋ก ์ฌ๋ถํ
๋ฉ๋๋ค.
6.3.4. ๋ ธ๋์ ์ปค๋ ์ธ์ ์ถ๊ฐ
ํน๋ณํ ๊ฒฝ์ฐ์๋ ํด๋ฌ์คํฐ ๋ ธ๋ ์ธํธ์ ์ปค๋ ์ธ์๋ฅผ ์ถ๊ฐํด์ผ ํ ์ ์์ต๋๋ค. ์ด ์์ ์ ์ํํ ๋ ์ฃผ์ํด์ผ ํ๋ฉฐ ๋จผ์ ์ค์ ๋ ์ธ์์ ์ํฅ์ ๋ช ํํ๊ฒ ์ดํดํ๊ณ ์์ด์ผํฉ๋๋ค.
์ปค๋ ์ธ์๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ์์คํ ์ด ๋ถํ ๋์ง ์์ ์ ์์ต๋๋ค.
์ค์ ํ ์ ์๋ ์ปค๋ ์ธ์์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- enforcing=0: SELinux(Security Enhanced Linux)๋ฅผ ํ์ฉ ๋ชจ๋์์ ์คํํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ํ์ฉ ๋ชจ๋์์๋ SELinux๊ฐ ๊ฐ์ฒด์ ๋ ์ด๋ธ์ ์ง์ ํ๊ณ ๋ก๊ทธ์ ์ก์ธ์ค ๊ฑฐ๋ถ ํญ๋ชฉ์ ๋ด๋ณด๋ด๋ ๋ฑ ๋ก๋๋ ๋ณด์ ์ ์ฑ ์ ์ ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋์ํ์ง๋ง ์ค์ ๋ก๋ ์ด๋ค ์์ ๋ ๊ฑฐ๋ถํ์ง ์์ต๋๋ค. ํ๋ก๋์ ์์คํ ์์ ์ง์๋์ง ์์ง๋ง ํ์ฉ ๋ชจ๋๋ ๋๋ฒ๊น ์ ์ ์ฉํ ์ ์์ต๋๋ค.
-
nosmt: ์ปค๋์์ ๋์นญ ๋ฉํฐ ์ค๋ ๋ฉ (SMT)์ ๋นํ์ฑํํฉ๋๋ค. ๋ฉํฐ ์ค๋ ๋ฉ์ ๊ฐ CPU๋ง๋ค ์ฌ๋ฌ ๊ฐ์ ๋
ผ๋ฆฌ ์ค๋ ๋๋ฅผ ํ์ฉํฉ๋๋ค. ๋ฉํฐ ํ
๋ํธ ํ๊ฒฝ์์
nosmt
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ํฌ๋ก์ค ์ค๋ ๋ ๊ณต๊ฒฉ ์ํ์ ์ค์ผ ์ ์์ต๋๋ค. SMT๋ฅผ ๋นํ์ฑํํ๋ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๋ฅ๋ณด๋ค๋ ๋ณด์์ ์ค์์ํ์ฌ ์ ํํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. systemd.unified_cgroup_hierarchy: Linux ์ ์ด ๊ทธ๋ฃน ๋ฒ์ 2 (cgroup v2)๋ฅผ ํ์ฑํํฉ๋๋ค. cgroup v2๋ ์ปค๋ ์ ์ด ๊ทธ๋ฃน ์ ๋ค์ ๋ฒ์ ์ด๋ฉฐ ์ฌ๋ฌ ๊ฐ์ง ๊ฐ์ ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
์ค์OpenShift Container Platform cgroups ๋ฒ์ 2 ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ ํ๋ฆฌ๋ทฐ์ ์์ผ๋ฉฐ ํ์ฌ Red Hat์์ ์ง์ํ์ง ์์ต๋๋ค.
์ปค๋ ์ธ์ ๋ชฉ๋ก ๋ฐ ์ค๋ช ์ Kernel.org ์ปค๋ ๋งค๊ฐ๋ณ์์์ ์ฐธ์กฐํ์ญ์์ค.
๋ค์ ํ๋ก์ธ์ค์์๋ ๋ค์์ ์๋ณํ๋ MachineConfig
๋ฅผ ๋ง๋ญ๋๋ค.
- ์ปค๋ ์ธ์๋ฅผ ์ถ๊ฐํ๋ ค๋ ๋จธ์ ์ธํธ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ์์ ์ ์ญํ ์ ๊ฐ๋ ๋จธ์ ์ ๋๋ค.
- ๊ธฐ์กด ์ปค๋ ์ธ์ ๋์ ์ถ๊ฐ๋๋ ์ปค๋ ์ธ์์ ๋๋ค.
- ๋จธ์ ๊ตฌ์ฑ ๋ชฉ๋ก์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๋ ์์น๋ฅผ ๋ํ๋ด๋ ๋ผ๋ฒจ์ ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- OpenShift Container Platform ํด๋ฌ์คํฐ์ ๋ํ ๊ด๋ฆฌ์ ๊ถํ์ ๋ณด์ ํ๊ณ ์์ด์ผ ํฉ๋๋ค.
์ ์ฐจ
OpenShift Container Platform ํด๋ฌ์คํฐ์ ๊ธฐ์กด
MachineConfig
์ค๋ธ์ ํธ๋ฅผ ๋์ดํ๊ณ ๋จธ์ ๊ตฌ์ฑ์ ๋ผ๋ฒจ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํฉ๋๋ค.$ oc get MachineConfig
์ถ๋ ฅ ์
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 00-worker 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-master-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-master-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-worker-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-worker-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-master-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-master-ssh 3.2.0 40m 99-worker-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-worker-ssh 3.2.0 40m rendered-master-23e785de7587df95a4b517e0647e5ab7 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m rendered-worker-5d596d9293ca3ea80c896a1191735bb1 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m
์ปค๋ ์ธ์๋ฅผ ์๋ณํ๋
MachineConfig
ํ์ผ์ ๋ง๋ญ๋๋ค (์:05-worker-kernelarg-selinuxpermissive.yaml
).apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker1 name: 05-worker-kernelarg-selinuxpermissive2 spec: kernelArguments: - enforcing=03
- 1
- ์ ์ปค๋ ์ธ์๋ฅผ ์์ ์ ๋ ธ๋์๋ง ์ ์ฉํฉ๋๋ค.
- 2
- ๋จธ์ ๊ตฌ์ฑ(05) ์ค ์ ํฉํ ์์น์ ์ด๋ค ๊ธฐ๋ฅ (SELinux ํ์ฉ ๋ชจ๋๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ปค๋ ๋งค๊ฐ๋ณ์ ์ถ๊ฐ)์ ํ๋์ง ์๋ณํ๊ธฐ ์ํด ์ด๋ฆ์ด ์ง์ ๋ฉ๋๋ค.
- 3
- ์ ํํ ์ปค๋ ์ธ์๋ฅผ
enforcing=0
์ผ๋ก ์๋ณํฉ๋๋ค.
์ ๋จธ์ ๊ตฌ์ฑ์ ์์ฑํฉ๋๋ค.
$ oc create -f 05-worker-kernelarg-selinuxpermissive.yaml
๋จธ์ ๊ตฌ์ฑ์์ ์ ๊ตฌ์ฑ์ด ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get MachineConfig
์ถ๋ ฅ ์
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 00-worker 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-master-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-master-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-worker-container-runtime 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 01-worker-kubelet 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 05-worker-kernelarg-selinuxpermissive 3.2.0 105s 99-master-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-master-ssh 3.2.0 40m 99-worker-generated-registries 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m 99-worker-ssh 3.2.0 40m rendered-master-23e785de7587df95a4b517e0647e5ab7 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m rendered-worker-5d596d9293ca3ea80c896a1191735bb1 52dd3ba6a9a527fc3ab42afac8d12b693534c8c9 3.2.0 33m
๋ ธ๋๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get nodes
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION ip-10-0-136-161.ec2.internal Ready worker 28m v1.23.0 ip-10-0-136-243.ec2.internal Ready master 34m v1.23.0 ip-10-0-141-105.ec2.internal Ready,SchedulingDisabled worker 28m v1.23.0 ip-10-0-142-249.ec2.internal Ready master 34m v1.23.0 ip-10-0-153-11.ec2.internal Ready worker 28m v1.23.0 ip-10-0-153-150.ec2.internal Ready master 34m v1.23.0
๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ ์์ ์ ๋ ธ๋์ ์์ฝ์ด ๋นํ์ฑํ๋์ด ์์์ ์ ์ ์์ต๋๋ค.
์์ ์ ๋ ธ๋ ์ค ํ๋๋ก ์ด๋ํ์ฌ ์ปค๋ ๋ช ๋ น ํ ์ธ์ (ํธ์คํธ์
/proc/cmdline
์ ์์)๋ฅผ ๋์ดํ์ฌ ์ปค๋ ์ธ์๊ฐ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.$ oc debug node/ip-10-0-141-105.ec2.internal
์ถ๋ ฅ ์
Starting pod/ip-10-0-141-105ec2internal-debug ... To use host binaries, run `chroot /host` sh-4.2# cat /host/proc/cmdline BOOT_IMAGE=/ostree/rhcos-... console=tty0 console=ttyS0,115200n8 rootflags=defaults,prjquota rw root=UUID=fd0... ostree=/ostree/boot.0/rhcos/16... coreos.oem.id=qemu coreos.oem.id=ec2 ignition.platform.id=ec2 enforcing=0 sh-4.2# exit
enforcing=0
์ธ์๊ฐ ๋ค๋ฅธ ์ปค๋ ์ธ์์ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
6.3.5. ๋ ธ๋์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํ์ฑํ
๋ ธ๋์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํ์ฑํํ๋ ๊ฒ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ ์ฉ์ ๋๋ค. ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ Red Hat ํ๋ก๋์ ์๋น์ค ์์ค ๊ณ์ฝ(SLA)์์ ์ง์๋์ง ์์ผ๋ฉฐ ๊ธฐ๋ฅ์ ์ผ๋ก ์์ ํ์ง ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํฅํ ์ ํ ๊ธฐ๋ฅ์ ์กฐ๊ธฐ์ ์ด์ฉํ ์ ์์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ณ ๊ฐ์ด ๊ธฐ๋ฅ์ ํ ์คํธํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Red Hat ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ์ง์ ๋ฒ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ง์ ๋ฒ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ ธ๋๋ณ๋ก OpenShift Container Platform ์ํฌ๋ก๋์ ๋ํ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํ์ฑํํ ์ ์์ต๋๋ค.
์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฑํํ๋ฉด ์ํฌ๋ก๋ ์ฑ๋ฅ๊ณผ ๋ฆฌ์์ค ๋ถ์กฑ ์ฒ๋ฆฌ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฑํํ์ง ๋ง์ญ์์ค.
์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฑํํ๋ ค๋ฉด kubeletconfig
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํ์ฌ swapbehavior
๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค. ์ ํ๋๊ฑฐ๋ ๋ฌด์ ํ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ ํ๋: restricted
Swap
๊ฐ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ํฌ๋ก๋์ ์์ ์ ํํฉ๋๋ค. OpenShift Container Platform์์ ๊ด๋ฆฌํ์ง ์๋ ๋ ธ๋์ ๋ชจ๋ ์ํฌ๋ก๋๋ ์ฌ์ ํ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.LimitedSwap
๋์์ ๋ ธ๋๊ฐ Linux ์ ์ด ๊ทธ๋ฃน ๋ฒ์ 1(cgroups v1) ๋๋ ๋ฒ์ 2(cgroups v 2) ๋ก ์คํ ์ค์ธ์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.- cgroups v1: OpenShift Container Platform ์ํฌ๋ก๋๋ ์ค์ ๋ ๊ฒฝ์ฐ Pod์ ๋ฉ๋ชจ๋ฆฌ ์ ํ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ์ค์์ ๋ชจ๋ ์กฐํฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- cgroups v2: OpenShift Container Platform ์ํฌ๋ก๋๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๋ฌด์ ํ: Keepalived
Swap
๊ฐ์ ์ฌ์ฉํ์ฌ ์ํฌ๋ก๋๊ฐ ์์ฒญ ์ ์์คํ ์ ํ๊น์ง ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค.
kubelet์ด ์ด ๊ตฌ์ฑ ์์ด ์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ์ํ์์ ์์๋์ง ์์ผ๋ฏ๋ก ๋ ธ๋์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฑํํ๊ธฐ ์ ์ OpenShift Container Platform์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค. ๋ ธ๋์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉด OpenShift Container Platform์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฑํํ๋ฉด ํจ๊ณผ๊ฐ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- ๋ฒ์ 4.10 ์ด์์ ์ฌ์ฉํ๋ ์คํ ์ค์ธ OpenShift Container Platform ํด๋ฌ์คํฐ๊ฐ ์์ด์ผ ํฉ๋๋ค.
- ๊ด๋ฆฌ ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ๋ก๊ทธ์ธํ์ต๋๋ค.
ํด๋ฌ์คํฐ์์
TechPreviewNoUpgrade
๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ์ต๋๋ค(๋ ธ๋ โ ํด๋ฌ์คํฐ ์์ โ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ฅ ํ์ฑํ์ฐธ์กฐ).์ฐธ๊ณTechPreviewNoUpgrade
๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ๋ฉด ์ทจ์ํ ์ ์์ผ๋ฉฐ ๋ง์ด๋ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ ์ธํธ๋ ํ๋ก๋์ ํด๋ฌ์คํฐ์์๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค.-
๋
ธ๋์์ cgroup v2๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ
swapaccount=1
์ปค๋ ์ธ์๋ฅผ ์ค์ ํ์ฌ ๋ ธ๋์์ ์ค์ ๊ณ์ ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
์ ์ฐจ
์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํ๋ ค๋ ๋จธ์ ๊ตฌ์ฑ ํ์ ์ฌ์ฉ์ ์ง์ ๋ผ๋ฒจ์ ์ ์ฉํฉ๋๋ค.
$ oc label machineconfigpool worker kubelet-swap=enabled
์ค์ ์ค์ ์ ํ์ฑํ ๋ฐ ๊ตฌ์ฑํ CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค.
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: swap-config spec: machineConfigPoolSelector: matchLabels: kubelet-swap: enabled kubeletConfig: failSwapOn: false 1 memorySwap: swapBehavior: LimitedSwap 2 #...
- ์์คํ ์์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฑํํฉ๋๋ค.
6.3.6. ํ๋์ RHOSP ํธ์คํธ์์ ๋ค๋ฅธ RHOSP ํธ์คํธ๋ก ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
RHOSP(Red Hat OpenStack Platform) ๋ ธ๋์์ ๋ค๋ฅธ ๋ ธ๋๋ก ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ์ด๋ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
ํ๊ฒฝ ๋ณ์
OS_CLOUD
๋clouds
.yaml -
ํ๊ฒฝ ๋ณ์
KUBECONFIG
๋ ๊ด๋ฆฌ OpenShift Container Platform ์ธ์ฆ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ตฌ์ฑ์ ๋ํ๋ ๋๋ค.
์ ์ฐจ
- ๋ช ๋ น์ค์์ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
#!/usr/bin/env bash set -Eeuo pipefail if [ $# -lt 1 ]; then echo "Usage: '$0 node_name'" exit 64 fi # Check for admin OpenStack credentials openstack server list --all-projects >/dev/null || { >&2 echo "The script needs OpenStack admin credentials. Exiting"; exit 77; } # Check for admin OpenShift credentials oc adm top node >/dev/null || { >&2 echo "The script needs OpenShift admin credentials. Exiting"; exit 77; } set -x declare -r node_name="$1" declare server_id server_id="$(openstack server list --all-projects -f value -c ID -c Name | grep "$node_name" | cut -d' ' -f1)" readonly server_id # Drain the node oc adm cordon "$node_name" oc adm drain "$node_name" --delete-emptydir-data --ignore-daemonsets --force # Power off the server oc debug "node/${node_name}" -- chroot /host shutdown -h 1 # Verify the server is shut off until openstack server show "$server_id" -f value -c status | grep -q 'SHUTOFF'; do sleep 5; done # Migrate the node openstack server migrate --wait "$server_id" # Resize the VM openstack server resize confirm "$server_id" # Wait for the resize confirm to finish until openstack server show "$server_id" -f value -c status | grep -q 'SHUTOFF'; do sleep 5; done # Restart the VM openstack server start "$server_id" # Wait for the node to show up as Ready: until oc get node "$node_name" | grep -q "^${node_name}[[:space:]]\+Ready"; do sleep 5; done # Uncordon the node oc adm uncordon "$node_name" # Wait for cluster operators to stabilize until oc get co -o go-template='statuses: {{ range .items }}{{ range .status.conditions }}{{ if eq .type "Degraded" }}{{ if ne .status "False" }}DEGRADED{{ end }}{{ else if eq .type "Progressing"}}{{ if ne .status "False" }}PROGRESSING{{ end }}{{ else if eq .type "Available"}}{{ if ne .status "True" }}NOTAVAILABLE{{ end }}{{ end }}{{ end }}{{ end }}' | grep -qv '\(DEGRADED\|PROGRESSING\|NOTAVAILABLE\)'; do sleep 5; done
์คํฌ๋ฆฝํธ๊ฐ ์๋ฃ๋๋ฉด ์ปจํธ๋กค ํ๋ ์ธ ์์คํ ์ด ์ RHOSP ๋ ธ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋ฉ๋๋ค.
6.4. ๋ ธ๋๋น ์ต๋ Pod ์ ๊ด๋ฆฌ
OpenShift Container Platform์์๋ ๋ ธ๋์ ํ๋ก์ธ์ ์ฝ์ด ์, ํ๋ ์ ํ ๋๋ ๋ ๋ค์ ๋ฐ๋ผ ๋ ธ๋์์ ์คํํ ์ ์๋ Pod ์๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ ์ต์ ์ ๋ชจ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ ์ต์ ์ค ๋ ๋ฎ์ ๊ฐ์ด ๋ ธ๋์ Pod ์๋ฅผ ์ ํํฉ๋๋ค.
์ด ๊ฐ์ ์ด๊ณผํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- OpenShift Container Platform์ CPU ์ฌ์ฉ๋ฅ ์ฆ๊ฐ.
- Pod ์์ฝ ์๋ ์ ํ.
- ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์๋๋ฆฌ์ค ๋ฐ์.
- IP ์ฃผ์ ํ ์๋ชจ.
- ๋ฆฌ์์ค ๊ณผ๋ค ํ ๋น์ผ๋ก ์ธํ ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ์ ํ.
๋จ์ผ ์ปจํ ์ด๋๋ฅผ ๋ณด์ ํ๊ณ ์๋ Pod์ ๊ฒฝ์ฐ ์ค์ ๋ก๋ ์ปจํ ์ด๋ ๋ ๊ฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ ๋ฒ์งธ ์ปจํ ์ด๋๋ ์ค์ ์ปจํ ์ด๋๊ฐ ์์๋๊ธฐ ์ ์ ๋คํธ์ํน์ ์ค์ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Pod 10๊ฐ๋ฅผ ์คํํ๋ ๋ ธ๋๊ฐ ์ค์ ๋ก๋ ์ปจํ ์ด๋ 20๊ฐ๋ฅผ ์คํํฉ๋๋ค.
podsPerCore
๋งค๊ฐ๋ณ์๋ ๋
ธ๋์ ํ๋ก์ธ์ ์ฝ์ด ์์ ๋ฐ๋ผ ๋
ธ๋์์ ์คํํ ์ ์๋ Pod ์๋ฅผ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ก์ธ์ ์ฝ์ด๊ฐ 4๊ฐ์ธ ๋
ธ๋์์ podsPerCore
๊ฐ 10
์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๋
ธ๋์ ํ์ฉ๋๋ ์ต๋ Pod ์๋ 40์
๋๋ค.
maxPods
๋งค๊ฐ๋ณ์๋ ๋
ธ๋์ ์์ฑ๊ณผ ๊ด๊ณ์์ด ๋
ธ๋์์ ์คํํ ์ ์๋ Pod ์๋ฅผ ๊ณ ์ ๋ ๊ฐ์ผ๋ก ์ ํํฉ๋๋ค.
6.4.1. ๋ ธ๋ ๋น ์ต๋ pod ์ ๊ตฌ์ฑ
podsPerCore
๋ฐ maxPods
๋ ๋
ธ๋์ ์์ฝํ ์ ์๋ ์ต๋ Pod ์๋ฅผ ์ ์ดํฉ๋๋ค. ๋ ์ต์
์ ๋ชจ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ ์ต์
์ค ๋ ๋ฎ์ ๊ฐ์ด ๋
ธ๋์ Pod ์๋ฅผ ์ ํํฉ๋๋ค.
์๋ฅผ ๋ค์ด 4 ๊ฐ์ ํ๋ก์ธ์ ์ฝ์ด๊ฐ ์๋ ๋
ธ๋์์ podsPerCore
๊ฐ 10
์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๋
ธ๋์์ ํ์ฉ๋๋ ์ต๋ Pod ์๋ 40์
๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ตฌ์ฑํ ๋ ธ๋ ์ ํ์ ์ ์
MachineConfigPool
CRD์ ์ฐ๊ด๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.$ oc edit machineconfigpool <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit machineconfigpool worker
์ถ๋ ฅ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: creationTimestamp: "2022-11-16T15:34:25Z" generation: 4 labels: pools.operator.machineconfiguration.openshift.io/worker: "" 1 name: worker #...
- 1
- ๋ ์ด๋ธ์ด Labels ์๋์ ํ์๋ฉ๋๋ค.
์์ ์ ๋ณด๋ผ๋ฒจ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํค/๊ฐ ์์ ์ถ๊ฐํฉ๋๋ค.
$ oc label machineconfigpool worker custom-kubelet=small-pods
์ ์ฐจ
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ํ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค (CR)๋ฅผ ๋ง๋ญ๋๋ค.
max-pods
CR์ ์ค์ ์apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: set-max-pods 1 spec: machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" 2 kubeletConfig: podsPerCore: 10 3 maxPods: 250 4 #...
์ฐธ๊ณpodsPerCore
๋ฅผ0
์ผ๋ก ์ค์ ํ๋ฉด ์ด ์ ํ์ด ๋นํ์ฑํ๋ฉ๋๋ค.์์ ์์์
podsPerCore
์ ๊ธฐ๋ณธ๊ฐ์10
์ด๋ฉฐmaxPods
์ ๊ธฐ๋ณธ๊ฐ์250
์ ๋๋ค. ์ฆ, ๋ ธ๋์ 25 ๊ฐ ์ด์์ ์ฝ์ด๊ฐ ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋กpodsPerCore
๊ฐ ์ ํ ์์๊ฐ ๋ฉ๋๋ค.๋ค์ ๋ช ๋ น์ ์คํํ์ฌ CR์ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
๊ฒ์ฆ
MachineConfigPool
CRD๋ฅผ ๋์ดํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๋์ง ํ์ธํฉ๋๋ค. Machine Config Controller์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํํ๋ฉดUPDATING
์ด์True
๊ฐ ๋ณด๊ณ ๋ฉ๋๋ค.$ oc get machineconfigpools
์ถ๋ ฅ ์
NAME CONFIG UPDATED UPDATING DEGRADED master master-9cc2c72f205e103bb534 False False False worker worker-8cecd1236b33ee3f8a5e False True False
๋ณ๊ฒฝ์ด ์๋ฃ๋๋ฉด
UPDATED
์ด์True
๊ฐ ๋ณด๊ณ ๋ฉ๋๋ค.$ oc get machineconfigpools
์ถ๋ ฅ ์
NAME CONFIG UPDATED UPDATING DEGRADED master master-9cc2c72f205e103bb534 False True False worker worker-8cecd1236b33ee3f8a5e True False False
6.5. Node Tuning Operator ์ฌ์ฉ
Node Tuning Operator์ ๋ํด ์์๋ณด๊ณ , Node Tuning Operator๋ฅผ ์ฌ์ฉํ์ฌ Tuned ๋ฐ๋ชฌ์ ์ค์ผ์คํธ๋ ์ด์ ํ๊ณ ๋ ธ๋ ์์ค ํ๋์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ์์๋ด ๋๋ค.
Node Tuning Operator๋ TuneD ๋ฐ๋ชฌ์ ์ค์ผ์คํธ๋ ์ด์ ํ์ฌ ๋ ธ๋ ์์ค ํ๋์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ผ์ ์์ค์ ์ปค๋ ํ๋์ด ํ์ํฉ๋๋ค. Node Tuning Operator๋ ๋ ธ๋ ์์ค sysctls ์ฌ์ฉ์์๊ฒ ํตํฉ ๊ด๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉฐ ์ฌ์ฉ์์ ํ์์ ๋ฐ๋ผ ์ง์ ๋๋ ์ฌ์ฉ์ ์ ์ ํ๋์ ์ถ๊ฐํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
Operator๋ OpenShift Container Platform์ ์ปจํ ์ด๋ํ๋ TuneD ๋ฐ๋ชฌ์ Kubernetes ๋ฐ๋ชฌ ์ธํธ๋ก ๊ด๋ฆฌํฉ๋๋ค. ํด๋ฌ์คํฐ์์ ์คํ๋๋ ๋ชจ๋ ์ปจํ ์ด๋ํ๋ TuneD ๋ฐ๋ชฌ์ ์ฌ์ฉ์ ์ ์ ํ๋ ์ฌ์์ด ๋ฐ๋ชฌ์ด ์ดํดํ ์ ์๋ ํ์์ผ๋ก ์ ๋ฌ๋๋๋ก ํฉ๋๋ค. ๋ฐ๋ชฌ์ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ๋ ธ๋๋น ํ๋์ฉ ์คํ๋ฉ๋๋ค.
์ปจํ ์ด๋ํ๋ TuneD ๋ฐ๋ชฌ์ ํตํด ์ ์ฉ๋๋ ๋ ธ๋ ์์ค ์ค์ ์ ํ๋กํ ๋ณ๊ฒฝ์ ํธ๋ฆฌ๊ฑฐํ๋ ์ด๋ฒคํธ ์ ๋๋ ์ปจํ ์ด๋ํ๋ TuneD ๋ฐ๋ชฌ์ด ์ข ๋ฃ ์ ํธ๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํ์ฌ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๋ ๋กค๋ฐฑ๋ฉ๋๋ค.
๋ฒ์ 4.1 ์ด์์์๋ Node Tuning Operator๊ฐ ํ์ค OpenShift Container Platform ์ค์น์ ํฌํจ๋์ด ์์ต๋๋ค.
6.5.1. Node Tuning Operator ์ฌ์ ์์ ์ก์ธ์ค
์ด ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ Node Tuning Operator ์ฌ์ ์์ ์ก์ธ์คํ์ญ์์ค.
์ ์ฐจ
๋ค์์ ์คํํฉ๋๋ค.
$ oc get Tuned/default -o yaml -n openshift-cluster-node-tuning-operator
๊ธฐ๋ณธ CR์ OpenShift Container Platform ํ๋ซํผ์ ํ์ค ๋ ธ๋ ์์ค ํ๋์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฒ์ด๋ฉฐ Operator ๊ด๋ฆฌ ์ํ๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ์๋ง ์์ ํ ์ ์์ต๋๋ค. Operator๋ ๊ธฐ๋ณธ CR์ ๋ํ ๋ค๋ฅธ ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฎ์ด์๋๋ค. ์ฌ์ฉ์ ์ ์ ํ๋์ ๊ฒฝ์ฐ ๊ณ ์ ํ Tuned CR์ ์์ฑํฉ๋๋ค. ์๋ก ์์ฑ๋ CR์ ๋ ธ๋ ๋๋ Pod ๋ผ๋ฒจ ๋ฐ ํ๋กํ ์ฐ์ ์์์ ๋ฐ๋ผ OpenShift Container Platform ๋ ธ๋์ ์ ์ฉ๋ ๊ธฐ๋ณธ CR ๋ฐ ์ฌ์ฉ์ ์ ์ ํ๋๊ณผ ๊ฒฐํฉ๋ฉ๋๋ค.
ํน์ ์ํฉ์์๋ Pod ๋ผ๋ฒจ์ ๋ํ ์ง์์ด ํ์ํ ํ๋์ ์๋์ผ๋ก ์ ๊ณตํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ผ ์ ์์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๊ถ์ฅ๋์ง ์์ผ๋ฉฐ ํนํ ๋๊ท๋ชจ ํด๋ฌ์คํฐ์์๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ธฐ๋ณธ Tuned CR์ Pod ๋ผ๋ฒจ์ด ์ผ์น๋์ง ์์ ์ํ๋ก ์ ๊ณต๋ฉ๋๋ค. Pod ๋ผ๋ฒจ์ด ์ผ์น๋ ์ํ๋ก ์ฌ์ฉ์ ์ ์ ํ๋กํ์ด ์์ฑ๋๋ฉด ํด๋น ์์ ์ ์ด ๊ธฐ๋ฅ์ด ํ์ฑํ๋ฉ๋๋ค. Pod ๋ผ๋ฒจ ๊ธฐ๋ฅ์ Node Tuning Operator์ ํฅํ ๋ฒ์ ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ ์์ต๋๋ค.
6.5.2. ์ฌ์ฉ์ ์ ์ ํ๋ ์ฌ์
Operator์ CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์๋ ๋ ๊ฐ์ง ์ฃผ์ ์น์
์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์น์
์ธ profile:
์ TuneD ํ๋กํ ๋ฐ ํด๋น ์ด๋ฆ์ ๋ชฉ๋ก์
๋๋ค. ๋ ๋ฒ์งธ์ธ recommend:
์ ํ๋กํ ์ ํ ๋
ผ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค.
์ฌ๋ฌ ์ฌ์ฉ์ ์ ์ ํ๋ ์ฌ์์ Operator์ ๋ค์์คํ์ด์ค์ ์ฌ๋ฌ CR๋ก ์กด์ฌํ ์ ์์ต๋๋ค. ์๋ก์ด CR์ ์กด์ฌ ๋๋ ์ค๋๋ CR์ ์ญ์ ๋ Operator์์ ํ์ง๋ฉ๋๋ค. ๊ธฐ์กด์ ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ํ๋ ์ฌ์์ด ๋ณํฉ๋๊ณ ์ปจํ ์ด๋ํ๋ TuneD ๋ฐ๋ชฌ์ ํด๋น ์ค๋ธ์ ํธ๊ฐ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
๊ด๋ฆฌ ์ํ
Operator ๊ด๋ฆฌ ์ํ๋ ๊ธฐ๋ณธ Tuned CR์ ์กฐ์ ํ์ฌ ์ค์ ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Operator๋ Managed ์ํ์ด๋ฉฐ ๊ธฐ๋ณธ Tuned CR์๋ spec.managementState
ํ๋๊ฐ ์์ต๋๋ค. Operator ๊ด๋ฆฌ ์ํ์ ์ ํจํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Managed: ๊ตฌ์ฑ ๋ฆฌ์์ค๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด Operator๊ฐ ํด๋น ํผ์ฐ์ฐ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- Unmanaged: Operator๊ฐ ๊ตฌ์ฑ ๋ฆฌ์์ค์ ๋ํ ๋ณ๊ฒฝ์ ๋ฌด์ํฉ๋๋ค.
- Removed: Operator๊ฐ ํ๋ก๋น์ ๋ํ ํด๋น ํผ์ฐ์ฐ์ ๋ฐ ๋ฆฌ์์ค๋ฅผ Operator๊ฐ ์ ๊ฑฐํฉ๋๋ค.
ํ๋กํ ๋ฐ์ดํฐ
profile:
์น์
์๋ TuneD ํ๋กํ ๋ฐ ํด๋น ์ด๋ฆ์ด ๋์ด๋ฉ๋๋ค.
profile: - name: tuned_profile_1 data: | # TuneD profile specification [main] summary=Description of tuned_profile_1 profile [sysctl] net.ipv4.ip_forward=1 # ... other sysctl's or other TuneD daemon plugins supported by the containerized TuneD # ... - name: tuned_profile_n data: | # TuneD profile specification [main] summary=Description of tuned_profile_n profile # tuned_profile_n profile settings
๊ถ์ฅ ํ๋กํ
profile:
์ ํ ๋
ผ๋ฆฌ๋ CR์ recommend:
์น์
์ ์ํด ์ ์๋ฉ๋๋ค. recommend:
์น์
์ ์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ํ๋กํ์ ๊ถ์ฅํ๋ ํญ๋ชฉ์ ๋ชฉ๋ก์
๋๋ค.
recommend: <recommend-item-1> # ... <recommend-item-n>
๋ชฉ๋ก์ ๊ฐ๋ณ ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- machineConfigLabels: 1 <mcLabels> 2 match: 3 <match> 4 priority: <priority> 5 profile: <tuned_profile_name> 6 operand: 7 debug: <bool> 8
- 1
- ์ ํ ์ฌํญ์ ๋๋ค.
- 2
- ํค/๊ฐ
MachineConfig
๋ผ๋ฒจ ์ฌ์ ์ ๋๋ค. ํค๋ ๊ณ ์ ํด์ผ ํฉ๋๋ค. - 3
- ์๋ตํ๋ฉด ์ฐ์ ์์๊ฐ ๋์ ํ๋กํ์ด ๋จผ์ ์ผ์น๋๊ฑฐ๋
machineConfigLabels
๊ฐ ์ค์ ๋์ด ์์ง ์์ผ๋ฉด ํ๋กํ์ด ์ผ์นํ๋ ๊ฒ์ผ๋ก ๊ฐ์ ํฉ๋๋ค. - 4
- ์ ํ์ฌํญ ๋ชฉ๋ก์ ๋๋ค.
- 5
- ํ๋กํ ์์ ์ง์ ์ฐ์ ์์์ ๋๋ค. ์ซ์๊ฐ ์์์๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค(
0
์ด ๊ฐ์ฅ ๋์ ์ฐ์ ์์์). - 6
- ์ผ์น์ ์ ์ฉํ TuneD ํ๋กํ์ ๋๋ค. ์๋ฅผ ๋ค์ด
tuned_profile_1
์ด ์์ต๋๋ค. - 7
- ์ ํ์ ํผ์ฐ์ฐ์ ๊ตฌ์ฑ์ ๋๋ค.
- 8
- TuneD ๋ฐ๋ชฌ์ ๋๋ฒ๊น ์ ์ผ๊ฑฐ๋ ๋๋๋ค. off์ ๊ฒฝ์ฐ on ๋๋
false
์ ๊ฒฝ์ฐ ์ต์ ์ดtrue
์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์false
์ ๋๋ค.
<match>
๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ๊ท์ ์ผ๋ก ์ ์๋๋ ์ ํ์ฌํญ ๋ชฉ๋ก์
๋๋ค.
- label: <label_name> 1 value: <label_value> 2 type: <label_type> 3 <match> 4
- 1
- ๋ ธ๋ ๋๋ Pod ๋ผ๋ฒจ ์ด๋ฆ์ ๋๋ค.
- 2
- ์ ํ์ฌํญ ๋ ธ๋ ๋๋ Pod ๋ผ๋ฒจ ๊ฐ์ ๋๋ค. ์๋ตํ๋ฉด
<label_name>
์ด ์๊ธฐ ๋๋ฌธ์ ์ผ์น ์กฐ๊ฑด์ ์ถฉ์กฑํฉ๋๋ค. - 3
- ์ ํ์ฌํญ ์ค๋ธ์ ํธ ์ ํ(
node
๋๋pod
)์ ๋๋ค. ์๋ตํ๋ฉดnode
๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. - 4
- ์ ํ์ฌํญ
<match>
๋ชฉ๋ก์ ๋๋ค.
<match>
๋ฅผ ์๋ตํ์ง ์์ผ๋ฉด ๋ชจ๋ ์ค์ฒฉ <match>
์น์
๋ true
๋ก ํ๊ฐ๋์ด์ผ ํฉ๋๋ค. ์๋ตํ๋ฉด false
๋ก ๊ฐ์ ํ๊ณ ํด๋น <match>
์น์
์ด ์๋ ํ๋กํ์ ์ ์ฉํ์ง ์๊ฑฐ๋ ๊ถ์ฅํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ค์ฒฉ(ํ์ <match>
์น์
)์ ๋
ผ๋ฆฌ AND ์ฐ์ฐ์ ์ญํ ์ ํฉ๋๋ค. ๋ฐ๋๋ก <match>
๋ชฉ๋ก์ ํญ๋ชฉ์ด ์ผ์นํ๋ฉด ์ ์ฒด <match>
๋ชฉ๋ก์ด true
๋ก ํ๊ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ชฉ๋ก์ด ๋
ผ๋ฆฌ OR ์ฐ์ฐ์ ์ญํ ์ ํฉ๋๋ค.
machineConfigLabels
๊ฐ ์ ์๋๋ฉด ์ง์ ๋ recommend:
๋ชฉ๋ก ํญ๋ชฉ์ ๋ํด ๋จธ์ ๊ตฌ์ฑ ํ ๊ธฐ๋ฐ ์ผ์น๊ฐ ์ค์ ๋ฉ๋๋ค. <mcLabels>
๋ ๋จธ์ ๊ตฌ์ฑ์ ๋ผ๋ฒจ์ ์ง์ ํฉ๋๋ค. ๋จธ์ ๊ตฌ์ฑ์ <tuned_profile_name>
ํ๋กํ์ ๋ํด ์ปค๋ ๋ถํ
๋งค๊ฐ๋ณ์์ ๊ฐ์ ํธ์คํธ ์ค์ ์ ์ ์ฉํ๊ธฐ ์ํด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ <mcLabels>
์ ์ผ์นํ๋ ๋จธ์ ๊ตฌ์ฑ ์ ํ๊ธฐ๊ฐ ์๋ ๋ชจ๋ ๋จธ์ ๊ตฌ์ฑ ํ์ ์ฐพ๊ณ ๋จธ์ ๊ตฌ์ฑ ํ์ด ํ ๋น๋ ๋ชจ๋ ๋
ธ๋์์ <tuned_profile_name>
ํ๋กํ์ ์ค์ ํ๋ ์์
์ด ํฌํจ๋ฉ๋๋ค. ๋ง์คํฐ ๋ฐ ์์
์ ์ญํ ์ด ๋ชจ๋ ์๋ ๋
ธ๋๋ฅผ ๋์์ผ๋ก ํ๋ ค๋ฉด ๋ง์คํฐ ์ญํ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ชฉ๋ก ํญ๋ชฉ match
๋ฐ machineConfigLabels
๋ ๋
ผ๋ฆฌ OR ์ฐ์ฐ์๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค. match
ํญ๋ชฉ์ ๋จ๋ฝ ๋ฐฉ์์ผ๋ก ๋จผ์ ํ๊ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ true
๋ก ํ๊ฐ๋๋ฉด machineConfigLabels
ํญ๋ชฉ์ด ๊ณ ๋ ค๋์ง ์์ต๋๋ค.
๋จธ์ ๊ตฌ์ฑ ํ ๊ธฐ๋ฐ ์ผ์น๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ผํ ํ๋์จ์ด ๊ตฌ์ฑ์ ๊ฐ์ง ๋ ธ๋๋ฅผ ๋์ผํ ๋จธ์ ๊ตฌ์ฑ ํ๋ก ๊ทธ๋ฃนํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด์ง ์์ผ๋ฉด TuneD ํผ์ฐ์ฐ์๊ฐ ๋์ผํ ๋จธ์ ๊ตฌ์ฑ ํ์ ๊ณต์ ํ๋ ๋ ๊ฐ ์ด์์ ๋ ธ๋์ ๋ํด ์ถฉ๋ํ๋ ์ปค๋ ๋งค๊ฐ๋ณ์๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
์: ๋ ธ๋ ๋๋ Pod ๋ผ๋ฒจ ๊ธฐ๋ฐ ์ผ์น
- match: - label: tuned.openshift.io/elasticsearch match: - label: node-role.kubernetes.io/master - label: node-role.kubernetes.io/infra type: pod priority: 10 profile: openshift-control-plane-es - match: - label: node-role.kubernetes.io/master - label: node-role.kubernetes.io/infra priority: 20 profile: openshift-control-plane - priority: 30 profile: openshift-node
์์ CR์ ์ปจํ
์ด๋ํ๋ TuneD ๋ฐ๋ชฌ์ ํ๋กํ ์ฐ์ ์์์ ๋ฐ๋ผ recommended.conf
ํ์ผ๋ก ๋ณํ๋ฉ๋๋ค. ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋กํ(10
)์ด openshift-control-plane-es
์ด๋ฏ๋ก ์ด ํ๋กํ์ ์ฒซ ๋ฒ์งธ๋ก ๊ณ ๋ คํฉ๋๋ค. ์ง์ ๋ ๋
ธ๋์์ ์คํ๋๋ ์ปจํ
์ด๋ํ๋ TuneD ๋ฐ๋ชฌ์ tuned.openshift.io/elasticsearch
๋ผ๋ฒจ์ด ์ค์ ๋ ๋์ผํ ๋
ธ๋์์ ์คํ๋๋ Pod๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. ์๋ ๊ฒฝ์ฐ ์ ์ฒด <match>
์น์
์ด false
๋ก ํ๊ฐ๋ฉ๋๋ค. ๋ผ๋ฒจ์ด ์๋ Pod๊ฐ ์๋ ๊ฒฝ์ฐ <match>
์น์
์ true
๋ก ํ๊ฐํ๋ ค๋ฉด ๋
ธ๋ ๋ผ๋ฒจ๋ node-role.kubernetes.io/master
๋๋ node-role.kubernetes.io/infra
์ฌ์ผ ํฉ๋๋ค.
์ฐ์ ์์๊ฐ 10
์ธ ํ๋กํ์ ๋ผ๋ฒจ์ด ์ผ์นํ๋ฉด openshift-control-plane-es
ํ๋กํ์ด ์ ์ฉ๋๊ณ ๋ค๋ฅธ ํ๋กํ์ ๊ณ ๋ ค๋์ง ์์ต๋๋ค. ๋
ธ๋/Pod ๋ผ๋ฒจ ์กฐํฉ์ด ์ผ์นํ์ง ์์ผ๋ฉด ๋ ๋ฒ์งธ๋ก ๋์ ์ฐ์ ์์ ํ๋กํ(openshift-control-plane
)์ด ๊ณ ๋ ค๋ฉ๋๋ค. ์ปจํ
์ด๋ํ๋ TuneD Pod๊ฐ node-role.kubernetes.io/master
๋๋ node-role.kubernetes.io/infra
. ๋ผ๋ฒจ์ด ์๋ ๋
ธ๋์์ ์คํ๋๋ ๊ฒฝ์ฐ ์ด ํ๋กํ์ด ์ ์ฉ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, openshift-node
ํ๋กํ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ 30
์
๋๋ค. ์ด ํ๋กํ์๋ <match>
์น์
์ด ์์ผ๋ฏ๋ก ํญ์ ์ผ์นํฉ๋๋ค. ์ง์ ๋ ๋
ธ๋์์ ์ฐ์ ์์๊ฐ ๋ ๋์ ๋ค๋ฅธ ํ๋กํ์ด ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ openshift-node
ํ๋กํ์ ์ค์ ํ๋ ๋ฐ catch-all ํ๋กํ ์ญํ ์ ํฉ๋๋ค.
![๊ฒฐ์ ์ํฌํ๋ก](https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.10-Nodes-ko-KR/images/b350c395f7c7262cec5e5d9d7404ce73/node-tuning-operator-workflow-revised.png)
์: ๋จธ์ ๊ตฌ์ฑ ํ ๊ธฐ๋ฐ ์ผ์น
apiVersion: tuned.openshift.io/v1 kind: Tuned metadata: name: openshift-node-custom namespace: openshift-cluster-node-tuning-operator spec: profile: - data: | [main] summary=Custom OpenShift node profile with an additional kernel parameter include=openshift-node [bootloader] cmdline_openshift_node_custom=+skew_tick=1 name: openshift-node-custom recommend: - machineConfigLabels: machineconfiguration.openshift.io/role: "worker-custom" priority: 20 profile: openshift-node-custom
๋ ธ๋ ์ฌ๋ถํ ์ ์ต์ํํ๋ ค๋ฉด ๋จธ์ ๊ตฌ์ฑ ํ์ ๋ ธ๋ ์ ํ๊ธฐ์ ์ผ์นํ๋ ๋ผ๋ฒจ๋ก ๋์ ๋ ธ๋์ ๋ผ๋ฒจ์ ์ง์ ํ ํ ์์ Tuned CR์ ์์ฑํ๊ณ ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉ์ ์ ์ ๋จธ์ ๊ตฌ์ฑ ํ์ ์์ฑํฉ๋๋ค.
6.5.3. ํด๋ฌ์คํฐ์ ์ค์ ๋ ๊ธฐ๋ณธ ํ๋กํ
๋ค์์ ํด๋ฌ์คํฐ์ ์ค์ ๋ ๊ธฐ๋ณธ ํ๋กํ์ ๋๋ค.
apiVersion: tuned.openshift.io/v1 kind: Tuned metadata: name: default namespace: openshift-cluster-node-tuning-operator spec: recommend: - profile: "openshift-control-plane" priority: 30 match: - label: "node-role.kubernetes.io/master" - label: "node-role.kubernetes.io/infra" - profile: "openshift-node" priority: 40
OpenShift Container Platform 4.9๋ถํฐ ๋ชจ๋ OpenShift TuneD ํ๋กํ์ด TuneD ํจํค์ง์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. oc exec
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ํ๋กํ์ ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค.
$ oc exec $tuned_pod -n openshift-cluster-node-tuning-operator -- find /usr/lib/tuned/openshift{,-control-plane,-node} -name tuned.conf -exec grep -H ^ {} \;
6.5.4. ์ง์๋๋ TuneD ๋ฐ๋ชฌ ํ๋ฌ๊ทธ์ธ
Tuned CR์ profile:
์น์
์ ์ ์๋ ์ฌ์ฉ์ ์ ์ ํ๋กํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ [main]
์น์
์ ์ ์ธํ ๋ค์ TuneD ํ๋ฌ๊ทธ์ธ์ด ์ง์๋ฉ๋๋ค.
- audio
- cpu
- disk
- eeepc_she
- modules
- mounts
- net
- scheduler
- scsi_host
- selinux
- sysctl
- sysfs
- usb
- video
- vm
- bootloader
์ผ๋ถ ํ๋ฌ๊ทธ์ธ์์ ์ ๊ณตํ๋ ๋์ ํ๋ ๊ธฐ๋ฅ์ ์ง์๋์ง ์์ต๋๋ค. ๋ค์ TuneD ํ๋ฌ๊ทธ์ธ์ ํ์ฌ ์ง์๋์ง ์์ต๋๋ค.
- script
- systemd
TuneD ๋ถํธ๋ก๋ ํ๋ฌ๊ทธ์ธ์ RHCOS(Red Hat Enterprise Linux CoreOS) ์์ ์ ๋ ธ๋๋ง ์ง์ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
6.6. Poison Pill Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ์์
Poison Pill Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ ์ ๋ ธ๋๋ฅผ ์๋์ผ๋ก ์ฌ๋ถํ ํ ์ ์์ต๋๋ค. ์ด ์ ๋ฐ์ดํธ ์ ๋ต์์๋ ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ด ํ์ ๋ฐ ReadWriteOnce (RWO) ๋ณผ๋ฅจ์ ์ต์ํํ๊ณ ์ผ์์ ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ปดํจํ ์ฉ๋์ ๋ณต์ํฉ๋๋ค.
6.6.1. Poison Pill Operator ์ ๋ณด
Poison Pill Operator๋ ํด๋ฌ์คํฐ ๋
ธ๋์์ ์คํ๋๋ฉฐ ๋น์ ์์ผ๋ก ์๋ณ๋๋ ๋
ธ๋๋ฅผ ์ฌ๋ถํ
ํฉ๋๋ค. Operator๋ MachineHealthCheck
์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์์ ๋
ธ๋์ ์ํ๋ฅผ ๊ฐ์งํฉ๋๋ค. ๋
ธ๋๊ฐ ๋น์ ์์ผ๋ก ์๋ณ๋๋ฉด MachineHealthCheck
๋ฆฌ์์ค์์ PoisonPillRemediation
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํ์ฌ Poison Pill Operator๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
Poison Pill Operator๋ ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ดํ์์ ์ต์ํํ๊ณ ์ผ์์ ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ปดํจํ ์ฉ๋์ ๋ณต์ํฉ๋๋ค. ์ค์น ๊ด๋ฆฌ์ ํ๋ก๋น์ ๋ ์ธํ๋ผ ๋๋ ์ฌ์ฉ์ ํ๋ก๋น์ ๋ ์ธํ๋ผ์ ๊ฐ์ ํด๋ฌ์คํฐ ์ค์น ์ ํ์ ๊ด๊ณ์์ด IPMI ๋๋ API์ ๊ฐ์ ๊ด๋ฆฌ ์ธํฐํ์ด์ค์ ๊ด๊ณ์์ด ์ด Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ํ๋ก๋น์ ๋ํ ์ ์์ต๋๋ค.
6.6.1.1. Poison Pill Operator ์ค์ ์ดํด
Poison Pill Operator๋ Poison Pill Operator์ ๋ค์์คํ์ด์ค์์ poison-pill-config
๋ผ๋ ์ด๋ฆ์ผ๋ก PoisonPillConfig
CR์ ์์ฑํฉ๋๋ค. ์ด CR์ ํธ์งํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Poison Pill Operator์ ๋ํ ์ CR์ ์์ฑํ ์ ์์ต๋๋ค.
PoisonPillConfig
CR์ ๋ณ๊ฒฝ์ผ๋ก Poison Pill ๋ฐ๋ชฌ ์ธํธ๋ฅผ ๋ค์ ์์ฑํฉ๋๋ค.
PoisonPillConfig
CR์ ๋ค์ YAML ํ์ผ๊ณผ ์ ์ฌํฉ๋๋ค.
apiVersion: poison-pill.medik8s.io/v1alpha1 kind: PoisonPillConfig metadata: name: poison-pill-config namespace: openshift-operators spec: safeTimeToAssumeNodeRebootedSeconds: 180 1 watchdogFilePath: /test/watchdog1 2 isSoftwareRebootEnabled: true 3 apiServerTimeout: 15s 4 apiCheckInterval: 5s 5 maxApiErrorThreshold: 3 6 peerApiServerTimeout: 5s 7 peerDialTimeout: 5s 8 peerRequestTimeout: 5s 9 peerUpdateInterval: 15m 10
- 1
- surviving ํผ์ด์ ์๊ฐ ์ด๊ณผ ๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด Operator์์ ๋น์ ์ ๋ ธ๋๊ฐ ์ฌ๋ถํ ๋์๋ค๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค. Operator๋ ์ด ๊ฐ์ ํํ๊ฐ์ ์๋์ผ๋ก ๊ณ์ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋ ธ๋์ ๋ค๋ฅธ ์์น๋ ํ์์์์ด ์๋ ๊ฒฝ์ฐ ์ด ๊ฐ์ ๋ ๋์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
- 2
- ๋ ธ๋์์ ์์น๋ ์ฅ์น์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค. ์์น๋ ์ฅ์น์ ์๋ชป๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ๋ฉด Poison Pill Operator์์ softdog ์ฅ์น ๊ฒฝ๋ก๋ฅผ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค.
์์น๋ ์ฅ์น๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ
PoisonPillConfig
CR์ ์ํํธ์จ์ด ์ฌ๋ถํ ์ ์ฌ์ฉํฉ๋๋ค. - 3
- ๋น์ ์ ๋ ธ๋์ ์ํํธ์จ์ด ์ฌ๋ถํ ์ ํ์ฑํํ๋ ค๋ฉด ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์
SoftwareRebootEnabled๊ฐ
true
๋ก ์ค์ ๋ฉ๋๋ค. ์ํํธ์จ์ด ์ฌ๋ถํ ์ ๋นํ์ฑํํ๋ ค๋ฉด ๋งค๊ฐ๋ณ์ ๊ฐ์false
๋ก ์ค์ ํฉ๋๋ค. - 4
- ๊ฐ API ์๋ฒ์์ ์ฐ๊ฒฐ์ ํ์ธํ๋ ค๋ฉด ์๊ฐ ์ด๊ณผ ๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค. ์ด ๊ธฐ๊ฐ์ด ์ง๋๋ฉด Operator๊ฐ ์์ ์ ์์ํฉ๋๋ค.
- 5
- ๊ฐ API ์๋ฒ์์ ์ฐ๊ฒฐ์ ํ์ธํ๋ ๋น๋๋ฅผ ์ง์ ํฉ๋๋ค.
- 6
- ์๊ณ๊ฐ์ ์ง์ ํฉ๋๋ค. ์ด ์๊ณ๊ฐ์ ๋๋ฌํ๋ฉด ๋ ธ๋๊ฐ ํผ์ด์ ์ฐ๊ฒฐํ๊ธฐ ์์ํฉ๋๋ค.
- 7
- ํผ์ด๊ฐ API ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ ์๊ฐ ์ด๊ณผ ๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค.
- 8
- ํผ์ด์์ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ฐ ํ์ํ ์๊ฐ ์ ํ์ ์ง์ ํฉ๋๋ค.
- 9
- ํผ์ด์์ ์๋ต์ ๊ฐ์ ธ์ค๋ ค๋ฉด ์๊ฐ ์ ํ ๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค.
- 10
- ํผ์ด ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ ๋น๋๋ฅผ ์ง์ ํฉ๋๋ค(์: IP ์ฃผ์).
6.6.1.2. Poison Pill Remediation ํ ํ๋ฆฟ ๊ตฌ์ฑ ์ดํด
๋ํ Poison Pill Operator๋ Poison Pill Operator ๋ค์ ์คํ์ด์ค์ PoisonPillRemediationTemplate
CR์ ์์ฑํฉ๋๋ค. ์ด CR์ ๋
ธ๋์ ๋ํ ์์ ์ ๋ต์ ์ ์ํฉ๋๋ค.
๊ธฐ๋ณธ ์์ ์ ๋ต์ ๋
ธ๋
์ค๋ธ์ ํธ๋ฅผ ์ ๊ฑฐํ๋ NodeDeletion
์
๋๋ค. OpenShift Container Platform 4.10์์ Poison Pill Operator์๋ ResourceDeletion
์ด๋ผ๋ ์๋ก์ด ์์ ์ ๋ต์ด ๋์
๋์์ต๋๋ค. ResourceDeletion
์์ ์ ๋ต์์๋ node
์ค๋ธ์ ํธ๊ฐ ์๋ ๋
ธ๋์ Pod ๋ฐ ๊ด๋ จ ๋ณผ๋ฅจ ์ฐ๊ฒฐ์ ์ ๊ฑฐํฉ๋๋ค. ์ด ์ ๋ต์ ์ํฌ๋ก๋๋ฅผ ๋ ๋นจ๋ฆฌ ๋ณต๊ตฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
PoisonPillRemediationTemplate
CR์ ๋ค์ YAML ํ์ผ๊ณผ ์ ์ฌํฉ๋๋ค.
apiVersion: poison-pill.medik8s.io/v1alpha1
kind: PoisonPillRemediationTemplate
metadata:
creationTimestamp: "2022-03-02T08:02:40Z"
generation: 1
name: poison-pill-default-template
namespace: openshift-operators
resourceVersion: "596469"
uid: 5d29e437-c485-48fa-ba9e-0354649afd31
spec:
template:
spec:
remediationStrategy: NodeDeletion 1
- 1
- ์์ ์ ๋ต์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ ์์ ์ ๋ต์
NodeDeletion
์ ๋๋ค.
6.6.1.3. ์์น๋ ์ฅ์น ์ ๋ณด
์์น๋ ์ฅ์น๋ ๋ค์ ์ค ํ๋์ผ ์ ์์ต๋๋ค.
- ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌ๋๋๋ ํ๋์จ์ด ์ฅ์น
- ์ ์ด ๋์ ํธ์คํธ์ ์ ์์ ๊ณต์ ํ๋ ํ๋์จ์ด ์ฅ์น
-
์ํํธ์จ์ด ๋๋
softdog
์์ ๊ตฌํ๋ ๊ฐ์ ์ฅ์น
ํ๋์จ์ด watchdog ๋ฐ softdog
์ฅ์น์๋ ๊ฐ๊ฐ ์ ์ ๋๋ ์ํํธ์จ์ด ํ์ด๋จธ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์์น๋
์ฅ์น๋ ์ค๋ฅ ์ํ๊ฐ ๊ฐ์ง๋ ๋ ์์คํ
์ด ์์ ํ ์ํ๊ฐ ๋๋๋ก ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํด๋ฌ์คํฐ๊ฐ ์ ์ ์ํ์์ ์ฆ๋ช
ํ๊ธฐ ์ํด ์์น๋
ํ์ด๋จธ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ค์ ํด์ผ ํฉ๋๋ค. ์ด ํ์ด๋จธ๋ ๊ต์ฐฉ ์ํ, CPU ๋ถ์กฑ, ๋คํธ์ํฌ ๋๋ ๋์คํฌ ์ก์ธ์ค ์์ค๊ณผ ๊ฐ์ ์ค๋ฅ ์ํ๋ก ์ธํด ๋ฐ์ํ ์ ์์ต๋๋ค. ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋๋ฉด ์์น๋
์ฅ์น๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ฅ์น๊ฐ ๋
ธ๋์ ๊ฐ์ ์ฌ์ค์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
ํ๋์จ์ด ์์น๋
์ฅ์น๋ softdog
์ฅ์น๋ณด๋ค ๋ ์์ ์ ์
๋๋ค.
6.6.1.3.1. ์์น๋ ์ฅ์น๋ฅผ ์ฌ์ฉํ์ฌ Poison Pill Operator ๋์ ์ดํด
Poison Pill Operator๋ ์กด์ฌํ๋ ์์น๋ ์ฅ์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ ์ ๋ต์ ๊ฒฐ์ ํฉ๋๋ค.
ํ๋์จ์ด ์์น๋
์ฅ์น๊ฐ ๊ตฌ์ฑ๋์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ Operator๋ ์ด๋ฅผ ์์ ์ ์ํด ์ฌ์ฉํฉ๋๋ค. ํ๋์จ์ด ์์น๋
์ฅ์น๊ฐ ๊ตฌ์ฑ๋์ง ์์ ๊ฒฝ์ฐ Operator๋ ์์ ์ ์ํด softdog
์ฅ์น๋ฅผ ํ์ฑํํ๊ณ ์ฌ์ฉํฉ๋๋ค.
์์คํ ๋๋ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์์น๋ ์ฅ์น๊ฐ ๋ชจ๋ ์ง์๋์ง ์๋ ๊ฒฝ์ฐ Operator๋ ์ํํธ์จ์ด ์ฌ๋ถํ ์ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
6.6.2. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Poison Pill Operator ์ค์น
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Poison Pill Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์์ Operator โ OperatorHub๋ก ์ด๋ํฉ๋๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅํ Operator ๋ชฉ๋ก์์ Poison Pill Operator๋ฅผ ๊ฒ์ํ ๋ค์ ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
๊ธฐ๋ณธ ์ค์น ๋ชจ๋ ๋ฐ ๋ค์์คํ์ด์ค ๋ฅผ ๊ณ์ ์ ํํ์ฌ Operator๊ฐ
openshift-operators
๋ค์์คํ์ด์ค์ ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค. - ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒ์ฆ
์ค์น์ ์ฑ๊ณตํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
- Operator โ ์ค์น๋ Operator ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
Operator๊ฐ
openshift-operators
๋ค์์คํ์ด์ค์ ์ค์น๋์ด ์๊ณ ํด๋น ์ํ๋Succeeded
์ธ์ง ํ์ธํฉ๋๋ค.
Operator๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ค์น๋์ง ์์ ๊ฒฝ์ฐ ๋ค์์ ์ํํ์ญ์์ค.
-
Operator โ ์ค์น๋ Operator ํ์ด์ง๋ก ์ด๋ํ์ฌ
Status
์ด์ ์ค๋ฅ ๋๋ ์คํจ๊ฐ ์๋์ง ์ ๊ฒํฉ๋๋ค. -
์ํฌ๋ก๋ โ Pod ํ์ด์ง๋ก ์ด๋ํ์ฌ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ๋
poison-pill-controller-manager
ํ๋ก์ ํธ์์ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
6.6.3. CLI๋ฅผ ์ฌ์ฉํ์ฌ Poison Pill Operator ์ค์น
OpenShift CLI(oc
)๋ฅผ ์ฌ์ฉํ์ฌ Poison Pill Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์์ฒด ๋ค์์คํ์ด์ค ๋๋ openshift-operators
๋ค์์คํ์ด์ค์ Poison Pill Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์์ฒด ๋ค์์คํ์ด์ค์ Operator๋ฅผ ์ค์นํ๋ ค๋ฉด ์ ์ฐจ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
openshift-operators
๋ค์์คํ์ด์ค์ Operator๋ฅผ ์ค์นํ๋ ค๋ฉด ์ Namespace
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค) ๋ฐ OperatorGroup
CR์ ์์ฑํ๋ ๋จ๊ณ๊ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฐจ์ 3๋จ๊ณ๋ก ๊ฑด๋๋ฐ์ญ์์ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift CLI(
oc
)๋ฅผ ์ค์นํฉ๋๋ค. -
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
Poison Pill Operator์ ๋ํ
๋ค์์คํ์ด์ค
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค.Namespace
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:poison-pill-namespace.yaml
).apiVersion: v1 kind: Namespace metadata: name: poison-pill
๋ค์์คํ์ด์ค
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f poison-pill-namespace.yaml
OperatorGroup
CR์ ์์ฑํฉ๋๋ค.OperatorGroup
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:poison-pill-operator-group.yaml
).apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: poison-pill-manager namespace: poison-pill
OperatorGroup
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f poison-pill-operator-group.yaml
์๋ธ์คํฌ๋ฆฝ์
CR์ ์์ฑํฉ๋๋ค.์๋ธ์คํฌ๋ฆฝ์
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:poison-pill-subscription.yaml
).apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: poison-pill-manager namespace: poison-pill 1 spec: channel: stable installPlanApproval: Manual 2 name: poison-pill-manager source: redhat-operators sourceNamespace: openshift-marketplace package: poison-pill-manager
- 1
- Poison Pill Operator๋ฅผ ์ค์นํ
๋ค์์คํ์ด์ค
๋ฅผ ์ง์ ํฉ๋๋ค.openshift-operators
๋ค์์คํ์ด์ค์ Poison Pill Operator๋ฅผ ์ค์นํ๋ ค๋ฉดSubscription
CR์์openshift-operators
๋ฅผ ์ง์ ํฉ๋๋ค. - 2
- ์ง์ ๋ ๋ฒ์ ์ด ์นดํ๋ก๊ทธ์ ์ดํ ๋ฒ์ ์ผ๋ก ๋์ฒด๋๋ ๊ฒฝ์ฐ ์น์ธ ์ ๋ต์ Manual๋ก ์ค์ ํฉ๋๋ค. ์ด ๊ณํ์์๋ ์ดํ ๋ฒ์ ์ผ๋ก ์๋ ์ ๊ทธ๋ ์ด๋ํ ์ ์์ผ๋ฏ๋ก ์์ CSV์์ ์ค์น๋ฅผ ์๋ฃํ๋ ค๋ฉด ์๋ ์น์ธ์ด ํ์ํฉ๋๋ค.
Subscription
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f poison-pill-subscription.yaml
๊ฒ์ฆ
CSV ๋ฆฌ์์ค๋ฅผ ๊ฒ์ฌํ์ฌ ์ค์น์ ์ฑ๊ณตํ๋์ง ํ์ธํฉ๋๋ค.
$ oc get csv -n poison-pill
์ถ๋ ฅ ์
NAME DISPLAY VERSION REPLACES PHASE poison-pill.v.0.2.0 Poison Pill Operator 0.2.0 Succeeded
Poison Pill Operator๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
$ oc get deploy -n poison-pill
์ถ๋ ฅ ์
NAME READY UP-TO-DATE AVAILABLE AGE poison-pill-controller-manager 1/1 1 1 10d
Poison Pill Operator๊ฐ
PoisonPillConfig
CR์ ์์ฑํ๋์ง ํ์ธํฉ๋๋ค.$ oc get PoisonPillConfig -n poison-pill
์ถ๋ ฅ ์
NAME AGE poison-pill-config 10d
๊ฐ ์ค๋ ์ฑ ์์ฝ Pod๊ฐ ๊ฐ ์์ ์ ๋ ธ๋์์ ์์ฝ๋๊ณ ์คํ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
$ oc get daemonset -n poison-pill
์ถ๋ ฅ ์
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE poison-pill-ds 2 2 2 2 2 <none> 10d
์ฐธ๊ณ์ด ๋ช ๋ น์ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์์ ์ง์๋์ง ์์ต๋๋ค.
6.6.4. Poison Pill Operator๋ฅผ ์ฌ์ฉํ๋๋ก ๋จธ์ ์ํ ์ ๊ฒ ๊ตฌ์ฑ
๋ค์ ์ ์ฐจ์ ๋ฐ๋ผ Poison Pill Operator๋ฅผ ์์ ๊ณต๊ธ์๋ก ์ฌ์ฉํ๋๋ก ๋จธ์ ์ํ ์ ๊ฒ์ ๊ตฌ์ฑํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift CLI(
oc
)๋ฅผ ์ค์นํฉ๋๋ค. -
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
PoisonPillRemediationTemplate
CR์ ์์ฑํฉ๋๋ค.PoisonPillRemediationTemplate
CR์ ์ ์ํฉ๋๋ค.apiVersion: poison-pill.medik8s.io/v1alpha1 kind: PoisonPillRemediationTemplate metadata: namespace: openshift-machine-api name: poisonpillremediationtemplate-sample spec: template: spec: {}
PoisonPillRemediationTemplate
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f <ppr-name>.yaml
PoisonPillRemediationTemplate
CR์ ๊ฐ๋ฆฌํค๋๋กMachineHealthCheck
CR์ ์์ฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธํฉ๋๋ค.MachineHealthCheck
CR์ ์ ์ํ๊ฑฐ๋ ์ ๋ฐ์ดํธํฉ๋๋ค.apiVersion: machine.openshift.io/v1beta1 kind: MachineHealthCheck metadata: name: machine-health-check namespace: openshift-machine-api spec: selector: matchLabels: machine.openshift.io/cluster-api-machine-role: "worker" machine.openshift.io/cluster-api-machine-type: "worker" unhealthyConditions: - type: "Ready" timeout: "300s" status: "False" - type: "Ready" timeout: "300s" status: "Unknown" maxUnhealthy: "40%" nodeStartupTimeout: "10m" remediationTemplate: 1 kind: PoisonPillRemediationTemplate apiVersion: poison-pill.medik8s.io/v1alpha1 name: poisonpillremediationtemplate-sample
- 1
- ์์ ํ ํ๋ฆฟ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ง์ ํฉ๋๋ค.
MachineHealthCheck
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f <file-name>.yaml
MachineHealthCheck
CR์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc apply -f <file-name>.yaml
6.6.5. Poison Pill Operator ๋ฌธ์ ํด๊ฒฐ
6.6.5.1. ์ผ๋ฐ ๋ฌธ์ ํด๊ฒฐ
- ๋ฌธ์
- Poison Pill Operator ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- ํด๊ฒฐ
- Operator ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
6.6.5.2. ๋ฐ๋ชฌ ์ธํธ ํ์ธ
- ๋ฌธ์
- Poison Pill Operator๊ฐ ์ค์น๋์์ง๋ง ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํด๊ฒฐ
- Operator ๋ก๊ทธ์ ์ค๋ฅ ๋๋ ๊ฒฝ๊ณ ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
6.6.5.3. ์คํจํ ์์
- ๋ฌธ์
- ๋น์ ์ ๋ ธ๋๊ฐ ์์ ๋์ง ์์์ต๋๋ค.
- ํด๊ฒฐ
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
PoisonPillRemediation
CR์ด ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.$ oc get ppr -A
๋ ธ๋๊ฐ ๋น์ ์์ธ ๊ฒฝ์ฐ
MachineHealthCheck
์ปจํธ๋กค๋ฌ์์PoisonPillRemediation
CR์ ์์ฑํ์ง ์์ ๊ฒฝ์ฐMachineHealthCheck
์ปจํธ๋กค๋ฌ์ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค. ๋ํMachineHealthCheck
CR์ ์์ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ ๋ฐ ํ์ํ ์ฌ์์ด ํฌํจ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.PoisonPillRemediation
CR์ด ์์ฑ๋ ๊ฒฝ์ฐ ํด๋น ์ด๋ฆ์ด ๋น์ ์ ๋ ธ๋ ๋๋ ๋จธ์ ์ค๋ธ์ ํธ์ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค.
6.6.5.4. Poison Pill Operator๋ฅผ ์ ๊ฑฐํ ํ์๋ ๋ฐ๋ชฌ ์ธํธ ๋ฐ ๊ธฐํ Poison Pill Operator ๋ฆฌ์์ค๊ฐ ์์ต๋๋ค.
- ๋ฌธ์
- Operator๋ฅผ ์ ๊ฑฐํ ํ์๋ ๋ฐ๋ชฌ ์ธํธ, ๊ตฌ์ฑ CR ๋ฐ ์์ ํ ํ๋ฆฟ CR๊ณผ ๊ฐ์ Poison Pill Operator ๋ฆฌ์์ค๊ฐ ์กด์ฌํฉ๋๋ค.
- ํด๊ฒฐ
Poison Pill Operator ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ๊ฐ ๋ฆฌ์์ค ์ ํ์ ๋ํด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
$ oc delete ds <poison-pill-ds> -n <namespace>
$ oc delete ppc <poison-pill-config> -n <namespace>
$ oc delete pprt <poison-pill-remediation-template> -n <namespace>
6.6.6. Poison Pill Operator์ ๋ํ ๋ฐ์ดํฐ ์์ง
Poison Pill Operator์ ๋ํ ๋๋ฒ๊น
์ ๋ณด๋ฅผ ์์งํ๋ ค๋ฉด must-gather
ํด์ ์ฌ์ฉํฉ๋๋ค. Poison Pill Operator์ must-gather
์ด๋ฏธ์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋ฐ์ดํฐ ์์ง์ ์ฐธ์กฐํ์ญ์์ค.
6.6.7. ์ถ๊ฐ ๋ฆฌ์์ค
- Poison Pill Operator๋ ์ ํ๋ ๋คํธ์ํฌ ํ๊ฒฝ์์ ์ง์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ํ๋ ๋คํธ์ํฌ์์ Operator Lifecycle Manager ์ฌ์ฉ์ ์ฐธ์กฐํ์ญ์์ค.
- ํด๋ฌ์คํฐ์์ Operator ์ญ์
6.7. Node Health Check Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ์ํ ์ ๊ฒ ๋ฐฐํฌ
Node Health Check Operator๋ฅผ ์ฌ์ฉํ์ฌ NodeHealthCheck
์ปจํธ๋กค๋ฌ๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์ปจํธ๋กค๋ฌ๋ ๋น์ ์ ๋
ธ๋๋ฅผ ์๋ณํ๊ณ Poison Pill Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ ์ ๋
ธ๋๋ฅผ ์์ ํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
Node Health Check Operator๋ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ ์ฉ์ ๋๋ค. ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ Red Hat ํ๋ก๋์ ์๋น์ค ์์ค ๊ณ์ฝ(SLA)์์ ์ง์๋์ง ์์ผ๋ฉฐ ๊ธฐ๋ฅ์ ์ผ๋ก ์์ ํ์ง ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํฅํ ์ ํ ๊ธฐ๋ฅ์ ์กฐ๊ธฐ์ ์ด์ฉํ ์ ์์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ณ ๊ฐ์ด ๊ธฐ๋ฅ์ ํ ์คํธํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Red Hat ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ์ง์ ๋ฒ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ ์ง์ ๋ฒ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
6.7.1. Node Health Check Operator ์ ๋ณด
Node Health Check Operator๋ NodeHealthCheck
์ปจํธ๋กค๋ฌ๋ฅผ ๋ฐฐํฌํ์ฌ ํด๋ฌ์คํฐ์์ ๋
ธ๋์ ์ํ๋ฅผ ๊ฐ์งํฉ๋๋ค. NodeHealthCheck
์ปจํธ๋กค๋ฌ๋ ๋
ธ๋ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ผ๋ จ์ ๊ธฐ์ค ๋ฐ ์๊ณ๊ฐ์ ์ ์ํ๋ NodeHealthCheck
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค.
Node Health Check Operator๋ ๋ํ Poison Pill Operator๋ฅผ ๊ธฐ๋ณธ ์์ ๊ณต๊ธ์๋ก ์ค์นํฉ๋๋ค.
Node Health Check Operator๊ฐ ๋น์ ์ ๋
ธ๋๋ฅผ ๊ฐ์งํ๋ฉด ์์ ๊ณต๊ธ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์์ CR์ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ปจํธ๋กค๋ฌ๋ Poison Pill Operator๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ฌ ๋น์ ์ ๋
ธ๋๋ฅผ ์์ ํ๋ PoisonPillRemediation
CR์ ์์ฑํฉ๋๋ค.
NodeHealthCheck
CR์ ๋ค์ YAML ํ์ผ๊ณผ ์ ์ฌํฉ๋๋ค.
apiVersion: remediation.medik8s.io/v1alpha1 kind: NodeHealthCheck metadata: name: nodehealthcheck-sample spec: minHealthy: 51% 1 pauseRequests: 2 - <pause-test-cluster> remediationTemplate: 3 apiVersion: poison-pill.medik8s.io/v1alpha1 name: group-x namespace: openshift-operators kind: PoisonPillRemediationTemplate selector: 4 matchExpressions: - key: node-role.kubernetes.io/worker operator: Exists unhealthyConditions: 5 - type: Ready status: "False" duration: 300s 6 - type: Ready status: Unknown duration: 300s 7
- 1
- ํด๊ฒฐ ๊ณต๊ธ์๊ฐ ๋์ ํ์ ๋ ธ๋๋ฅผ ๋์์ ํด๊ฒฐํ๋ ๋ฐ ํ์ํ ์ ์ ๋ ธ๋ ์(% ๋๋ ์ซ์)๋ฅผ ์ง์ ํฉ๋๋ค. ์ ์ ์ํ์ ๋ ธ๋ ์๊ฐ
minHealthy
์์ ์ค์ ํ๊ฑฐ๋ ์ด๊ณผํ๋ ๊ฒฝ์ฐ ์์ ์ด ์ํ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ leader์ ๋๋ค. - 2
- ์๋ก์ด ์์ ์ด ์์๋์ง ์๊ณ ์ง์์ ์ธ ์์ ์ ๊ณ์ ์ ์งํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋น์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ค๋จ์ ์์ธ์ ์๋ณํ๋ ๋ฌธ์์ด ๋ฐฐ์ด์ ์ ๋ ฅํ ์ ์์ต๋๋ค. ์:
pause-test-cluster
.์ฐธ๊ณ์ ๊ทธ๋ ์ด๋ ํ๋ก์ธ์ค ์ค์ ํด๋ฌ์คํฐ์ ๋ ธ๋๋ฅผ ์ผ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๊ณ ๋น์ ์์ผ๋ก ์๋ณ๋ ์ ์์ต๋๋ค. ์์ ์ ๋ ธ๋์ ๊ฒฝ์ฐ Operator์์ ํด๋ฌ์คํฐ ์ ๊ทธ๋ ์ด๋๊ฐ ํ์ง๋๋ฉด ์ด๋ฌํ ๋ ธ๋๊ฐ ์ฌ๋ถํ ๋์ง ์๋๋ก ์๋ก์ด ๋น์ ์ ๋ ธ๋ ์์ ์ ์ค์งํฉ๋๋ค.
- 3
- ์์ ๊ณต๊ธ์์์ ์์ ํ ํ๋ฆฟ์ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Poison Pill Operator์์ ๋ค์์ ์ํํฉ๋๋ค.
- 4
- ํ์ธํ๋ ค๋ ๋ผ๋ฒจ ๋๋ ํํ์๊ณผ ์ผ์นํ๋
์ ํ๊ธฐ
๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋น์ด ์์ผ๋ฉฐ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ ํํฉ๋๋ค. - 5
- ๋ ธ๋๊ฐ ๋น์ ์์ผ๋ก ๊ฐ์ฃผ๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ์กฐ๊ฑด ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค.
- 6 7
- ๋ ธ๋ ์ํ์ ๋ํ ์๊ฐ ์ ํ์ ์ง์ ํฉ๋๋ค. ์๊ฐ ์ด๊ณผ ๊ธฐ๊ฐ ๋์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ๋ ธ๋๊ฐ ์์ ๋ฉ๋๋ค. ์๊ฐ ์ ํ์ด ๊ธธ์ด์ง๋ฉด ๋น์ ์ ๋ ธ๋์ ์ํฌ๋ก๋์ ๋ํ ๋ค์ดํ์์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค.
6.7.1.1. Node Health Check Operator ์ํฌํ๋ก์ฐ ์ดํด
๋
ธ๋๊ฐ ๋น์ ์์ผ๋ก ํ์ธ๋๋ฉด Node Health Check Operator์์ ๋น์ ์์ ์ธ ๋ค๋ฅธ ๋
ธ๋ ์๋ฅผ ํ์ธํฉ๋๋ค. ์ ์ ๋
ธ๋ ์๊ฐ NodeHealthCheck
CR์ minHealthy
ํ๋์ ์ง์ ๋ ์์ ์ด๊ณผํ๋ฉด ์ปจํธ๋กค๋ฌ๋ ์์ ์ ๊ณต์๊ฐ ์ธ๋ถ ์์ ํ
ํ๋ฆฟ์ ์ ๊ณต๋๋ ์ธ๋ถ ์ฌํญ์์ ์์ CR์ ์์ฑํฉ๋๋ค. ์์ ํ kubelet์ ๋
ธ๋ ์ํ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
๋ ธ๋๊ฐ ์ ์ ์ํ๊ฐ ๋๋ฉด ์ปจํธ๋กค๋ฌ๋ ์ธ๋ถ ์์ ํ ํ๋ฆฟ์ ์ญ์ ํฉ๋๋ค.
6.7.1.2. ๋ ธ๋ ์ํ ์ ๊ฒ์์ ๋จธ์ ์ํ ์ ๊ฒ๊ณผ ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ ์ ๋ณด
๋ ธ๋ ์ํ ์ ๊ฒ ๋ฐ ๋จธ์ ์ํ ์ ๊ฒ์ด ๋ชจ๋ ๋ฐฐํฌ๋๋ฉด ๋ ธ๋ ์ํ ์ ๊ฒ์ด ๋จธ์ ์ํ ์ ๊ฒ๊ณผ ์ถฉ๋ํ์ง ์์ต๋๋ค.
OpenShift Container Platform์ machine-api-termination-handler
๋ฅผ ๊ธฐ๋ณธ MachineHealthCheck
๋ฆฌ์์ค๋ก ๋ฐฐํฌํฉ๋๋ค.
๋ค์ ๋ชฉ๋ก์ ๋ ธ๋ ์ํ ์ ๊ฒ ๋ฐ ๋จธ์ ์ํ ์ ๊ฒ์ด ๋ฐฐํฌ๋ ๋ ์์คํ ๋์์ ์์ฝํฉ๋๋ค.
๊ธฐ๋ณธ ๋จธ์ ์ํ ์ ๊ฒ๋ง ์๋ ๊ฒฝ์ฐ ๋ ธ๋ ์ํ ์ ๊ฒ์ ๋น์ ์ ๋ ธ๋๋ฅผ ๊ณ์ ์๋ณํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ ธ๋ ์ํ ์ ๊ฒ์ ์ข ๋ฃ ์ํ์ ๋น์ ์ ๋ ธ๋๋ฅผ ๋ฌด์ํฉ๋๋ค. ๊ธฐ๋ณธ ๋จธ์ ์ํ ์ ๊ฒ์ Terminating ์ํ๋ก ๋น์ ์ ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
๋ก๊ทธ ๋ฉ์์ง ์
INFO MHCChecker ignoring unhealthy Node, it is terminating and will be handled by MHC {"NodeName": "node-1.example.com"}
๊ธฐ๋ณธ ๋จธ์ ์ํ ์ ๊ฒ์ด ์์ ๋๊ฑฐ๋
๋น์ ์Conditions
๊ฐReady
์ธ ๊ฒฝ์ฐ ๋๋ ์ถ๊ฐ ๋จธ์ ์ํ ์ ๊ฒ์ด ์์ฑ๋๋ฉด ๋ ธ๋ ์ํ ์ ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.๋ก๊ทธ ๋ฉ์์ง ์
INFO controllers.NodeHealthCheck disabling NHC in order to avoid conflict with custom MHCs configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}
๋ค์ ํ๋ฒ ๊ธฐ๋ณธ ๋จธ์ ์ํ ์ ๊ฒ๋ง ์์ผ๋ฉด ๋ ธ๋ ์ํ ์ ๊ฒ์ด ๋ค์ ํ์ฑํ๋ฉ๋๋ค.
๋ก๊ทธ ๋ฉ์์ง ์
INFO controllers.NodeHealthCheck re-enabling NHC, no conflicting MHC configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}
6.7.2. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Node Health Check Operator ์ค์น
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Node Health Check Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์์ Operator โ OperatorHub๋ก ์ด๋ํฉ๋๋ค.
- Node Health Check Operator๋ฅผ ๊ฒ์ํ ๋ค์ ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
๊ธฐ๋ณธ ์ค์น ๋ชจ๋ ๋ฐ ๋ค์์คํ์ด์ค ๋ฅผ ๊ณ์ ์ ํํ์ฌ Operator๊ฐ
openshift-operators
๋ค์์คํ์ด์ค์ ์ค์น๋๋๋ก ํฉ๋๋ค. - ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒ์ฆ
์ค์น์ ์ฑ๊ณตํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
- Operator โ ์ค์น๋ Operator ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
Operator๊ฐ
openshift-operators
๋ค์์คํ์ด์ค์ ์ค์น๋์ด ์๊ณ ํด๋น ์ํ๊ฐSucceeded
์ธ์ง ํ์ธํฉ๋๋ค.
Operator๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ค์น๋์ง ์์ ๊ฒฝ์ฐ ๋ค์์ ์ํํ์ญ์์ค.
-
Operator โ ์ค์น๋ Operator ํ์ด์ง๋ก ์ด๋ํ์ฌ
Status
์ด์ ์ค๋ฅ ๋๋ ์คํจ๊ฐ ์๋์ง ์ ๊ฒํฉ๋๋ค. -
์ํฌ๋ก๋ โ Pod ํ์ด์ง๋ก ์ด๋ํ์ฌ
openshift-operators
ํ๋ก์ ํธ์์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ๋ Pod์ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
6.7.3. CLI๋ฅผ ์ฌ์ฉํ์ฌ Node Health Check Operator ์ค์น
OpenShift CLI(oc
)๋ฅผ ์ฌ์ฉํ์ฌ Node Health Check Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์์ฒด ๋ค์์คํ์ด์ค์ Operator๋ฅผ ์ค์นํ๋ ค๋ฉด ์ ์ฐจ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
openshift-operators
๋ค์์คํ์ด์ค์ Operator๋ฅผ ์ค์นํ๋ ค๋ฉด ์ Namespace
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค) ๋ฐ OperatorGroup
CR์ ์์ฑํ๋ ๋จ๊ณ๊ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฐจ์ 3๋จ๊ณ๋ก ๊ฑด๋๋ฐ์ญ์์ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift CLI(
oc
)๋ฅผ ์ค์นํฉ๋๋ค. -
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
ํ๋ก์ธ์ค
Node Health Check Operator์
Namespace
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค.Namespace
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:node-health-check-namespace.yaml
).apiVersion: v1 kind: Namespace metadata: name: node-health-check
๋ค์์คํ์ด์ค
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f node-health-check-namespace.yaml
OperatorGroup
CR์ ์์ฑํฉ๋๋ค.OperatorGroup
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:node-health-check-operator-group.yaml
).apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: node-health-check-operator namespace: node-health-check
OperatorGroup
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f node-health-check-operator-group.yaml
์๋ธ์คํฌ๋ฆฝ์
CR์ ์์ฑํฉ๋๋ค.์๋ธ์คํฌ๋ฆฝ์
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:node-health-check-subscription.yaml
).apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: node-health-check-operator namespace: node-health-check 1 spec: channel: candidate 2 installPlanApproval: Manual 3 name: node-healthcheck-operator source: redhat-operators sourceNamespace: openshift-marketplace package: node-healthcheck-operator
- 1
- Node Health Check Operator๋ฅผ ์ค์นํ
๋ค์์คํ์ด์ค
๋ฅผ ์ง์ ํฉ๋๋ค.openshift-operators
๋ค์์คํ์ด์ค์ Node Health Check Operator๋ฅผ ์ค์นํ๋ ค๋ฉดSubscription
CR์์openshift-operators
๋ฅผ ์ง์ ํฉ๋๋ค. - 2
- ์๋ธ์คํฌ๋ฆฝ์ ์ ์ฑ๋ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. Node Health Check Operator์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ค๋ฉด ์๋ธ์คํฌ๋ฆฝ์ ์ ์ฑ๋ ์ด๋ฆ์
alpha
์์candidate
๋ก ์๋์ผ๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. - 3
- ์ง์ ๋ ๋ฒ์ ์ด ์นดํ๋ก๊ทธ์ ์ดํ ๋ฒ์ ์ผ๋ก ๋์ฒด๋๋ ๊ฒฝ์ฐ ์น์ธ ์ ๋ต์ Manual๋ก ์ค์ ํฉ๋๋ค. ์ด ๊ณํ์์๋ ์ดํ ๋ฒ์ ์ผ๋ก ์๋ ์ ๊ทธ๋ ์ด๋ํ ์ ์์ผ๋ฏ๋ก ์์ CSV์์ ์ค์น๋ฅผ ์๋ฃํ๋ ค๋ฉด ์๋ ์น์ธ์ด ํ์ํฉ๋๋ค.
Subscription
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f node-health-check-subscription.yaml
๊ฒ์ฆ
CSV ๋ฆฌ์์ค๋ฅผ ๊ฒ์ฌํ์ฌ ์ค์น์ ์ฑ๊ณตํ๋์ง ํ์ธํฉ๋๋ค.
$ oc get csv -n openshift-operators
์ถ๋ ฅ ์
NAME DISPLAY VERSION REPLACES PHASE node-healthcheck-operator.v0.2.0. Node Health Check Operator 0.2.0 Succeeded
Node Health Check Operator๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
$ oc get deploy -n openshift-operators
์ถ๋ ฅ ์
NAME READY UP-TO-DATE AVAILABLE AGE node-health-check-operator-controller-manager 1/1 1 1 10d
6.7.4. Node Health Check Operator์ ๋ํ ๋ฐ์ดํฐ ์์ง
Node Health Check Operator์ ๋ํ ๋๋ฒ๊น
์ ๋ณด๋ฅผ ์์งํ๋ ค๋ฉด must-gather
ํด์ ์ฌ์ฉํฉ๋๋ค. Node Health Check Operator์ must-gather
์ด๋ฏธ์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋ฐ์ดํฐ ์์ง์ ์ฐธ์กฐํ์ญ์์ค.
6.7.5. ์ถ๊ฐ ๋ฆฌ์์ค
- Operator์ ์ ๋ฐ์ดํธ ์ฑ๋ ๋ณ๊ฒฝ
- Node Health Check Operator๋ ์ ํ๋ ๋คํธ์ํฌ ํ๊ฒฝ์์ ์ง์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ํ๋ ๋คํธ์ํฌ์์ Operator Lifecycle Manager ์ฌ์ฉ์ ์ฐธ์กฐํ์ญ์์ค.
6.8. Node Maintenance Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋๋ก ๋ฐฐ์น
Node Maintenance Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋๋ก ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์ด๋ OpenShift Virtualization ์ค์น์๋ ๋ณ๋๋ก ์ ๊ณต๋๋ ๋ ๋ฆฝํ ๋ฒ์ ์ Node Maintenance Operator์ ๋๋ค.
OpenShift Virtualization์ ์ค์นํ ๊ฒฝ์ฐ ๋ฒ๋ค๋ก ์ ๊ณต๋๋ Node Maintenance Operator๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
6.8.1. Node Maintenance Operator ์ ๋ณด
oc adm
์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ NodeMaintenance
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์ฌ์ฉํ์ฌ ๋
ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
Node Maintenance Operator๋ ์๋ก์ด ๋๋ ์ญ์ ๋ NodeMaintenance
CR์ ๊ฐ์ํฉ๋๋ค. ์ NodeMaintenance
CR์ด ๊ฐ์ง๋๋ฉด ์ ์ํฌ๋ก๋๊ฐ ์์ฝ๋์ง ์๊ณ ๋๋จธ์ง ํด๋ฌ์คํฐ์์ ๋
ธ๋๊ฐ ์ฐจ๋จ๋ฉ๋๋ค. ์ ๊ฑฐํ ์ ์๋ ๋ชจ๋ Pod๋ ๋
ธ๋์์ ์ ๊ฑฐ๋ฉ๋๋ค. NodeMaintenance
CR์ด ์ญ์ ๋๋ฉด CR์์ ์ฐธ์กฐ๋๋ ๋
ธ๋๋ฅผ ์ ์ํฌ๋ก๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋
ธ๋ ์ ์ง๋ณด์ ์์
์ NodeMaintenance
CR์ ์ฌ์ฉํ๋ฉด ํ์ค OpenShift Container Platform CR ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ oc adm cordon
๋ฐ oc adm drain
๋ช
๋ น๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
6.8.2. ๋ฒ ์ด ๋ฉํ ๋ ธ๋ ์ ์ง๊ด๋ฆฌ
๋ฒ ์ด ๋ฉํ ์ธํ๋ผ์ OpenShift Container Platform์ ๋ฐฐํฌํ ๋ ํด๋ผ์ฐ๋ ์ธํ๋ผ์ ๋ฐฐํฌํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ์ถ๊ฐ ๊ณ ๋ ค ์ฌํญ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ํด๋ฌ์คํฐ ๋ ธ๋๊ฐ ์์๋ก ๊ฐ์ฃผ๋๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ๊ณผ ๋ฌ๋ฆฌ ๋ฒ ์ด ๋ฉํ ๋ ธ๋๋ฅผ ๋ค์ ํ๋ก๋น์ ๋ํ๋ ค๋ฉด ์ ์ง ๊ด๋ฆฌ ์์ ์ ๋ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
์ปค๋ ์ค๋ฅ ๋๋ NIC ์นด๋ ํ๋์จ์ด ์ค๋ฅ๋ก ์ธํด ๋ฒ ์ด ๋ฉํ ๋ ธ๋๊ฐ ์คํจํ๋ฉด ๋ฌธ์ ๋ ธ๋๋ฅผ ๋ณต๊ตฌํ๊ฑฐ๋ ๊ต์ฒดํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ ธ๋์ ์ํฌ๋ก๋๋ฅผ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ ธ๋์์ ๋ค์ ์์ํด์ผ ํฉ๋๋ค. ๋ ธ๋ ์ ์ง๋ณด์ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ๋ ธ๋๋ฅผ ์ ์์ ์ผ๋ก ๋๊ณ ์ํฌ๋ก๋๋ฅผ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ์ด๋ํ๊ณ ์ํฌ๋ก๋๊ฐ ์ค๋จ๋์ง ์๋๋ก ํ ์ ์์ต๋๋ค. ์ ์ง๋ณด์ ๊ด๋ฆฌ ์ค์ ์์ธํ ์งํ ์ํฉ ๋ฐ ๋ ธ๋ ์ํ ์ธ๋ถ ์ ๋ณด๊ฐ ์ ๊ณต๋ฉ๋๋ค.
6.8.3. Node Maintenance Operator ์ค์น
์น ์ฝ์ ๋๋ OpenShift CLI(oc
)๋ฅผ ์ฌ์ฉํ์ฌ Node Maintenance Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
6.8.3.1. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Node Maintenance Operator ์ค์น
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Node Maintenance Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
- OpenShift Container Platform ์น ์ฝ์์์ Operator โ OperatorHub๋ก ์ด๋ํฉ๋๋ค.
- Node Maintenance Operator๋ฅผ ๊ฒ์ํ ๋ค์ ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
๊ธฐ๋ณธ ์ค์น ๋ชจ๋ ๋ฐ ๋ค์์คํ์ด์ค ๋ฅผ ๊ณ์ ์ ํํ์ฌ Operator๊ฐ
openshift-operators
๋ค์์คํ์ด์ค์ ์ค์น๋๋๋ก ํฉ๋๋ค. - ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒ์ฆ
์ค์น์ ์ฑ๊ณตํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
- Operator โ ์ค์น๋ Operator ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
Operator๊ฐ
openshift-operators
๋ค์์คํ์ด์ค์ ์ค์น๋์ด ์๊ณ ํด๋น ์ํ๊ฐSucceeded
์ธ์ง ํ์ธํฉ๋๋ค.
Operator๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ค์น๋์ง ์์ ๊ฒฝ์ฐ ๋ค์์ ์ํํ์ญ์์ค.
-
Operator โ ์ค์น๋ Operator ํ์ด์ง๋ก ์ด๋ํ์ฌ
Status
์ด์ ์ค๋ฅ ๋๋ ์คํจ๊ฐ ์๋์ง ์ ๊ฒํฉ๋๋ค. -
์ํฌ๋ก๋ โ Pod ํ์ด์ง๋ก ์ด๋ํ์ฌ
openshift-operators
ํ๋ก์ ํธ์์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ๋ Pod์ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
6.8.3.2. CLI๋ฅผ ์ฌ์ฉํ์ฌ Node Maintenance Operator ์ค์น
OpenShift CLI(oc
)๋ฅผ ์ฌ์ฉํ์ฌ Node Maintenance Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์์ฒด ๋ค์์คํ์ด์ค ๋๋ openshift-operators
๋ค์์คํ์ด์ค์ Node Maintenance Operator๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
์์ฒด ๋ค์์คํ์ด์ค์ Operator๋ฅผ ์ค์นํ๋ ค๋ฉด ์ ์ฐจ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ญ์์ค.
openshift-operators
๋ค์์คํ์ด์ค์ Operator๋ฅผ ์ค์นํ๋ ค๋ฉด ์ Namespace
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค) ๋ฐ OperatorGroup
CR์ ์์ฑํ๋ ๋จ๊ณ๊ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฐจ์ 3๋จ๊ณ๋ก ๊ฑด๋๋ฐ์ญ์์ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift CLI(
oc
)๋ฅผ ์ค์นํฉ๋๋ค. -
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
๋ ธ๋ ์ ์ง๋ณด์ Operator์
Namespace
CR์ ์์ฑํฉ๋๋ค.Namespace
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:node-maintenance-namespace.yaml
).apiVersion: v1 kind: Namespace metadata: name: nmo-test
๋ค์์คํ์ด์ค
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f node-maintenance-namespace.yaml
OperatorGroup
CR์ ์์ฑํฉ๋๋ค.OperatorGroup
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:node-maintenance-operator-group.yaml
).apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: node-maintenance-operator namespace: nmo-test
OperatorGroup
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f node-maintenance-operator-group.yaml
์๋ธ์คํฌ๋ฆฝ์
CR์ ์์ฑํฉ๋๋ค.์๋ธ์คํฌ๋ฆฝ์
CR์ ์ ์ํ๊ณ YAML ํ์ผ์ ์ ์ฅํฉ๋๋ค(์:node-maintenance-subscription.yaml
).apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: node-maintenance-operator namespace: nmo-test 1 spec: channel: stable InstallPlaneApproval: Automatic name: node-maintenance-operator source: redhat-operators sourceNamespace: openshift-marketplace StartingCSV: node-maintenance-operator.v4.10.0
- 1
- Node Maintenance Operator๋ฅผ ์ค์นํ
๋ค์์คํ์ด์ค
๋ฅผ ์ง์ ํฉ๋๋ค.
์ค์openshift-operators
๋ค์์คํ์ด์ค์ Node Maintenance Operator๋ฅผ ์ค์นํ๋ ค๋ฉดSubscription
CR์์openshift-operators
๋ฅผ ์ง์ ํฉ๋๋ค.Subscription
CR์ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc create -f node-maintenance-subscription.yaml
๊ฒ์ฆ
CSV ๋ฆฌ์์ค๋ฅผ ๊ฒ์ฌํ์ฌ ์ค์น์ ์ฑ๊ณตํ๋์ง ํ์ธํฉ๋๋ค.
$ oc get csv -n openshift-operators
์ถ๋ ฅ ์
NAME DISPLAY VERSION REPLACES PHASE node-maintenance-operator.v4.10 Node Maintenance Operator 4.10 Succeeded
Node Maintenance Operator๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
$ oc get deploy -n openshift-operators
์ถ๋ ฅ ์
NAME READY UP-TO-DATE AVAILABLE AGE node-maintenance-operator-controller-manager 1/1 1 1 10d
Node Maintenance Operator๋ ์ ํ๋ ๋คํธ์ํฌ ํ๊ฒฝ์์ ์ง์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ํ๋ ๋คํธ์ํฌ์์ Operator Lifecycle Manager ์ฌ์ฉ์ ์ฐธ์กฐํ์ญ์์ค.
6.8.4. ๋ ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋๋ก ์ค์
NodeMaintenance
CR์ ์ฌ์ฉํ์ฌ ์น ์ฝ์ ๋๋ CLI์์ ๋
ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
6.8.4.1. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋๋ก ์ค์
๋
ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋๋ก ์ค์ ํ๋ ค๋ฉด ์น ์ฝ์์ ์ฌ์ฉํ์ฌ NodeMaintenance
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค. - OperatorHub ์์ Node Maintenance Operator๋ฅผ ์ค์นํฉ๋๋ค.
์ ์ฐจ
- ์น ์ฝ์์ ๊ด๋ฆฌ์ ํ๋ฉด์์ Operator โ ์ค์น๋ Operator ๋ก ์ด๋ํฉ๋๋ค.
- Operator ๋ชฉ๋ก์์ Node Maintenance Operator๋ฅผ ์ ํํฉ๋๋ค.
- Node Maintenance ํญ์์ NodeMaintenance๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
Create NodeMaintenance ํ์ด์ง์์ ์์ ๋ณด๊ธฐ ๋๋ YAML ๋ณด๊ธฐ๋ฅผ ์ ํํ์ฌ
NodeMaintenance
CR์ ๊ตฌ์ฑํฉ๋๋ค. -
๊ตฌ์ฑํ
NodeMaintenance
CR์ ์ ์ฉํ๋ ค๋ฉด ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฒ์ฆ
Node Maintenance ํญ์์ Status
(์ํ) ์ด์ ๊ฒ์ฌํ๊ณ ํด๋น ์ํ๊ฐ Succeeded
์ธ์ง ํ์ธํฉ๋๋ค.
6.8.4.2. CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ ์ง๋ณด์ ๋ชจ๋๋ก ์ค์
NodeMaintenance
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์ฌ์ฉํ์ฌ ๋
ธ๋๋ฅผ ์ ์ง๊ด๋ฆฌ ๋ชจ๋์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. NodeMaintenance
CR์ ์ ์ฉํ๋ฉด ํ์ฉ๋๋ ๋ชจ๋ Pod๊ฐ ์ ๊ฑฐ๋๊ณ ๋
ธ๋๊ฐ ์์ฝ ๋ถ๊ฐ๋ฅ์ผ๋ก ๋ ๋๋ง๋ฉ๋๋ค. ์ ๊ฑฐ๋ Pod๋ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋
ธ๋๋ก ์ด๋ํ๊ธฐ ์ํด ๋๊ธฐ์ด์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift Container Platform CLI
oc
๋ฅผ ์ค์นํฉ๋๋ค. -
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
๋ค์
NodeMaintenance
CR์ ์์ฑํ๊ณ ํ์ผ์nodemaintenance-cr.yaml
๋ก ์ ์ฅํฉ๋๋ค.apiVersion: nodemaintenance.medik8s.io/v1beta1 kind: NodeMaintenance metadata: name: nodemaintenance-cr 1 spec: nodeName: node-1.example.com 2 reason: "NIC replacement" 3
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๋ ธ๋ ์ ์ง๋ณด์ CR์ ์ ์ฉํฉ๋๋ค.
$ oc apply -f nodemaintenance-cr.yaml
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ ์ง๋ณด์ ์์ ์ ์งํ ์ํฉ์ ํ์ธํ๊ณ <
node-name
>์ ๋ ธ๋ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํฉ๋๋ค(์:node-1.example.com
):$ oc describe node node-1.example.com
์ถ๋ ฅ ์
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal NodeNotSchedulable 61m kubelet Node node-1.example.com status is now: NodeNotSchedulable
6.8.4.2.1. ํ์ฌ NodeMaintenance CR ์์ ์ ์ํ ํ์ธ
ํ์ฌ NodeMaintenance
CR ์์
์ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift Container Platform CLI
oc
๋ฅผ ์ค์นํฉ๋๋ค. -
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ํ์ฌ ๋ ธ๋ ์ ์ง๊ด๋ฆฌ ์์ ์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค(์:
NodeMaintenance
CR ๋๋nm
์ค๋ธ์ ํธ).$ oc get nm -o yaml
์ถ๋ ฅ ์
apiVersion: v1 items: - apiVersion: nodemaintenance.medik8s.io/v1beta1 kind: NodeMaintenance metadata: ... spec: nodeName: node-1.example.com reason: Node maintenance status: evictionPods: 3 1 lastError: "Last failure message" 2 phase: Succeeded totalpods: 5 3 ...
6.8.5. ์ ์ง๊ด๋ฆฌ ๋ชจ๋์์ ๋ ธ๋ ์ฌ์์
CLI์์ ๋๋ NodeMaintenance
CR์ ์ฌ์ฉํ์ฌ ์ ์ง๋ณด์ ๋ชจ๋์์ ๋
ธ๋๋ฅผ ์ฌ์์ํ ์ ์์ต๋๋ค. ๋
ธ๋๋ฅผ ์ฌ์์ํ๋ฉด ๋
ธ๋๊ฐ ์ ์ง๊ด๋ฆฌ ๋ชจ๋์์ ํด์ ๋์ด ๋
ธ๋๋ฅผ ๋ค์ ์ค์ผ์ค๋งํ ์ ์์ต๋๋ค.
6.8.5.1. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ์ ์ง๋ณด์ ๋ชจ๋์์ ๋ ธ๋ ์ฌ์์
์ ์ง๋ณด์ ๋ชจ๋์์ ๋
ธ๋๋ฅผ ์ฌ์์ํ๋ ค๋ฉด ์น ์ฝ์์ ์ฌ์ฉํ์ฌ NodeMaintenance
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์ญ์ ํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธํฉ๋๋ค. - OperatorHub ์์ Node Maintenance Operator๋ฅผ ์ค์นํฉ๋๋ค.
์ ์ฐจ
- ์น ์ฝ์์ ๊ด๋ฆฌ์ ํ๋ฉด์์ Operator โ ์ค์น๋ Operator ๋ก ์ด๋ํฉ๋๋ค.
- Operator ๋ชฉ๋ก์์ Node Maintenance Operator๋ฅผ ์ ํํฉ๋๋ค.
-
๋
ธ๋ ์ ์ง๋ณด์ ํญ์์ ์ญ์ ํ
NodeMaintenance
CR์ ์ ํํฉ๋๋ค. -
๋
ธ๋ ๋์ ์๋ ์ต์
๋ฉ๋ด
๋ฅผ ํด๋ฆญํ๊ณ ๋ ธ๋ ์ ์ง ๊ด๋ฆฌ ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
๊ฒ์ฆ
- OpenShift Container Platform ์ฝ์์์ ์ปดํจํ โ ๋ ธ๋ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
NodeMaintenance
CR์ ์ญ์ ํ ๋ ธ๋์์ํ
์ด์ ๊ฒ์ฌํ๊ณ ํด๋น ์ํ๊ฐReady
์ธ์ง ํ์ธํฉ๋๋ค.
6.8.5.2. CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ง๋ณด์ ๋ชจ๋์์ ๋ ธ๋ ์ฌ์์
NodeMaintenance
CR์ ์ญ์ ํ์ฌ NodeMaintenance
CR์ ์ฌ์ฉํ์ฌ ์์๋ ์ ์ง๋ณด์ ๋ชจ๋์์ ๋
ธ๋๋ฅผ ์ฌ์์ํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift Container Platform CLI
oc
๋ฅผ ์ค์นํฉ๋๋ค. -
cluster-admin
๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ๋ก๊ทธ์ธํฉ๋๋ค.
์ ์ฐจ
๋ ธ๋ ์ ์ง๊ด๋ฆฌ ์์ ์ด ์๋ฃ๋๋ฉด ํ์ฑ
NodeMaintenance
CR์ ์ญ์ ํฉ๋๋ค.$ oc delete -f nodemaintenance-cr.yaml
์ถ๋ ฅ ์
nodemaintenance.nodemaintenance.medik8s.io "maintenance-example" deleted
6.8.6. Node Maintenance Operator์ ๋ํ ๋ฐ์ดํฐ ์์ง
Node Maintenance Operator์ ๋ํ ๋๋ฒ๊น
์ ๋ณด๋ฅผ ์์งํ๋ ค๋ฉด must-gather
ํด์ ์ฌ์ฉํฉ๋๋ค. Node Maintenance Operator์ must-gather
์ด๋ฏธ์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋ฐ์ดํฐ ์์ง์ ์ฐธ์กฐํ์ญ์์ค.
6.8.7. ์ถ๊ฐ ๋ฆฌ์์ค
6.9. ๋ ธ๋ ์ฌ๋ถํ ์ดํด
ํ๋ซํผ์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋จํ์ง ์๊ณ ๋ ธ๋๋ฅผ ์ฌ๋ถํ ํ๋ ค๋ฉด ๋จผ์ Pod๋ฅผ ๋น์์ผ ํฉ๋๋ค. ๋ผ์ฐํ ๊ณ์ธต์์ ๊ฐ์ฉ์ฑ์ด ๋์ Pod์ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ ์ ์ํํ ํ์๊ฐ ์์ต๋๋ค. ์คํ ๋ฆฌ์ง(์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค)๊ฐ ํ์ํ ๊ธฐํ Pod์ ๊ฒฝ์ฐ ํน์ Pod๊ฐ ์ผ์์ ์ผ๋ก ์คํ๋ผ์ธ์ผ๋ก ์ ํ๋ ์ํ์์๋ ๊ณ์ ์๋ํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ํ ์ ์ฅ Pod์ ๋ํ ๋ณต์๋ ฅ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค ๋ค๋ฅด์ง๋ง ์ด๋ ํ ๊ฒฝ์ฐ์๋ ๋ ธ๋ ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ์ฌ Pod๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ธ๋์ ์ ์ ํ ๋ถ๋ฐฐ๋๋๋ก ์ค์ผ์ค๋ฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๋ผ์ฐํฐ ๋๋ ๋ ์ง์คํธ๋ฆฌ์ ๊ฐ์ ์ค์ํ ์ธํ๋ผ๋ฅผ ์คํํ๋ ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋์ผํ ๋ ธ๋ ๋น์ฐ๊ธฐ ํ๋ก์ธ์ค๊ฐ ์ ์ฉ๋์ง๋ง ํน์ ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
6.9.1. ์ค์ํ ์ธํ๋ผ๋ฅผ ์คํํ๋ ๋ ธ๋ ์ฌ๋ถํ ์ ๋ณด
๋ผ์ฐํฐ Pod, ๋ ์ง์คํธ๋ฆฌ Pod, ๋ชจ๋ํฐ๋ง Pod์ ๊ฐ์ ์ค์ํ OpenShift Container Platform ์ธํ๋ผ ๊ตฌ์ฑ ์์๋ฅผ ํธ์คํ ํ๋ ๋ ธ๋๋ฅผ ์ฌ๋ถํ ํ ๋๋ ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ธ๋๊ฐ ์ธ ๊ฐ ์ด์ ์๋์ง ํ์ธํ์ญ์์ค.
๋ค์ ์๋๋ฆฌ์ค์์๋ ๋ ๊ฐ์ ๋ ธ๋๋ง ์ฌ์ฉํ ์ ์์ ๋ OpenShift Container Platform์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋น์ค ์ค๋จ์ด ๋ฐ์ํ๋ ๋ฐฉ์์ ๋ณด์ฌ์ค๋๋ค.
- ๋ ธ๋ A๊ฐ ์์ฝ ๋ถ๊ฐ๋ก ํ์๋๊ณ ๋ชจ๋ Pod๊ฐ ๋น์ด ์์ต๋๋ค.
- ์ด์ ํด๋น ๋ ธ๋์์ ์คํ ์ค์ธ ๋ ์ง์คํธ๋ฆฌ Pod๊ฐ ๋ ธ๋ B์ ๋ค์ ๋ฐฐํฌ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ ธ๋ B๋ ๋ ๋ ์ง์คํธ๋ฆฌ Pod๋ฅผ ๋ชจ๋ ์คํํฉ๋๋ค.
- ์ด์ ๋ ธ๋ B๊ฐ ์์ฝ ๋ถ๊ฐ๋ก ํ์๋๊ณ ๋น์ด ์์ต๋๋ค.
- ๋ ธ๋ B์ Pod ๋์ ๋ ๊ฐ๋ฅผ ๋ ธ์ถํ๋ ์๋น์ค์์๋ ํด๋น ๋์ ์ด ๋ ธ๋ A์ ๋ค์ ๋ฐฐํฌ๋ ๋๊น์ง ์ ์ ๋ชจ๋ ๋์ ์ด ์์ค๋ฉ๋๋ค.
์ธํ๋ผ ๊ตฌ์ฑ ์์๋ก ๋ ธ๋ ์ธ ๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด ํ๋ก์ธ์ค์์๋ ์๋น์ค๊ฐ ์ค๋จ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ Pod ์์ฝ์ผ๋ก ์ธํด ๋น์์ง ํ ๋ค์ ์ ๊ณต๋ ๋ง์ง๋ง ๋ ธ๋์๋ ๋ ์ง์คํธ๋ฆฌ Pod๊ฐ ์์ต๋๋ค. ๊ธฐํ ๋ ธ๋ ์ค ํ๋์๋ ๋ ์ง์คํธ๋ฆฌ Pod๊ฐ ๋ ๊ฐ ์์ต๋๋ค. ๋ง์ง๋ง ๋ ธ๋์ ์ธ ๋ฒ์งธ ๋ ์ง์คํธ๋ฆฌ Pod๋ฅผ ์์ฝํ๋ ค๋ฉด Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ผ์ค๋ฌ์์ ๋์ผํ ๋ ธ๋์ ๋ ๋ ์ง์คํธ๋ฆฌ Pod๋ฅผ ๋ฐฐ์นํ์ง ์๋๋ก ํฉ๋๋ค.
์ถ๊ฐ ์ ๋ณด
- Pod ์ ์ฌ์ฑ ๋ฐฉ์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ ์ฌ์ฑ ๋ฐ ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ Pod์ ์๋์ ์ธ Pod ๋ฐฐ์น๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
6.9.2. Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ์ฌ๋ถํ
Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ ๋ ธ๋ ์ ์ฌ์ฑ ๋ฐฉ์ง์ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. Pod๋ฅผ ๋ฐฐํฌํ ๋ค๋ฅธ ์ ์ ํ ์์น๊ฐ ์๋ ๊ฒฝ์ฐ ๋ ธ๋ ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์๋ฐํ ์ ์์ต๋๋ค. Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ํ์ ๋๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์ด ๊ท์น์์๋ ๋ ๊ฐ์ ์ธํ๋ผ ๋
ธ๋๋ง ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ํ ๊ฐ๋ฅผ ์ฌ๋ถํ
ํ๋ฉด ์ปจํ
์ด๋ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ Pod๊ฐ ๋ค๋ฅธ ๋
ธ๋์์ ์คํ๋์ง ์์ต๋๋ค. oc get pods
๋ ์ ์ ํ ๋
ธ๋๊ฐ ์ ๊ณต๋ ๋๊น์ง Pod๋ฅผ ์ค๋น๋์ง ์์ ๊ฒ์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค. ๋
ธ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋ชจ๋ Pod๊ฐ ์ค๋น ์ํ๊ฐ ๋๋ฉด ๋ค์ ๋
ธ๋๋ฅผ ์ฌ์์ํ ์ ์์ต๋๋ค.
์ ์ฐจ
Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ฌ๋ถํ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ ธ๋ ์ฌ์์ ํธ์งํ์ฌ Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: with-pod-antiaffinity spec: affinity: podAntiAffinity: 1 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 3 podAffinityTerm: labelSelector: matchExpressions: - key: registry 4 operator: In 5 values: - default topologyKey: kubernetes.io/hostname #...
- 1
- Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ๊ตฌ์ฑํ๋ ์คํ ์์ ๋๋ค.
- 2
- ๊ธฐ๋ณธ ๊ท์น์ ์ ์ํฉ๋๋ค.
- 3
- ๊ธฐ๋ณธ ๊ท์น์ ๊ฐ์ค์น๋ฅผ ์ง์ ํฉ๋๋ค. ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ๋์ ๋ ธ๋๊ฐ ์ฐ์ ํฉ๋๋ค.
- 4
- ์ ์ฌ์ฑ ๋ฐฉ์ง ๊ท์น์ด ์ ์ฉ๋๋ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ Pod ๋ผ๋ฒจ์ ๋ํ ์ค๋ช ์ ๋๋ค. ๋ผ๋ฒจ์ ํค์ ๊ฐ์ ์ง์ ํฉ๋๋ค.
- 5
- ์ด ์ฐ์ฐ์๋ ๊ธฐ์กด Pod์ ๋ผ๋ฒจ๊ณผ ์ Pod ์ฌ์์ ์๋
matchExpression
๋งค๊ฐ๋ณ์์ ๊ฐ ์งํฉ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.In
,NotIn
,Exists
๋๋DoesNotExist
์ผ ์ ์์ต๋๋ค.
์ด ์์ ์์๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ Pod์
registry=default
๋ผ๋ฒจ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. Pod ์ ์ฌ์ฑ ๋ฐฉ์ง์์๋ ๋ชจ๋ Kubernetes ์ผ์น ํํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.-
์์ฝ ์ ์ฑ
ํ์ผ์์
MatchInterPodAffinity
์ค์ผ์ค๋ฌ ์์ ์๋ฅผ ํ์ฑํํฉ๋๋ค. - ๋ ธ๋๋ฅผ ์ ์์ ์ผ๋ก ๋ค์ ์์ํฉ๋๋ค.
6.9.3. ๋ผ์ฐํฐ๋ฅผ ์คํํ๋ ๋ ธ๋๋ฅผ ์ฌ๋ถํ ํ๋ ๋ฐฉ๋ฒ ์ดํด
๋๋ถ๋ถ์ ๊ฒฝ์ฐ OpenShift Container Platform ๋ผ์ฐํฐ๋ฅผ ์คํํ๋ Pod์์๋ ํธ์คํธ ํฌํธ๋ฅผ ๋ ธ์ถํฉ๋๋ค.
PodFitsPorts
์ค์ผ์ค๋ฌ ์์ ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ผํ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ฐํฐ Pod๊ฐ ๋์ผํ ๋
ธ๋์์ ์คํ๋์ง ์๊ณ Pod ์ ์ฌ์ฑ ๋ฐฉ์ง๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ๋ผ์ฐํฐ์์ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด IP ์ฅ์ ์กฐ์น๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ถ๊ฐ๋ก ํ์ํ ์กฐ์น๋ ์์ต๋๋ค.
๊ณ ๊ฐ์ฉ์ฑ์ ์ํด AWS Elastic Load Balancing๊ณผ ๊ฐ์ ์ธ๋ถ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ฐํฐ Pod์ ๊ฒฝ์ฐ ํด๋น ์๋น์ค์์ ๋ผ์ฐํฐ Pod ์ฌ์์์ ๋์ํด์ผ ํฉ๋๋ค.
๋๋ฌผ์ง๋ง ๋ผ์ฐํฐ Pod์ ํธ์คํธ ํฌํธ๊ฐ ๊ตฌ์ฑ๋์ด ์์ง ์์ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ธํ๋ผ ๋ ธ๋์ ๊ถ์ฅ๋๋ ์ฌ์์ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
6.9.4. ๋ ธ๋๋ฅผ ์ ์์ ์ผ๋ก ์ฌ๋ถํ
๋ ธ๋๋ฅผ ์ฌ๋ถํ ํ๊ธฐ ์ ์ ๋ ธ๋์ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๋ ค๋ฉด etcd ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด kubeconfig
ํ์ผ์ ์ธ์ฆ์๊ฐ ์๋ oc login
๋ช
๋ น์ ์ํํด์ผ ํ๋ ๋จ์ผ ๋
ธ๋ OpenShift ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ ๋
ธ๋๋ฅผ ์ฐจ๋จํ๊ณ ๋๋ ์ด๋ํ ํ์๋ oc adm
๋ช
๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ cordon์ผ๋ก ์ธํด openshift-oauth-apiserver
Pod๊ฐ ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ค์ ์ ์ฐจ์ ํ์๋ ๋๋ก SSH๋ฅผ ์ฌ์ฉํ์ฌ ๋
ธ๋์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๋จ์ผ ๋ ธ๋ OpenShift ํด๋ฌ์คํฐ์์ ์ฐจ๋จ ๋ฐ ๋๋ ์ด๋ ์ Pod๋ฅผ ๋ค์ ์์ฝํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ํ๋ฉด Pod, ํนํ ์ํฌ๋ก๋ Pod๋ฅผ ํตํด ๊ด๋ จ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ๊ฒ ์ค์งํ๊ณ ๋ฆด๋ฆฌ์คํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๋ ธ๋๋ฅผ ์ ์์ ์ผ๋ก ๋ค์ ์์ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ ธ๋๋ฅผ ์์ฝ ๋ถ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค.
$ oc adm cordon <node1>
์คํ์ค์ธ Pod๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ๊ธฐ ์ํด ๋ ธ๋๋ฅผ ๋๋ ์ด๋ํฉ๋๋ค.
$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force
์ฌ์ฉ์ ์ ์ PDB(Pod ์ค๋จ ์์ฐ)์ ์ฐ๊ฒฐ๋ Pod๋ฅผ ์ ๊ฑฐํ ์ ์๋ ์ค๋ฅ๊ฐ ํ์๋ ์ ์์ต๋๋ค.
์ค๋ฅ ์
error when evicting pods/"rails-postgresql-example-1-72v2w" -n "rails" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
์ด ๊ฒฝ์ฐ drain ๋ช ๋ น์ ๋ค์ ์คํํ์ฌ PDB ๊ฒ์ฌ๋ฅผ ๋ฐ์ดํจ์คํ๋
disable-eviction
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force --disable-eviction
๋๋ฒ๊ทธ ๋ชจ๋์์ ๋ ธ๋์ ์ก์ธ์คํฉ๋๋ค.
$ oc debug node/<node1>
๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ
/host
๋ก ๋ณ๊ฒฝํฉ๋๋ค.$ chroot /host
๋ ธ๋๋ฅผ ๋ค์ ์์ํฉ๋๋ค.
$ systemctl reboot
์ ์ ํ ๋ ธ๋๊ฐ
NotReady
์ํ๊ฐ ๋ฉ๋๋ค.์ฐธ๊ณ์ผ๋ถ ๋จ์ผ ๋ ธ๋ OpenShift ํด๋ฌ์คํฐ์์๋
openshift-oauth-apiserver
Pod๊ฐ ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ ธ๋๋ฅผ ์ฐจ๋จํ๊ณ ๋๋ ์ด๋ํ ํoc
๋ช ๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. SSH๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐํ๊ณ ์ฌ๋ถํ ์ ์ํํ ์ ์์ต๋๋ค.$ ssh core@<master-node>.<cluster_name>.<base_domain>
$ sudo systemctl reboot
์ฌ๋ถํ ์ด ์๋ฃ๋๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๋ ธ๋๋ฅผ ์์ฝ ๊ฐ๋ฅ์ผ๋ก ํ์ํฉ๋๋ค.
$ oc adm uncordon <node1>
์ฐธ๊ณ์ผ๋ถ ๋จ์ผ ๋ ธ๋ OpenShift ํด๋ฌ์คํฐ์์๋
openshift-oauth-apiserver
Pod๊ฐ ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ ธ๋๋ฅผ ์ฐจ๋จํ๊ณ ๋๋ ์ด๋ํ ํoc
๋ช ๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. SSH๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐํ๊ณ uncordonํ ์ ์์ต๋๋ค.$ ssh core@<target_node>
$ sudo oc adm uncordon <node> --kubeconfig /etc/kubernetes/static-pod-resources/kube-apiserver-certs/secrets/node-kubeconfigs/localhost.kubeconfig
๋ ธ๋๊ฐ ์ค๋น๋์๋์ง ํ์ธํฉ๋๋ค.
$ oc get node <node1>
์ถ๋ ฅ ์
NAME STATUS ROLES AGE VERSION <node1> Ready worker 6d22h v1.18.3+b0068a8
์ถ๊ฐ ์ ๋ณด
etcd ๋ฐ์ดํฐ ๋ฐฑ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ etcd ๋ฐ์ดํฐ ๋ฐฑ์ ์ ์ฐธ์กฐํ์ญ์์ค.
6.10. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํ์ฌ ๋ ธ๋ ๋ฆฌ์์ค ํด์
๊ด๋ฆฌ์๋ OpenShift Container Platform์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ๋ฆฌ์์ค๋ฅผ ํ๋ณดํจ์ผ๋ก์จ ๋ ธ๋๊ฐ ํจ์จ์ ์ผ๋ก ์คํ๋๋๋ก ํ ์ ์์ต๋๋ค.
OpenShift Container Platform ๋ ธ๋๋ ๋ ๊ฐ์ง ์ ํ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํฉ๋๋ค.
- ์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ : ์ข ๋ฃ๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ : ์คํ ์ค์ธ Pod์์ ์ฐธ์กฐํ์ง ์๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
6.10.1. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ์ข ๋ฃ๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ
์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์๋ ์ ๊ฑฐ ์๊ณ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ข ๋ฃ๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ ๊ฑฐ ์๊ณ ๊ฐ์ด ์ค์ ๋์ด ์์ผ๋ฉด ๋
ธ๋๋ API์์ ์ก์ธ์ค ๊ฐ๋ฅํ ๋ชจ๋ pod์ ์ปจํ
์ด๋๋ฅผ ์ ์งํ๋ ค๊ณ ํฉ๋๋ค. pod๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ ์ปจํ
์ด๋๋ ์ญ์ ๋ฉ๋๋ค. pod๊ฐ ์ญ์ ๋์ง ์๊ณ ์ ๊ฑฐ ์๊ณ ๊ฐ์ ๋๋ฌํ์ง ์๋ ํ ์ปจํ
์ด๋๋ ๋ณด์กด๋ฉ๋๋ค. ๋
ธ๋๊ฐ ๋์คํฌ ๋ถ์กฑ (disk pressure) ์ํ๊ฐ ๋๋ฉด ์ปจํ
์ด๋๊ฐ ์ญ์ ๋๊ณ oc logs
๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๋ก๊ทธ์ ๋ ์ด์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- eviction-soft - ์ํํธ ์ ๊ฑฐ ์๊ณ ๊ฐ์ ๊ด๋ฆฌ์๊ฐ ์ง์ ํ ํ์ ์ ์ ๊ธฐ๊ฐ์ด ์๋ ์ ๊ฑฐ ์๊ณ ๊ฐ๊ณผ ์ผ์นํฉ๋๋ค.
- eviction-hard - ํ๋ ์ ๊ฑฐ ์๊ณ ๊ฐ์ ๋ํ ์ ์ ๊ธฐ๊ฐ์ด ์์ผ๋ฉฐ ๊ฐ์ง๋๋ ๊ฒฝ์ฐ OpenShift Container Platform์ ์ฆ์ ์์ ์ ์ํํฉ๋๋ค.
๋ค์ ํ์๋ ์ ๊ฑฐ ์๊ณ๊ฐ์ด ๋์ด๋์ด ์์ต๋๋ค.
๋ ธ๋ ์ํ | ์ ๊ฑฐ ์ ํธ | ์ค๋ช |
---|---|---|
MemoryPressure |
| ๋ ธ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค. |
DiskPressure |
|
๋
ธ๋ ๋ฃจํธ ํ์ผ ์์คํ
, |
evictionHard
์ ๊ฒฝ์ฐ ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ชจ๋ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ง์ ๋ ๋งค๊ฐ๋ณ์๋ง ์ ์ฉ๋๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค.
๋
ธ๋๊ฐ ์ํํธ ์ ๊ฑฐ ์๊ณ ๊ฐ ์ํ๊ณผ ํํ ์ฌ์ด์์ ๋ณ๋ํ๊ณ ์ฐ๊ด๋ ์ ์ ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋์ง ์์ ๊ฒฝ์ฐ ํด๋น ๋
ธ๋๋ ์ง์์ ์ผ๋ก true
์ false
์ฌ์ด์์ ๋ณ๋ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค์ผ์ค๋ฌ๋ ์๋ชป๋ ์ค์ผ์ค๋ง ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ณ๋์ ๋ฐฉ์งํ๋ ค๋ฉด eviction-pressure-transition-period
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Container Platform์ด ๋ถ์กฑ ์ํ์์ ์ ํํ๊ธฐ ์ ์ ๋๊ธฐํด์ผํ๋ ์๊ฐ์ ์ ์ดํฉ๋๋ค. OpenShift Container Platform์ false ์ํ๋ก ์ ํ๋๊ธฐ ์ ์ ์ง์ ๋ ๊ธฐ๊ฐ์ ์ง์ ๋ ๋ถ์กฑ ์ํ์ ๋ํด ์ ๊ฑฐ ์๊ณ ๊ฐ์ ์ถฉ์กฑํ๋๋ก ์ค์ ํ์ง ์์ต๋๋ค.
6.10.2. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ์ด๋ฏธ์ง๊ฐ ์ ๊ฑฐ๋๋ ๋ฐฉ๋ฒ ์ดํด
์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์์๋ ์คํ ์ค์ธ Pod์์ ์ฐธ์กฐํ์ง ์๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
OpenShift Container Platform์ cAdvisor ์์ ๋ณด๊ณ ํ๋ ๋์คํฌ ์ฌ์ฉ๋์ ๊ธฐ๋ฐ์ผ๋ก ๋ ธ๋์์ ์ญ์ ํ ์ด๋ฏธ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฑ ์ ๋ค์ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋กํฉ๋๋ค.
- ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํธ๋ฆฌ๊ฑฐํ๋ ๋์คํฌ ์ฌ์ฉ๋์ ๋ฐฑ๋ถ์จ (์ ์๋ก ํ์)์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 85์ ๋๋ค.
- ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ํด์ ํ๋ ค๊ณ ํ๋ ๋์คํฌ ์ฌ์ฉ๋์ ๋ฐฑ๋ถ์จ (์ ์๋ก ํ์)์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 80์ ๋๋ค.
์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋ณ์๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
์ค์ | ์ค๋ช |
---|---|
| ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํด ์ด๋ฏธ์ง๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ ์ ์ฌ์ฉ๋์ง ์์ ์ด๋ฏธ์ง์ ์ต์ ๋ณด์กด ๊ธฐ๊ฐ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 2m์ ๋๋ค. |
| ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํธ๋ฆฌ๊ฑฐํ๋ ์ ์๋ก ํ์๋๋ ๋์คํฌ ์ฌ์ฉ๋์ ๋ฐฑ๋ถ์จ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 85์ ๋๋ค. |
| ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ํด์ ํ๋ ค๊ณ ํ๋ ๋์คํฌ ์ฌ์ฉ๋์ ๋ฐฑ๋ถ์จ (์ ์๋ก ํ์)์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 80์ ๋๋ค. |
๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์คํ์ผ๋ก ๋ ๊ฐ์ ์ด๋ฏธ์ง ๋ชฉ๋ก์ด ๊ฒ์๋ฉ๋๋ค.
- ํ๋ ์ด์์ Pod์์ ํ์ฌ ์คํ์ค์ธ ์ด๋ฏธ์ง ๋ชฉ๋ก์ ๋๋ค.
- ํธ์คํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ด๋ฏธ์ง ๋ชฉ๋ก์ ๋๋ค.
์๋ก์ด ์ปจํ ์ด๋๊ฐ ์คํ๋๋ฉด ์๋ก์ด ์ด๋ฏธ์ง๊ฐ ๋ํ๋ฉ๋๋ค. ๋ชจ๋ ์ด๋ฏธ์ง์๋ ํ์ ์คํฌํ๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ฏธ์ง๊ฐ ์คํ ์ค์ด๊ฑฐ๋ (์์ ์ฒซ ๋ฒ์งธ ๋ชฉ๋ก) ์๋ก ๊ฐ์ง๋ ๊ฒฝ์ฐ (์์ ๋ ๋ฒ์งธ ๋ชฉ๋ก) ํ์ฌ ์๊ฐ์ผ๋ก ํ์๋ฉ๋๋ค. ๋๋จธ์ง ์ด๋ฏธ์ง๋ ์ด๋ฏธ ์ด์ ์คํ์์ ํ์๋ฉ๋๋ค. ๋ชจ๋ ์ด๋ฏธ์ง๋ ํ์ ์คํฌํ๋ณ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
์ปฌ๋ ์ ์ด ์์๋๋ฉด ์ค์ง ๊ธฐ์ค์ด ์ถฉ์กฑ๋ ๋๊น์ง ๊ฐ์ฅ ์ค๋๋ ์ด๋ฏธ์ง๊ฐ ๋จผ์ ์ญ์ ๋ฉ๋๋ค.
6.10.3. ์ปจํ ์ด๋ ๋ฐ ์ด๋ฏธ์ง์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ตฌ์ฑ
๊ด๋ฆฌ์๋ ๊ฐ machine config pool๋ง๋ค kubeletConfig
์ค๋ธ์ ํธ๋ฅผ ์์ฑํ์ฌ OpenShift Container Platform์ด ๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
OpenShift Container Platform์ ๊ฐ ๋จธ์ ๊ตฌ์ฑ ํ์ ๋ํด ํ๋์ kubeletConfig
์ค๋ธ์ ํธ๋ง ์ง์ํฉ๋๋ค.
๋ค์ ์ค ํ๋์ ์กฐํฉ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ์ํํธ ์ปจํ ์ด๋ ์ ๊ฑฐ
- ํ๋ ์ปจํ ์ด๋ ์ ๊ฑฐ
- ์ด๋ฏธ์ง ์ ๊ฑฐ
์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์๋ ์ข ๋ฃ๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์์๋ ์คํ ์ค์ธ Pod์์ ์ฐธ์กฐํ์ง ์๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ตฌ์ฑํ ๋ ธ๋ ์ ํ์ ์ ์
MachineConfigPool
CRD์ ์ฐ๊ด๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.$ oc edit machineconfigpool <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit machineconfigpool worker
์ถ๋ ฅ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: creationTimestamp: "2022-11-16T15:34:25Z" generation: 4 labels: pools.operator.machineconfiguration.openshift.io/worker: "" 1 name: worker #...
- 1
- ๋ ์ด๋ธ์ด Labels ์๋์ ํ์๋ฉ๋๋ค.
์์ ์ ๋ณด๋ผ๋ฒจ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํค/๊ฐ ์์ ์ถ๊ฐํฉ๋๋ค.
$ oc label machineconfigpool worker custom-kubelet=small-pods
ํ๋ก์ธ์ค
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ํ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค (CR)๋ฅผ ๋ง๋ญ๋๋ค.
์ค์ํ๋์ ํ์ผ ์์คํ ์ด ์๊ฑฐ๋
/var/lib/kubelet
๋ฐ/var/lib/containers/
๊ฐ ๋์ผํ ํ์ผ ์์คํ ์ ์๋ ๊ฒฝ์ฐ, ๊ฐ์ด ๊ฐ์ฅ ๋ง์ ์ค์ ์ ๋จผ์ ์ถฉ์กฑํ๋ฏ๋ก ํ์ผ ์์คํ ์ด ์ ๊ฑฐ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ CR์ ์ค์ ์:
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: worker-kubeconfig 1 spec: machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" 2 kubeletConfig: evictionSoft: 3 memory.available: "500Mi" 4 nodefs.available: "10%" nodefs.inodesFree: "5%" imagefs.available: "15%" imagefs.inodesFree: "10%" evictionSoftGracePeriod: 5 memory.available: "1m30s" nodefs.available: "1m30s" nodefs.inodesFree: "1m30s" imagefs.available: "1m30s" imagefs.inodesFree: "1m30s" evictionHard: 6 memory.available: "200Mi" nodefs.available: "5%" nodefs.inodesFree: "4%" imagefs.available: "10%" imagefs.inodesFree: "5%" evictionPressureTransitionPeriod: 0s 7 imageMinimumGCAge: 5m 8 imageGCHighThresholdPercent: 80 9 imageGCLowThresholdPercent: 75 10 #...
- 1
- ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ๋๋ค.
- 2
- ๋จธ์ ๊ตฌ์ฑ ํ์์ ๋ผ๋ฒจ์ ์ง์ ํฉ๋๋ค.
- 3
- ์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ eviction:
evictionSoft
๋๋evictionHard
์ ๋๋ค. - 4
- ์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ: ํน์ ์ ๊ฑฐ ํธ๋ฆฌ๊ฑฐ ์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ๊ฑฐ ์๊ณ๊ฐ์ ๋๋ค.
- 5
- ์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ: ์ํํธ ์ ๊ฑฐ์ ๋ํ grace ๊ธฐ๊ฐ์ ๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋
eviction-hard
์๋ ์ ์ฉ๋์ง ์์ต๋๋ค. - 6
- ์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ: ํน์ ์ ๊ฑฐ ํธ๋ฆฌ๊ฑฐ ์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ๊ฑฐ ์๊ณ๊ฐ์ ๋๋ค.
evictionHard
์ ๊ฒฝ์ฐ ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ชจ๋ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ง์ ๋ ๋งค๊ฐ๋ณ์๋ง ์ ์ฉ๋๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. - 7
- ์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ: ์ ๊ฑฐ ๋ถ์กฑ ์ํ์์ ์ ํ๋๊ธฐ ์ ์ ๋๊ธฐํ๋ ์๊ฐ์ ๋๋ค.
- 8
- ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ๊ฐ๋น์ง ์์ง์ ์ํด ์ด๋ฏธ์ง๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ ์ ์ฌ์ฉ๋์ง ์์ ์ด๋ฏธ์ง์ ์ต์ ์๋ช ์ ๋๋ค.
- 9
- ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ: ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํธ๋ฆฌ๊ฑฐํ๋ ๋์คํฌ ์ฌ์ฉ๋์ ๋ฐฑ๋ถ์จ(์ ์๋ก ํ์)์ ๋๋ค.
- 10
- ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ํด์ ํ๋ ค๊ณ ํ๋ ๋์คํฌ ์ฌ์ฉ๋์ ๋ฐฑ๋ถ์จ(์ ์๋ก ํ์)์ ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ CR์ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f gc-container.yaml
์ถ๋ ฅ ์
kubeletconfig.machineconfiguration.openshift.io/gc-container created
๊ฒ์ฆ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ํ์ฑํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค์ ์ง์ ํ Machine Config Pool์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ํ ๊ตฌํ๋ ๋๊น์ง
UPDATING
๊ณผ ํจ๊ป 'true'๋ก ํ์๋ฉ๋๋ค.$ oc get machineconfigpool
์ถ๋ ฅ ์
NAME CONFIG UPDATED UPDATING master rendered-master-546383f80705bd5aeaba93 True False worker rendered-worker-b4c51bb33ccaae6fc4a6a5 False True
6.11. OpenShift Container Platform ํด๋ฌ์คํฐ์ ๋ ธ๋์ ๋ฆฌ์์ค ํ ๋น
๋ ์์ ์ ์ธ ์์ฝ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ๋
ธ๋ ๋ฆฌ์์ค ๊ณผ๋ค ํ ๋น์ ์ต์ํํ๋ ค๋ฉด ๊ธฐ๋ณธ ๋
ธ๋ ๊ตฌ์ฑ ์์(์: kubelet
, kube-proxy
) ๋ฐ ๋๋จธ์ง ์์คํ
๊ตฌ์ฑ ์์(์: sshd
, NetworkManager
)์์ ์ฌ์ฉํ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค์ ์ผ๋ถ๋ฅผ ์์ฝํ์ญ์์ค. ์์ฝํ ๋ฆฌ์์ค๋ฅผ ์ง์ ํ๋ฉด Pod์์ ์ฌ์ฉํ ์ ์๋ ๋
ธ๋์ ๋๋จธ์ง CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค์ ๋ํ ์ธ๋ถ ์ ๋ณด๊ฐ ์ค์ผ์ค๋ฌ์ ์ ๊ณต๋ฉ๋๋ค. OpenShift Container Platform์ด ๋
ธ๋์ ๊ฐ์ฅ ์ ํฉํ system-reserved
CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๊ฒฐ์ ํ๋๋ก ํ์ฉํ๊ฑฐ๋ ๋
ธ๋์ ๊ฐ์ฅ ์ ํฉํ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๊ฒฐ์ ํ๊ณ ์ค์ ํ ์ ์์ต๋๋ค.
๋ฆฌ์์ค ๊ฐ์ ์๋์ผ๋ก ์ค์ ํ๋ ค๋ฉด kubelet ๊ตฌ์ฑ CR์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋จธ์ ๊ตฌ์ฑ CR์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
6.11.1. ๋ ธ๋์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ ์ดํด
OpenShift Container Platform์์ ๋ ธ๋ ๊ตฌ์ฑ ์์์ฉ์ผ๋ก ์์ฝ๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ ๋ค์ ๋ ๋ ธ๋ ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
์ค์ | ์ค๋ช |
---|---|
|
์ด ์ค์ ์ OpenShift Container Platform๊ณผ ํจ๊ป ์ฌ์ฉ๋์ง ์์ต๋๋ค. |
|
์ด ์ค์ ์ CRI-O ๋ฐ Kubelet๊ณผ ๊ฐ์ ๋
ธ๋ ๊ตฌ์ฑ ์์ ๋ฐ ์์คํ
๊ตฌ์ฑ ์์์ ์์ฝํ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค. ๊ธฐ๋ณธ ์ค์ ์ OpenShift Container Platform ๋ฐ Machine Config Operator ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. |
ํ๋๊ทธ๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. ํ๋๊ทธ๋ฅผ ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ ํ ๋น๋ ๋ฆฌ์์ค๋ ํ ๋น ๊ฐ๋ฅ ๋ฆฌ์์ค๋ฅผ ๋์ ํ๊ธฐ ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ธ๋์ ์ฉ๋์ผ๋ก ์ค์ ๋ฉ๋๋ค.
reservedSystemCPUs
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํน๋ณํ ์์ฝํ CPU๋ kube-reserved
๋๋ system-reserved
๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋นํ ์ ์์ต๋๋ค.
6.11.1.1. OpenShift Container Platform์์ ํ ๋น๋ ๋ฆฌ์์ค๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ
ํ ๋น๋ ๋ฆฌ์์ค ์์ ๋ค์ ๊ณต์์ ๋ฐ๋ผ ๊ณ์ฐ๋ฉ๋๋ค.
[Allocatable] = [Node Capacity] - [system-reserved] - [Hard-Eviction-Thresholds]
Allocatable
์์ Hard-Eviction-Thresholds
๋ฅผ ๋ณด๋ฅํ๋ฉด Allocatable
๊ฐ์ด ๋
ธ๋ ์์ค์์ Pod์ ์ ์ฉ๋๋ฏ๋ก ์์คํ
์ ๋ขฐ๋๊ฐ ํฅ์๋ฉ๋๋ค.
Allocatable
์ด ์์์ธ ๊ฒฝ์ฐ 0
์ผ๋ก ์ค์ ๋ฉ๋๋ค.
๊ฐ ๋
ธ๋๋ ์ปจํ
์ด๋ ๋ฐํ์ ๋ฐ kubelet์์ ์ฌ์ฉํ๋ ์์คํ
๋ฆฌ์์ค๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. system-reserved
๋งค๊ฐ๋ณ์ ๊ตฌ์ฑ์ ๋จ์ํํ๋ ค๋ฉด Node Summary API๋ฅผ ์ฌ์ฉํ์ฌ ๋
ธ๋์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ํ์ธํฉ๋๋ค. ๋
ธ๋ ์์ฝ์ /api/v1/nodes/<node>/proxy/stats/summary
์ ์ ๊ณต๋ฉ๋๋ค.
6.11.1.2. ๋ ธ๋์์ ๋ฆฌ์์ค ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
๋ ธ๋๋ ๊ตฌ์ฑ๋ ํ ๋น ๊ฐ๋ฅ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก Pod์์ ์ฌ์ฉํ ์ ์๋ ์ด ๋ฆฌ์์ค ์์ ์ ํํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋ ๋ฐํ์ ๋ฐ ๋ ธ๋ ์์ด์ ํธ์ ๊ฐ์ ์์คํ ์๋น์ค์ ํ์ํ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ Pod์์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ํ์ฌ ๋ ธ๋์ ์์ ์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ๊ด๋ฆฌ์๋ ๋ ธ๋ ์์ ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฆฌ์์ค ์ฌ์ฉ๋ ๋ชฉํ์ ๋ฐ๋ผ ๋ฆฌ์์ค๋ฅผ ์์ฝํด์ผ ํฉ๋๋ค.
๋ ธ๋๋ ์๋น์ค ํ์ง์ ์ ์ฉํ๋ ์ cgroup ๊ณ์ธต์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํฉ๋๋ค. ๋ชจ๋ Pod๋ ์์คํ ๋ฐ๋ชฌ๊ณผ๋ ๋ณ๋์ ์ ์ฉ cgroup ๊ณ์ธต์์ ์์๋ฉ๋๋ค.
๊ด๋ฆฌ์๋ ์๋น์ค ํ์ง์ด ๋ณด์ฅ๋ Pod์ ๋น์ทํ ์์คํ
๋ฐ๋ชฌ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์์คํ
๋ฐ๋ชฌ์ ๋ฐ์ธ๋ฉ ์ ์ด ๊ทธ๋ฃน ๋ด์์ ๋ฒ์คํธ๋ ์ ์์ผ๋ฉฐ ์ด ๋์์ ํด๋ฌ์คํฐ ๋ฐฐํฌ์ ์ผ๋ถ๋ก ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. system-reserved
์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์ง์ ํ์ฌ ์์คํ
๋ฐ๋ชฌ์ ์ํ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์์ฝํฉ๋๋ค.
system-reserved
์ ํ์ ๊ฐ์ ์ ์ฉํ์ฌ ์ค์ํ ์์คํ
์๋น์ค์์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์์ ํ์ง ๋ชปํ๋๋ก ํ ์ ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ข
๋ฃ์์์ ์ค์ํ ์์คํ
์๋น์ค๋ฅผ ์ข
๋ฃํ ์ ์์ต๋๋ค. ์ ํํ ์ถ์ ์น๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋
ธ๋๋ฅผ ์ฒ ์ ํ ํ๋กํ์ผ๋งํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ข
๋ฃ์์์ ํด๋น ๊ทธ๋ฃน์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ ๋ ์ค์ํ ์์คํ
์๋น์ค๋ฅผ ๋ณต๊ตฌํ ์ ์๋ค๊ณ ํ์ ํ๋ ๊ฒฝ์ฐ์๋ง system-reserved
๋ฅผ ๊ฐ์ ์ ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
6.11.1.3. ์ ๊ฑฐ ์๊ณ๊ฐ ์ดํด
๋ ธ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ์ ์๋ ๊ฒฝ์ฐ ์ ์ฒด ๋ ธ๋์ ํด๋น ๋ ธ๋์์ ์คํ ์ค์ธ ๋ชจ๋ Pod์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์คํ ๋ฐ๋ชฌ์์ ์์ฝ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ง์ ์์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ ์ ์์ต๋๋ค. ๋ ธ๋์์๋ ์์คํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋ ์ค์ด๊ธฐ ์ํด ๋ฆฌ์์ค ๋ถ์กฑ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
--eviction-hard
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ถ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ๋
ธ๋๋ ๋
ธ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฉ์ฑ์ด ์ด ์ ๋๊ฐ ๋๋ ๋ฐฑ๋ถ์จ ์๋๋ก ๋จ์ด์ง๋ฉด Pod๋ฅผ ์ ๊ฑฐํ๋ ค๊ณ ํฉ๋๋ค. ๋
ธ๋์ ์์คํ
๋ฐ๋ชฌ์ด ์๋ ๊ฒฝ์ฐ Pod๋ ๋ฉ๋ชจ๋ฆฌ capacity - eviction-hard
๋ก ์ ํ๋ฉ๋๋ค. ์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ์ ๋๋ฌํ๊ธฐ ์ ์ ์ ๊ฑฐํ ๋ฒํผ๋ก ๋ฐ๋ก ์ค์ ๋ ๋ฆฌ์์ค๋ฅผ Pod์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น ๊ฐ๋ฅํ ๋ ธ๋์ ์ํฅ์ ๋ณด์ฌ์ฃผ๋ ์์ ๋๋ค.
-
๋
ธ๋ ์ฉ๋์ด
32Gi
์ ๋๋ค. -
--system-reserved๊ฐ
3Gi
์ ๋๋ค. -
--eviction-hard๊ฐ
100Mi
๋ก ์ค์ ๋์ด ์์ต๋๋ค.
์ด ๋
ธ๋์ ๊ฒฝ์ฐ ์ ํจ ๋
ธ๋ ํ ๋น ๊ฐ๋ฅ ๊ฐ์ 28.9Gi
์
๋๋ค. ๋
ธ๋ ๋ฐ ์์คํ
๊ตฌ์ฑ ์์์์ ์์ฝ๋ ์ฉ๋์ ๋ชจ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Pod์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ 28.9Gi
์ด๊ณ ์ด ์๊ณ๊ฐ์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ Kubelet์ Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
๋
ธ๋ ํ ๋น ๊ฐ๋ฅ 28.9Gi
๋ฅผ ์ต์์ cgroups์ ํจ๊ป ์ ์ฉํ๋ฉด Pod์์ 28.9Gi
๋ฅผ ์ด๊ณผํ์ง ์์ต๋๋ค. ์์คํ
๋ฐ๋ชฌ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 3.1Gi
๋ฅผ ์ด๊ณผํ๋ฉด ์ ๊ฑฐ ์์
์ด ์ํ๋ฉ๋๋ค.
์ ์์์ ์์คํ
๋ฐ๋ชฌ์ด ์์ฝ๋ ์ฉ๋์ ๋ชจ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๋
ธ๋ ์ ๊ฑฐ๊ฐ ์์๋๊ธฐ ์ ์ Pod์ ๋ฐ์ธ๋ฉ cgroup์์ memcg OOM์ด ์ข
๋ฃ๋ฉ๋๋ค. ์ด๋ฌํ ์ํฉ์์ QoS๋ฅผ ๋ ์ ์ ์ฉํ๊ธฐ ์ํด ๋
ธ๋๋ ๋ชจ๋ Pod๊ฐ Node Allocatable + Eviction Hard Thresholds
๊ฐ ๋๋๋ก ์ต์์ cgroup์ ํ๋ ์ ๊ฑฐ ์๊ณ๊ฐ์ ์ ์ฉํฉ๋๋ค.
์์คํ
๋ฐ๋ชฌ์์ ์์ฝ๋ ์ฉ๋์ ๋ชจ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๋
ธ๋๋ Pod์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 28.9Gi
๋ฅผ ์ด๊ณผํ ๋๋ง๋ค Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ ๊ฑฐ ์์
์ด ์ ์๊ฐ์ ์ํ๋์ง ์์ Pod์์ 29Gi
์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด Pod๊ฐ OOM ์ข
๋ฃ๋ฉ๋๋ค.
6.11.1.4. ์ค์ผ์ค๋ฌ์์ ๋ฆฌ์์ค ๊ฐ์ฉ์ฑ์ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ
์ค์ผ์ค๋ฌ๋ node.Status.Capacity
๊ฐ ์๋ node.Status.Allocatable
์ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋
ธ๋๊ฐ Pod ์์ฝ ํ๋ณด๊ฐ ๋ ์ง ๊ฒฐ์ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ ธ๋๋ ํด๋ฌ์คํฐ์์ ์ ์ฒด ๋จธ์ ์ฉ๋์ ์์ฝํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค.
6.11.2. ๋ ธ๋์ ๋ฆฌ์์ค ์๋ ํ ๋น
OpenShift Container Platform์ ํน์ ๋จธ์ ๊ตฌ์ฑ ํ๊ณผ ์ฐ๊ฒฐ๋ ๋
ธ๋์ ๊ฐ์ฅ ์ ํฉํ system-reserved
CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ํ์ธํ๊ณ ๋
ธ๋๊ฐ ์์๋ ๋ ํด๋น ๊ฐ์ผ๋ก ๋
ธ๋๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก system-reserved
CPU๋ 500m
์ด๊ณ system-reserved
๋ฉ๋ชจ๋ฆฌ๋ 1Gi
์
๋๋ค.
๋
ธ๋์์ system-reserved
๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๊ฒฐ์ ํ๊ณ ํ ๋นํ๋ ค๋ฉด KubeletConfig
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํ์ฌ autoSizingReserved: true
๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ ๋
ธ๋์ ์คํฌ๋ฆฝํธ๋ ๊ฐ ๋
ธ๋์ ์ค์น๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๊ธฐ๋ฐ์ผ๋ก ์์ฝ๋ ๊ฐ ๋ฆฌ์์ค์ ์ต์ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ์ฉ๋์ ๋๋ฆฌ๊ธฐ ์ํด์๋ ์์ฝ๋ ๋ฆฌ์์ค์์ ํด๋น ์ฆ๊ฐ๊ฐ ํ์ํ๋ค๋ ์ ์ ๊ณ ๋ คํฉ๋๋ค.
์ต์ ์ system-reserved
์ค์ ์ ์๋์ผ๋ก ํ์ธํ๋ฉด ํด๋ฌ์คํฐ๊ฐ ํจ์จ์ ์ผ๋ก ์คํ๋๊ณ ์๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ ๊ฐ์ ์๋์ผ๋ก ๊ณ์ฐ ๋ฐ ์
๋ฐ์ดํธํ ํ์ ์์ด CRI-O ๋ฐ kubelet๊ณผ ๊ฐ์ ์์คํ
๊ตฌ์ฑ ์์์ ๋ฆฌ์์ค ๋ถ์กฑ์ผ๋ก ์ธํด ๋
ธ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ตฌ์ฑํ ๋ ธ๋ ์ ํ์ ์ ์
MachineConfigPool
์ค๋ธ์ ํธ์ ์ฐ๊ด๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.$ oc edit machineconfigpool <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit machineconfigpool worker
์ถ๋ ฅ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: creationTimestamp: "2022-11-16T15:34:25Z" generation: 4 labels: pools.operator.machineconfiguration.openshift.io/worker: "" 1 name: worker #...
- 1
- ๋ ์ด๋ธ์
Labels
์๋์ ํ์๋ฉ๋๋ค.
์์ ์ ๋ณด์ ์ ํ ๋ผ๋ฒจ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํค/๊ฐ ์์ ์ถ๊ฐํฉ๋๋ค.
$ oc label machineconfigpool worker custom-kubelet=small-pods
ํ๋ก์ธ์ค
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ํ CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค.
๋ฆฌ์์ค ํ ๋น CR ๊ตฌ์ฑ ์ํ
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: dynamic-node 1 spec: autoSizingReserved: true 2 machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" 3 #...
- 1
- CR์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 2
- OpenShift Container Platform์ด ์ง์ ๋ ๋ผ๋ฒจ๊ณผ ์ฐ๊ฒฐ๋ ๋ ธ๋์์
system-reserved
๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ๊ฒฐ์ ํ๊ณ ํ ๋นํ ์ ์๋๋กautoSizingReserved
๋งค๊ฐ๋ณ์ ์ธํธ๋ฅผtrue
๋ก ์ถ๊ฐํฉ๋๋ค. ํด๋น ๋ ธ๋์์ ์๋ ํ ๋น์ ๋นํ์ฑํํ๋ ค๋ฉด ์ด ๋งค๊ฐ๋ณ์๋ฅผfalse
๋ก ์ค์ ํฉ๋๋ค. - 3
- "์ฌ์ ์๊ตฌ ์ฌํญ" ์น์ ์ ๊ตฌ์ฑํ ๋จธ์ ๊ตฌ์ฑ ํ์์ ๋ผ๋ฒจ์ ์ง์ ํฉ๋๋ค.
custom-kubelet: small-pods
, default ๋ ์ด๋ธ, pool.operator.machineconfiguration.openshift.io/worker: "" ์ ๊ฐ์ ๋จธ์ ๊ตฌ์ฑ ํ์
๋ํด ์ํ๋ ๋ ์ด๋ธ์ ์ ํํ ์ ์์ต๋๋ค.
์ด์ ์์ ์์๋ ๋ชจ๋ ์์ ์ ๋ ธ๋์์ ์๋ ๋ฆฌ์์ค ํ ๋น์ ํ์ฑํํฉ๋๋ค. OpenShift Container Platform์ ๋ ธ๋๋ฅผ ๋๋ ์ธํ๊ณ kubelet ๊ตฌ์ฑ์ ์ ์ฉํ ๋ค์ ๋ ธ๋๋ฅผ ๋ค์ ์์ํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ CR์ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
๊ฒ์ฆ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ตฌ์ฑํ ๋ ธ๋์ ๋ก๊ทธ์ธํฉ๋๋ค.
$ oc debug node/<node_name>
๋๋ฒ๊ทธ ์ ๋ด์์
/host
๋ฅผ root ๋๋ ํฐ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค.# chroot /host
/etc/node-sizing.env
ํ์ผ์ ํ์ธํฉ๋๋ค.์ถ๋ ฅ ์
SYSTEM_RESERVED_MEMORY=3Gi SYSTEM_RESERVED_CPU=0.08
kubelet์
/etc/node-sizing.env
ํ์ผ์system-reserved
๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ์ด์ ์์์ ์์ ์ ๋ ธ๋์0.08
CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ 3Gi๊ฐ ํ ๋น๋ฉ๋๋ค. ์ต์ ์ ๊ฐ์ด ํ์๋๋ ๋ฐ ๋ช ๋ถ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
6.11.3. ๋ ธ๋์ ์๋์ผ๋ก ๋ฆฌ์์ค ํ ๋น
OpenShift Container Platform์ ํ ๋น์ ์ํด CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค ์ ํ์ ์ง์ํฉ๋๋ค. ephemeral-resource
๋ฆฌ์์ค ์ ํ๋ ์ง์๋ฉ๋๋ค. cpu
์ ํ์ ๊ฒฝ์ฐ 200m
,0.5
๋๋ 1
๊ณผ ๊ฐ์ ์ฝ์ด ๋จ์๋ก ๋ฆฌ์์ค ์๋์ ์ง์ ํฉ๋๋ค. memory
๋ฐ ephemeral-storage
์ ๊ฒฝ์ฐ 200Ki
,50Mi
๋๋ 5Gi
์ ๊ฐ์ ๋ฐ์ดํธ ๋จ์๋ก ๋ฆฌ์์ค ์๋์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก system-reserved
CPU๋ 500m
์ด๊ณ system-reserved
๋ฉ๋ชจ๋ฆฌ๋ 1Gi
์
๋๋ค.
๊ด๋ฆฌ์๋ <resource _type>=<resource_quantity> ์ ์งํฉ(์:
)์ ํตํด kubelet ๊ตฌ์ฑ CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
cpu=200m,memory=
512Mi
๋ฆฌ์์ค ๊ฐ์ ์๋์ผ๋ก ์ค์ ํ๋ ค๋ฉด kubelet ๊ตฌ์ฑ CR์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋จธ์ ๊ตฌ์ฑ CR์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ถ์ฅ system-reserved
๊ฐ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ถ์ฅ system-reserved ๊ฐ์ ์ฐธ์กฐํ์ญ์์ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ตฌ์ฑํ ๋ ธ๋ ์ ํ์ ์ ์
MachineConfigPool
CRD์ ์ฐ๊ด๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.$ oc edit machineconfigpool <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit machineconfigpool worker
์ถ๋ ฅ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: creationTimestamp: "2022-11-16T15:34:25Z" generation: 4 labels: pools.operator.machineconfiguration.openshift.io/worker: "" 1 name: worker #...
- 1
- ๋ ์ด๋ธ์ด Labels ์๋์ ํ์๋ฉ๋๋ค.
์์ ์ ๋ณด๋ผ๋ฒจ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํค/๊ฐ ์์ ์ถ๊ฐํฉ๋๋ค.
$ oc label machineconfigpool worker custom-kubelet=small-pods
ํ๋ก์ธ์ค
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ํ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค (CR)๋ฅผ ๋ง๋ญ๋๋ค.
๋ฆฌ์์ค ํ ๋น CR ๊ตฌ์ฑ ์ํ
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: set-allocatable 1 spec: machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" 2 kubeletConfig: systemReserved: 3 cpu: 1000m memory: 1Gi #...
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ CR์ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
6.12. ํด๋ฌ์คํฐ์ ๋ ธ๋์ ํน์ CPU ํ ๋น
์ ์ CPU ๊ด๋ฆฌ์ ์ ์ฑ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ์ ํน์ ๋ ธ๋์์ ์ฌ์ฉํ ํน์ CPU๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด CPU๊ฐ 24๊ฐ์ธ ์์คํ ์์ ์ปจํธ๋กค ํ๋ ์ธ์ 0~3๋ฒ CPU๋ฅผ ์์ฝํ์ฌ ์ปดํจํ ๋ ธ๋์์ 4~23๋ฒ CPU๋ฅผ ์ฌ์ฉํ๋๋ก ํ ์ ์์ต๋๋ค.
6.12.1. ๋ ธ๋์ CPU ์์ฝ
ํน์ ๋
ธ๋์ ์์ฝ๋ CPU ๋ชฉ๋ก์ ๋ช
์์ ์ผ๋ก ์ ์ํ๋ ค๋ฉด KubeletConfig
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํ์ฌ reservedSystemCPUs
๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ชฉ๋ก์ systemReserved
๋ฐ kubeReserved
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฝํ ์ ์๋ CPU๋ฅผ ๋์ฒดํฉ๋๋ค.
ํ๋ก์ธ์ค
๊ตฌ์ฑํ๋ ค๋ ๋ ธ๋ ์ ํ์ MCP(๋จธ์ ๊ตฌ์ฑ ํ)์ ์ฐ๊ฒฐ๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.
$ oc describe machineconfigpool <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc describe machineconfigpool worker
์ถ๋ ฅ ์
Name: worker Namespace: Labels: machineconfiguration.openshift.io/mco-built-in= pools.operator.machineconfiguration.openshift.io/worker= 1 Annotations: <none> API Version: machineconfiguration.openshift.io/v1 Kind: MachineConfigPool #...
- 1
- MCP ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.
KubeletConfig
CR์ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: set-reserved-cpus 1 spec: kubeletConfig: reservedSystemCPUs: "0,1,2,3" 2 machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" 3 #...
CR ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
์ถ๊ฐ ๋ฆฌ์์ค
-
systemReserved
๋ฐkubeReserved
๋งค๊ฐ๋ณ์์ ๋ํ ์์ธํ ๋ด์ฉ์ OpenShift Container Platform ํด๋ฌ์คํฐ์ ๋ ธ๋์ ๋ฆฌ์์ค ํ ๋น์ ์ฐธ์กฐํ์ญ์์ค.
6.13. kubelet์ TLS ๋ณด์ ํ๋กํ ํ์ฑํ
TLS(Transport Layer Security) ๋ณด์ ํ๋กํ์ ์ฌ์ฉํ์ฌ HTTP ์๋ฒ ์ญํ ์ ํ ๋ kubelet์ ํ์ํ TLS ์ํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. kubelet์ HTTP/GRPC ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ๋ น์ Pod์ ์ ์กํ๊ณ ๋ก๊ทธ๋ฅผ ์์งํ๋ฉฐ kubelet์ ํตํด Pod์์ exec ๋ช ๋ น์ ์คํํ๋ Kubernetes API ์๋ฒ์ ํต์ ํฉ๋๋ค.
TLS ๋ณด์ ํ๋กํ์ kubelet๊ณผ Kubernetes API ์๋ฒ ๊ฐ ํต์ ์ ๋ณดํธํ๊ธฐ ์ํด kubelet์ ์ฐ๊ฒฐํ ๋ Kubernetes API ์๋ฒ๊ฐ ์ฌ์ฉํด์ผ ํ๋ TLS ์ํธ๋ฅผ ์ ์ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก kubelet์ด Kubernetes API ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ญํ ์ ํ ๋ API ์๋ฒ์ TLS ๋งค๊ฐ๋ณ์๋ฅผ ์๋์ผ๋ก ํ์ํฉ๋๋ค.
6.13.1. TLS ๋ณด์ ํ๋กํ ์ดํด
TLS(Transport Layer Security) ๋ณด์ ํ๋กํ์ ์ฌ์ฉํ์ฌ ๋ค์ํ OpenShift Container Platform ๊ตฌ์ฑ ์์์ ํ์ํ TLS ์ํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. OpenShift Container Platform TLS ๋ณด์ ํ๋กํ์ Mozilla ๊ถ์ฅ ๊ตฌ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
๊ฐ ๊ตฌ์ฑ ์์์ ๋ํด ๋ค์ TLS ๋ณด์ ํ๋กํ ์ค ํ๋๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
Profile | ์ค๋ช |
---|---|
| ์ด ํ๋กํ์ ๋ ๊ฑฐ์ ํด๋ผ์ด์ธํธ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ํ๋กํ์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ๊ถ์ฅ ๊ตฌ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
์ฐธ๊ณ Ingress ์ปจํธ๋กค๋ฌ์ ๊ฒฝ์ฐ ์ต์ TLS ๋ฒ์ ์ด 1.0์์ 1.1๋ก ๋ณํ๋ฉ๋๋ค. |
| ์ด ํ๋กํ์ ๋๋ถ๋ถ์ ํด๋ผ์ด์ธํธ์์ ๊ถ์ฅ๋๋ ๊ตฌ์ฑ์ ๋๋ค. Ingress ์ปจํธ๋กค๋ฌ, kubelet ๋ฐ ์ปจํธ๋กค ํ๋ ์ธ์ ๊ธฐ๋ณธ TLS ๋ณด์ ํ๋กํ์ ๋๋ค. ํ๋กํ์ ์ค๊ฐ ํธํ์ฑ ๊ถ์ฅ ๊ตฌ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
|
| ์ด ํ๋กํ์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ํ์ํ์ง ์์ ์ต์ ํด๋ผ์ด์ธํธ์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์ด ํ๋กํ์ ์ต์ ํธํ์ฑ ๊ถ์ฅ ๊ตฌ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
|
| ์ด ํ๋กํ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉํ TLS ๋ฒ์ ๊ณผ ์ํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ฃผ์
|
๋ฏธ๋ฆฌ ์ ์๋ ํ๋กํ์ผ ์ ํ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ํจํ ํ๋กํ์ผ ๊ตฌ์ฑ์ ๋ฆด๋ฆฌ์ค๋ง๋ค ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฆด๋ฆฌ์ค X.Y.Z์ ๋ฐฐํฌ๋ ์ค๊ฐ ํ๋กํ์ ์ฌ์ฉํ๋ ์ฌ์์ด ์๋ ๊ฒฝ์ฐ ๋ฆด๋ฆฌ์ค X.Y.Z+1๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด ์ ํ๋กํ ๊ตฌ์ฑ์ด ์ ์ฉ๋์ด ๋กค์์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
6.13.2. kubelet์ TLS ๋ณด์ ํ๋กํ ๊ตฌ์ฑ
HTTP ์๋ฒ ์ญํ ์ ํ ๋ kubelet์ ๋ํ TLS ๋ณด์ ํ๋กํ์ ๊ตฌ์ฑํ๋ ค๋ฉด KubeletConfig
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํ์ฌ ํน์ ๋
ธ๋์ ๋ํด ์ฌ์ ์ ์ ๋๋ ์ฌ์ฉ์ ์ง์ TLS ๋ณด์ ํ๋กํ์ ์ง์ ํฉ๋๋ค. TLS ๋ณด์ ํ๋กํ์ด ๊ตฌ์ฑ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ TLS ๋ณด์ ํ๋กํ์ Intermediate
์
๋๋ค.
์์
์ ๋
ธ๋์์ Old
TLS ๋ณด์ ํ๋กํ์ ๊ตฌ์ฑํ๋ ์ํ KubeletConfig
CR
apiVersion: config.openshift.io/v1 kind: KubeletConfig ... spec: tlsSecurityProfile: old: {} type: Old machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" #...
๊ตฌ์ฑ๋ ๋
ธ๋์ kubelet.conf
ํ์ผ์์ ๊ตฌ์ฑ๋ TLS ๋ณด์ ํ๋กํ์ ์ํธ ๋ฐ ์ต์ TLS ๋ฒ์ ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
cluster-admin
์ญํ ์ ์ฌ์ฉ์๋ก ํด๋ฌ์คํฐ์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค
KubeletConfig
CR์ ์์ฑํ์ฌ TLS ๋ณด์ ํ๋กํ์ ๊ตฌ์ฑํฉ๋๋ค.Custom
ํ๋กํ์ผ์ ์ํKubeletConfig
CRapiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: set-kubelet-tls-security-profile spec: tlsSecurityProfile: type: Custom 1 custom: 2 ciphers: 3 - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 minTLSVersion: VersionTLS11 machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" 4 #...
- 1
- TLS ๋ณด์ ํ๋กํ ์ ํ(
Old
,Intermediate
๋๋Custom
)์ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์Intermediate
์ ๋๋ค. - 2
- ์ ํํ ์ ํ์ ์ ์ ํ ํ๋๋ฅผ ์ง์ ํฉ๋๋ค.
-
old: {}
-
intermediate: {}
-
custom:
-
- 3
custom
์ ํ์ ๊ฒฝ์ฐ TLS ์ํธํ ๋ชฉ๋ก ๋ฐ ์ต์ ํ์ฉ๋ TLS ๋ฒ์ ์ ์ง์ ํฉ๋๋ค.- 4
- ์ ํ ์ฌํญ: TLS ๋ณด์ ํ๋กํ์ ์ ์ฉํ๋ ค๋ ๋ ธ๋์ ๋จธ์ ๊ตฌ์ฑ ํ ๋ ์ด๋ธ์ ์ง์ ํฉ๋๋ค.
KubeletConfig
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f <filename>
ํด๋ฌ์คํฐ์ ์์ ์ ๋ ธ๋ ์์ ๋ฐ๋ผ ๊ตฌ์ฑ๋ ๋ ธ๋๊ฐ ํ๋์ฉ ์ฌ๋ถํ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
๊ฒ์ฆ
ํ๋กํ์ด ์ค์ ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋
ธ๋๊ฐ Ready
์ํ๊ฐ ๋ ํ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
๊ตฌ์ฑ๋ ๋ ธ๋์ ๋๋ฒ๊ทธ ์ธ์ ์ ์์ํฉ๋๋ค.
$ oc debug node/<node_name>
๋๋ฒ๊ทธ ์ ๋ด์์
/host
๋ฅผ root ๋๋ ํฐ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค.sh-4.4# chroot /host
kubelet.conf
ํ์ผ์ ํ์ธํฉ๋๋ค.sh-4.4# cat /etc/kubernetes/kubelet.conf
์ถ๋ ฅ ์
"kind": "KubeletConfiguration", "apiVersion": "kubelet.config.k8s.io/v1beta1", #... "tlsCipherSuites": [ "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" ], "tlsMinVersion": "VersionTLS12", #...
6.14. ๋จธ์ ๊ตฌ์ฑ ๋ฐ๋ชฌ ๋ฉํธ๋ฆญ
๋จธ์ ๊ตฌ์ฑ ๋ฐ๋ชฌ์ Machine Config Operator์ ์ผ๋ถ์ ๋๋ค. ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ์คํ๋ฉ๋๋ค. ๋จธ์ ๊ตฌ์ฑ ๋ฐ๋ชฌ์ ๊ฐ ๋ ธ๋์ ๊ตฌ์ฑ ๋ณ๊ฒฝ ๋ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
6.14.1. ๋จธ์ ๊ตฌ์ฑ ๋ฐ๋ชฌ ๋ฉํธ๋ฆญ
OpenShift Container Platform 4.3๋ถํฐ๋ ๋จธ์ ๊ตฌ์ฑ ๋ฐ๋ชฌ์์ ์ผ๋ จ์ ๋ฉํธ๋ฆญ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ฉํธ๋ฆญ์ Prometheus ํด๋ฌ์คํฐ ๋ชจ๋ํฐ๋ง ์คํ์ ์ฌ์ฉํ์ฌ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๋ค์ ํ ์ด๋ธ์ ์ด๋ฌํ ๋ฉํธ๋ฆญ ์งํฉ์ด ์ค๋ช ๋์ด ์์ต๋๋ค.
*
Name* ๋ฐ Description ์ด์์ *๋ก ํ์๋ ๋ฉํธ๋ฆญ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ ์ฌ๊ฐํ ์ค๋ฅ๋ฅผ ๋ํ๋
๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์
๋ฐ์ดํธ ๋ฐ ์
๊ทธ๋ ์ด๋๊ฐ ์งํ๋์ง ์์ ์ ์์ต๋๋ค.
์ผ๋ถ ํญ๋ชฉ์๋ ํน์ ๋ก๊ทธ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ช
๋ น์ด ํฌํจ๋์ง๋ง oc adm must-gather
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ํฌ๊ด์ ์ธ ๋ก๊ทธ ์งํฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฆ | ํ์ | ์ค๋ช | ์ฐธ๊ณ |
---|---|---|---|
|
| MCD๊ฐ ์คํ ์ค์ธ OS(์: RHCOS ๋๋ RHEL)๋ฅผ ํ์ํฉ๋๋ค. RHCOS์ ๊ฒฝ์ฐ ๋ฒ์ ์ด ์ ๊ณต๋ฉ๋๋ค. | ย |
|
| ๋๋ ์ด๋ ์คํจ ์ค ์์ ํ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. * |
๋๋ ์ด๋์ ์ฑ๊ณตํ๋ ค๋ฉด ์ฌ๋ฌ ๋ฒ ์๋ํด์ผ ํ ์ ์์ง๋ง ํฐ๋ฏธ๋์์ ๋๋ ์ด๋์ด ์คํจํ๋ฉด ์
๋ฐ์ดํธ๊ฐ ์งํ๋์ง ์์ต๋๋ค. ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์คํํ์ฌ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
|
|
| ํผ๋ฒ ์ค ๋ก๊ทธ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. * | ํผ๋ฒ ์ค๋ฅ๋ก ์ธํด OS ์ ๊ทธ๋ ์ด๋๊ฐ ์งํ๋์ง ์์ ์ ์์ต๋๋ค. ์ถ๊ฐ ์กฐ์ฌ๋ฅผ ์ํํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๋ ธ๋์ ์ก์ธ์คํ ํ ํด๋น ๋ก๊ทธ๋ฅผ ๋ชจ๋ ํ์ธํฉ๋๋ค.
๋๋ ๋ค์ ๋ช
๋ น์ ์คํํ์ฌ
|
|
| ํ์๋ ๋ ธ๋์ ๋จธ์ ๊ตฌ์ฑ ๋ฐ๋ชฌ ์ํ์ ๋๋ค. ๊ฐ๋ฅํ ์ํ๋ "์๋ฃ", "์์ ์ค", "์ ํ๋จ"์ ๋๋ค. "์ ํ๋จ"์ ๊ฒฝ์ฐ ์ด์ ๊ฐ ํฌํจ๋ฉ๋๋ค. | ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์คํํ์ฌ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
|
|
| kubelet ์ํ ์ฅ์ ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. * | ์ด ๊ฐ์ ๋น์ด ์๊ณ ์คํจ ํ์๊ฐ 0์ด์ด์ผ ํฉ๋๋ค. ์คํจ ํ์๊ฐ 2๋ฅผ ์ด๊ณผํ๋ฉด ์๊ณ๊ฐ์ด ์ด๊ณผ๋์์์ ๋ํ๋ด๋ ์ค๋ฅ์ ๋๋ค. ์ด๋ kubelet ์ํ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์์ ๋ํ๋ ๋๋ค. ์ถ๊ฐ ์กฐ์ฌ๋ฅผ ์ํํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๋ ธ๋์ ์ก์ธ์คํ ํ ํด๋น ๋ก๊ทธ๋ฅผ ๋ชจ๋ ํ์ธํฉ๋๋ค.
|
|
| ์คํจํ ์ฌ๋ถํ ๋ฐ ํด๋น ์ค๋ฅ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. * | ์ด ๊ฐ์ ๋น์ด ์์ ๊ฒ์ผ๋ก ์์๋๋ฉฐ, ์ฌ๋ถํ ์ ์ฑ๊ณตํ์์ ๋ํ๋ ๋๋ค. ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์คํํ์ฌ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
|
|
| ๊ตฌ์ฑ ์ ๋ฐ์ดํธ์ ์ฑ๊ณต ๋๋ ์คํจ์ ํด๋น ์ค๋ฅ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. |
์์ ๊ฐ์ ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์คํํ์ฌ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
|
์ถ๊ฐ ๋ฆฌ์์ค
6.15. ์ธํ๋ผ ๋ ธ๋ ์์ฑ
๋จธ์ API๊ฐ ์๋ํ๋ ํด๋ฌ์คํฐ์์๋ง ๊ณ ๊ธ ๋จธ์ ๊ด๋ฆฌ ๋ฐ ์ค์ผ์ผ๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ํ๋ก๋น์ ๋ ์ธํ๋ผ๊ฐ ์๋ ํด๋ฌ์คํฐ์๋ Machine API๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ถ๊ฐ ๊ฒ์ฆ ๋ฐ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
์ธํ๋ผ ํ๋ซํผ ์ ํ์ ํด๋ฌ์คํฐ๊ฐ Machine API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค
. ์ด ์ ํ์ ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํ
์์คํ
์ด ๊ธฐ๋ฅ์ ์ง์ํ๋ ํ๋ซํผ์ ์ค์น๋ ๊ฒฝ์ฐ์๋ ์ ์ฉ๋ฉ๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋ ์ค์น ํ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
ํด๋ฌ์คํฐ์ ํ๋ซํผ ์ ํ์ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
์ธํ๋ผ ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋ผ์ฐํฐ, ํตํฉ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ, ํด๋ฌ์คํฐ ์งํ ๋ฐ ๋ชจ๋ํฐ๋ง ๊ตฌ์ฑ ์์์ ๊ฐ์ ์ธํ๋ผ ๊ตฌ์ฑ ์์๋ง ํธ์คํ ํ๋ ๋จธ์ ์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ธํ๋ผ ์์คํ ์ ํ๊ฒฝ์ ์คํํ๋ ๋ฐ ํ์ํ ์ด ์๋ธ์คํฌ๋ฆฝ์ ์์ ํฌํจ๋์ง ์์ต๋๋ค.
ํ๋ก๋์ ๋ฐฐํฌ์์๋ ์ธํ๋ผ ๊ตฌ์ฑ ์์๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ธ ๊ฐ ์ด์์ ๋จธ์ ์ธํธ๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. OpenShift Logging ๋ฐ Red Hat OpenShift Service Mesh ๋ ๋ค ๋ค๋ฅธ ๋ ธ๋์ 3๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ค์นํด์ผ ํ๋ Elasticsearch๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์ด๋ฌํ ๊ฐ ๋ ธ๋๋ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด ๋ค๋ฅธ ๊ฐ์ฉ์ฑ ์์ญ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด ๊ตฌ์ฑ์๋ ๊ฐ์ฉ์ฑ ์์ญ๋ง๋ค ํ๋์ฉ 3๊ฐ์ ์๋ก ๋ค๋ฅธ ๋จธ์ ์ธํธ๊ฐ ํ์ํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ฉ์ฑ ์์ญ์ด ์๋ ๊ธ๋ก๋ฒ Azure ๋ฆฌ์ ์์๋ ๊ฐ์ฉ์ฑ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์ธํ๋ผ ๋
ธ๋์ NoSchedule
ํ
์ธํธ๋ฅผ ์ถ๊ฐํ๋ฉด ํด๋น ๋
ธ๋์์ ์คํ ์ค์ธ ๊ธฐ์กด DNS Pod๊ฐ ์๋ชป ์์ฝ
๋จ์ผ๋ก ํ์๋ฉ๋๋ค. ์๋ชป ์ค์ผ์ค๋ง๋
DNS Pod์์ ํ์ฉ ์ค์ฐจ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
6.15.1. OpenShift Container Platform ์ธํ๋ผ ๊ตฌ์ฑ ์์
๋ค์ ์ธํ๋ผ ์ํฌ๋ก๋์์๋ OpenShift Container Platform ์์ ์ ์๋ธ์คํฌ๋ฆฝ์ ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
- ๋ง์คํฐ์์ ์คํ๋๋ Kubernetes ๋ฐ OpenShift Container Platform ์ปจํธ๋กค ํ๋ ์ธ ์๋น์ค
- ๊ธฐ๋ณธ ๋ผ์ฐํฐ
- ํตํฉ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ
- HAProxy ๊ธฐ๋ฐ Ingress ์ปจํธ๋กค๋ฌ
- ์ฌ์ฉ์ ์ ์ ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ธฐ์ํ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ ์์ง ๋๋ ๋ชจ๋ํฐ๋ง ์๋น์ค
- ํด๋ฌ์คํฐ ์ง๊ณ ๋ก๊น
- ์๋น์ค ๋ธ๋ก์ปค
- Red Hat Quay
- Red Hat OpenShift Data Foundation
- Red Hat Advanced Cluster Manager
- Red Hat Advanced Cluster Security for Kubernetes
- Red Hat OpenShift GitOps
- Red Hat OpenShift Pipelines
๋ค๋ฅธ ์ปจํ ์ด๋, Pod ๋๋ ๊ตฌ์ฑ ์์๋ฅผ ์คํํ๋ ๋ชจ๋ ๋ ธ๋๋ ์๋ธ์คํฌ๋ฆฝ์ ์ ์ ์ฉํด์ผ ํ๋ ์์ ์ ๋ ธ๋์ ๋๋ค.
์ธํ๋ผ ๋ ธ๋ ๋ฐ ์ธํ๋ผ ๋ ธ๋์์ ์คํํ ์ ์๋ ๊ตฌ์ฑ ์์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ํฐํ๋ผ์ด์ฆ Kubernetes์ฉ OpenShift ํฌ๊ธฐ ์กฐ์ ๋ฐ ์๋ธ์คํฌ๋ฆฝ์ ๊ฐ์ด๋์ "Red Hat OpenShift ์ปจํธ๋กค ํ๋ ์ธ ๋ฐ ์ธํ๋ผ ๋ ธ๋" ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ธํ๋ผ ๋ ธ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ๋จธ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋๋ ธ๋์ ๋ ์ด๋ธ์ ์ง์ ํ๊ฑฐ๋ ๋จธ์ ๊ตฌ์ฑ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
6.15.1.1. ์ธํ๋ผ ๋ ธ๋ ์์ฑ
์ค์น ๊ด๋ฆฌ์ ํ๋ก๋น์ ๋ ์ธํ๋ผ ํ๊ฒฝ ๋๋ ๋จธ์ API์์ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ๋ ํด๋ฌ์คํฐ์ ์ธํ๋ผ ๋จธ์ ์ธํธ ์์ฑ์ ์ฐธ์กฐํ์ญ์์ค.
ํด๋ฌ์คํฐ์ ์๊ตฌ ์ฌํญ์ infra
๋
ธ๋๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋ํด์ผ ํฉ๋๋ค. ์ค์น ํ๋ก๊ทธ๋จ์ ์ปจํธ๋กค ํ๋ ์ธ ๋ฐ ์์
์ ๋
ธ๋์ ๋ํ ํ๋ก๋น์ ๋๋ง ์ ๊ณตํฉ๋๋ค. ์์
์ ๋
ธ๋๋ ๋ ์ด๋ธ์ ํตํด ์ธํ๋ผ ๋
ธ๋ ๋๋ ์ ํ๋ฆฌ์ผ์ด์
( app, app
์ด๋ผ๊ณ ๋ ํจ)์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
์ ํ๋ฆฌ์ผ์ด์ ๋ ธ๋ ์ญํ ์ ์ํํ ์์ ์ ๋ ธ๋์ ๋ ์ด๋ธ์ ์ถ๊ฐํฉ๋๋ค.
$ oc label node <node-name> node-role.kubernetes.io/app=""
์ธํ๋ผ ๋ ธ๋ ์ญํ ์ ์ํํ ์์ ์ ๋ ธ๋์ ๋ ์ด๋ธ์ ์ถ๊ฐํฉ๋๋ค.
$ oc label node <node-name> node-role.kubernetes.io/infra=""
ํด๋น ๋ ธ๋์
infra
์ญํ ๋ฐapp
์ญํ ์ด ์๋์ง ํ์ธํฉ๋๋ค.$ oc get nodes
๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๋ ๋ชจ๋ ๋ค์์คํ์ด์ค์์ ์์ฑ๋ Pod์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Pod์ ๊ธฐ์กด ๋ ธ๋ ์ ํ๊ธฐ์ ๊ต์ฐจ์ ์ด ์์ฑ๋์ด Pod์ ์ ํ๊ธฐ๊ฐ ์ถ๊ฐ๋ก ์ ํ๋ฉ๋๋ค.
์ค์๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ ํค๊ฐ Pod ๋ผ๋ฒจ ํค์ ์ถฉ๋ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ Pod๋ฅผ ์์ฝํ ์ ์๊ฒ ๋ง๋ค ์ ์๋ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ค์ ํ์ง ๋ง์ญ์์ค. ์๋ฅผ ๋ค์ด Pod์ ๋ผ๋ฒจ์ด
node-role.kubernetes.io/master=""
์ ๊ฐ์ ๋ค๋ฅธ ๋ ธ๋ ์ญํ ๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผnode-role.kubernetes.io/infra=""
์ ๊ฐ์ ํน์ ๋ ธ๋ ์ญํ ๋ก ์ค์ ํ๋ฉด Pod๋ฅผ ์์ฝํ ์ ์๊ฒ ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ํน์ ๋ ธ๋ ์ญํ ๋ก ์ค์ ํ ๋ ์ฃผ์ํด์ผ ํฉ๋๋ค.๋๋ ํ๋ก์ ํธ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ์์ค ๋ ธ๋ ์ ํ๊ธฐ ํค ์ถฉ๋์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
Scheduler
์ค๋ธ์ ํธ๋ฅผ ํธ์งํฉ๋๋ค.$ oc edit scheduler cluster
์ ์ ํ ๋ ธ๋ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ
defaultNodeSelector
ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.apiVersion: config.openshift.io/v1 kind: Scheduler metadata: name: cluster spec: defaultNodeSelector: topology.kubernetes.io/region=us-east-1 1 # ...
- 1
- ์ด ์์ ๋ ธ๋ ์ ํ๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก
us-east-1
๋ฆฌ์ ์ ๋ ธ๋์ Pod๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
- ํ์ผ์ ์ ์ฅํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค.
์ด์ ์ธํ๋ผ ๋ฆฌ์์ค๋ฅผ ์๋ก ๋ ์ด๋ธ์ด ์ง์ ๋ ์ธํ๋ผ ๋
ธ๋๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
7์ฅ. ์ปจํ ์ด๋ ์์
7.1. ์ปจํ ์ด๋ ์ดํด
OpenShift Container Platform ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ๋จ์๋ ์ปจํ ์ด๋๋ผ๊ณ ํฉ๋๋ค. Linux ์ปจํ ์ด๋ ๊ธฐ์ ์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๋ฐ ํ์ํ ๊ฐ๋จํ ๋ฉ์ปค๋์ฆ์ผ๋ก, ์ด๋ฅผ ํตํด ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ์ง์ ๋ ๋ฆฌ์์คํ๊ณ ๋ง ์ํธ ์์ฉํ๋๋ก ์ ํ๋ฉ๋๋ค.
๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์ค๋ ์๋ก์ ํ๋ก์ธ์ค, ํ์ผ, ๋คํธ์ํฌ ๋ฑ์ ๋ณด์ง ์์ผ๋ฉฐ ๋จ์ผ ํธ์คํธ์ ์ปจํ ์ด๋์์ ์คํ๋ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๋ฅผ ์์์ ์ํฌ๋ก๋์ ์ฌ์ฉํ ์๋ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ์ปจํ ์ด๋๋ ์น ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋จ์ผ ์๋น์ค(ํํ โ๋ง์ดํฌ๋ก ์๋น์คโ๋ผ๊ณ ํจ)๋ฅผ ์ ๊ณตํฉ๋๋ค.
Linux ์ปค๋์ ์๋ ๊ฐ ์ปจํ ์ด๋ ๊ธฐ์ ์ ์ํ ๊ธฐ๋ฅ์ ํตํฉํด ์์ต๋๋ค. OpenShift Container Platform ๋ฐ Kubernetes๋ ๋ค์ค ํธ์คํธ ์ค์น์์ ์ปจํ ์ด๋๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
์ปจํ ์ด๋ ๋ฐ RHEL ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ์ ๋ณด
RHEL(Red Hat Enterprise Linux) ๋์์ผ๋ก ์ธํด CPU ์ฌ์ฉ๋์ด ๋ง์ ๋
ธ๋์ ์ปจํ
์ด๋์์ ์์๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐ๋ RHEL ์ปค๋์ kmem_cache
๋ก ์ธํ ๊ฒ์ผ ์ ์์ต๋๋ค. RHEL ์ปค๋์ ๊ฐ cgroup์ kmem_cache
๋ฅผ ์์ฑํฉ๋๋ค. ์ฑ๋ฅ ํฅ์์ ์ํด kmem_cache
์๋ cpu_cache
์ ๋ชจ๋ NUMA ๋
ธ๋์ ๋ํ ๋
ธ๋ ์บ์๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด๋ฌํ ์บ์๋ ๋ชจ๋ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ์บ์์ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์์คํ ์์ ์ฌ์ฉํ๋ CPU ์์ ๋น๋กํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก CPU ์๊ฐ ๋ง์์๋ก ์ด๋ฌํ ์บ์์ ๋ ๋ง์ ์์ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ฌํ ์บ์์ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ์์ด ๋์ด๋๋ฉด OpenShift Container Platform ์ปจํ ์ด๋๊ฐ ๊ตฌ์ฑ๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ด๊ณผํ์ฌ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
์ปค๋ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ก ์ธํ ์ปจํ
์ด๋ ์์ค์ ๋ฐฉ์งํ๋ ค๋ฉด ์ปจํ
์ด๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ถฉ๋ถํ ์์ฒญํด์ผ ํฉ๋๋ค. ๋ค์ ๊ณต์์ ์ฌ์ฉํ์ฌ kmem_cache
์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ถ์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ nproc
๋ nproc
๋ช
๋ น์์ ๋ณด๊ณ ํ๋ ์ฒ๋ฆฌ ๋จ์์ ์์
๋๋ค. ์ปจํ
์ด๋ ์์ฒญ์ ํํ์ ์ด ๊ฐ์ ์ปจํ
์ด๋ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ์ ๋ํ ๊ฐ์ด์ด์ผ ํฉ๋๋ค.
$(nproc) X 1/2 MiB
7.2. Pod๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ ์ Init Container๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ํ
OpenShift Container Platform์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๋ณด๋ค ๋จผ์ ์คํ๋๊ณ ์ฑ ์ด๋ฏธ์ง์ ์๋ ์ ํธ๋ฆฌํฐ ๋๋ ์ค์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ์ ์๋ ํน์ ์ปจํ ์ด๋์ธ Init Container๋ฅผ ์ ๊ณตํฉ๋๋ค.
7.2.1. Init Container ์ดํด
Init Container ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋๋จธ์ง Pod๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
Pod์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ ์ธ์๋ Init Container๊ฐ ์์ ์ ์์ต๋๋ค. Init Container๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ์คํฌ๋ฆฝํธ ๋ฐ ๋ฐ์ธ๋ฉ ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Init Container๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ๋ณด์์์ ์ด์ ๋ก ์ฑ ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ํฌํจํ์ง ์๋ ์ ํธ๋ฆฌํฐ๋ฅผ ํฌํจ ๋ฐ ์คํํฉ๋๋ค.
- ์ฑ ์ด๋ฏธ์ง์ ์๋ ์ค์ ์ ๋ํ ์ ํธ๋ฆฌํฐ ๋๋ ์ฌ์ฉ์ ์ ์ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ค์น ์ค์ sed, awk, python ๋๋ dig์ ๊ฐ์ ํด์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค๋ฅธ ์ด๋ฏธ์ง์์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋์์ ์ก์ธ์คํ ์ ์๋ ๋ณด์์ ๋ํ ์ก์ธ์ค ๊ถํ๊ณผ ๊ฐ์ด ํ์ผ ์์คํ ๋ณด๊ธฐ๊ฐ ์ฑ ์ปจํ ์ด๋์ ๋ค๋ฅด๊ฒ ํ์๋๋๋ก Linux ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ฐ Init Container๋ ๋ค์ ์ปจํ ์ด๋๋ฅผ ์์ํ๊ธฐ ์ ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด Init Container์์๋ ๋ช ๊ฐ์ง ์ฌ์ ์กฐ๊ฑด ์งํฉ์ด ์ถฉ์กฑ๋ ๋๊น์ง ์ฑ ์ปจํ ์ด๋์ ์์์ ์ฐจ๋จํ๊ฑฐ๋ ์ง์ฐํ ์ ์๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์์ Init Container๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์๋น์ค๊ฐ ์์ฑ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ผ๋ก ํ์ API์ ์๊ฒฉ ์๋ฒ์ ์ด Pod๋ฅผ ๋ฑ๋กํฉ๋๋ค.
$ curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d โinstance=$()&ip=$()โ
-
sleep 60
๊ณผ ๊ฐ์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ฑ ์ปจํ ์ด๋๋ฅผ ์์ํ๊ธฐ ์ ์ ์ ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. - Git ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์ ๋ณต์ ํฉ๋๋ค.
- ๊ตฌ์ฑ ํ์ผ์ ๊ฐ์ ์ ์ฅํ๊ณ ํ ํ๋ฆฟ ํด์ ์คํํ์ฌ ๊ธฐ๋ณธ ์ฑ ์ปจํ ์ด๋์ ๋ํ ๊ตฌ์ฑ ํ์ผ์ ๋์ ์ผ๋ก ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด POD_IP ๊ฐ์ ๊ตฌ์ฑ์ ์ ์ฅํ๊ณ Jinja๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ์ฑ ๊ตฌ์ฑ ํ์ผ์ ์์ฑํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ Kubernetes ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
7.2.2. Init Container ์์ฑ
๋ค์ ์์ ์์๋ Init Container ๋ ๊ฐ๊ฐ ์๋ ๊ฐ๋จํ Pod๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ปจํ
์ด๋๋ myservice
๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ๋ ๋ฒ์งธ ์ปจํ
์ด๋๋ mydb
๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ ์ปจํ
์ด๋๊ฐ ๋ชจ๋ ์๋ฃ๋๋ฉด Pod๊ฐ ์์๋ฉ๋๋ค.
ํ๋ก์ธ์ค
Init Container์ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-container image: registry.access.redhat.com/ubi8/ubi:latest command: ['sh', '-c', 'echo The app is running! && sleep 3600'] initContainers: - name: init-myservice image: registry.access.redhat.com/ubi8/ubi:latest command: ['sh', '-c', 'until getent hosts myservice; do echo waiting for myservice; sleep 2; done;'] - name: init-mydb image: registry.access.redhat.com/ubi8/ubi:latest command: ['sh', '-c', 'until getent hosts mydb; do echo waiting for mydb; sleep 2; done;'] # ...
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f myapp.yaml
Pod ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get pods
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:0/2 0 5s
ํฌ๋ ์ํ
Init:0/2
๋ ๋ ์๋น์ค๋ฅผ ๋๊ธฐ ์ค์์ ๋ํ๋ ๋๋ค.
myservice
์๋น์ค๋ฅผ ์์ฑํฉ๋๋ค.๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
kind: Service apiVersion: v1 metadata: name: myservice spec: ports: - protocol: TCP port: 80 targetPort: 9376
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f myservice.yaml
Pod ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get pods
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:1/2 0 5s
Pod ์ํ
Init:1/2
๋ ํ๋์ ์๋น์ค(์ด ๊ฒฝ์ฐmydb
์๋น์ค)๋ฅผ ๋๊ธฐ ์ค์์ ๋ํ๋ ๋๋ค.
mydb
์๋น์ค๋ฅผ ์์ฑํฉ๋๋ค.๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
kind: Service apiVersion: v1 metadata: name: mydb spec: ports: - protocol: TCP port: 80 targetPort: 9377
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f mydb.yaml
Pod ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get pods
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2m
Pod ์ํ๋ ๋ ์ด์ ์๋น์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์คํ ์ค์์ ๋ํ๋ ๋๋ค.
7.3. ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ฐ์ดํฐ ์ ์ง
์ปจํ ์ด๋์ ํ์ผ์ ์์ ํ์ผ์ ๋๋ค. ์ปจํ ์ด๋๊ฐ ์ถฉ๋ํ๊ฑฐ๋ ์ค์ง๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์์ค๋ฉ๋๋ค. ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ Pod์ ์ปจํ ์ด๋์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค. ๋ณผ๋ฅจ์ Pod ์๋ช ๋์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ Pod์ ์ปจํ ์ด๋์ ์ก์ธ์คํ ์ ์๋ ๋๋ ํฐ๋ฆฌ์ ๋๋ค.
7.3.1. ๋ณผ๋ฅจ ์ดํด
๋ณผ๋ฅจ์ Pod ๋ฐ ํด๋น ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ๋ง์ดํธ๋ ํ์ผ ์์คํ ์ผ๋ก, ๋ค์์ ํธ์คํธ-๋ก์ปฌ ๋๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์คํ ๋ฆฌ์ง ๋์ ์์ ์ง์ํ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ตฌ์ ์ด ์๋๋ฉฐ ์ฌ์์ ์ ์ ์ฅ๋ ์ฝํ ์ธ ๊ฐ ์ง์์ง๋๋ค.
๋ณผ๋ฅจ์ ํ์ผ ์์คํ
์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํ ํ ์ค๋ฅ๊ฐ ์๊ณ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํด OpenShift Container Platform์์๋ mount
์ ํธ๋ฆฌํฐ ์ด์ ์ fsck
์ ํธ๋ฆฌํฐ๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ฌํ ์์
์ ๋ณผ๋ฅจ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๋ณผ๋ฅจ์ ์
๋ฐ์ดํธํ ๋ ์ํ๋ฉ๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๋ณผ๋ฅจ ์ ํ์ ๋จ์ผ ๋จธ์ ์ ์์ ๋๋ ํฐ๋ฆฌ์ธ emptyDir
์
๋๋ค. ๊ด๋ฆฌ์๋ Pod์ ์๋์ผ๋ก ์ฐ๊ฒฐ๋ ์๊ตฌ ๋ณผ๋ฅจ์ ์์ฒญํ ์๋ ์์ต๋๋ค.
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ FSGroup ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฑํํ๋ฉด Pod์ FSGroup์ ๊ธฐ๋ฐ์ผ๋ก ํ ํ ๋น๋์ ๋ฐ๋ผ emptyDir
๋ณผ๋ฅจ ์คํ ๋ฆฌ์ง๊ฐ ์ ํ๋ ์ ์์ต๋๋ค.
7.3.2. OpenShift Container Platform CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ ์์
CLI ๋ช
๋ น oc set volume
์ ์ฌ์ฉํ์ฌ ๋ณต์ ์ปจํธ๋กค๋ฌ ๋๋ ๋ฐฐํฌ ๊ตฌ์ฑ๊ณผ ๊ฐ์ Pod ํ
ํ๋ฆฟ์ด ์๋ ์ค๋ธ์ ํธ์ ๋ณผ๋ฅจ ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ ์ ์์ต๋๋ค. Pod์ ๋ณผ๋ฅจ ๋๋ Pod ํ
ํ๋ฆฟ์ด ์๋ ์ค๋ธ์ ํธ๋ ๋์ดํ ์ ์์ต๋๋ค.
oc set volume
๋ช
๋ น์์๋ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
$ oc set volume <object_selection> <operation> <mandatory_parameters> <options>
- ์ค๋ธ์ ํธ ์ ํ
-
oc set volume
๋ช ๋ น์์object_selection
๋งค๊ฐ๋ณ์์ ๋ค์ ์ค ํ๋๋ฅผ ์ง์ ํฉ๋๋ค.
๊ตฌ๋ฌธ | ์ค๋ช | ์ |
---|---|---|
|
์ ํ |
|
|
์ ํ |
|
|
์ง์ ๋ ๋ผ๋ฒจ ์ ํ๊ธฐ์ ์ผ์นํ๋ ์ ํ |
|
|
์ ํ |
|
| ๋ฆฌ์์ค๋ฅผ ํธ์งํ๋ ๋ฐ ์ฌ์ฉํ ํ์ผ ์ด๋ฆ, ๋๋ ํฐ๋ฆฌ ๋๋ URL์ ๋๋ค. |
|
- ์์
-
oc set volume
๋ช ๋ น์operation
๋งค๊ฐ๋ณ์์--add
๋๋--remove
๋ฅผ ์ง์ ํฉ๋๋ค. - ํ์ ๋งค๊ฐ๋ณ์
- ๋ชจ๋ ํ์ ๋งค๊ฐ๋ณ์๋ ์ ํํ ์์ ์ ํ์ ๋๋ฉฐ ๋ค์ ๋์ค๋ ์น์ ์์ ์ค๋ช ํฉ๋๋ค.
- ์ต์
- ๋ชจ๋ ์ต์ ์ ์ ํํ ์์ ์ ํ์ ๋๋ฉฐ ๋ค์ ๋์ค๋ ์น์ ์์ ์ค๋ช ํฉ๋๋ค.
7.3.3. Pod์ ๋ณผ๋ฅจ ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ ๋์ด
Pod ๋๋ Pod ํ ํ๋ฆฟ์ ๋ณผ๋ฅจ ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ๋์ดํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๋ณผ๋ฅจ ๋ชฉ๋ก์ ํ์ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc set volume <object_type>/<name> [options]
๋ณผ๋ฅจ์์ ์ง์ํ๋ ์ต์ ์ ๋์ดํฉ๋๋ค.
์ต์ | ์ค๋ช | ๊ธฐ๋ณธ |
---|---|---|
| ๋ณผ๋ฅจ ์ด๋ฆ์ ๋๋ค. | ย |
|
์ด๋ฆ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ์ ํํฉ๋๋ค. ๋ฌธ์์ ์ผ์นํ๋ ์์ผ๋์นด๋ |
|
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Pod p1์ ๋ํ ๋ชจ๋ ๋ณผ๋ฅจ์ ๋์ดํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc set volume pod/p1
๋ชจ๋ ๋ฐฐํฌ ๊ตฌ์ฑ์ ์ ์๋ ๋ณผ๋ฅจ v1์ ๋์ดํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc set volume dc --all --name=v1
7.3.4. Pod์ ๋ณผ๋ฅจ ์ถ๊ฐ
Pod์ ๋ณผ๋ฅจ ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๋ณผ๋ฅจ, ๋ณผ๋ฅจ ๋ง์ดํธ ๋๋ ๋ ๋ค๋ฅผ Pod ํ ํ๋ฆฟ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc set volume <object_type>/<name> --add [options]
์ต์ | ์ค๋ช | ๊ธฐ๋ณธ |
---|---|---|
| ๋ณผ๋ฅจ ์ด๋ฆ์ ๋๋ค. | ์ง์ ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. |
|
๋ณผ๋ฅจ ์์ค์ ์ด๋ฆ์
๋๋ค. ์ง์๋๋ ๊ฐ์ |
|
|
์ด๋ฆ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ์ ํํฉ๋๋ค. ๋ฌธ์์ ์ผ์นํ๋ ์์ผ๋์นด๋ |
|
|
์ ํํ ์ปจํ
์ด๋ ๋ด๋ถ์ ๋ง์ดํธ ๊ฒฝ๋ก์
๋๋ค. ์ปจํ
์ด๋ ๋ฃจํธ, | ย |
|
ํธ์คํธ ๊ฒฝ๋ก์
๋๋ค. | ย |
|
๋ณด์์ ์ด๋ฆ์
๋๋ค. | ย |
|
๊ตฌ์ฑ ๋งต์ ์ด๋ฆ์
๋๋ค. | ย |
|
์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์ ์ด๋ฆ์
๋๋ค. | ย |
|
JSON ๋ฌธ์์ด๋ก ๋ ๋ณผ๋ฅจ ์์ค ์ธ๋ถ ์ ๋ณด์
๋๋ค. ํ์ํ ๋ณผ๋ฅจ ์์ค๋ฅผ | ย |
|
์์ ๋ ์ค๋ธ์ ํธ๋ฅผ ์๋ฒ์์ ์
๋ฐ์ดํธํ๋ ๋์ ํ์ํฉ๋๋ค. ์ง์๋๋ ๊ฐ์ | ย |
| ์ง์ ๋ ๋ฒ์ ์ผ๋ก ์์ ๋ ์ค๋ธ์ ํธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. |
|
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ ์ง์คํธ๋ฆฌ
DeploymentConfig
์ค๋ธ์ ํธ์ ์ ๋ณผ๋ฅจ ์์ค emptyDir์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.$ oc set volume dc/registry --add
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์ 7.1. ์ถ๊ฐ๋ ๋ณผ๋ฅจ์ด ์๋ ๋ฐฐํฌ ๊ตฌ์ฑ ์ํ
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: registry namespace: registry spec: replicas: 3 selector: app: httpd template: metadata: labels: app: httpd spec: volumes: 1 - name: volume-pppsw emptyDir: {} containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP
- 1
- ๋ณผ๋ฅจ ์์ค emptyDir ์ ์ถ๊ฐํฉ๋๋ค.
๋ณต์ ์ปจํธ๋กค๋ฌ r1์ ๋ํด ๋ณด์ secret1์ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ v1์ ์ถ๊ฐํ๊ณ /data:์ ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ง์ดํธํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc set volume rc/r1 --add --name=v1 --type=secret --secret-name='secret1' --mount-path=/data
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์ 7.2. ๋ณผ๋ฅจ ๋ฐ ์ํฌ๋ฆฟ์ด ์ถ๊ฐ๋ ์ํ ๋ณต์ ์ปจํธ๋กค๋ฌ
kind: ReplicationController apiVersion: v1 metadata: name: example-1 namespace: example spec: replicas: 0 selector: app: httpd deployment: example-1 deploymentconfig: example template: metadata: creationTimestamp: null labels: app: httpd deployment: example-1 deploymentconfig: example spec: volumes: 1 - name: v1 secret: secretName: secret1 defaultMode: 420 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest volumeMounts: 2 - name: v1 mountPath: /data
ํด๋ ์ ์ด๋ฆ์ด pvc1์ธ ๊ธฐ์กด ์๊ตฌ ๋ณผ๋ฅจ v1์ ๋์คํฌ์ ๋ฐฐํฌ ๊ตฌ์ฑ dc.json์ ์ถ๊ฐํ๋ ค๋ฉด /data์ ์ปจํ ์ด๋ c1์ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๊ณ ์๋ฒ์์
DeploymentConfig
์ค๋ธ์ ํธ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.$ oc set volume -f dc.json --add --name=v1 --type=persistentVolumeClaim \ --claim-name=pvc1 --mount-path=/data --containers=c1
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์ 7.3. ์๊ตฌ ๋ณผ๋ฅจ์ด ์ถ๊ฐ๋ ๋ฐฐํฌ ๊ตฌ์ฑ์ ์
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example namespace: example spec: replicas: 3 selector: app: httpd template: metadata: labels: app: httpd spec: volumes: - name: volume-pppsw emptyDir: {} - name: v1 1 persistentVolumeClaim: claimName: pvc1 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP volumeMounts: 2 - name: v1 mountPath: /data
๋ชจ๋ ๋ณต์ ์ปจํธ๋กค๋ฌ์์ ์์ ๋ฒ์ ์ด 5125c45f9f563์ธ Git ๋ฆฌํฌ์งํ ๋ฆฌ https://github.com/namespace1/project1์ ๊ธฐ๋ฐ์ผ๋ก ๋ณผ๋ฅจ v1์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc set volume rc --all --add --name=v1 \ --source='{"gitRepo": { "repository": "https://github.com/namespace1/project1", "revision": "5125c45f9f563" }}'
7.3.5. Pod์ ๋ณผ๋ฅจ ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ ์ ๋ฐ์ดํธ
Pod์์ ๋ณผ๋ฅจ ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
--overwrite
์ต์
์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ๋ณผ๋ฅจ์ ์
๋ฐ์ดํธํฉ๋๋ค.
$ oc set volume <object_type>/<name> --add --overwrite [options]
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ณต์ ์ปจํธ๋กค๋ฌ r1์ ๊ธฐ์กด ๋ณผ๋ฅจ v1์ ๊ธฐ์กด ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์ pvc1๋ก ๊ต์ฒดํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc set volume rc/r1 --add --overwrite --name=v1 --type=persistentVolumeClaim --claim-name=pvc1
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ณผ๋ฅจ์ ๊ต์ฒดํ ์๋ ์์ต๋๋ค.
์ 7.4.
pvc1
์ด๋ผ๋ ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์ด ์๋ ์ํ ๋ณต์ ์ปจํธ๋กค๋ฌkind: ReplicationController apiVersion: v1 metadata: name: example-1 namespace: example spec: replicas: 0 selector: app: httpd deployment: example-1 deploymentconfig: example template: metadata: labels: app: httpd deployment: example-1 deploymentconfig: example spec: volumes: - name: v1 1 persistentVolumeClaim: claimName: pvc1 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP volumeMounts: - name: v1 mountPath: /data
- 1
- ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์
pvc1
๋ก ์ค์ ํฉ๋๋ค.
DeploymentConfig
์ค๋ธ์ ํธ d1 ๋ง์ดํธ ์ต์ ์ ๋ณผ๋ฅจ v1์ /opt๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.$ oc set volume dc/d1 --add --overwrite --name=v1 --mount-path=/opt
์์ ์ ๋ณด๋ค์ YAML์ ์ ์ฉํ์ฌ ๋ง์ดํธ ์ง์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ 7.5. ๋ง์ดํธ ์ง์ ์ด
์ตํธ์ธ
์ผ๋ก ์ค์ ๋ ์ํ ๋ฐฐํฌ ๊ตฌ์ฑ.kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example namespace: example spec: replicas: 3 selector: app: httpd template: metadata: labels: app: httpd spec: volumes: - name: volume-pppsw emptyDir: {} - name: v2 persistentVolumeClaim: claimName: pvc1 - name: v1 persistentVolumeClaim: claimName: pvc1 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP volumeMounts: 1 - name: v1 mountPath: /opt
- 1
- ๋ง์ดํธ ์ง์ ์
/opt
์ผ๋ก ์ค์ ํฉ๋๋ค.
7.3.6. Pod์์ ๋ณผ๋ฅจ ๋ฐ ๋ณผ๋ฅจ ๋ง์ดํธ ์ ๊ฑฐ
Pod์์ ๋ณผ๋ฅจ ๋๋ ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
Pod ํ ํ๋ฆฟ์์ ๋ณผ๋ฅจ์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc set volume <object_type>/<name> --remove [options]
์ต์ | ์ค๋ช | ๊ธฐ๋ณธ |
---|---|---|
| ๋ณผ๋ฅจ ์ด๋ฆ์ ๋๋ค. | ย |
|
์ด๋ฆ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ์ ํํฉ๋๋ค. ๋ฌธ์์ ์ผ์นํ๋ ์์ผ๋์นด๋ |
|
| ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ๋ณผ๋ฅจ์ ์ ๊ฑฐํ ๊ฒ์์ ๋ํ๋ ๋๋ค. | ย |
|
์์ ๋ ์ค๋ธ์ ํธ๋ฅผ ์๋ฒ์์ ์
๋ฐ์ดํธํ๋ ๋์ ํ์ํฉ๋๋ค. ์ง์๋๋ ๊ฐ์ | ย |
| ์ง์ ๋ ๋ฒ์ ์ผ๋ก ์์ ๋ ์ค๋ธ์ ํธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. |
|
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
DeploymentConfig
์ค๋ธ์ ํธ d1์์ ๋ณผ๋ฅจ v1์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.$ oc set volume dc/d1 --remove --name=v1
DeploymentConfig
์ค๋ธ์ ํธ d1์ ์ปจํ ์ด๋์์ ์ฐธ์กฐํ์ง ์๋ ๊ฒฝ์ฐ d1์ ์ปจํ ์ด๋ c1์์ ๋ณผ๋ฅจ v1์ ๋ง์ดํธ ํด์ ํ๊ณ ๋ณผ๋ฅจ v1์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.$ oc set volume dc/d1 --remove --name=v1 --containers=c1
๋ณต์ ์ปจํธ๋กค๋ฌ r1์ ๋ชจ๋ ๋ณผ๋ฅจ์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ oc set volume rc/r1 --remove --confirm
7.3.7. Pod์์ ๋ค์ํ ์ฉ๋์ ๋ณผ๋ฅจ ๊ตฌ์ฑ
๋ณผ๋ฅจ์ ๋ฃจํธ ๋์ ๋ณผ๋ฅจ ๋ด๋ถ์ subPath
๊ฐ์ ์ง์ ํ๋ volumeMounts.subPath
์์ฑ์ ์ฌ์ฉํ์ฌ ๋จ์ผ Pod์์ ๋ค์ํ ์ฉ๋๋ก ํ๋์ ๋ณผ๋ฅจ์ ๊ณต์ ํ๋๋ก ๋ณผ๋ฅจ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์์ฝ๋ ๊ธฐ์กด Pod์ subPath
๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๋ณผ๋ฅจ์ ํ์ผ ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด
oc rsh
๋ช ๋ น์ ์คํํฉ๋๋ค.$ oc rsh <pod>
์ถ๋ ฅ ์
sh-4.2$ ls /path/to/volume/subpath/mount example_file1 example_file2 example_file3
subPath
๋ฅผ ์ง์ ํฉ๋๋ค.subPath
๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋Pod
์ฌ์์ ์apiVersion: v1 kind: Pod metadata: name: my-site spec: containers: - name: mysql image: mysql volumeMounts: - mountPath: /var/lib/mysql name: site-data subPath: mysql 1 - name: php image: php volumeMounts: - mountPath: /var/www/html name: site-data subPath: html 2 volumes: - name: site-data persistentVolumeClaim: claimName: my-site-data
7.4. ์์๋ ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ ๋งคํ
์์ ๋ณผ๋ฅจ์ ์ฌ๋ฌ ๊ฐ์ ๊ธฐ์กด ๋ณผ๋ฅจ ์์ค๋ฅผ ๋์ผํ ๋๋ ํฐ๋ฆฌ์ ๋งคํํฉ๋๋ค.
๋ค์ ์ ํ์ ๋ณผ๋ฅจ ์์ค๋ฅผ ์์ํ ์ ์์ต๋๋ค.
- ๋ณด์
- Config Map
- Downward API
๋ชจ๋ ์์ค๋ Pod์ ๋์ผํ ๋ค์์คํ์ด์ค์ ์์ด์ผ ํฉ๋๋ค.
7.4.1. ์์ ๋ณผ๋ฅจ ์ดํด
์์ ๋ณผ๋ฅจ์ ํด๋น ๋ณผ๋ฅจ ์์ค์ ์กฐํฉ์ ๋จ์ผ ๋๋ ํฐ๋ฆฌ์ ๋งคํํ ์ ์์ด ์ฌ์ฉ์๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ฌ๋ฌ ๋ณด์์ ํค, ๊ตฌ์ฑ ๋งต, Downward API ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ณผ๋ฅจ์ ์๋์ผ๋ก ์ฑ์ ๋จ์ผ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ค์ํ ์ ๋ณด ์์ค์ ํฉ์ฑํ ์ ์์ต๋๋ค.
- ์ฌ๋ฌ ๋ณด์์ ํค, ๊ตฌ์ฑ ๋งต, Downward API ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ณผ๋ฅจ์ ์ฑ์ฐ๊ณ ๊ฐ ํญ๋ชฉ์ ๊ฒฝ๋ก๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ ํด๋น ๋ณผ๋ฅจ์ ์ฝํ ์ธ ๋ฅผ ์์ ํ ์ ์ดํ ์ ์์ต๋๋ค.
Linux ๊ธฐ๋ฐ Pod์ ๋ณด์ ์ปจํ
์คํธ์์ RunAsUser
๊ถํ์ด ์ค์ ๋ ๊ฒฝ์ฐ ์์ ํ์ผ์๋ ์ปจํ
์ด๋ ์ฌ์ฉ์ ์์ ๊ถ์ ํฌํจํ์ฌ ์ฌ๋ฐ๋ฅธ ๊ถํ์ด ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ Windows ๋๋ฑํ RunAsUsername
๊ถํ์ด Windows Pod์ ์ค์ ๋ ๊ฒฝ์ฐ kubelet์ ์์ ๋ณผ๋ฅจ์ ํ์ผ์ ๋ํ ์์ ๊ถ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ Windows Pod์ ๋ณด์ ์ปจํ
์คํธ์์ ์ค์ ๋ RunAsUsername
๊ถํ์ OpenShift Container Platform์์ ์คํ๋๋ Windows ์์ ๋ณผ๋ฅจ์ ๋ํด ์ ์ฉ๋์ง ์์ต๋๋ค.
๋ค์ ์ผ๋ฐ ์๋๋ฆฌ์ค์์๋ ์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
- ๊ตฌ์ฑ ๋งต, ๋ณด์, Downward API
-
์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ์ํธ๊ฐ ํฌํจ๋ ๊ตฌ์ฑ ๋ฐ์ดํฐ๊ฐ ์๋ ์ปจํ
์ด๋๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ Kubernetes์ RHOSP(Red Hat OpenStack Platform)๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์๋น์ค๋ฅผ ํ๋ก๋์
๋๋ ํ
์คํธ์ ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅด๊ฒ ์ด์
๋ธํด์ผ ํ ์ ์์ต๋๋ค. Pod์ ํ๋ก๋์
๋๋ ํ
์คํธ๋ก ๋ผ๋ฒจ์ด ์ง์ ๋๋ฉด Downward API ์ ํ๊ธฐ
metadata.labels
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฐ๋ฅธ RHOSP ๊ตฌ์ฑ์ ์์ฑํ ์ ์์ต๋๋ค. - ๊ตฌ์ฑ ๋งต + ๋ณด์
- ์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฑ ๋ฐ์ดํฐ ๋ฐ ์ํธ์ ๊ด๋ จ๋ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด Vault ์ํธ ํ์ผ์ ์ฌ์ฉํ์ฌ ์ํธ๋ฅผ ํด๋ ํ๋ ๋ช ๊ฐ์ง ๋ฏผ๊ฐํ ์ํธํ๋ ์์ ์์ ๊ตฌ์ฑ ๋งต์ ์คํํ ์ ์์ต๋๋ค.
- ๊ตฌ์ฑ ๋งต + Downward API
-
์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ฉด Pod ์ด๋ฆ(
metadata.name
์ ํ๊ธฐ๋ฅผ ํตํด ์ ๊ณต)์ ํฌํจํ์ฌ ๊ตฌ์ฑ์ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ IP ์ถ์ ์ ์ฌ์ฉํ์ง ์๊ณ ์์ค๋ฅผ ์ฝ๊ฒ ํ์ธํ ์ ์๋๋ก ์์ฒญ๊ณผ ํจ๊ป Pod ์ด๋ฆ์ ์ ๋ฌํ ์ ์์ต๋๋ค. - ๋ณด์ + Downward API
-
์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ฉด ๋ณด์์ ๊ณต๊ฐํค๋ก ์ฌ์ฉํ์ฌ Pod์ ๋ค์์คํ์ด์ค(
metadata.namespace
์ ํ๊ธฐ๋ฅผ ํตํด ์ ๊ณต)๋ฅผ ์ํธํํ ์ ์์ต๋๋ค. ์ด ์์ ๋ฅผ ์ฌ์ฉํ๋ฉด Operator์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ์ฌ ์ํธํ๋ ์ ์ก์ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ค์์คํ์ด์ค ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
7.4.1.1. Pod ์ฌ์์ ์
๋ค์์ ์์๋๋ ๋ณผ๋ฅจ์ ์์ฑํ๋ Pod
์ฌ์์ ์์
๋๋ค.
๋ณด์, Downward API, ๊ตฌ์ฑ ๋งต์ด ์๋ Pod
apiVersion: v1 kind: Pod metadata: name: volume-test spec: containers: - name: container-test image: busybox volumeMounts: 1 - name: all-in-one mountPath: "/projected-volume"2 readOnly: true 3 volumes: 4 - name: all-in-one 5 projected: defaultMode: 0400 6 sources: - secret: name: mysecret 7 items: - key: username path: my-group/my-username 8 - downwardAPI: 9 items: - path: "labels" fieldRef: fieldPath: metadata.labels - path: "cpu_limit" resourceFieldRef: containerName: container-test resource: limits.cpu - configMap: 10 name: myconfigmap items: - key: config path: my-group/my-config mode: 0777 11
- 1
- ๋ณด์์ด ํ์ํ ๊ฐ ์ปจํ ์ด๋์
volumeMounts
์น์ ์ ์ถ๊ฐํฉ๋๋ค. - 2
- ๋ณด์์ด ํ์๋ ๋ฏธ์ฌ์ฉ ๋๋ ํฐ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
- 3
readOnly
๋ฅผtrue
๋ก ์ค์ ํฉ๋๋ค.- 4
volumes
๋ธ๋ก์ ์ถ๊ฐํ์ฌ ๊ฐ ์์ ๋ณผ๋ฅจ ์์ค๋ฅผ ๋์ดํฉ๋๋ค.- 5
- ๋ณผ๋ฅจ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- 6
- ํ์ผ์ ๋ํ ์คํ ๊ถํ์ ์ค์ ํฉ๋๋ค.
- 7
- ๋ณด์์ ์ถ๊ฐํฉ๋๋ค. ๋ณด์ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค. ์ฌ์ฉํ๋ ค๋ ๋ชจ๋ ์ํฌ๋ฆฟ์ ๋์ดํด์ผ ํฉ๋๋ค.
- 8
mountPath
์๋์ ๋ณด์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ณด์ ํ์ผ์ /projected-volume/my-group/my-username์ ์์ต๋๋ค.- 9
- Downward API ์์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- 10
- ๊ตฌ์ฑ ๋งต ์์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- 11
- ํน์ ์์์ ๋ํ ๋ชจ๋ ์ค์
Pod์ ์ปจํ
์ด๋๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ ์ปจํ
์ด๋์ volumeMounts
์น์
์ด ์์ด์ผ ํ์ง๋ง volumes
์น์
์ ํ๋๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ด ์๋ ๊ถํ ๋ชจ๋๊ฐ ์ค์ ๋ ๋ณด์์ด ์ฌ๋ฌ ๊ฐ์ธ Pod
apiVersion: v1 kind: Pod metadata: name: volume-test spec: containers: - name: container-test image: busybox volumeMounts: - name: all-in-one mountPath: "/projected-volume" readOnly: true volumes: - name: all-in-one projected: defaultMode: 0755 sources: - secret: name: mysecret items: - key: username path: my-group/my-username - secret: name: mysecret2 items: - key: password path: my-group/my-password mode: 511
defaultMode
๋ ๊ฐ ๋ณผ๋ฅจ ์์ค๊ฐ ์๋ ์์ ์์ค์์๋ง ์ง์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์์์ ์ค๋ช
ํ ๋๋ก ๊ฐ๋ณ ์์๋ง๋ค mode
๋ฅผ ๋ช
์์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
7.4.1.2. ๊ฒฝ๋ก ์ง์ ๊ณ ๋ ค ์ฌํญ
- ๊ตฌ์ฑ๋ ๊ฒฝ๋ก๊ฐ ๋์ผํ ๋ ํค ๊ฐ ์ถฉ๋
๋์ผํ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ํค๋ฅผ ๊ตฌ์ฑํ๋ฉด Pod ์ฌ์์ด ์ ํจํ ๊ฒ์ผ๋ก ์น์ธ๋์ง ์์ต๋๋ค. ๋ค์ ์์ ์์
mysecret
๋ฐmyconfigmap
์ ์ง์ ๋ ๊ฒฝ๋ก๋ ๋์ผํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: volume-test spec: containers: - name: container-test image: busybox volumeMounts: - name: all-in-one mountPath: "/projected-volume" readOnly: true volumes: - name: all-in-one projected: sources: - secret: name: mysecret items: - key: username path: my-group/data - configMap: name: myconfigmap items: - key: config path: my-group/data
๋ณผ๋ฅจ ํ์ผ ๊ฒฝ๋ก์ ๊ด๋ จ๋ ๋ค์ ์ํฉ์ ๊ณ ๋ คํ์ญ์์ค.
- ๊ตฌ์ฑ๋ ๊ฒฝ๋ก๊ฐ ์๋ ํค ๊ฐ ์ถฉ๋
- ๋ฐ์ํ ์ ์๋ ์ ์ผํ ๋ฐํ์ ๊ฒ์ฆ์ Pod ์์ฑ ์ ๋ชจ๋ ๊ฒฝ๋ก๊ฐ ์๋ ค์ง ๊ฒฝ์ฐ์ด๋ฉฐ ์์ ์๋๋ฆฌ์ค์ ์ ์ฌํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์ ํด๋นํ์ง ์์ผ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ๋ ์ต๊ทผ ์ง์ ๋ ๋ฆฌ์์ค๊ฐ ์ด์ ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋ฎ์ด์๋๋ค(Pod ์์ฑ ํ ์ ๋ฐ์ดํธ๋ ๋ฆฌ์์ค ํฌํจ).
- ํ๋์ ๊ฒฝ๋ก๋ ๋ช ์์ ์ด๊ณ ๋ค๋ฅธ ๊ฒฝ๋ก๋ ์๋์ผ๋ก ์์๋ ๋์ ์ถฉ๋
- ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ฒฝ๋ก๊ฐ ์๋ ์์ ๋ฐ์ดํฐ์ ์ผ์นํ์ฌ ์ถฉ๋์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ ์์ ๋ฐ์ดํฐ๊ฐ ์ด์ ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋ฎ์ด์๋๋ค.
7.4.2. Pod์ ์์ ๋ณผ๋ฅจ ๊ตฌ์ฑ
์์ ๋ณผ๋ฅจ์ ์์ฑํ ๋๋ ์์ ๋ณผ๋ฅจ ์ดํด์ ์ค๋ช ๋ ๋ณผ๋ฅจ ํ์ผ ๊ฒฝ๋ก ์ํฉ์ ๊ณ ๋ คํ์ญ์์ค.
๋ค์ ์์ ์์๋ ์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ๋ณด์ ๋ณผ๋ฅจ ์์ค๋ฅผ ๋ง์ดํธํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ํ์ผ์์ ์ฌ์ฉ์ ์ด๋ฆ ๋ฐ ์ํธ ๋ณด์์ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ํ๋์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ Pod๋ฅผ ์์ฑํ์ฌ ๋์ผํ ๊ณต์ ๋๋ ํฐ๋ฆฌ์ ๋ณด์์ ๋ง์ดํธํฉ๋๋ค.
์ฌ์ฉ์ ์ด๋ฆ ๋ฐ ์ํธ ๊ฐ์ base64 ๋ก ์ธ์ฝ๋ฉ๋ ์ ํจํ ๋ฌธ์์ด์ผ ์ ์์ต๋๋ค.
๋ค์ ์์ ์์๋ admin
์ base64 ํ์์ผ๋ก ๋ณด์ฌ์ค๋๋ค.
$ echo -n "admin" | base64
์ถ๋ ฅ ์
YWRtaW4=
๋ค์ ์์ ์์๋ ์ํธ 1f2d1e2e67df
๋ฅผ base64๋ก ๋ณด์ฌ์ค๋๋ค.
$ echo -n "1f2d1e2e67df" | base64
์ถ๋ ฅ ์
MWYyZDFlMmU2N2Rm
ํ๋ก์ธ์ค
์์ ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ๋ณด์ ๋ณผ๋ฅจ ์์ค๋ฅผ ๋ง์ดํธํฉ๋๋ค.
์ํฌ๋ฆฟ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํ๊ณ ์ํธ ๋ฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ ํ๊ฒ ๊ต์ฒดํฉ๋๋ค.
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: pass: MWYyZDFlMmU2N2Rm user: YWRtaW4=
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ณด์์ ์์ฑํฉ๋๋ค.
$ oc create -f <secrets-filename>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f secret.yaml
์ถ๋ ฅ ์
secret "mysecret" created
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ณด์์ด ์์ฑ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
$ oc get secret <secret-name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get secret mysecret
์ถ๋ ฅ ์
NAME TYPE DATA AGE mysecret Opaque 2 17h
$ oc get secret <secret-name> -o yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get secret mysecret -o yaml
apiVersion: v1 data: pass: MWYyZDFlMmU2N2Rm user: YWRtaW4= kind: Secret metadata: creationTimestamp: 2017-05-30T20:21:38Z name: mysecret namespace: default resourceVersion: "2107" selfLink: /api/v1/namespaces/default/secrets/mysecret uid: 959e0424-4575-11e7-9f97-fa163e4bd54c type: Opaque
์์ ๋ณผ๋ฅจ์ด ํฌํจ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
volumes
์น์ ์ ํฌํจํ์ฌ ๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.kind: Pod metadata: name: test-projected-volume spec: containers: - name: test-projected-volume image: busybox args: - sleep - "86400" volumeMounts: - name: all-in-one mountPath: "/projected-volume" readOnly: true securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL volumes: - name: all-in-one projected: sources: - secret: name: mysecret 1
- 1
- ์์ฑํ ๋ณด์์ ์ด๋ฆ์ ๋๋ค.
๊ตฌ์ฑ ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <your_yaml_file>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f secret-pod.yaml
์ถ๋ ฅ ์
pod "test-projected-volume" created
Pod ์ปจํ ์ด๋๊ฐ ์คํ ์ค์ธ์ง ํ์ธํ ํ Pod ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํฉ๋๋ค.
$ oc get pod <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get pod test-projected-volume
์ถ๋ ฅ์ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE test-projected-volume 1/1 Running 0 14s
๋ค๋ฅธ ํฐ๋ฏธ๋์์
oc exec
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ์์ ์ฝ๋๋ค.$ oc exec -it <pod> <command>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc exec -it test-projected-volume -- /bin/sh
์์์
projected-volumes
๋๋ ํฐ๋ฆฌ์ ์์ ์์ค๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธํฉ๋๋ค./ # ls
์ถ๋ ฅ ์
bin home root tmp dev proc run usr etc projected-volume sys var
7.5. ์ปจํ ์ด๋์์ API ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉ
Downward API๋ OpenShift Container Platform์ ๊ฒฐํฉํ์ง ์๊ณ ๋ ์ปจํ ์ด๋์์ API ์ค๋ธ์ ํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ด๋ฌํ ์ ๋ณด์๋ Pod ์ด๋ฆ, ๋ค์์คํ์ด์ค, ๋ฆฌ์์ค ๊ฐ์ด ํฌํจ๋ฉ๋๋ค. ์ปจํ ์ด๋๋ ํ๊ฒฝ ๋ณ์ ๋๋ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ Downward API์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
7.5.1. Downward API๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์ Pod ์ ๋ณด ๋ ธ์ถ
Downward API์๋ Pod ์ด๋ฆ, ํ๋ก์ ํธ, ๋ฆฌ์์ค ๊ฐ๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. ์ปจํ ์ด๋๋ ํ๊ฒฝ ๋ณ์ ๋๋ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ Downward API์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Pod ๋ด ํ๋๋ FieldRef
API ์ ํ์ ์ฌ์ฉํ์ฌ ์ ํํฉ๋๋ค. FieldRef
์๋ ๋ ๊ฐ์ ํ๋๊ฐ ์์ต๋๋ค.
ํ๋ | ์ค๋ช |
---|---|
| Pod์ ๊ด๋ จํ์ฌ ์ ํํ ํ๋์ ๊ฒฝ๋ก์ ๋๋ค. |
|
|
ํ์ฌ v1 API์์ ์ ํจํ ์ ํ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ํ๊ธฐ | ์ค๋ช |
---|---|
| Pod์ ์ด๋ฆ์ ๋๋ค. ์ด๋ ํ๊ฒฝ ๋ณ์์ ๋ณผ๋ฅจ ๋ชจ๋์์ ์ง์๋ฉ๋๋ค. |
| Pod์ ๋ค์์คํ์ด์ค์ ๋๋ค. ํ๊ฒฝ ๋ณ์์ ๋ณผ๋ฅจ ๋ชจ๋์์ ์ง์๋ฉ๋๋ค. |
| Pod์ ๋ผ๋ฒจ์ ๋๋ค. ๋ณผ๋ฅจ์์๋ง ์ง์๋๋ฉฐ ํ๊ฒฝ ๋ณ์์์๋ ์ง์๋์ง ์์ต๋๋ค. |
| Pod์ ์ฃผ์์ ๋๋ค. ๋ณผ๋ฅจ์์๋ง ์ง์๋๋ฉฐ ํ๊ฒฝ ๋ณ์์์๋ ์ง์๋์ง ์์ต๋๋ค. |
| Pod์ IP์ ๋๋ค. ํ๊ฒฝ ๋ณ์์์๋ง ์ง์๋๋ฉฐ ๋ณผ๋ฅจ์์๋ ์ง์๋์ง ์์ต๋๋ค. |
apiVersion
ํ๋๊ฐ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ํฌํจ๋ Pod ํ
ํ๋ฆฟ์ API ๋ฒ์ ์
๋๋ค.
7.5.2. Downward API๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๊ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ดํด
์ปจํ ์ด๋๋ ํ๊ฒฝ ๋ณ์ ๋๋ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ API ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ํํ๋ ๋ฉ์๋์ ๋ฐ๋ผ ์ปจํ ์ด๋์์ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Pod ์ด๋ฆ
- Pod ํ๋ก์ ํธ/๋ค์์คํ์ด์ค
- Pod ์ฃผ์
- Pod ๋ผ๋ฒจ
๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ๋ง ์ฌ์ฉํ์ฌ ์ฃผ์ ๋ฐ ๋ ์ด๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
7.5.2.1. ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๊ฐ ์ฌ์ฉ
์ปจํ
์ด๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ ๋ณ์ ๊ฐ์ value
ํ๋์์ ์ง์ ํ๋ ๋ฆฌํฐ๋ด ๊ฐ ๋์ FieldRef
์์ค์์ ์ ๊ณตํ๋๋ก EnvVar
์ ํ์ valueFrom
ํ๋(EnvVarSource
์ ํ)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ธ์ค์ ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์์์ ์๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์์ํ ํ์๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ผ๋ฏ๋ก Pod์ ์์ ํน์ฑ๋ง ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์๋๋ ํ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Pod ์ด๋ฆ
- Pod ํ๋ก์ ํธ/๋ค์์คํ์ด์ค
์ ์ฐจ
์ปจํ ์ด๋์์ ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๊ฐ ํฌํจ๋ ์ Pod ์ฌ์์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: dapi-env-test-pod spec: containers: - name: env-test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MY_POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace restartPolicy: Never # ...
pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f pod.yaml
๊ฒ์ฆ
์ปจํ ์ด๋์ ๋ก๊ทธ์
MY_POD_NAME
๋ฐMY_POD_NAMESPACE
๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.$ oc logs -p dapi-env-test-pod
7.5.2.2. ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๊ฐ ์ฌ์ฉ
์ปจํ ์ด๋๋ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ API ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋๋ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Pod ์ด๋ฆ
- Pod ํ๋ก์ ํธ/๋ค์์คํ์ด์ค
- Pod ์ฃผ์
- Pod ๋ผ๋ฒจ
์ ์ฐจ
๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
์ปจํ ์ด๋์์ ์ฌ์ฉํ ํ๊ฒฝ ๋ณ์๊ฐ ํฌํจ๋ ์ Pod ์ฌ์์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
volume-pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.kind: Pod apiVersion: v1 metadata: labels: zone: us-east-coast cluster: downward-api-test-cluster1 rack: rack-123 name: dapi-volume-test-pod annotations: annotation1: "345" annotation2: "456" spec: containers: - name: volume-test-container image: gcr.io/google_containers/busybox command: ["sh", "-c", "cat /tmp/etc/pod_labels /tmp/etc/pod_annotations"] volumeMounts: - name: podinfo mountPath: /tmp/etc readOnly: false volumes: - name: podinfo downwardAPI: defaultMode: 420 items: - fieldRef: fieldPath: metadata.name path: pod_name - fieldRef: fieldPath: metadata.namespace path: pod_namespace - fieldRef: fieldPath: metadata.labels path: pod_labels - fieldRef: fieldPath: metadata.annotations path: pod_annotations restartPolicy: Never # ...
volume-pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f volume-pod.yaml
๊ฒ์ฆ
์ปจํ ์ด๋์ ๋ก๊ทธ๋ฅผ ํ์ธํ๊ณ ๊ตฌ์ฑ๋ ํ๋๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
$ oc logs -p dapi-volume-test-pod
์ถ๋ ฅ ์
cluster=downward-api-test-cluster1 rack=rack-123 zone=us-east-coast annotation1=345 annotation2=456 kubernetes.io/config.source=api
7.5.3. Downward API๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ดํด
Pod๋ฅผ ์์ฑํ ๋ ์ด๋ฏธ์ง ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์๊ฐ ํน์ ํ๊ฒฝ์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ ์ ์๋๋ก Downward API๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํจํ ๋ฆฌ์์ค ์์ฒญ ๋ฐ ์ ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
ํ๊ฒฝ ๋ณ์ ๋๋ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค.
7.5.3.1. ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ฆฌ์์ค ์ฌ์ฉ
Pod๋ฅผ ์์ฑํ ๋๋ Downward API์์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํจํ ๋ฆฌ์์ค ์์ฒญ ๋ฐ ์ ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
Pod ๊ตฌ์ฑ์ ์์ฑํ ๋ spec.container
ํ๋์ resources
ํ๋์ ํด๋นํ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค.
๋ฆฌ์์ค ์ ํ์ด ์ปจํ ์ด๋ ๊ตฌ์ฑ์ ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ Downward API์ ๊ธฐ๋ณธ๊ฐ์ ๋ ธ๋์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ฐ๋ฅ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
์ ์ฐจ
์ฝ์ ํ ๋ฆฌ์์ค๊ฐ ํฌํจ๋ ์ Pod ์ฌ์์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: dapi-env-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox:1.24 command: [ "/bin/sh", "-c", "env" ] resources: requests: memory: "32Mi" cpu: "125m" limits: memory: "64Mi" cpu: "250m" env: - name: MY_CPU_REQUEST valueFrom: resourceFieldRef: resource: requests.cpu - name: MY_CPU_LIMIT valueFrom: resourceFieldRef: resource: limits.cpu - name: MY_MEM_REQUEST valueFrom: resourceFieldRef: resource: requests.memory - name: MY_MEM_LIMIT valueFrom: resourceFieldRef: resource: limits.memory # ...
pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f pod.yaml
7.5.3.2. ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ฆฌ์์ค ์ฌ์ฉ
Pod๋ฅผ ์์ฑํ ๋ Downward API๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ปดํจํ ๋ฆฌ์์ค ์์ฒญ ๋ฐ ์ ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
Pod ๊ตฌ์ฑ์ ์์ฑํ ๋ spec.volumes.downwardAPI.items
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ spec.resources
ํ๋์ ํด๋นํ๋ ์ํ๋ ๋ฆฌ์์ค๋ฅผ ์ค๋ช
ํฉ๋๋ค.
๋ฆฌ์์ค ์ ํ์ด ์ปจํ ์ด๋ ๊ตฌ์ฑ์ ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ Downward API์ ๊ธฐ๋ณธ๊ฐ์ ๋ ธ๋์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ฐ๋ฅ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
์ ์ฐจ
์ฝ์ ํ ๋ฆฌ์์ค๊ฐ ํฌํจ๋ ์ Pod ์ฌ์์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: dapi-env-test-pod spec: containers: - name: client-container image: gcr.io/google_containers/busybox:1.24 command: ["sh", "-c", "while true; do echo; if [[ -e /etc/cpu_limit ]]; then cat /etc/cpu_limit; fi; if [[ -e /etc/cpu_request ]]; then cat /etc/cpu_request; fi; if [[ -e /etc/mem_limit ]]; then cat /etc/mem_limit; fi; if [[ -e /etc/mem_request ]]; then cat /etc/mem_request; fi; sleep 5; done"] resources: requests: memory: "32Mi" cpu: "125m" limits: memory: "64Mi" cpu: "250m" volumeMounts: - name: podinfo mountPath: /etc readOnly: false volumes: - name: podinfo downwardAPI: items: - path: "cpu_limit" resourceFieldRef: containerName: client-container resource: limits.cpu - path: "cpu_request" resourceFieldRef: containerName: client-container resource: requests.cpu - path: "mem_limit" resourceFieldRef: containerName: client-container resource: limits.memory - path: "mem_request" resourceFieldRef: containerName: client-container resource: requests.memory # ...
volume-pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f volume-pod.yaml
7.5.4. Downward API๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ ์ฌ์ฉ
Pod๋ฅผ ์์ฑํ ๋ ์ด๋ฏธ์ง ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์๊ฐ ํน์ ํ๊ฒฝ์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์๋๋ก Downward API๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์์ ์ฝ์ ํ ์ ์์ต๋๋ค.
์ ์ฐจ
์ฝ์ ํ ์ํฌ๋ฆฟ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
secret.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Secret metadata: name: mysecret data: password: <password> username: <username> type: kubernetes.io/basic-auth
secret.yaml
ํ์ผ์์ ๋ณด์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f secret.yaml
์
Secret
์ค๋ธ์ ํธ์username
ํ๋๋ฅผ ์ฐธ์กฐํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.๋ค์๊ณผ ์ ์ฌํ
pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: dapi-env-test-pod spec: containers: - name: env-test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: MY_SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username restartPolicy: Never # ...
pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f pod.yaml
๊ฒ์ฆ
์ปจํ ์ด๋์ ๋ก๊ทธ์
MY_SECRET_USERNAME
๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.$ oc logs -p dapi-env-test-pod
7.5.5. Downward API๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ๋งต ์ฌ์ฉ
Pod๋ฅผ ์์ฑํ ๋ ์ด๋ฏธ์ง ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์๊ฐ ํน์ ํ๊ฒฝ์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์๋๋ก Downward API๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ๋งต ๊ฐ์ ์ฝ์ ํ ์ ์์ต๋๋ค.
์ ์ฐจ
์ฝ์ ํ ๊ฐ์ผ๋ก ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
configmap.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: ConfigMap metadata: name: myconfigmap data: mykey: myvalue
configmap.yaml
ํ์ผ์์ ๊ตฌ์ฑ ๋งต์ ์์ฑํฉ๋๋ค.$ oc create -f configmap.yaml
์ ๊ตฌ์ฑ ๋งต์ ์ฐธ์กฐํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: dapi-env-test-pod spec: containers: - name: env-test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: MY_CONFIGMAP_VALUE valueFrom: configMapKeyRef: name: myconfigmap key: mykey restartPolicy: Always # ...
pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f pod.yaml
๊ฒ์ฆ
์ปจํ ์ด๋์ ๋ก๊ทธ์
MY_CONFIGMAP_VALUE
๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.$ oc logs -p dapi-env-test-pod
7.5.6. ํ๊ฒฝ ๋ณ์ ์ฐธ์กฐ
Pod๋ฅผ ์์ฑํ ๋ $()
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด์ ์ ์ ์ํ ํ๊ฒฝ ๋ณ์์ ๊ฐ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ํ๊ฒฝ ๋ณ์ ์ฐธ์กฐ๋ฅผ ํ์ธํ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ด ์ ๊ณต๋ ๋ฌธ์์ด๋ก ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
์ ์ฐจ
๊ธฐ์กด ํ๊ฒฝ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: dapi-env-test-pod spec: containers: - name: env-test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: MY_EXISTING_ENV value: my_value - name: MY_ENV_VAR_REF_ENV value: $(MY_EXISTING_ENV) restartPolicy: Never # ...
pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f pod.yaml
๊ฒ์ฆ
์ปจํ ์ด๋์ ๋ก๊ทธ์
MY_ENV_VAR_REF_ENV
๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.$ oc logs -p dapi-env-test-pod
7.5.7. ํ๊ฒฝ ๋ณ์ ์ฐธ์กฐ ์ด์ค์ผ์ดํ
Pod๋ฅผ ์์ฑํ ๋ ์ด์ค ๋ฌ๋ฌ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฒฝ ๋ณ์ ์ฐธ์กฐ๋ฅผ ์ด์ค์ผ์ดํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ๊ฐ์ด ์ ๊ณต๋ ๊ฐ์ ๋จ์ผ ๋ฌ๋ฌ ๊ธฐํธ ๋ฒ์ ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
์ ์ฐจ
๊ธฐ์กด ํ๊ฒฝ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ Pod๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ
pod.yaml
ํ์ผ์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: dapi-env-test-pod spec: containers: - name: env-test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: MY_NEW_ENV value: $$(SOME_OTHER_ENV) restartPolicy: Never # ...
pod.yaml
ํ์ผ์์ Pod๋ฅผ ์์ฑํฉ๋๋ค.$ oc create -f pod.yaml
๊ฒ์ฆ
์ปจํ ์ด๋์ ๋ก๊ทธ์
MY_NEW_ENV
๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.$ oc logs -p dapi-env-test-pod
7.6. OpenShift Container Platform ์ปจํ ์ด๋์ ๋ํ ํด๋น ์ปจํ ์ด๋์์ ํ์ผ ๋ณต์ฌ
CLI์์ rsync
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋์ ์๊ฒฉ ๋๋ ํฐ๋ฆฌ์์ ๋๋ ์๊ฒฉ ๋๋ ํฐ๋ฆฌ๋ก ๋ก์ปฌ ํ์ผ์ ๋ณต์ฌํ ์ ์์ต๋๋ค.
7.6.1. ํ์ผ์ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ ์ดํด
oc rsync
๋ช
๋ น ๋๋ ์๊ฒฉ ๋๊ธฐํ๋ ๋ฐฑ์
๋ฐ ๋ณต์์ ์ํด Pod์์ ๋ฐ Pod๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์นด์ด๋ธ๋ฅผ ๋ณต์ฌํ๋ ์ ์ฉํ ํด์
๋๋ค. ์คํ ์ค์ธ Pod์์ ์์ค ํ์ผ์ ํซ ๋ฆฌ๋ก๋๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ฐ ๋๋ฒ๊น
์ ์ํด oc rsync
๋ฅผ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์คํ ์ค์ธ Pod์ ๋ณต์ฌํ ์๋ ์์ต๋๋ค.
$ oc rsync <source> <destination> [-c <container>]
7.6.1.1. ์๊ตฌ์ฌํญ
- ๋ณต์ฌ ์์ค ์ง์
oc rsync
๋ช ๋ น์ ์์ค ์ธ์๋ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ ๋๋ pod ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค. ๊ฐ๋ณ ํ์ผ์ ์ง์๋์ง ์์ต๋๋ค.Pod ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํ ๋๋ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ ์์ Pod ์ด๋ฆ์ ๋ถ์ฌ์ผ ํฉ๋๋ค.
<pod name>:<dir>
๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ด ๊ฒฝ๋ก ๊ตฌ๋ถ์(
/
)๋ก ๋๋๋ ๊ฒฝ์ฐ ๋๋ ํฐ๋ฆฌ์ ์ฝํ ์ธ ๋ง ๋์์ ๋ณต์ฌ๋ฉ๋๋ค. ๊ทธ๋ฌ์ง ์์ผ๋ฉด ๋๋ ํฐ๋ฆฌ ๋ฐ ํด๋น ์ฝํ ์ธ ๊ฐ ๋์์ ๋ณต์ฌ๋ฉ๋๋ค.- ๋ณต์ฌ ๋์ ์ง์
-
oc rsync
๋ช ๋ น์ ๋์ ์ธ์๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค. ํด๋น ๋๋ ํฐ๋ฆฌ๊ฐ ์กด์ฌํ์ง ์์ง๋งrsync
๊ฐ ๋ณต์ฌ์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ฅผ ์ํด ๋๋ ํฐ๋ฆฌ๊ฐ ์์ฑ๋ฉ๋๋ค. - ๋์์ ํ์ผ ์ญ์
-
--delete
ํ๋๊ทธ๋ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ์ ์๊ฒฉ ๋๋ ํฐ๋ฆฌ์์ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. - ํ์ผ ๋ณ๊ฒฝ ์ ์ฐ์ ๋๊ธฐํ
--watch
์ต์ ์ ์ฌ์ฉํ๋ฉด ๋ช ๋ น์์ ํ์ผ ์์คํ ๋ณ๊ฒฝ์ ์์ค ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋๊ธฐํํฉ๋๋ค. ์ด ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ช ๋ น์ด ์๊ตฌ์ ์ผ๋ก ์คํ๋ฉ๋๋ค.๋น ๋ฅด๊ฒ ๋ณ๊ฒฝ๋๋ ํ์ผ ์์คํ ์ผ๋ก ์ธํด ๋๊ธฐํ๋ฅผ ์ฐ์์ผ๋ก ํธ์ถํ์ง ์๋๋ก ๋๊ธฐํ๋ ์ ์ ํ์ ์ํ๋ฉ๋๋ค.
--watch
์ต์ ์ ์ฌ์ฉํ ๋์ ๋์์ ์ผ๋ฐ์ ์ผ๋กoc rsync
์ ์ ๋ฌ๋๋ ์ธ์๋ฅผ ํฌํจํ์ฌoc rsync
๋ฅผ ์๋์ผ๋ก ๋ฐ๋ณตํด์ ํธ์ถํ๋ ๊ฒ๊ณผ ์ฌ์ค์ ๋์ผํฉ๋๋ค. ๋ฐ๋ผ์-delete
์ ๊ฐ์ดoc rsync
๋ฅผ ์๋์ผ๋ก ํธ์ถํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ํ๋๊ทธ๋ฅผ ํตํด ํด๋น ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.
7.6.2. ์ปจํ ์ด๋์์ ๋๋ ์ปจํ ์ด๋์ ํ์ผ ๋ณต์ฌ
์ปจํ ์ด๋์์ ๋๋ ์ปจํ ์ด๋์ ๋ก์ปฌ ํ์ผ ๋ณต์ฌ ์ง์ ๊ธฐ๋ฅ์ CLI์ ๋น๋๋ฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
oc rsync
๋ก ์์
ํ ๋ ๋ค์ ์ฌํญ์ ์ ์ํ์ญ์์ค.
rsync๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
oc rsync
๋ช ๋ น์ ํด๋ผ์ด์ธํธ ๋จธ์ ๋ฐ ์๊ฒฉ ์ปจํ ์ด๋์ ์๋ ๊ฒฝ์ฐ ๋ก์ปฌrsync
ํด์ ์ฌ์ฉํฉ๋๋ค.rsync
๊ฐ ๋ก์ปฌ์ด๋ ์๊ฒฉ ์ปจํ ์ด๋์ ์๋ ๊ฒฝ์ฐ tar ์์นด์ด๋ธ๋ ๋ก์ปฌ์ ์์ฑ๋ ํ ์ปจํ ์ด๋๋ก ์ ์ก๋๋ฉฐ, ์ฌ๊ธฐ์์ tar ์ ํธ๋ฆฌํฐ๋ฅผ ํตํด ํ์ผ์ด ์ถ์ถ๋ฉ๋๋ค. ์๊ฒฉ ์ปจํ ์ด๋์์ tar๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ณต์ฌ๊ฐ ์คํจํฉ๋๋ค.tar ๋ณต์ฌ ๋ฐฉ๋ฒ์์๋
oc rsync
์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ดoc rsync
๋ ๋์ ๋๋ ํฐ๋ฆฌ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์์ค์ ๋์ ๊ฐ์ ๋ค๋ฅธ ํ์ผ๋ง ๋ณด๋ ๋๋ค.์ฐธ๊ณWindows์์๋
oc rsync
๋ช ๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์๋๋กcwRsync
ํด๋ผ์ด์ธํธ๋ฅผ ์ค์นํ๊ณ PATH์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ ์ฐจ
๋ก์ปฌ ๋๋ ํฐ๋ฆฌ๋ฅผ Pod ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc rsync <local-dir> <pod-name>:/<remote-dir> -c <container-name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc rsync /home/user/source devpod1234:/src -c user-container
Pod ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc rsync devpod1234:/src /home/user/source
์ถ๋ ฅ ์
$ oc rsync devpod1234:/src/status.txt /home/user/
7.6.3. ๊ณ ๊ธ Rsync ๊ธฐ๋ฅ ์ฌ์ฉ
oc rsync
๋ช
๋ น์ ํ์ค rsync
๋ณด๋ค ์ ์ ์์ ๋ช
๋ น์ค ์ต์
์ ํ์ํฉ๋๋ค. oc rsync
์์ ์ฌ์ฉํ ์ ์๋ ํ์ค rsync
๋ช
๋ น์ค ์ต์
(์: --exclude-from=FILE
์ต์
)์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ํ์ค rsync
์ --rsh
(-e
) ์ต์
๋๋ RSYNC_RSH
ํ๊ฒฝ ๋ณ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
$ rsync --rsh='oc rsh' --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
RSYNC_RSH
๋ณ์๋ฅผ ๋ด๋ณด๋
๋๋ค.
$ export RSYNC_RSH='oc rsh'
๊ทธ๋ฐ ๋ค์ rsync ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ rsync --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
์์ ๋ ๊ฐ์ง ์ ๋ชจ๋ oc rsh
๋ฅผ ์๊ฒฉ ์ ํ๋ก๊ทธ๋จ์ผ๋ก ์ฌ์ฉํ์ฌ ์๊ฒฉ Pod์ ์ฐ๊ฒฐํ ์ ์๋๋ก ํ์ค rsync
๋ฅผ ๊ตฌ์ฑํ๊ณ oc rsync
๋ฅผ ์คํํ๋ ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
7.7. OpenShift Container Platform ์ปจํ ์ด๋์์ ์๊ฒฉ ๋ช ๋ น ์คํ
CLI๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Container Platform ์ปจํ ์ด๋์์ ์๊ฒฉ ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค.
7.7.1. ์ปจํ ์ด๋์์ ์๊ฒฉ ๋ช ๋ น ์คํ
์๊ฒฉ ์ปจํ ์ด๋ ๋ช ๋ น ์คํ์ ์ํ ์ง์์ CLI์ ๋น๋๋ฉ๋๋ค.
ํ๋ก์ธ์ค
์ปจํ ์ด๋์์ ๋ช ๋ น์ ์คํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ oc exec <pod> [-c <container>] -- <command> [<arg_1> ... <arg_n>]
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc exec mypod date
์ถ๋ ฅ ์
Thu Apr 9 02:21:53 UTC 2015
๋ณด์์์ ์ด์ ๋ก cluster-admin
์ฌ์ฉ์๊ฐ ๋ช
๋ น์ ์คํํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๊ถํ ์๋ ์ปจํ
์ด๋์ ์ก์ธ์คํ๋ฉด oc exec
๋ช
๋ น์ด ์๋ํ์ง ์์ต๋๋ค.
7.7.2. ํด๋ผ์ด์ธํธ์์ ์๊ฒฉ ๋ช ๋ น์ ์์ํ๋ ํ๋กํ ์ฝ
ํด๋ผ์ด์ธํธ๋ Kubernetes API ์๋ฒ์ ๋ํ ์์ฒญ์ ๋ฐํํ์ฌ ์ปจํ ์ด๋์์ ์๊ฒฉ ๋ช ๋ น ์คํ์ ์์ํฉ๋๋ค.
/proxy/nodes/<node_name>/exec/<namespace>/<pod>/<container>?command=<command>
์ URL์์
-
<node_name>
์ ๋ ธ๋์ FQDN์ ๋๋ค. -
<namespace>
๋ ๋์ Pod์ ํ๋ก์ ํธ์ ๋๋ค. -
<pod>
๋ ๋์ Pod์ ์ด๋ฆ์ ๋๋ค. -
<container>
๋ ๋์ ์ปจํ ์ด๋์ ์ด๋ฆ์ ๋๋ค. -
<command>
๋ ์คํํ๊ธฐ๋ฅผ ์ํ๋ ๋ช ๋ น์ ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/proxy/nodes/node123.openshift.com/exec/myns/mypod/mycontainer?command=date
๋ํ ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ์ฌ ๋ค์์ ๋ํ ์ฌ๋ถ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ์์ ์๊ฒฉ ์ปจํ ์ด๋์ ๋ช ๋ น(stdin)์ ์ ๋ ฅ์ ๋ณด๋ด์ผ ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ์ ํฐ๋ฏธ๋์ด TTY์ ๋๋ค.
- ์๊ฒฉ ์ปจํ ์ด๋์ ๋ช ๋ น์์ stdout์ ์ถ๋ ฅ์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด์ผ ํฉ๋๋ค.
- ์๊ฒฉ ์ปจํ ์ด๋์ ๋ช ๋ น์์ stderr์ ์ถ๋ ฅ์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด์ผ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ API ์๋ฒ๋ก exec
์์ฒญ์ ๋ณด๋ธ ํ ๋ค์ค ์คํธ๋ฆผ์ ์ง์ํ๋ ์ฐ๊ฒฐ๋ก ์ฐ๊ฒฐ์ ์
๊ทธ๋ ์ด๋ํฉ๋๋ค. ํ์ฌ ๊ตฌํ์์๋ HTTP/2 ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ stdin, stdout, stderr์ ๋ํด ๊ฐ๊ฐ ํ๋์ ์คํธ๋ฆผ์ ์์ฑํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์คํธ๋ฆผ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์คํธ๋ฆผ์ streamType
ํค๋๋ฅผ stdin
, stdout
, stderr
์ค ํ๋๋ก ์ค์ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์๊ฒฉ ๋ช ๋ น ์คํ ์์ฒญ์ ์๋ฃํ๋ฉด ๋ชจ๋ ์คํธ๋ฆผ, ์ ๊ทธ๋ ์ด๋๋ ์ฐ๊ฒฐ, ๊ธฐ๋ณธ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค.
7.8. ํฌํธ ์ ๋ฌ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก์ธ์ค
OpenShift Container Platform์์๋ Pod๋ก ํฌํธ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
7.8.1. ํฌํธ ์ ๋ฌ ์ดํด
CLI๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ด์์ ๋ก์ปฌ ํฌํธ๋ฅผ Pod๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ง์ ๋ ํฌํธ ๋๋ ์์์ ํฌํธ์์ ๋ก์ปฌ๋ก ์์ ๋๊ธฐํ๊ณ Pod์ ์ง์ ๋ ํฌํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
ํฌํธ ์ ๋ฌ ๊ธฐ๋ฅ์ ์ํ ์ง์์ CLI์ ๋น๋๋์ด ์์ต๋๋ค.
$ oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
CLI๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ฐ ๋ก์ปฌ ํฌํธ์์ ์์ ๋๊ธฐํ๊ณ ์๋์ ์ค๋ช ๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ ๋ฌํฉ๋๋ค.
ํฌํธ๋ ๋ค์ ํ์์ ์ฌ์ฉํ์ฌ ์ง์ ํ ์ ์์ต๋๋ค.
| ํด๋ผ์ด์ธํธ๋ ํฌํธ 5000์์ ๋ก์ปฌ๋ก ์์ ๋๊ธฐํ๊ณ Pod์ 5000์ผ๋ก ์ ๋ฌํฉ๋๋ค. |
| ํด๋ผ์ด์ธํธ๋ ํฌํธ 6000์์ ๋ก์ปฌ๋ก ์์ ๋๊ธฐํ๊ณ Pod์ 5000์ผ๋ก ์ ๋ฌํฉ๋๋ค. |
| ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ปฌ ํฌํธ๋ฅผ ์ ํํ๊ณ Pod์ 5000์ผ๋ก ์ ๋ฌํฉ๋๋ค. |
OpenShift Container Platform์ ํด๋ผ์ด์ธํธ์ ํฌํธ ์ ๋ฌ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. ์์ฒญ์ด ์์ ๋๋ฉด OpenShift Container Platform์์ ์๋ต์ ์ ๊ทธ๋ ์ด๋ํ๊ณ ํด๋ผ์ด์ธํธ์์ ํฌํธ ์ ๋ฌ ์คํธ๋ฆผ์ ์์ฑํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. OpenShift Container Platform์์ ์ ์คํธ๋ฆผ์ ์์ ํ๋ฉด ์คํธ๋ฆผ๊ณผ Pod์ ํฌํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค.
๊ตฌ์กฐ์ ์ผ๋ก Pod์ ํฌํธ๋ก ์ ๋ฌํ ์ ์๋ ์ต์
์ด ์์ต๋๋ค. ์ง์๋๋ OpenShift Container Platform ๊ตฌํ์์๋ ๋
ธ๋ ํธ์คํธ์์ ์ง์ nsenter
๋ฅผ ํธ์ถํ์ฌ Pod์ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค์ ์
๋ ฅํ ๋ค์ socat
์ ํธ์ถํ์ฌ ์คํธ๋ฆผ๊ณผ Pod ํฌํธ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์ ์ ์ ๊ตฌํ์๋ nsenter
๋ฐ socat
์ ์คํํ๋ helper Pod ์คํ์ ํฌํจํ ์ ์์ผ๋ฏ๋ก ์ด๋ฌํ ๋ฐ์ด๋๋ฆฌ๋ฅผ ํธ์คํธ์ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค.
7.8.2. ํฌํธ ์ ๋ฌ ์ฌ์ฉ
CLI๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ด์์ ๋ก์ปฌ ํฌํธ๋ฅผ Pod๋ก ํฌํธ ์ ๋ฌํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Pod์ ์ง์ ๋ ํฌํธ์์ ์์ ๋๊ธฐํฉ๋๋ค.
$ oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํฌํธ
5000
๋ฐ6000
์์ ๋ก์ปฌ๋ก ์์ ๋๊ธฐํ๊ณ Pod์ ํฌํธ5000
๋ฐ6000
์์ ๋๋ ํด๋น ํฌํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค.$ oc port-forward <pod> 5000 6000
์ถ๋ ฅ ์
Forwarding from 127.0.0.1:5000 -> 5000 Forwarding from [::1]:5000 -> 5000 Forwarding from 127.0.0.1:6000 -> 6000 Forwarding from [::1]:6000 -> 6000
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํฌํธ
8888
์์ ๋ก์ปฌ๋ก ์์ ๋๊ธฐํ๊ณ Pod์5000
์ผ๋ก ์ ๋ฌํฉ๋๋ค.$ oc port-forward <pod> 8888:5000
์ถ๋ ฅ ์
Forwarding from 127.0.0.1:8888 -> 5000 Forwarding from [::1]:8888 -> 5000
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ํฌํธ์์ ๋ก์ปฌ๋ก ์์ ๋๊ธฐํ๊ณ Pod์
5000
์ผ๋ก ์ ๋ฌํฉ๋๋ค.$ oc port-forward <pod> :5000
์ถ๋ ฅ ์
Forwarding from 127.0.0.1:42390 -> 5000 Forwarding from [::1]:42390 -> 5000
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
$ oc port-forward <pod> 0:5000
7.8.3. ํด๋ผ์ด์ธํธ์์ ํฌํธ ์ ๋ฌ์ ์์ํ๋ ํ๋กํ ์ฝ
ํด๋ผ์ด์ธํธ๋ Kubernetes API ์๋ฒ์ ๋ํ ์์ฒญ์ ๋ฐํํ์ฌ Pod๋ก์ ํฌํธ ์ ๋ฌ์ ์์ํฉ๋๋ค.
/proxy/nodes/<node_name>/portForward/<namespace>/<pod>
์ URL์์
-
<node_name>
์ ๋ ธ๋์ FQDN์ ๋๋ค. -
<namespace>
๋ ๋์ Pod์ ๋ค์์คํ์ด์ค์ ๋๋ค. -
<pod>
๋ ๋์ Pod์ ์ด๋ฆ์ ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/proxy/nodes/node123.openshift.com/portForward/myns/mypod
ํด๋ผ์ด์ธํธ๋ API ์๋ฒ๋ก ํฌํธ ์ ๋ฌ ์์ฒญ์ ๋ณด๋ธ ํ ๋ค์ค ์คํธ๋ฆผ์ ์ง์ํ๋ ์ฐ๊ฒฐ๋ก ์ฐ๊ฒฐ์ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. ํ์ฌ ๊ตฌํ์์๋ Hyptertext Transfer Protocol Version 2(HTTP/2) ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ Pod์ ๋์ ํฌํธ๊ฐ ํฌํจ๋ port
ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ์์ฑํฉ๋๋ค. ์คํธ๋ฆผ์ ๊ธฐ๋ก๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ kubelet์ ํตํด ๋์ Pod ๋ฐ ํฌํธ๋ก ์ ๋ฌ๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ ๊ฒ ์ ๋ฌ๋ ์ฐ๊ฒฐ์ ๋ํด Pod์์ ์ ์ก๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ํด๋ผ์ด์ธํธ์ ๋์ผํ ์คํธ๋ฆผ์ผ๋ก ๋ค์ ์ ๋ฌ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ํฌํธ ์ ๋ฌ ์์ฒญ์ ์๋ฃํ๋ฉด ๋ชจ๋ ์คํธ๋ฆผ, ์ ๊ทธ๋ ์ด๋๋ ์ฐ๊ฒฐ, ๊ธฐ๋ณธ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค.
7.9. ์ปจํ ์ด๋์ sysctl ์ฌ์ฉ
sysctl ์ค์ ์ Kubernetes๋ฅผ ํตํด ๋ ธ์ถ๋๋ฏ๋ก ์ฌ์ฉ์๋ ๋ฐํ์์ ์ปจํ ์ด๋ ๋ด์ ๋ค์์คํ์ด์ค์ ๋ํ ํน์ ์ปค๋ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋ค์์คํ์ด์ค๊ฐ ์ง์ ๋ sysctl๋ง Pod์ ๋ ๋ฆฝ์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. sysctl์ด ๋ ธ๋ ์์ค ์ด๋ผ๊ณ ํ๋ ๋ค์์คํ์ด์ค๊ฐ ์๋ ๊ฒฝ์ฐ Node Tuning Operator ์ ๊ฐ์ sysctl์ ์ค์ ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ sysctl๋ง ํ์ฉ ๋ชฉ๋ก์ ํฌํจ๋ฉ๋๋ค. ๋ ธ๋์ ๋ค๋ฅธ ์์ ํ์ง ์์ sysctl์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋๋ก ์๋์ผ๋ก ํ์ฑํํ ์ ์์ต๋๋ค.
7.9.1. sysctl ์ ๋ณด
Linux์์ sysctl ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ด๋ฆฌ์๊ฐ ๋ฐํ์์ ์ปค๋ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋งค๊ฐ๋ณ์๋ /proc/sys/ ๊ฐ์ ํ๋ก์ธ์ค ํ์ผ ์์คํ ์ ํตํด ์ฌ์ฉํ ์ ์์ต๋๋ค. ํด๋น ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ํ ํ์ ์์คํ ์ ์ ์ฉ๋ฉ๋๋ค.
- ์ปค๋(๊ณต์ฉ ์ ๋์ฌ: kernel.)
- ๋คํธ์ํน(๊ณต์ฉ ์ ๋์ฌ: net.)
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ(๊ณต์ฉ ์ ๋์ฌ: vm.)
- MDADM(๊ณต์ฉ ์ ๋์ฌ: dev.)
์ปค๋ ์ค๋ช ์์ ๋ ๋ง์ ํ์ ์์คํ ์ด ์ค๋ช ๋์ด ์์ต๋๋ค. ๋ชจ๋ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
$ sudo sysctl -a
7.9.1.1. ๋ค์์คํ์ด์ค ์ง์ sysctl ๋ฐ ๋ ธ๋ ์์ค sysctl ๋น๊ต
๋๋ค์์ sysctl์ Linux ์ปค๋์ ๋ค์์คํ์ด์ค๊ฐ ์ง์ ๋ฉ๋๋ค. ์ฆ ๋ ธ๋์ ๊ฐ Pod์ ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. Kubernetes ๋ด์ Pod ์ปจํ ์คํธ์์ sysctl์ ์ก์ธ์คํ๋ ค๋ฉด ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
๋ค์ sysctl์ ๋ค์์คํ์ด์ค๋ก ์๋ ค์ ธ ์์ต๋๋ค.
- kernel.shm*
- kernel.msg*
- kernel.sem
- fs.mqueue.*
๋ํ net.* ๊ทธ๋ฃน์ ์๋ ๋๋ถ๋ถ์ sysctl์ ๋ค์์คํ์ด์ค๋ก ์๋ ค์ ธ ์์ต๋๋ค. ํด๋น ๋ค์์คํ์ด์ค ์ฑํ์ ์ปค๋ ๋ฒ์ ๋ฐ ๋ฐฐํฌ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๋ค์์คํ์ด์ค๊ฐ ์ง์ ๋์ง ์์ Sysctl์ ๋ ธ๋ ์์ค์ด๋ผ๊ณ ํ๋ฉฐ ๋ ธ๋์ ๊ธฐ๋ณธ Linux ๋ฐฐํฌ(์: /etc/sysctls.conf ํ์ผ ์์ )๋ฅผ ํตํด ๋๋ ๊ถํ ์๋ ์ปจํ ์ด๋์ ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ์๋์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค. Node Tuning Operator๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ์์ค sysctl์ ์ค์ ํ ์ ์์ต๋๋ค.
ํน์ sysctl์ด ์๋ ๋ ธ๋๋ฅผ ํ ์ธํธ๋ก ํ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฌํ sysctl ์ค์ ์ด ํ์ํ ๋ ธ๋์๋ง Pod๋ฅผ ์์ฝํ์ญ์์ค. ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ํ์ํฉ๋๋ค.
7.9.1.2. ์์ ํ sysctl ๋ฐ ์์ ํ์ง ์์ sysctl ๋น๊ต
sysctl์ ์์ ํ sysctl ๋ฐ ์์ ํ์ง ์์ sysctl๋ก ๊ทธ๋ฃนํ๋ฉ๋๋ค.
sysctl์ด ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ค๋ฉด ์ ์ ํ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ ๋์ผํ ๋ ธ๋์ Pod ๊ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒฉ๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ์ฆ ํ๋์ Pod์ sysctl์ ์ค์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ์ง ์์์ผ ํฉ๋๋ค.
- ๋ ธ๋์ ๋ค๋ฅธ Pod์ ์ํฅ์ ๋ฏธ์นจ
- ๋ ธ๋ ์ํ ์์
- Pod์ ๋ฆฌ์์ค ์ ํ์ ๋ฒ์ด๋๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค ํ๋ณด
OpenShift Container Platform์์๋ ์์ ์ค์ ์ ์๋ ๋ค์ sysctl์ ์ง์ํ๊ฑฐ๋ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
- kernel.shm_rmid_forced
- net.ipv4.ip_local_port_range
- net.ipv4.tcp_syncookies
- net.ipv4.ping_group_range
์์ ํ sysctl์ ๋ชจ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ฉ๋๋ค. Pod
์ฌ์์ ์์ ํ์ฌ Pod์์ sysctl์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
OpenShift Container Platform์์ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํ์ง ์์ sysctl์ OpenShift Container Platform์์ ์์ ํ์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. sysctl์ ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ธฐ ์ํด์๋ ๋ค์์คํ์ด์ค๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
์์ ํ์ง ์์ sysctl์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋นํ์ฑํ๋์ด ์์ผ๋ฉฐ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ๋ ธ๋๋ณ๋ก ์๋์ผ๋ก ํ์ฑํํด์ผ ํฉ๋๋ค. ์์ ํ์ง ์์ sysctl์ด ๋นํ์ฑํ๋ Pod๋ ์์ฝ์ ๋์ง๋ง ์์๋์ง ์์ต๋๋ค.
$ oc get pod
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE hello-pod 0/1 SysctlForbidden 0 14s
7.9.2. Pod์ sysctl ์ค์
Pod์ securityContext
๋ฅผ ์ฌ์ฉํ์ฌ Pod์ sysctl์ ์ค์ ํ ์ ์์ต๋๋ค. securityContext
๋ ๋์ผํ Pod์ ๋ชจ๋ ์ปจํ
์ด๋์ ์ ์ฉ๋ฉ๋๋ค.
์์ ํ sysctl์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฉ๋ฉ๋๋ค. ์์ ํ์ง ์์ sysctl์ด ์๋ Pod๋ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํด๋น ๋ ธ๋์ ๋ํด ์์ ํ์ง ์์ sysctl์ ๋ช ์์ ์ผ๋ก ํ์ฑํํ์ง ์๋ ํ ์ด๋ ํ ๋ ธ๋์์๋ ์์๋์ง ์์ต๋๋ค. ๋ ธ๋ ์์ค sysctl๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ธ๋์ ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ํด๋น Pod๋ฅผ ์ฌ๋ฐ๋ฅธ ๋ ธ๋์ ์์ฝํฉ๋๋ค.
๋ค์ ์์ ์์๋ Pod securityContext
๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ sysctl kernel.shm_rmid_forced
์ ์์ ํ์ง ์์ sysctl์ธ net.core.somaxconn
๋ฐ kernel.msgmax
๋ฅผ ์ค์ ํฉ๋๋ค. ์ฌ์์์๋ ์์ ๋ฐ ์์ ํ์ง ์์ sysctl์ด ๊ตฌ๋ถ๋์ง ์์ต๋๋ค.
์ด์ ์ฒด์ ๊ฐ ๋ถ์์ ํด์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด sysctl ๋งค๊ฐ๋ณ์ ์์ ์ด ๋ฏธ์น๋ ์ํฅ์ ํ์ ํ ํ์๋ง ์์ ํ์ญ์์ค.
ํ๋ก์ธ์ค
์์ ํ sysctl ๋ฐ ์์ ํ์ง ์์ sysctl์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์ ์์ ์ ๊ฐ์ด Pod๋ฅผ ์ ์ํ๋ YAML ํ์ผ์ ์์ ํ๊ณ
securityContext
์ฌ์์ ์ถ๊ฐํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: sysctl-example spec: securityContext: sysctls: - name: kernel.shm_rmid_forced value: "0" - name: net.core.somaxconn value: "1024" - name: kernel.msgmax value: "65536" ...
Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc apply -f <file-name>.yaml
์์ ํ์ง ์์ sysctl์ ๋ ธ๋์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ Pod๋ ์์ฝ๋์ง๋ง ๋ฐฐํฌ๋์ง๋ ์์ต๋๋ค.
$ oc get pod
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE hello-pod 0/1 SysctlForbidden 0 14s
7.9.3. ์์ ํ์ง ์์ sysctl ํ์ฑํ
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ๊ณ ์ฑ๋ฅ ๋๋ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ๋๊ณผ ๊ฐ์ด ๋งค์ฐ ํน๋ณํ ์ํฉ์ ๋ํด ์์ ํ์ง ์์ ํน์ sysctl์ ํ์ฉํ ์ ์์ต๋๋ค.
์์ ํ์ง ์์ sysctl์ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ํน์ ์ ํ์ ๋ ธ๋์ ๋ํด ๊ฐ๋ณ์ ์ผ๋ก ํ์ฑํํด์ผ ํฉ๋๋ค. sysctl์ ๋ค์์คํ์ด์ค๊ฐ ์ง์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
๋ณด์ ์ปจํ
์คํธ ์ ์ฝ ์กฐ๊ฑด์ allowedUnsafeSysctls
ํ๋์ sysctls ๋ชฉ๋ก ๋๋ sysctl ํจํด ๋ชฉ๋ก์ ์ง์ ํ์ฌ Pod์ ์ค์ ๋ sysctl์ ์ถ๊ฐ๋ก ์ ์ดํ ์ ์์ต๋๋ค.
-
allowedUnsafeSysctls
์ต์ ์ ๊ณ ์ฑ๋ฅ ๋๋ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ๋๊ณผ ๊ฐ์ ํน์ ์๊ตฌ ์ฌํญ์ ์ ์ดํฉ๋๋ค.
์์ ํ์ง ์์ ์ํ์ ํน์ฑ์ผ๋ก ์ธํด ์์ ํ์ง ์์ sysctl์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ํ์ ๊ฐ์ํด์ผ ํ๊ณ ๋ถ์ ์ ํ ์ปจํ ์ด๋ ๋์, ๋ฆฌ์์ค ๋ถ์กฑ ๋๋ ๋ ธ๋ ์ค๋จ๊ณผ ๊ฐ์ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
์์ ํ์ง ์์ sysctl์ด ์๋ ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋จธ์ ๊ตฌ์ฑ ํ์ ๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
$ oc edit machineconfigpool worker
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: creationTimestamp: 2019-02-08T14:52:39Z generation: 1 labels: custom-kubelet: sysctl 1
- 1
key: pair
๋ผ๋ฒจ์ ์ถ๊ฐํฉ๋๋ค.
KubeletConfig
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ์์ฑํฉ๋๋ค.apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: custom-kubelet spec: machineConfigPoolSelector: matchLabels: custom-kubelet: sysctl 1 kubeletConfig: allowedUnsafeSysctls: 2 - "kernel.msg*" - "net.core.somaxconn"
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc apply -f set-sysctl-worker.yaml
99-worker-XXXXXX-XXXXX-XXXX-XXXXX-kubelet
ํ์์ผ๋ก ์ด๋ฆ์ด ์ง์ ๋ ์MachineConfig
์ค๋ธ์ ํธ๊ฐ ์์ฑ๋ฉ๋๋ค.machineconfigpool
์ค๋ธ์ ํธ์ํ
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๊ฐ ์ฌ๋ถํ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
status: conditions: - lastTransitionTime: '2019-08-11T15:32:00Z' message: >- All nodes are updating to rendered-worker-ccbfb5d2838d65013ab36300b7b3dc13 reason: '' status: 'True' type: Updating
ํด๋ฌ์คํฐ๊ฐ ์ค๋น๋๋ฉด ๋ค์๊ณผ ์ ์ฌํ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
- lastTransitionTime: '2019-08-11T16:00:00Z' message: >- All nodes are updated with rendered-worker-ccbfb5d2838d65013ab36300b7b3dc13 reason: '' status: 'True' type: Updated
ํด๋ฌ์คํฐ๊ฐ ์ค๋น๋๋ฉด ์
MachineConfig
์ค๋ธ์ ํธ์ ๋ณํฉ๋KubeletConfig
์ค๋ธ์ ํธ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.$ oc get machineconfig 99-worker-XXXXXX-XXXXX-XXXX-XXXXX-kubelet -o json | grep ownerReference -A7
"ownerReferences": [ { "apiVersion": "machineconfiguration.openshift.io/v1", "blockOwnerDeletion": true, "controller": true, "kind": "KubeletConfig", "name": "custom-kubelet", "uid": "3f64a766-bae8-11e9-abe8-0a1a2a4813f2" } ]
์ด์ ํ์ํ ๊ฒฝ์ฐ Pod์ ์์ ํ์ง ์์ sysctl์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
8์ฅ. ํด๋ฌ์คํฐ ์์
8.1. OpenShift Container Platform ํด๋ฌ์คํฐ์์ ์์คํ ์ด๋ฒคํธ ์ ๋ณด ๋ณด๊ธฐ
OpenShift Container Platform์ ์ด๋ฒคํธ๋ OpenShift Container Platform ํด๋ฌ์คํฐ์ API ์ค๋ธ์ ํธ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ธ๋ง๋ฉ๋๋ค.
8.1.1. ์ด๋ฒคํธ ์ดํด
OpenShift Container Platform์ ์ด๋ฒคํธ๋ฅผ ํตํด ๋ฆฌ์์ค์ ๊ด๊ณ์์ด ์ค์ ์ด๋ฒคํธ์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ ์ ์์ต๋๋ค. ๋ํ ๊ฐ๋ฐ์์ ๊ด๋ฆฌ์๋ ํตํฉ๋ ๋ฐฉ์์ผ๋ก ์์คํ ๊ตฌ์ฑ ์์์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
8.1.2. CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ๋ณด๊ธฐ
CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ ํ๋ก์ ํธ์ ์ด๋ฒคํธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค
ํ๋ก์ ํธ์ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
$ oc get events [-n <project>] 1
- 1
- ํ๋ก์ ํธ ์ด๋ฆ์ ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc get events -n openshift-config
์ถ๋ ฅ ์
LAST SEEN TYPE REASON OBJECT MESSAGE 97m Normal Scheduled pod/dapi-env-test-pod Successfully assigned openshift-config/dapi-env-test-pod to ip-10-0-171-202.ec2.internal 97m Normal Pulling pod/dapi-env-test-pod pulling image "gcr.io/google_containers/busybox" 97m Normal Pulled pod/dapi-env-test-pod Successfully pulled image "gcr.io/google_containers/busybox" 97m Normal Created pod/dapi-env-test-pod Created container 9m5s Warning FailedCreatePodSandBox pod/dapi-volume-test-pod Failed create pod sandbox: rpc error: code = Unknown desc = failed to create pod network sandbox k8s_dapi-volume-test-pod_openshift-config_6bc60c1f-452e-11e9-9140-0eec59c23068_0(748c7a40db3d08c07fb4f9eba774bd5effe5f0d5090a242432a73eee66ba9e22): Multus: Err adding pod to network "openshift-sdn": cannot set "openshift-sdn" ifname to "eth0": no netns: failed to Statfs "/proc/33366/ns/net": no such file or directory 8m31s Normal Scheduled pod/dapi-volume-test-pod Successfully assigned openshift-config/dapi-volume-test-pod to ip-10-0-171-202.ec2.internal
OpenShift Container Platform ์ฝ์์์ ํ๋ก์ ํธ์ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- OpenShift Container Platform ์ฝ์์ ์์ํฉ๋๋ค.
- ํ โ ์ด๋ฒคํธ๋ฅผ ํด๋ฆญํ๊ณ ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
์ด๋ฒคํธ๋ฅผ ํ์ํ ๋ฆฌ์์ค๋ก ์ด๋ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ํ โ ํ๋ก์ ํธ โ <ํ๋ก์ ํธ ์ด๋ฆ> โ <๋ฆฌ์์ค ์ด๋ฆ>๊ณผ ๊ฐ์ต๋๋ค.
Pod ๋ฐ ๋ฐฐํฌ์ ๊ฐ์ด ๋ง์ ์ค๋ธ์ ํธ์๋ ์์ฒด ์ด๋ฒคํธ ํญ๋ ์์ผ๋ฉฐ ํด๋น ์ค๋ธ์ ํธ์ ๊ด๋ จ๋ ์ด๋ฒคํธ๊ฐ ํ์๋ฉ๋๋ค.
8.1.3. ์ด๋ฒคํธ ๋ชฉ๋ก
์ด ์น์ ์์๋ OpenShift Container Platform์ ์ด๋ฒคํธ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
์ด๋ฆ | ์ค๋ช |
---|---|
| Pod ๊ตฌ์ฑ ๊ฒ์ฆ์ ์คํจํ์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| ๋ฐฑ์คํ๋ก ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํ์ง ๋ชปํ์ต๋๋ค. |
| ์ปจํ ์ด๋๊ฐ ์์ฑ๋์์ต๋๋ค. |
| ๊ฐ์ ธ์ค๊ธฐ/์์ฑ/์์์ด ์คํจํ์ต๋๋ค. |
| ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃํฉ๋๋ค. |
| ์ปจํ ์ด๋๊ฐ ์์๋์์ต๋๋ค. |
| ๋ค๋ฅธ Pod๋ฅผ ์ ์ ํฉ๋๋ค. |
| ์ปจํ ์ด๋ ๋ฐํ์์ด ์ง์ ๋ ์ ์ ๊ธฐ๊ฐ ๋ด์ Pod๋ฅผ ์ค์งํ์ง ์์์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| ์ปจํ ์ด๋ ์ํ๊ฐ ๋น์ ์์ ๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| Ctr Start๋ฅผ ๋ฐฑ์คํํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค. |
| ์ด๋ฏธ์ง์ NeverPull Policy๋ฅผ ์๋ฐํ์ต๋๋ค. |
| ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค์ง ๋ชปํ์ต๋๋ค. |
| ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ฌํ์ง ๋ชปํ์ต๋๋ค. |
| ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์๊ฑฐ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ๋จธ์ ์ ์ด๋ฏธ ์์ต๋๋ค. |
| ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ์ค์ ๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| ๋์คํฌ ๊ณต๊ฐ์ ๋น์ฐ์ง ๋ชปํ์ต๋๋ค. |
| ๋์คํฌ ์ฉ๋์ด ์ ํจํ์ง ์์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| ๋ณผ๋ฅจ์ ๋ง์ดํธํ์ง ๋ชปํ์ต๋๋ค. |
| ํธ์คํธ ๋คํธ์ํฌ๊ฐ ์ง์๋์ง ์์ต๋๋ค. |
| ํธ์คํธ/ํฌํธ๊ฐ ์ถฉ๋ํฉ๋๋ค. |
| kubelet ์ค์ ์ ์คํจํ์ต๋๋ค. |
| ์ ์๋์ง ์์ ์์ดํผ์ ๋๋ค. |
| ๋ ธ๋๊ฐ ์ค๋น๋์ง ์์์ต๋๋ค. |
| ๋ ธ๋๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. |
| ๋ ธ๋๊ฐ ์ค๋น๋์์ต๋๋ค. |
| ๋ ธ๋๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. |
| ๋ ธ๋ ์ ํ๊ธฐ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค. |
| ๋์คํฌ๊ฐ ์์ต๋๋ค. |
| ๋ ธ๋๊ฐ ์ฌ๋ถํ ๋์์ต๋๋ค. |
| kubelet์ ์์ํฉ๋๋ค. |
| ๋ณผ๋ฅจ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. |
| ๋ณผ๋ฅจ์ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. |
| ๋ณผ๋ฅจ์ ํ์ฅ/์ถ์ํ ์ ์์ต๋๋ค. |
| ๋ณผ๋ฅจ์ ํ์ฅ/์ถ์ํ์ต๋๋ค. |
| ํ์ผ ์์คํ ์ ํ์ฅ/์ถ์ํ์ง ๋ชปํ์ต๋๋ค. |
| ํ์ผ ์์คํ ์ ํ์ฅ/์ถ์ํ์ต๋๋ค. |
| ๋ณผ๋ฅจ์ ๋ง์ดํธ ํด์ ํ์ง ๋ชปํ์ต๋๋ค. |
| ๋ณผ๋ฅจ์ ๋งคํํ์ง ๋ชปํ์ต๋๋ค. |
| ์ฅ์น๋ฅผ ๋งคํ ํด์ ํ์ง ๋ชปํ์ต๋๋ค. |
| ๋ณผ๋ฅจ์ด ์ด๋ฏธ ๋ง์ดํธ๋์ด ์์ต๋๋ค. |
| ๋ณผ๋ฅจ์ด ๋ถ๋ฆฌ๋์์ต๋๋ค. |
| ๋ณผ๋ฅจ์ ๋ง์ดํธํ์ต๋๋ค. |
| ๋ณผ๋ฅจ์ ๋ง์ดํธ ํด์ ํ์ต๋๋ค. |
| ์ปจํ ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์คํจํ์ต๋๋ค. |
| ์ด๋ฏธ์ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์คํจํ์ต๋๋ค. |
| ์์คํ ์์ฝ Cgroup ์ ํ์ ์ ์ฉํ์ง ๋ชปํ์ต๋๋ค. |
| ์์คํ ์์ฝ Cgroup ์ ํ์ ์ ์ฉํ์ต๋๋ค. |
| ์ง์๋์ง ์๋ ๋ง์ดํธ ์ต์ ์ ๋๋ค. |
| Pod ์๋๋ฐ์ค๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. |
| Pod ์๋๋ฐ์ค๋ฅผ ์์ฑํ์ง ๋ชปํ์ต๋๋ค. |
| ์คํจํ Pod ์๋๋ฐ์ค ์ํ์ ๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| Pod ๋๊ธฐํ์ ์คํจํ์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| ํด๋ฌ์คํฐ์ OOM(๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ) ์ํฉ์ด ์์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| Pod๋ฅผ ์ค์งํ์ง ๋ชปํ์ต๋๋ค. |
| Pod ์ปจํ ์ด๋๋ฅผ ์์ฑํ์ง ๋ชปํ์ต๋๋ค. |
| Pod ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ์ง ๋ชปํ์ต๋๋ค. |
| ๋คํธ์ํฌ๊ฐ ์ค๋น๋์ง ์์์ต๋๋ค. |
|
์์ฑํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค( |
|
Pod๊ฐ ์์ฑ๋์์ต๋๋ค( |
|
์ญ์ ํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค( |
|
Pod๊ฐ ์ญ์ ๋์์ต๋๋ค( |
์ด๋ฆ | ์ค๋ช |
---|---|
SelectorRequired | ์ ํ๊ธฐ๊ฐ ํ์ํฉ๋๋ค. |
| ์ ํ๊ธฐ๋ฅผ ํด๋น ๋ด๋ถ ์ ํ๊ธฐ ์ค๋ธ์ ํธ๋ก ๋ณํํ ์ ์์ต๋๋ค. |
| HPA์์ ๋ณต์ ๋ณธ ์๋ฅผ ๊ณ์ฐํ ์ ์์์ต๋๋ค. |
| ์ ์ ์๋ ๋ฉํธ๋ฆญ ์์ค ์ ํ์ ๋๋ค. |
| HPA์์ ๋ณต์ ๋ณธ ์๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ณ์ฐํ ์ ์์์ต๋๋ค. |
| ์ง์ ๋ HPA๋ฅผ ๋ณํํ์ง ๋ชปํ์ต๋๋ค. |
| HPA ์ปจํธ๋กค๋ฌ์์ ๋์์ ํ์ฌ ๊ท๋ชจ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์์ต๋๋ค. |
| HPA ์ปจํธ๋กค๋ฌ์์ ๋์์ ํ์ฌ ๊ท๋ชจ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์์ต๋๋ค. |
| ๋์ด๋ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ์ํ๋ ๋ณต์ ๋ณธ ์๋ฅผ ๊ณ์ฐํ์ง ๋ชปํ์ต๋๋ค. |
|
์ ํฌ๊ธฐ: |
|
์ ํฌ๊ธฐ: |
| ์ํ๋ฅผ ์ ๋ฐ์ดํธํ์ง ๋ชปํ์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| Starting OpenShift SDN. |
| Pod์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์์ค๋์ด Pod๊ฐ ์ค์ง๋ฉ๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
|
์๋น์ค ํฌํธ |
์ด๋ฆ | ์ค๋ช |
---|---|
| ์ฌ์ฉ ๊ฐ๋ฅํ ์๊ตฌ ๋ณผ๋ฅจ์ด ์์ผ๋ฉฐ ์คํ ๋ฆฌ์ง ํด๋์ค๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค. |
| ๋ณผ๋ฅจ ํฌ๊ธฐ ๋๋ ํด๋์ค๊ฐ ํด๋ ์์์ ์์ฒญํ ๊ฒ๊ณผ ๋ค๋ฆ ๋๋ค. |
| ์ฌ์๊ธฐ Pod๋ฅผ ์์ฑํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. |
| ๋ณผ๋ฅจ์ด ์ฌ์๋ ๋ ๋ฐ์ํฉ๋๋ค. |
| Pod๊ฐ ์ฌ์๋ ๋ ๋ฐ์ํฉ๋๋ค. |
| ๋ณผ๋ฅจ์ด ์ญ์ ๋ ๋ ๋ฐ์ํฉ๋๋ค. |
| ๋ณผ๋ฅจ์ ์ญ์ ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. |
| ํด๋ ์์ ๋ํ ๋ณผ๋ฅจ์ด ์๋์ผ๋ก ๋๋ ์ธ๋ถ ์ํํธ์จ์ด๋ฅผ ํตํด ํ๋ก๋น์ ๋๋๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค. |
| ๋ณผ๋ฅจ์ ํ๋ก๋น์ ๋ํ์ง ๋ชปํ์ต๋๋ค. |
| ํ๋ก๋น์ ๋๋ ๋ณผ๋ฅจ์ ์ ๋ฆฌํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. |
| ๋ณผ๋ฅจ์ด ์ฑ๊ณต์ ์ผ๋ก ํ๋ก๋น์ ๋๋ ๋ ๋ฐ์ํฉ๋๋ค. |
| Pod๊ฐ ์์ฝ๋ ๋๊น์ง ๋ฐ์ธ๋ฉ์ด ์ง์ฐ๋ฉ๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| ํธ๋ค๋ฌ์์ Pod๋ฅผ ์์ํ์ง ๋ชปํ์ต๋๋ค. |
| ํธ๋ค๋ฌ์์ ์ฌ์ ์ ์งํ์ง ๋ชปํ์ต๋๋ค. |
| ์ฌ์ ์ ์ง ํํฌ๊ฐ ์๋ฃ๋์ง ์์์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
| ๋ฐฐํฌ๋ฅผ ์ทจ์ํ์ง ๋ชปํ์ต๋๋ค. |
| ๋ฐฐํฌ๊ฐ ์ทจ์๋์์ต๋๋ค. |
| ์ ๋ณต์ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฑ๋์์ต๋๋ค. |
| ์๋น์ค์ ํ ๋นํ ์ ์๋ Ingress IP๊ฐ ์์ต๋๋ค. |
์ด๋ฆ | ์ค๋ช |
---|---|
|
Pod( |
|
|
|
|
์ด๋ฆ | ์ค๋ช |
---|---|
| ์ด ๋ฐ๋ชฌ ์ธํธ๋ ๋ชจ๋ Pod๋ฅผ ์ ํํฉ๋๋ค. ๋น์ด ์์ง ์์ ์ ํ๊ธฐ๊ฐ ํ์ํฉ๋๋ค. |
|
|
|
|
์ด๋ฆ | ์ค๋ช |
---|---|
| ๋ก๋ ๋ฐธ๋ฐ์ ์์ฑ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. |
| ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ญ์ ํ๋ ์ค์ ๋๋ค. |
| ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํ์ธํ๋ ์ค์ ๋๋ค. |
| ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํ์ธํ์ต๋๋ค. |
|
|
|
์ |
|
์ IP ์ฃผ์๋ฅผ ๋์ดํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด |
|
์ธ๋ถ IP ์ฃผ์๋ฅผ ๋์ดํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด |
|
์ UID๋ฅผ ๋์ดํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด |
|
์ |
|
์ |
| ์ ํธ์คํธ๋ก ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค. |
| ์ ํธ์คํธ๋ก ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. |
| ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ญ์ ํ๋ ์ค์ ๋๋ค. |
| ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ญ์ ํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. |
| ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ญ์ ํ์ต๋๋ค. |
8.2. OpenShift Container Platform ๋ ธ๋์์ ๋ณด์ ํ ์ ์๋ Pod ์ ์ถ์
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ OpenShift Cluster Capacity Tool์ ์ฌ์ฉํ์ฌ ํ์ฌ ๋ฆฌ์์ค๊ฐ ์์ง๋๊ธฐ ์ ์ ํ์ฌ ๋ฆฌ์์ค๋ฅผ ๋๋ฆฌ๊ธฐ ์ ์ ์์ฝํ ์ ์๋ Pod ์๋ฅผ ํ์ธํ๊ณ ํฅํ ํฌ๋๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฉ๋์ ํด๋ฌ์คํฐ์ ๊ฐ๋ณ ๋ ธ๋ ํธ์คํธ์์ ์ ๊ณตํ๋ฉฐ CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ ๊ณต๊ฐ ๋ฑ์ ํฌํจํฉ๋๋ค.
8.2.1. OpenShift Cluster Capacity ํด ์ดํด
OpenShift Cluster Capacity Tool์ ๋ณด๋ค ์ ํํ ์ถ์ ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ฆฌ์์ค๊ฐ ์์ง๋๊ธฐ ์ ์ ํด๋ฌ์คํฐ์์ ์์ฝํ ์ ์๋ ์ ๋ ฅ ํฌ๋์ ์ธ์คํด์ค ์๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ผ๋ จ์ ์ค์ผ์ค๋ง ๊ฒฐ์ ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
๋๋จธ์ง ํ ๋น ๊ฐ๋ฅ ์ฉ๋์ ์ฌ๋ฌ ๋ ธ๋์ ๋ฐฐํฌ๋๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๊ณ์ฐํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ต์ ์ธ ์ถ์ ์น์ ๋๋ค. ๋จ์ ๋ฆฌ์์ค๋ง ๋ถ์ํ๊ณ ํด๋ฌ์คํฐ์์ ์์ฝํ ์ ์๋ ์ง์ ๋ ์๊ตฌ ์ฌํญ์ด ํฌํจ๋ Pod์ ์ฌ๋ฌ ์ธ์คํด์ค ์ธก๋ฉด์์ ์ฌ์ ํ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฉ ์ฉ๋์ ์ถ์ ํฉ๋๋ค.
๋ํ Pod๋ ์ ํ ๋ฐ ์ ์ฌ์ฑ ๊ธฐ์ค์ ๋ฐ๋ผ ํน์ ๋ ธ๋ ์งํฉ์์๋ง ์์ฝ ๊ธฐ๋ฅ์ด ์ง์๋ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ํด๋ฌ์คํฐ์์ ์์ฝํ ์ ์๋ ๋๋จธ์ง Pod๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
OpenShift Cluster Capacity Tool์ ๋ช ๋ น์ค์์ ๋ ๋ฆฝํ ์ ํธ๋ฆฌํฐ๋ก ์คํํ๊ฑฐ๋ OpenShift Container Platform ํด๋ฌ์คํฐ ๋ด๋ถ์ Pod์์ ์์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค. Pod ๋ด์์ ํด์ ์์ ์ผ๋ก ์คํํ๋ฉด ๊ฐ์ ์์ด ์ฌ๋ฌ ๋ฒ ์คํํ ์ ์์ต๋๋ค.
8.2.2. ๋ช ๋ น์ค์์ OpenShift Cluster Capacity Tool ์คํ
๋ช ๋ น์ค์์ OpenShift Cluster Capacity Tool์ ์คํํ์ฌ ํด๋ฌ์คํฐ์ ์์ฝํ ์ ์๋ ํฌ๋ ์๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค.
ํด์์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ํ Pod ์ฌ์ ํ์ผ์ ์์ฑํฉ๋๋ค. Pod ์ฌ์์ ๋ฆฌ์์ค ์๊ตฌ ์ฌํญ์ ์ ํ
๋๋ ์์ฒญ์ผ๋ก
์ง์ ํฉ๋๋ค. ํด๋ฌ์คํฐ ์ฉ๋ ํด์์๋ ์ถ์ ๋ถ์์ Pod์ ๋ฆฌ์์ค ์๊ตฌ ์ฌํญ์ ๊ณ ๋ คํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
- Red Hat Ecosystem Catalog์์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ก ์ฌ์ฉํ ์ ์๋ OpenShift ํด๋ฌ์คํฐ ์ฉ๋ ํด์ ์คํํฉ๋๋ค.
์ํ Pod ์ฌ์ ํ์ผ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: small-pod labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: gcr.io/google-samples/gb-frontend:v4 imagePullPolicy: Always resources: limits: cpu: 150m memory: 100Mi requests: cpu: 150m memory: 100Mi
ํด๋ฌ์คํฐ ์ญํ ์ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f pod-spec.yaml
์ ์ฐจ
๋ช ๋ น์ค์์ ํด๋ฌ์คํฐ ์ฉ๋ ํด์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ํฐ๋ฏธ๋์์ Red Hat Registry์ ๋ก๊ทธ์ธํฉ๋๋ค.
$ podman login registry.redhat.io
ํด๋ฌ์คํฐ ์ฉ๋ ํด ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
$ podman pull registry.redhat.io/openshift4/ose-cluster-capacity
ํด๋ฌ์คํฐ ์ฉ๋ ํด์ ์คํํฉ๋๋ค.
$ podman run -v $HOME/.kube:/kube:Z -v $(pwd):/cc:Z ose-cluster-capacity \ /bin/cluster-capacity --kubeconfig /kube/config --<pod_spec>.yaml /cc/<pod_spec>.yaml \ --verbose
๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- <pod_spec>.yaml
- ์ฌ์ฉํ Pod ์ฌ์์ ์ง์ ํฉ๋๋ค.
- ์์ธ ์ ๋ณด
- ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์์ ์์ฝํ ์ ์๋ Pod ์์ ๋ํ ์์ธํ ์ค๋ช ์ ์ถ๋ ฅํฉ๋๋ค.
์ถ๋ ฅ ์
small-pod pod requirements: - CPU: 150m - Memory: 100Mi The cluster can schedule 88 instance(s) of the pod small-pod. Termination reason: Unschedulable: 0/5 nodes are available: 2 Insufficient cpu, 3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate. Pod distribution among nodes: small-pod - 192.168.124.214: 45 instance(s) - 192.168.124.120: 43 instance(s)
์ ์์์ ํด๋ฌ์คํฐ์ ์์ฝํ ์ ์๋ ์์ Pod ์๋ 88์ ๋๋ค.
8.2.3. Pod ๋ด์์ OpenShift Cluster Capacity Tool์ ์์ ์ผ๋ก ์คํ
ํฌ๋ ๋ด์์ OpenShift Cluster Capacity Tool์ ์์
์ผ๋ก ์คํํ๋ฉด ์ฌ์ฉ์ ๊ฐ์
์์ด๋ ํด์ ์ฌ๋ฌ ๋ฒ ์คํํ ์ ์์ต๋๋ค. ConfigMap
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Cluster Capacity Tool์ ์์
์ผ๋ก ์คํํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
OpenShift Cluster Capacity ํด ์ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํฉ๋๋ค.
์ ์ฐจ
ํด๋ฌ์คํฐ ์ฉ๋ ํด์ ์คํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ํด๋ฌ์คํฐ ์ญํ ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: cluster-capacity-role rules: - apiGroups: [""] resources: ["pods", "nodes", "persistentvolumeclaims", "persistentvolumes", "services", "replicationcontrollers"] verbs: ["get", "watch", "list"] - apiGroups: ["apps"] resources: ["replicasets", "statefulsets"] verbs: ["get", "watch", "list"] - apiGroups: ["policy"] resources: ["poddisruptionbudgets"] verbs: ["get", "watch", "list"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "watch", "list"]
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ํด๋ฌ์คํฐ ์ญํ ์ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create sa cluster-capacity-sa
์๋น์ค ๊ณ์ ์ ์์ฑํฉ๋๋ค.
$ oc create sa cluster-capacity-sa -n default
์๋น์ค ๊ณ์ ์ ์ญํ ์ ์ถ๊ฐํฉ๋๋ค.
$ oc adm policy add-cluster-role-to-user cluster-capacity-role \ system:serviceaccount:<namespace>:cluster-capacity-sa
๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- <namespace>
- Pod๊ฐ ์๋ ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํฉ๋๋ค.
Pod ์ฌ์์ ์ ์ํ๊ณ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: small-pod labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: gcr.io/google-samples/gb-frontend:v4 imagePullPolicy: Always resources: limits: cpu: 150m memory: 100Mi requests: cpu: 150m memory: 100Mi
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f pod.yaml
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๊ตฌ์ฑ ๋งต ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ์ต๋๋ค.
$ oc create configmap cluster-capacity-configmap \ --from-file=pod.yaml=pod.yaml
ํด๋ฌ์คํฐ ์ฉ๋ ๋ถ์์ ์ ๋ ฅ Pod ์ฌ์ ํ์ผ
pod.yaml
์ ๊ฒฝ๋ก/test-pod
์ ๋ณผ๋ฅจtest-volume
์ ๋ง์ดํธํ๊ธฐ ์ํดcluster-capacity-configmap
์ด๋ผ๋ ๊ตฌ์ฑ ๋งต ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ๋ง์ดํธ๋ฉ๋๋ค.์๋์ ์์ ์ฌ์ ํ์ผ ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: batch/v1 kind: Job metadata: name: cluster-capacity-job spec: parallelism: 1 completions: 1 template: metadata: name: cluster-capacity-pod spec: containers: - name: cluster-capacity image: openshift/origin-cluster-capacity imagePullPolicy: "Always" volumeMounts: - mountPath: /test-pod name: test-volume env: - name: CC_INCLUSTER 1 value: "true" command: - "/bin/sh" - "-ec" - | /bin/cluster-capacity --podspec=/test-pod/pod.yaml --verbose restartPolicy: "Never" serviceAccountName: cluster-capacity-sa volumes: - name: test-volume configMap: name: cluster-capacity-configmap
- 1
- ํด๋ฌ์คํฐ ์ฉ๋ ํด์ ํด๋ฌ์คํฐ ๋ด์์ Pod๋ก ์คํ๋๊ณ ์์์ ์๋ฆฌ๋ ํ์ ํ๊ฒฝ ๋ณ์์ ๋๋ค.
ConfigMap
์ค๋ธ์ ํธ์pod.yaml
ํค๋ ํ์๋ ์๋์ง๋งPod
์ฌ์ ํ์ผ์ ์ด๋ฆ๊ณผ ๋์ผํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Pod ๋ด๋ถ์์/test-pod/pod.yaml
๋ก ์ ๋ ฅ Pod ์ฌ์ ํ์ผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ Pod์์ ํด๋ฌ์คํฐ ์ฉ๋ ์ด๋ฏธ์ง๋ฅผ ์์ ์ผ๋ก ์คํํฉ๋๋ค.
$ oc create -f cluster-capacity-job.yaml
๊ฒ์ฆ
์์ ๋ก๊ทธ๋ฅผ ํ์ธํ์ฌ ํด๋ฌ์คํฐ์์ ์์ฝํ ์ ์๋ Pod ์๋ฅผ ์ฐพ์ต๋๋ค.
$ oc logs jobs/cluster-capacity-job
์ถ๋ ฅ ์
small-pod pod requirements: - CPU: 150m - Memory: 100Mi The cluster can schedule 52 instance(s) of the pod small-pod. Termination reason: Unschedulable: No nodes are available that match all of the following predicates:: Insufficient cpu (2). Pod distribution among nodes: small-pod - 192.168.124.214: 26 instance(s) - 192.168.124.120: 26 instance(s)
8.3. Pod์ ๋ํ OpenShift Container Platform ํด๋ฌ์คํฐ ๊ตฌ์ฑ
๊ด๋ฆฌ์๋ Pod์ ํจ์จ์ ์ธ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
ํด๋ฌ์คํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์งํ๋ฉด Pod๊ฐ ์ข ๋ฃ๋ ๋ ์ํํ๋ ์์ ๊ณผ ๊ฐ์ ํด์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์์๊ฒ ๋ ๋์ ํ๊ฒฝ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฆ ํ์ํ ์์ Pod๊ฐ ํญ์ ์คํ๋๊ณ ์๋์ง ํ์ธํ์ฌ ํ ๋ฒ๋ง ์คํ๋๋๋ก ์ค๊ณ๋ Pod๋ฅผ ์ฌ์์ํ๋ ๊ฒฝ์ฐ Pod์ ์ฌ์ฉํ ์ ์๋ ๋์ญํญ์ ์ ํํ๊ณ , ์ค๋จ ์ค Pod๋ฅผ ๊ณ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
8.3.1. ์ฌ์์ ํ Pod ์๋ ๋ฐฉ์ ๊ตฌ์ฑ
Pod ์ฌ์์ ์ ์ฑ ์ ๋ฐ๋ผ ํด๋น Pod์ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๋ OpenShift Container Platform์์ ์๋ตํ๋ ๋ฐฉ๋ฒ์ด ๊ฒฐ์ ๋ฉ๋๋ค. ์ ์ฑ ์ ํด๋น Pod์ ๋ชจ๋ ์ปจํ ์ด๋์ ์ ์ฉ๋ฉ๋๋ค.
๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
Always
- ๊ธ๊ฒฉํ ๋ฐฑ์คํ ์ง์ฐ(10์ด, 20์ด, 40์ด)์ 5๋ถ์ผ๋ก ์ ํํ์ฌ Pod์์ ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋ ์ปจํ ์ด๋๋ฅผ ์ง์์ ์ผ๋ก ์ฌ์์ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์Always
์ ๋๋ค. -
OnFailure
- ๊ธ๊ฒฉํ ๋ฐฑ์คํ ์ง์ฐ(10์ด, 20์ด, 40์ด)์ 5๋ถ์ผ๋ก ์ ํํ์ฌ Pod์์ ์คํจํ ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํฉ๋๋ค. -
Never
- Pod์์ ์ข ๋ฃ๋๊ฑฐ๋ ์คํจํ ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํ์ง ์์ต๋๋ค. Pod๊ฐ ์ฆ์ ์คํจํ๊ณ ์ข ๋ฃ๋ฉ๋๋ค.
Pod๊ฐ ํน์ ๋ ธ๋์ ๋ฐ์ธ๋ฉ๋ ํ์๋ ๋ค๋ฅธ ๋ ธ๋์ ๋ฐ์ธ๋ฉ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ธ๋ ์ฅ์ ์ Pod๊ฐ ์๋ํ๋ ค๋ฉด ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํฉ๋๋ค.
์ํ | ์ปจํธ๋กค๋ฌ ์ ํ | ์ฌ์์ ์ ์ฑ |
---|---|---|
์ข ๋ฃํ ๊ฒ์ผ๋ก ์์๋๋ Pod(์: ์ผ๊ด ๊ณ์ฐ) | Job |
|
์ข ๋ฃ๋์ง ์์ ๊ฒ์ผ๋ก ์์๋๋ Pod(์: ์น ์๋ฒ) | ๋ณต์ ์ปจํธ๋กค๋ฌ |
|
๋จธ์ ๋น ํ๋์ฉ ์คํํด์ผ ํ๋ Pod | ๋ฐ๋ชฌ ์ธํธ | Any |
Pod์ ์ปจํ
์ด๋๊ฐ ์คํจํ๊ณ ์ฌ์์ ์ ์ฑ
์ด OnFailure
๋ก ์ค์ ๋ ๊ฒฝ์ฐ Pod๊ฐ ๋
ธ๋์ ๋จ์ ์๊ณ ์ปจํ
์ด๋๊ฐ ์ฌ์์๋ฉ๋๋ค. ์ปจํ
์ด๋๋ฅผ ์ฌ์์ํ์ง ์์ผ๋ ค๋ฉด ์ฌ์์ ์ ์ฑ
Never
๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ ์ฒด Pod๊ฐ ์คํจํ๋ฉด OpenShift Container Platform์์ ์ Pod๋ฅผ ์์ํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ Pod์์ ์ฌ์์๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ํนํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ด์ ์คํ์ผ๋ก ๋ฐ์ํ ์์ ํ์ผ, ์ ๊ธ, ๋ถ์์ ํ ์ถ๋ ฅ ๋ฑ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
Kubernetes ์ํคํ ์ฒ์์๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋์ ์ด ์์ ์ ์ธ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ์ค๋จ๋๋ฉด kubelet์์ OpenShift Container Platform์ด ์ฌ์์๋์ง ์์ต๋๋ค.
๊ธฐ๋ณธ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ๋์ ์ด ์์ ์ ์ด์ง ์์ ๊ฒฝ์ฐ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ํตํฉ์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ์ค์นํ์ง ๋ง์ญ์์ค. ํด๋ผ์ฐ๋๊ฐ ์๋ ํ๊ฒฝ์์์ฒ๋ผ ํด๋ฌ์คํฐ๋ฅผ ์ค์นํฉ๋๋ค. ์ค์น๋ ํด๋ฌ์คํฐ์์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ํตํฉ์ ์ค์ ํ๊ฑฐ๋ ํด์ ํ๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
OpenShift Container Platform์์ ์คํจํ ์ปจํ ์ด๋์ ์ฌ์์ ์ ์ฑ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ Kubernetes ์ค๋ช ์์ ์์ ์ํ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
8.3.2. Pod์์ ์ฌ์ฉํ ์ ์๋ ๋์ญํญ ์ ํ
Pod์ ์๋น์ค ํ์ง ํธ๋ํฝ ์กฐ์ ๊ธฐ๋ฅ์ ์ ์ฉํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋์ญํญ์ ํจ๊ณผ์ ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค. Pod์์ ์ก์ ํ๋ ํธ๋ํฝ์ ๊ตฌ์ฑ๋ ์๋๋ฅผ ์ด๊ณผํ๋ ํจํท์ ๊ฐ๋จํ ์ญ์ ํ๋ ์ ์ฑ ์ ๋ฐ๋ผ ์ฒ๋ฆฌํฉ๋๋ค. Pod์ ์์ ๋๋ ํธ๋ํฝ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋๊ธฐ ์ค์ธ ํจํท์ ๊ตฌ์ฑํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค. ํน์ Pod์ ๋ํ ์ ํ ์ฌํญ์ ๋ค๋ฅธ Pod์ ๋์ญํญ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์ ์ฐจ
Pod์ ๋์ญํญ์ ์ ํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
์ค๋ธ์ ํธ ์ ์ JSON ํ์ผ์ ์์ฑํ๊ณ
kubernetes.io/ingress-bandwidth
๋ฐkubernetes.io/egress-bandwidth
์ฃผ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ํธ๋ํฝ ์๋๋ฅผ ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Pod ์ก์ ๋ฐ ์์ ๋์ญํญ์ ๋ ๋ค 10M/s๋ก ์ ํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.์ ํ๋
Pod
์ค๋ธ์ ํธ ์ ์{ "kind": "Pod", "spec": { "containers": [ { "image": "openshift/hello-openshift", "name": "hello-openshift" } ] }, "apiVersion": "v1", "metadata": { "name": "iperf-slow", "annotations": { "kubernetes.io/ingress-bandwidth": "10M", "kubernetes.io/egress-bandwidth": "10M" } } }
์ค๋ธ์ ํธ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file_or_dir_path>
8.3.3. Pod ์ค๋จ ์์ฐ์ ์ฌ์ฉํ์ฌ ์คํ ์ค์ธ pod ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ
Pod ์ค๋จ ์์ฐ์ ์ฌ์ฉํ๋ฉด ์ ์ง๋ณด์๋ฅผ ์ํด ๋ ธ๋๋ฅผ ๋๋ ์ด๋ํ๋ ๋ฑ ์์ ์ค์ Pod์ ๋ํ ๋ณด์ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ต๋๋ค.
PodDisruptionBudget
์ ๋์์ ์๋ํด์ผ ํ๋ ์ต์ ๋ณต์ ๋ณธ ์ ๋๋ ๋ฐฑ๋ถ์จ์ ์ง์ ํ๋ API ์ค๋ธ์ ํธ์
๋๋ค. ํ๋ก์ ํธ์์ ์ด๋ฌํ ์ค์ ์ ๋
ธ๋ ์ ์ง ๊ด๋ฆฌ (์: ํด๋ฌ์คํฐ ์ถ์ ๋๋ ํด๋ฌ์คํฐ ์
๊ทธ๋ ์ด๋) ์ค์ ์ ์ฉํ ์ ์์ผ๋ฉฐ (๋
ธ๋ ์ฅ์ ์๊ฐ ์๋๋ผ) ์๋ฐ์ ์ผ๋ก ์ ๊ฑฐ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉ๋ฉ๋๋ค.
PodDisruptionBudget
์ค๋ธ์ ํธ์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- ์ผ๋ จ์ pod์ ๋ํ ๋ผ๋ฒจ ์ฟผ๋ฆฌ ๊ธฐ๋ฅ์ธ ๋ผ๋ฒจ ์ ํ๊ธฐ์ ๋๋ค.
๋์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ ์ต์ pod ์๋ฅผ ์ง์ ํ๋ ๊ฐ์ฉ์ฑ ์์ค์ ๋๋ค.
-
minAvailable
์ ์ค๋จ ์ค์๋ ํญ์ ์ฌ์ฉํ ์ ์์ด์ผํ๋ pod ์์ ๋๋ค. -
maxUnavailable
์ ์ค๋จ ์ค์ ์ฌ์ฉํ ์์๋ pod ์์ ๋๋ค.
-
Available
์ condition Ready=True
๊ฐ ์๋ Pod ์๋ฅผ ๋ํ๋
๋๋ค. ready=True
๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ Pod๋ฅผ ์ฐธ์กฐํ๋ฉฐ ์ผ์นํ๋ ๋ชจ๋ ์๋น์ค์ ๋ถํ ๋ถ์ฐ ํ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
maxUnavailable
0 %
๋๋ 0
์ด๋ minAvailable
์ 100 %
ํน์ ๋ณต์ ๋ณธ ์์ ๋์ผํ ๊ฐ์ ํ์ฉ๋์ง๋ง ์ด๋ก ์ธํด ๋
ธ๋๊ฐ ๋๋ ์ธ๋์ง ์๋๋ก ์ฐจ๋จํ ์ ์์ต๋๋ค.
๋ค์์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ก์ ํธ์์ pod ์ค๋จ ์์ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
$ oc get poddisruptionbudget --all-namespaces
์ถ๋ ฅ ์
NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE openshift-apiserver openshift-apiserver-pdb N/A 1 1 121m openshift-cloud-controller-manager aws-cloud-controller-manager 1 N/A 1 125m openshift-cloud-credential-operator pod-identity-webhook 1 N/A 1 117m openshift-cluster-csi-drivers aws-ebs-csi-driver-controller-pdb N/A 1 1 121m openshift-cluster-storage-operator csi-snapshot-controller-pdb N/A 1 1 122m openshift-cluster-storage-operator csi-snapshot-webhook-pdb N/A 1 1 122m openshift-console console N/A 1 1 116m #...
PodDisruptionBudget
์ ์์คํ
์์ ์ต์ minAvailable
pod๊ฐ ์คํ์ค์ธ ๊ฒฝ์ฐ ์ ์์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด ์ ํ์ ์ด๊ณผํ๋ ๋ชจ๋ pod๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
Pod ์ฐ์ ์์ ๋ฐ ์ ์ ์ค์ ์ ๋ฐ๋ผ ์ฐ์ ์์๊ฐ ๋ฎ์ pod๋ pod ์ค๋จ ์์ฐ ์๊ตฌ ์ฌํญ์ ๋ฌด์ํ๊ณ ์ ๊ฑฐ๋ ์ ์์ต๋๋ค.
8.3.3.1. Pod ์ค๋จ ์์ฐ์ ์ฌ์ฉํ์ฌ ์คํํด์ผ ํ pod ์ ์ง์
PodDisruptionBudget
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ ๊ฐ๋๋์ด์ผ ํ๋ ์ต์ ๋ณต์ ๋ณธ ์ ๋๋ ๋ฐฑ๋ถ์จ์ ์ง์ ํ ์ ์์ต๋๋ค.
์ ์ฐจ
pod ์ค๋จ ์์ฐ์ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ค๋ธ์ ํธ ์ ์๋ฅผ ์ฌ์ฉํ์ฌ YAML ํ์ผ์ ๋ง๋ญ๋๋ค.
apiVersion: policy/v1 1 kind: PodDisruptionBudget metadata: name: my-pdb spec: minAvailable: 2 2 selector: 3 matchLabels: name: my-pod
- 1
PodDisruptionBudget
์policy/v1
API ๊ทธ๋ฃน์ ์ผ๋ถ์ ๋๋ค.- 2
- ๋์์ ์ฌ์ฉํ ์ ํ์๊ฐ ์๋ ์ต์ pod ์ ์ ๋๋ค. ์ ์ ๋๋ ๋ฐฑ๋ถ์จ (์:
20 %
)์ ์ง์ ํ๋ ๋ฌธ์์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. - 3
- ๋ฆฌ์์ค ์งํฉ์ ๋ํ ๋ผ๋ฒจ ์ฟผ๋ฆฌ์ ๋๋ค.
matchLabels
๋ฐmatchExpressions
์ ๊ฒฐ๊ณผ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฒฐํฉ๋ฉ๋๋ค. ์ด ๋งค๊ฐ ๋ณ์(์:selector {}
)๋ฅผ ๋น์ ๋๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ Pod๋ฅผ ์ ํํฉ๋๋ค.
๋๋ ๋ค์์ ์ํํฉ๋๋ค.
apiVersion: policy/v1 1 kind: PodDisruptionBudget metadata: name: my-pdb spec: maxUnavailable: 25% 2 selector: 3 matchLabels: name: my-pod
- 1
PodDisruptionBudget
์policy/v1
API ๊ทธ๋ฃน์ ์ผ๋ถ์ ๋๋ค.- 2
- ๋์์ ์ฌ์ฉํ ์์๋ ์ต๋ pod ์์ ๋๋ค. ์ ์ ๋๋ ๋ฐฑ๋ถ์จ (์:
20 %
)์ ์ง์ ํ๋ ๋ฌธ์์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. - 3
- ๋ฆฌ์์ค ์งํฉ์ ๋ํ ๋ผ๋ฒจ ์ฟผ๋ฆฌ์ ๋๋ค.
matchLabels
๋ฐmatchExpressions
์ ๊ฒฐ๊ณผ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฒฐํฉ๋ฉ๋๋ค. ์ด ๋งค๊ฐ ๋ณ์(์:selector {}
)๋ฅผ ๋น์ ๋๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ Pod๋ฅผ ์ ํํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํฉ๋๋ค.
$ oc create -f </path/to/file> -n <project_name>
8.3.4. ์ค์ Pod๋ฅผ ์ฌ์ฉํ์ฌ Pod ์ ๊ฑฐ ๋ฐฉ์ง
์์ ํ ์๋ํ๋ ํด๋ฌ์คํฐ์ ์ค์ํ์ง๋ง ๋ง์คํฐ๊ฐ ์๋ ์ผ๋ฐ ํด๋ฌ์คํฐ ๋ ธ๋์์ ์คํ๋๋ ๋ค์ํ ํต์ฌ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ์ค์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋๋ฉด ํด๋ฌ์คํฐ๊ฐ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
์ค์๋ก ํ์๋ Pod๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ ์ฐจ
Pod๋ฅผ ์ค์๋ก ์ค์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
Pod
์ฌ์์ ์์ฑํ๊ฑฐ๋system-cluster-critical
์ฐ์ ์์ ํด๋์ค๋ฅผ ํฌํจํ๋๋ก ๊ธฐ์กด Pod๋ฅผ ํธ์งํฉ๋๋ค.apiVersion: v1 kind: Pod metadata: name: my-pdb spec: template: metadata: name: critical-pod priorityClassName: system-cluster-critical 1
- 1
- ๋ ธ๋์์ ์ ๊ฑฐํด์๋ ์ ๋๋ Pod์ ๊ธฐ๋ณธ ์ฐ์ ์์ ํด๋์ค์ ๋๋ค.
๋๋ ํด๋ฌ์คํฐ์ ์ค์ํ Pod์ ๋ํด
system-node-critical
์ ์ง์ ํ ์ ์์ง๋ง ํ์ํ ๊ฒฝ์ฐ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค.Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
8.4. ์ ํ ๋ฒ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์ฌ์ฉ ์ ํ
๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ ์ด๋๋ OpenShift Container Platform ํด๋ฌ์คํฐ์์ ๋ฐ์ธ๋ฉ๋์ง ์์ ์ปดํจํ ๋ฆฌ์์ค์ ํจ๊ป ์คํ๋ฉ๋๋ค. ์ ํ ๋ฒ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ์์ ํน์ ์ค๋ธ์ ํธ์ ๋ํ ๋ฆฌ์์ค ์ฌ์ฉ์ ์ ํํ ์ ์์ต๋๋ค.
- Pod ๋ฐ ์ปจํ ์ด๋: Pod ๋ฐ ํด๋น ์ปจํ ์ด๋์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ต์ ๋ฐ ์ต๋ ์๊ตฌ์ฌํญ์ ์ค์ ํ ์ ์์ต๋๋ค.
-
์ด๋ฏธ์ง ์คํธ๋ฆผ:
ImageStream
์ค๋ธ์ ํธ์์ ์ด๋ฏธ์ง ๋ฐ ํ๊ทธ ์์ ๋ํ ์ ํ์ ์ค์ ํ ์ ์์ต๋๋ค. - ์ด๋ฏธ์ง: ๋ด๋ถ ๋ ์ง์คํธ๋ฆฌ๋ก ๋ด๋ณด๋ผ ์ ์๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- PVC(์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์): ์์ฒญํ ์ ์๋ PVC ํฌ๊ธฐ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
Pod๊ฐ ์ ํ ๋ฒ์์ ๋ฐ๋ผ ์ ์ฉ๋ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ์๋ ๋ค์์คํ์ด์ค์ Pod๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
8.4.1. ์ ํ ๋ฒ์ ์ ๋ณด
LimitRange
์ค๋ธ์ ํธ์์ ์ ์ํ๋ ์ ํ ๋ฒ์๋ ํ๋ก์ ํธ์ ๋ฆฌ์์ค ์ฌ์ฉ์ ์ ํํฉ๋๋ค. ํ๋ก์ ํธ์์๋ Pod, ์ปจํ
์ด๋, ์ด๋ฏธ์ง ์คํธ๋ฆผ ๋๋ PVC(์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์)์ ๋ํ ํน์ ๋ฆฌ์์ค ์ ํ์ ์ค์ ํ ์ ์์ต๋๋ค.
๋ฆฌ์์ค ์์ฑ ๋ฐ ์์ ์ ์ํ ๋ชจ๋ ์์ฒญ์ ํ๋ก์ ํธ์ ๊ฐ LimitRange
์ค๋ธ์ ํธ์ ๋ํด ํ๊ฐ๋ฉ๋๋ค. ๋ฆฌ์์ค๊ฐ ์ด๊ฑฐ๋ ์ ์ฝ ์กฐ๊ฑด์ ์๋ฐํ๋ ๊ฒฝ์ฐ ํด๋น ๋ฆฌ์์ค๋ ๊ฑฐ๋ถ๋ฉ๋๋ค.
๋ค์์ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์ ํ ๋ฒ์ ์ค๋ธ์ ํธ(Pod, ์ปจํ ์ด๋, ์ด๋ฏธ์ง, ์ด๋ฏธ์ง ์คํธ๋ฆผ ๋๋ PVC)๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๋์ผํ ์ค๋ธ์ ํธ์์ ์ด๋ฌํ ๊ตฌ์ฑ ์์์ ์ผ๋ถ ๋๋ ๋ชจ๋์ ๋ํ ์ ํ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ์ ์ดํ๋ ค๋ ๊ฐ ํ๋ก์ ํธ์ ๋ํด ์๋ก ๋ค๋ฅธ ์ ํ ๋ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
์ปจํ ์ด๋์ ์ ํ ๋ฒ์ ์ค๋ธ์ ํธ ์ํ
apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" spec: limits: - type: "Container" max: cpu: "2" memory: "1Gi" min: cpu: "100m" memory: "4Mi" default: cpu: "300m" memory: "200Mi" defaultRequest: cpu: "200m" memory: "100Mi" maxLimitRequestRatio: cpu: "10"
8.4.1.1. ๊ตฌ์ฑ ์์ ์ ํ ์ ๋ณด
๋ค์ ์์ ์์๋ ๊ฐ ๊ตฌ์ฑ ์์์ ๋ํ ์ ํ ๋ฒ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณด์ฌ์ค๋๋ค. ํด๋น ์์ ๋ ๋ช
ํ์ฑ์ ์ํด ๋ถ๋ฅ๋์ด ์์ต๋๋ค. ํ์์ ๋ฐ๋ผ ์ผ๋ถ ๋๋ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ํด ๋จ์ผ LimitRange
์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
8.4.1.1.1. ์ปจํ ์ด๋ ์ ํ
์ ํ ๋ฒ์๋ฅผ ์ฌ์ฉํ๋ฉด Pod์ ๊ฐ ์ปจํ
์ด๋์์ ํน์ ํ๋ก์ ํธ์ ๋ํด ์์ฒญํ ์ ์๋ ์ต์ ๋ฐ ์ต๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์์ ์ปจํ
์ด๋๊ฐ ์์ฑ๋๋ฉด Pod
์ฌ์์ ์ปจํ
์ด๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ด LimitRange
์ค๋ธ์ ํธ์ ์ค์ ๋ ๊ฐ์ ์ค์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ์ง ์์ผ๋ฉด Pod๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
-
์ปจํ
์ด๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์์ฒญ ๋ฐ ์ ํ์ด
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ ์ปจํ ์ด๋์min
๋ฆฌ์์ค ์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค. ์ปจํ ์ด๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๋ฐ ์ ํ์ด
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ ์ปจํ ์ด๋์max
๋ฆฌ์์ค ์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.LimitRange
์ค๋ธ์ ํธ์์max
CPU๋ฅผ ์ ์ํ๋ ๊ฒฝ์ฐPod
์ฌ์์ CPUrequest
๊ฐ์ ์ ์ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ ๋ฒ์์ ์ง์ ๋ ์ต๋ CPU ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ CPUlimit
๊ฐ์ ์ง์ ํด์ผ ํฉ๋๋ค.์์ฒญ์ ๋ํ ์ปจํ ์ด๋ ์ ํ ๋น์จ์
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ ์ปจํ ์ด๋์maxLimitRequestRatio
๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.LimitRange
์ค๋ธ์ ํธ์์maxLimitRequestRatio
์ ์ฝ ์กฐ๊ฑด์ ์ ์ํ๋ ๊ฒฝ์ฐ ์ ์ปจํ ์ด๋์request
๋ฐlimit
๊ฐ์ด ๋ชจ๋ ์์ด์ผ ํฉ๋๋ค. OpenShift Container Platform์limit
๊ฐ์request
๊ฐ์ผ๋ก ๋๋ ์ ํ ๋ ์์ฒญ ๋น์จ์ ๊ณ์ฐํฉ๋๋ค. ์ด ๊ฐ์ ์์๊ฐ ์๋ 1๋ณด๋ค ํฐ ์ ์์ฌ์ผ ํฉ๋๋ค.์๋ฅผ ๋ค์ด ์ปจํ ์ด๋์
limit
๊ฐ์ดcpu: 500
์ด๊ณrequest
๊ฐ์ดcpu: 100
์ธ ๊ฒฝ์ฐcpu
์ ์ ํ ๋ ์์ฒญ ๋น์จ์5
์ ๋๋ค. ์ด ๋น์จ์maxLimitRequestRatio
๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.
Pod
์ฌ์์์ ์ปจํ
์ด๋ ๋ฆฌ์์ค ๋ฉ๋ชจ๋ฆฌ ๋๋ ์ ํ์ ์ง์ ํ์ง ์์ผ๋ฉด ์ ํ ๋ฒ์ ์ค๋ธ์ ํธ์ ์ง์ ๋ ์ปจํ
์ด๋์ default
๋๋ defaultRequest
CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ด ์ปจํ
์ด๋์ ํ ๋น๋ฉ๋๋ค.
์ปจํ
์ด๋ LimitRange
์ค๋ธ์ ํธ ์ ์
apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" 1 spec: limits: - type: "Container" max: cpu: "2" 2 memory: "1Gi" 3 min: cpu: "100m" 4 memory: "4Mi" 5 default: cpu: "300m" 6 memory: "200Mi" 7 defaultRequest: cpu: "200m" 8 memory: "100Mi" 9 maxLimitRequestRatio: cpu: "10" 10
- 1
- LimitRange ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ๋๋ค.
- 2
- Pod์ ๋จ์ผ ์ปจํ ์ด๋์์ ์์ฒญํ ์ ์๋ ์ต๋ CPU ์์ ๋๋ค.
- 3
- Pod์ ๋จ์ผ ์ปจํ ์ด๋์์ ์์ฒญํ ์ ์๋ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ค.
- 4
- Pod์ ๋จ์ผ ์ปจํ ์ด๋์์ ์์ฒญํ ์ ์๋ ์ต์ CPU ์์ ๋๋ค.
- 5
- Pod์ ๋จ์ผ ์ปจํ ์ด๋์์ ์์ฒญํ ์ ์๋ ์ต์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ค.
- 6
Pod
์ฌ์์ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ CPU ์์ ๋๋ค.- 7
Pod
์ฌ์์ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ค.- 8
Pod
์ฌ์์ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์ปจํ ์ด๋์์ ์์ฒญํ ์ ์๋ ๊ธฐ๋ณธ CPU ์์ ๋๋ค.- 9
Pod
์ฌ์์ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์ปจํ ์ด๋์์ ์์ฒญํ ์ ์๋ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ค.- 10
- ์ปจํ ์ด๋์ ๋ํ ์ต๋ ์ ํ ๋ ์์ฒญ ๋น์จ์ ๋๋ค.
8.4.1.1.2. Pod ์ ํ
์ ํ ๋ฒ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ง์ ๋ ํ๋ก์ ํธ์ Pod์์ ๋ชจ๋ ์ปจํ
์ด๋์ ๋ํด ์ต์ ๋ฐ ์ต๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ง์ ํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์์ ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ ค๋ฉด Pod
์ฌ์์ ์ปจํ
์ด๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ด LimitRange
์ค๋ธ์ ํธ์ ์ค์ ๋ ๊ฐ์ ์ค์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ์ง ์์ผ๋ฉด Pod๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
Pod
์ฌ์์์ ์ปจํ
์ด๋ ๋ฆฌ์์ค ๋ฉ๋ชจ๋ฆฌ ๋๋ ์ ํ์ ์ง์ ํ์ง ์์ผ๋ฉด ์ ํ ๋ฒ์ ์ค๋ธ์ ํธ์ ์ง์ ๋ ์ปจํ
์ด๋์ default
๋๋ defaultRequest
CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ด ์ปจํ
์ด๋์ ํ ๋น๋ฉ๋๋ค.
Pod์ ๋ชจ๋ ์ปจํ ์ด๋์์ ๋ค์ ์ฌํญ์ด ์ถฉ์กฑ๋์ด์ผ ํฉ๋๋ค.
-
์ปจํ
์ด๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์์ฒญ ๋ฐ ์ ํ์ด
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ Pod์min
๋ฆฌ์์ค ์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค. -
์ปจํ
์ด๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์์ฒญ ๋ฐ ์ ํ์ด
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ Pod์max
๋ฆฌ์์ค ์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค. -
์์ฒญ์ ๋ํ ์ปจํ
์ด๋ ์ ํ ๋ ์์ฒญ ๋น์จ์ด
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋maxLimitRequestRatio
์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.
Pod LimitRange
์ค๋ธ์ ํธ ์ ์
apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" 1 spec: limits: - type: "Pod" max: cpu: "2" 2 memory: "1Gi" 3 min: cpu: "200m" 4 memory: "6Mi" 5 maxLimitRequestRatio: cpu: "10" 6
- 1
- ์ ํ ๋ฒ์ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ๋๋ค.
- 2
- Pod์์ ๋ชจ๋ ์ปจํ ์ด๋์ ์์ฒญํ ์ ์๋ ์ต๋ CPU ์์ ๋๋ค.
- 3
- Pod์์ ๋ชจ๋ ์ปจํ ์ด๋์ ์์ฒญํ ์ ์๋ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ค.
- 4
- Pod์์ ๋ชจ๋ ์ปจํ ์ด๋์ ์์ฒญํ ์ ์๋ ์ต์ CPU ์์ ๋๋ค.
- 5
- Pod์์ ๋ชจ๋ ์ปจํ ์ด๋์ ์์ฒญํ ์ ์๋ ์ต์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ค.
- 6
- ์ปจํ ์ด๋์ ๋ํ ์ต๋ ์ ํ ๋ ์์ฒญ ๋น์จ์ ๋๋ค.
8.4.1.1.3. ์ด๋ฏธ์ง ์ ํ
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด OpenShift ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ๋ก ๋ด๋ณด๋ผ ์ ์๋ ์ด๋ฏธ์ง์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
OpenShift ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒฝ์ฐ ๋ค์ ์ฌํญ์ด ์ถฉ์กฑ๋์ด์ผ ํฉ๋๋ค.
-
์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ ์ด๋ฏธ์ง์max
ํฌ๊ธฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.
์ด๋ฏธ์ง LimitRange
์ค๋ธ์ ํธ ์ ์
apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" 1 spec: limits: - type: openshift.io/Image max: storage: 1Gi 2
์ ํ์ ์ด๊ณผํ๋ Blob์ด ๋ ์ง์คํธ๋ฆฌ์ ์ ๋ก๋๋์ง ์๋๋ก ํ๋ ค๋ฉด ํ ๋น๋์ ์ ์ฉํ๋๋ก ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์ ๋ก๋๋ ์ด๋ฏธ์ง์ ๋งค๋ํ์คํธ์์ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ํญ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ํนํ Docker 1.10 ์ด์์ผ๋ก ๋น๋ํ์ฌ v2 ๋ ์ง์คํธ๋ฆฌ๋ก ๋ด๋ณด๋ธ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ ๊ทธ๋ฌํฉ๋๋ค. ์ด์ Docker ๋ฐ๋ชฌ์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง ๋งค๋ํ์คํธ๋ฅผ ๋ชจ๋ ํฌ๊ธฐ ์ ๋ณด๊ฐ ์๋ ์คํค๋ง v1๋ก ๋ณํํฉ๋๋ค. ์ด๋ฏธ์ง์ ์คํ ๋ฆฌ์ง ์ ํ์ด ์ค์ ๋์ด ์์ง ์์ ์ ๋ก๋ํ ์ ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์ฒ๋ฆฌ๋๊ณ ์์ต๋๋ค.
8.4.1.1.4. ์ด๋ฏธ์ง ์คํธ๋ฆผ ์ ํ
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง ์คํธ๋ฆผ์ ๋ํ ์ ํ์ ์ง์ ํ ์ ์์ต๋๋ค.
๊ฐ ์ด๋ฏธ์ง ์คํธ๋ฆผ์์ ๋ค์ ์ฌํญ์ด ์ถฉ์กฑ๋์ด์ผ ํฉ๋๋ค.
-
ImageStream
์ฌ์์ ์ด๋ฏธ์ง ํ๊ทธ ์๊ฐLimitRange
์ค๋ธ์ ํธ์openshift.io/image-tags
์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค. -
ImageStream
์ฌ์์ ์ด๋ฏธ์ง์ ๋ํ ๊ณ ์ ์ฐธ์กฐ ์๊ฐ ์ ํ ๋ฒ์ ์ค๋ธ์ ํธ์openshift.io/images
์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.
์ด๋ฏธ์ง ์คํธ๋ฆผ LimitRange
์ค๋ธ์ ํธ ์ ์
apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" 1 spec: limits: - type: openshift.io/ImageStream max: openshift.io/image-tags: 20 2 openshift.io/images: 30 3
openshift.io/image-tags
๋ฆฌ์์ค๋ ๊ณ ์ ์ด๋ฏธ์ง ์ฐธ์กฐ๋ฅผ ๋ํ๋
๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์ฐธ์กฐ๋ ImageStreamTag
, ImageStreamImage
, DockerImage
์
๋๋ค. ํ๊ทธ๋ oc tag
๋ฐ oc import-image
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์์ฑํ ์ ์์ต๋๋ค. ๋ด๋ถ ์ฐธ์กฐ์ ์ธ๋ถ ์ฐธ์กฐ๋ ๊ตฌ๋ถ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ImageStream
์ฌ์์ ํ๊ทธ๋ ๊ฐ๊ฐ์ ๊ณ ์ ์ฐธ์กฐ๋ ํ ๋ฒ๋ง ๊ณ์ฐ๋ฉ๋๋ค. ๋ด๋ถ ์ปจํ
์ด๋ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ์ ๋ํ ๋ด๋ณด๋ด๊ธฐ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ ํํ์ง ์์ง๋ง ํ๊ทธ ์ ํ์ ์ ์ฉํฉ๋๋ค.
openshift.io/images
๋ฆฌ์์ค๋ ์ด๋ฏธ์ง ์คํธ๋ฆผ ์ํ์ ๊ธฐ๋ก๋ ๊ณ ์ ์ด๋ฏธ์ง ์ด๋ฆ์ ๋ํ๋
๋๋ค. ์ด๋ฅผ ํตํด OpenShift ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ๋ก ๋ด๋ณด๋ผ ์ ์๋ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ๋ด๋ถ ๋ฐ ์ธ๋ถ ์ฐธ์กฐ๋ ๊ตฌ๋ถ๋์ง ์์ต๋๋ค.
8.4.1.1.5. ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์ ์ ํ
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ PVC(์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์)์ ์์ฒญ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ๋ชจ๋ ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์์ ๋ค์ ์ฌํญ์ด ์ถฉ์กฑ๋์ด์ผ ํฉ๋๋ค.
-
PVC(์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์)์ ๋ฆฌ์์ค ์์ฒญ์ด
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ PVC์min
์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค. -
PVC(์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์)์ ๋ฆฌ์์ค ์์ฒญ์ด
LimitRange
์ค๋ธ์ ํธ์ ์ง์ ๋ PVC์max
์ ์ฝ ์กฐ๊ฑด๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.
PVC LimitRange
์ค๋ธ์ ํธ ์ ์
apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" 1 spec: limits: - type: "PersistentVolumeClaim" min: storage: "2Gi" 2 max: storage: "50Gi" 3
8.4.2. ์ ํ ๋ฒ์ ์์ฑ
ํ๋ก์ ํธ์ ์ ํ ๋ฒ์๋ฅผ ์ ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ํ์ํ ์ฌ์์ ์ฌ์ฉํ์ฌ
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.apiVersion: "v1" kind: "LimitRange" metadata: name: "resource-limits" 1 spec: limits: - type: "Pod" 2 max: cpu: "2" memory: "1Gi" min: cpu: "200m" memory: "6Mi" - type: "Container" 3 max: cpu: "2" memory: "1Gi" min: cpu: "100m" memory: "4Mi" default: 4 cpu: "300m" memory: "200Mi" defaultRequest: 5 cpu: "200m" memory: "100Mi" maxLimitRequestRatio: 6 cpu: "10" - type: openshift.io/Image 7 max: storage: 1Gi - type: openshift.io/ImageStream 8 max: openshift.io/image-tags: 20 openshift.io/images: 30 - type: "PersistentVolumeClaim" 9 min: storage: "2Gi" max: storage: "50Gi"
- 1
LimitRange
์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.- 2
- Pod์ ์ ํ์ ์ค์ ํ๋ ค๋ฉด ํ์์ ๋ฐ๋ผ ์ต์ ๋ฐ ์ต๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ์ง์ ํฉ๋๋ค.
- 3
- ์ปจํ ์ด๋์ ์ ํ์ ์ค์ ํ๋ ค๋ฉด ํ์์ ๋ฐ๋ผ ์ต์ ๋ฐ ์ต๋ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ์ง์ ํฉ๋๋ค.
- 4
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋์ ๊ฒฝ์ฐ
Pod
์ฌ์์ ์ง์ ํ์ง ์๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ง์ ํฉ๋๋ค. - 5
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋์ ๊ฒฝ์ฐ
Pod
์ฌ์์ ์ง์ ํ์ง ์๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋์์ ์์ฒญํ ์ ์๋ ๊ธฐ๋ณธ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ง์ ํฉ๋๋ค. - 6
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋์ ๊ฒฝ์ฐ
Pod
์ฌ์์ ์ง์ ํ ์ ์๋ ์ต๋ ์ ํ ๋ ์์ฒญ ๋น์จ์ ์ง์ ํฉ๋๋ค. - 7
- ์ด๋ฏธ์ง ์ค๋ธ์ ํธ์ ๋ํ ์ ํ์ ์ค์ ํ๋ ค๋ฉด OpenShift ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ๋ก ๋ด๋ณด๋ผ ์ ์๋ ์ต๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค.
- 8
- ์ด๋ฏธ์ง ์คํธ๋ฆผ์ ๋ํ ์ ํ์ ์ค์ ํ๋ ค๋ฉด ํ์์ ๋ฐ๋ผ
ImageStream
์ค๋ธ์ ํธ ํ์ผ์ ์์ ์ ์๋ ์ต๋ ์ด๋ฏธ์ง ํ๊ทธ ๋ฐ ์ฐธ์กฐ ์๋ฅผ ์ค์ ํฉ๋๋ค. - 9
- ์๊ตฌ ๋ณผ๋ฅจ ํด๋ ์์ ๋ํ ์ ํ์ ์ค์ ํ๋ ค๋ฉด ์์ฒญํ ์ ์๋ ์ต์ ๋ฐ ์ต๋ ์คํ ๋ฆฌ์ง ์์ ์ค์ ํฉ๋๋ค.
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <limit_range_file> -n <project> 1
- 1
- ์์ฑํ YAML ํ์ผ์ ์ด๋ฆ๊ณผ ์ ํ์ ์ ์ฉํ ํ๋ก์ ํธ๋ฅผ ์ง์ ํฉ๋๋ค.
8.4.3. ์ ํ ๋ณด๊ธฐ
์น ์ฝ์์์ ํ๋ก์ ํธ์ ํ ๋น๋ ํ์ด์ง๋ก ์ด๋ํ๋ฉด ํ๋ก์ ํธ์ ์ ์๋ ์ ํ์ ํ์ธํ ์ ์์ต๋๋ค.
CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ๋ฒ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณผ ์๋ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ์ ์๋
LimitRange
์ค๋ธ์ ํธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค. ์๋ฅผ ๋ค์ด demoproject๋ผ๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.$ oc get limits -n demoproject
NAME CREATED AT resource-limits 2020-07-15T17:14:23Z
๊ด์ฌ ์๋
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ค๋ช ํฉ๋๋ค(์:resource-limits
์ ํ ๋ฒ์).$ oc describe limits resource-limits -n demoproject
Name: resource-limits Namespace: demoproject Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio ---- -------- --- --- --------------- ------------- ----------------------- Pod cpu 200m 2 - - - Pod memory 6Mi 1Gi - - - Container cpu 100m 2 200m 300m 10 Container memory 4Mi 1Gi 100Mi 200Mi - openshift.io/Image storage - 1Gi - - - openshift.io/ImageStream openshift.io/image - 12 - - - openshift.io/ImageStream openshift.io/image-tags - 10 - - - PersistentVolumeClaim storage - 50Gi - - -
8.4.4. ์ ํ ๋ฒ์ ์ญ์
ํ์ฑ LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ ๊ฑฐํ์ฌ ๋ ์ด์ ํ๋ก์ ํธ์ ์ ํ์ ์ ์ฉํ์ง ์์ผ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ oc delete limits <limit_name>
8.5. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋๋ก ํด๋ฌ์คํฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์์ต๋๋ค.
- ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ ์์์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ํ ์๊ตฌ ์ฌํญ์ ํ์ธํ๊ณ ํด๋น ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ๊ตฌ์ฑ๋ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ต์ ์ผ๋ก ์ค์ํ๋๋ก ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐํ์(์: OpenJDK)์ ๊ตฌ์ฑํฉ๋๋ค.
- ์ปจํ ์ด๋์์ ์คํ๊ณผ ์ฐ๊ฒฐ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ ์กฐ๊ฑด์ ์ง๋จ ๋ฐ ํด๊ฒฐํฉ๋๋ค.
8.5.1. ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ดํด
๊ณ์ํ๊ธฐ ์ ์ OpenShift Container Platform์์ ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ์๋ฅผ ๊ผผ๊ผผํ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ ์ ํ์ ๋ฆฌ์์ค(๋ฉ๋ชจ๋ฆฌ, CPU, ์คํ ๋ฆฌ์ง)์ ๋ํด OpenShift Container Platform์์๋ ์ ํ์ ์ธ ์์ฒญ ๋ฐ ์ ํ ๊ฐ์ Pod์ ๊ฐ ์ปจํ ์ด๋์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ํด ๋ค์ ์ฌํญ์ ์ ์ํ์ญ์์ค.
๋ฉ๋ชจ๋ฆฌ ์์ฒญ
- ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๊ฐ์ ์ง์ ํ๋ฉด OpenShift Container Platform ์ค์ผ์ค๋ฌ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ๋ ธ๋์ ์ปจํ ์ด๋๋ฅผ ์์ฝํ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ๊ณ ๋ คํ ๋ค์ ์ปจํ ์ด๋ ์ฌ์ฉ์ ์ํด ์ ํํ ๋ ธ๋์์ ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ๋จํฉ๋๋ค.
- ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ชจ๋๋ฉด OpenShift Container Platform์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ๊ฐ์ฅ ๋ง์ด ์ด๊ณผํ๋ ์ปจํ ์ด๋๋ฅผ ์ ๊ฑฐํ๋ ์์ ์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๊ฐ ์ฌ๊ฐํ ๊ฒฝ์ฐ ๋ ธ๋ OOM ์ข ๋ฃ์๋ ์ ์ฌํ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋์์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๊ณ ์ข ๋ฃํ ์ ์์ต๋๋ค.
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๊ฐ์ ํ ๋น๋์ ํ ๋นํ๊ฑฐ๋ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ ์ ์์ต๋๋ค.
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ํด๋ฌ์คํฐ ๊ณผ๋ค ํ ๋น์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ฐ๋ฐ์๊ฐ ์ง์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๊ฐ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ํ
- ๋ฉ๋ชจ๋ฆฌ ์ ํ ๊ฐ์ ์ง์ ํ๋ฉด ์ปจํ ์ด๋์ ๋ชจ๋ ํ๋ก์ธ์ค์ ํ ๋น๋ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ํ๋ ์ ํ์ ์ ๊ณตํฉ๋๋ค.
- ์ปจํ ์ด๋์ ๋ชจ๋ ํ๋ก์ธ์ค์์ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ด๊ณผํ๋ฉด ๋ ธ๋์ OOM(Out of Memory) ์ข ๋ฃ์์์ ์ฆ์ ์ปจํ ์ด๋์ ํ๋ก์ธ์ค๋ฅผ ์ ํํ์ฌ ์ข ๋ฃํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๋ฐ ์ ํ์ ๋ ๋ค ์ง์ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ํ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํฉ๋๋ค.
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ ๊ฐ์ ํ ๋น๋์ ํ ๋นํ๊ฑฐ๋ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ ์ ์์ต๋๋ค.
-
์ต์ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ 12MB์
๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์์
Pod ์ด๋ฒคํธ๋ก ์ธํด ์ปจํ ์ด๋๊ฐ ์์๋์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ๋๋ฌด ๋ฎ์ ๊ฒ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋๋ฆฌ๊ฑฐ๋ ์ ๊ฑฐํฉ๋๋ค. ์ ํ์ ์ ๊ฑฐํ๋ฉด Pod์์ ๋ฐ์ธ๋ฉ๋์ง ์์ ๋ ธ๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
8.5.1.1. ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ ๋ต ๊ด๋ฆฌ
OpenShift Container Platform์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์๋๋ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ํ์ธ
ํ์ํ ๊ฒฝ์ฐ ๊ฒฝํ์ ์ผ๋ก ์์๋๋ ํ๊ท ๋ฐ ์ต๋ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ฒฐ์ ํฉ๋๋ค(์: ๋ณ๋์ ๋ถํ ํ ์คํธ๋ฅผ ํตํด). ์ปจํ ์ด๋์์ ์ ์ฌ์ ์ผ๋ก ๋ณ๋ ฌ๋ก ์คํ๋ ์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค(์: ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ณด์กฐ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋์ง์ ์ฌ๋ถ).
์ํ ์ ํ ํ์ธ
์ ๊ฑฐ์ ๊ด๋ จ๋ ์ํ ์ ํ์ ํ์ธํฉ๋๋ค. ์ํ ์ฑํฅ์ด ๋ฎ์ผ๋ฉด ์ปจํ ์ด๋๋ ์์๋๋ ์ต๋ ์ฌ์ฉ๋๊ณผ ๋ฐฑ๋ถ์จ๋ก ๋ ์์ ๋ฒ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํด์ผ ํฉ๋๋ค. ์ํ ์ฑํฅ์ด ๋์ผ๋ฉด ์์๋๋ ์ฌ์ฉ๋์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ๋ ๊ฒ์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ์ค์
์ ๋ด์ฉ์ ๋ฐ๋ผ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ ์ค์ ํฉ๋๋ค. ์์ฒญ์ด ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ ์ ํํ๊ฒ ๋ํ๋ผ์๋ก ์ข์ต๋๋ค. ์์ฒญ์ด ๋๋ฌด ๋์ผ๋ฉด ํด๋ฌ์คํฐ ๋ฐ ํ ๋น๋ ์ฌ์ฉ์ด ๋นํจ์จ์ ์ ๋๋ค. ์์ฒญ์ด ๋๋ฌด ๋ฎ์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑฐ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ค์
ํ์ํ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ค์ ํฉ๋๋ค. ์ ํ์ ์ค์ ํ๋ฉด ์ปจํ ์ด๋์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ํฉ๊ณ๊ฐ ์ ํ์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ํ๋ก์ธ์ค๊ฐ ์ฆ์ ์ข ๋ฃ๋๋ ํจ๊ณผ๊ฐ ์์ด ์ด๋ก ์ธํ ์ฅ๋จ์ ์ด ๋ฐ์ํฉ๋๋ค. ๋ค๋ฅธ ํํธ์ผ๋ก๋ ์์์น ๋ชปํ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์กฐ๊ธฐ์ ํ์ธํ ์ ์์ต๋๋ค(โ๋น ๋ฅธ ์คํจโ). ๊ทธ๋ฌ๋ ์ด๋ก ์ธํด ํ๋ก์ธ์ค๊ฐ ๊ฐ์๊ธฐ ์ข ๋ฃ๋ฉ๋๋ค.
์ผ๋ถ OpenShift Container Platform ํด๋ฌ์คํฐ์๋ ์ ํ ๊ฐ์ ์ค์ ํด์ผ ํ ์ ์์ต๋๋ค. ์ผ๋ถ๋ ์ ํ์ ๋ฐ๋ผ ์์ฒญ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง์์๋ ์์ฒญ ๊ฐ๋ณด๋ค ํ์งํ๊ธฐ ์ฌ์ด ์ค์ ๋ ์ ํ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ค์ ํ๋ ๊ฒฝ์ฐ ์์๋๋ ์ต๋ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ๋ฐฑ๋ถ์จ๋ก ๋ ์์ ๋ฒ์ ์ด์์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ํ๋๋์๋์ง ํ์ธ
์ ์ ํ ๊ฒฝ์ฐ ๊ตฌ์ฑ๋ ์์ฒญ ๋ฐ ์ ํ ๊ฐ๊ณผ ๊ด๋ จํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ๋๋์๋์ง ํ์ธํฉ๋๋ค. ์ด ๋จ๊ณ๋ ํนํ JVM๊ณผ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋งํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด ํ์ด์ง์ ๋๋จธ์ง ๋ถ๋ถ์์๋ ์ด ์์ ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
8.5.2. OpenShift Container Platform์ ๋ํ OpenJDK ์ค์ ์ดํด
๊ธฐ๋ณธ OpenJDK ์ค์ ์ ์ปจํ ์ด๋ํ๋ ํ๊ฒฝ์์ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปจํ ์ด๋์์ OpenJDK๋ฅผ ์คํํ ๋๋ง๋ค ๋ช ๊ฐ์ง ์ถ๊ฐ Java ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ ํญ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๋ณต์กํ๊ณ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ์์ธํ ์ค๋ช ์ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ต์ํ ๋ค์ ์ธ ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์์ ์ ์ปจํ ์ด๋์์ OpenJDK๋ฅผ ์คํํ๊ธฐ ์ํ ์์์ ์ผ๋ก์ ์ค์ํฉ๋๋ค.
- JVM ์ต๋ ํ ํฌ๊ธฐ๋ฅผ ๋ฎ์ด์๋๋ค.
- ์ ์ ํ ๊ฒฝ์ฐ JVM์์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ ์ฒด์ ์ ์ ๊ณตํ๋๋ก ์ ๋ํฉ๋๋ค.
- ์ปจํ ์ด๋ ๋ด์ ๋ชจ๋ JVM ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
์ปจํ ์ด๋์์ ์คํํ๊ธฐ ์ํด JVM ์ํฌ๋ก๋๋ฅผ ์ต์ ์ผ๋ก ํ๋ํ๋ ๊ฒ์ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉฐ ๋ค์ํ JVM ์ต์ ์ ์ถ๊ฐ๋ก ์ค์ ํ๋ ์์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
8.5.2.1. JVM ์ต๋ ํ ํฌ๊ธฐ๋ฅผ ๋ฎ์ด์ฐ๋ ๋ฐฉ๋ฒ ์ดํด
๋๋ค์์ Java ์ํฌ๋ก๋์์ JVM ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋จ์ผ ์๋น ํญ๋ชฉ์
๋๋ค. ํ์ฌ OpenJDK๋ ๊ธฐ๋ณธ์ ์ผ๋ก OpenJDK๊ฐ ์ปจํ
์ด๋์์ ์คํ๋๋์ง์ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ปดํจํ
๋
ธ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ต๋ 1/4(1/-XX:MaxRAMFraction
)์ ํ์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ํนํ ์ปจํ
์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ๋ ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ ์ด ๋์์ ๋ฎ์ด์ฐ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ ์์ ์ ๋ ๊ฐ์ง ์ด์์ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์ค์ ๋์ด ์๊ณ JVM์์ ์คํ ์ต์ ์ ์ง์ํ๋ ๊ฒฝ์ฐ
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
์ ์ค์ ํฉ๋๋ค.์ฐธ๊ณUseCGroupMemoryLimitForHeap
์ต์ ์ด JDK 11์์ ์ ๊ฑฐ๋์์ต๋๋ค. ๋์-XX:+UseContainerSupport
๋ฅผ ์ฌ์ฉํฉ๋๋ค.์ด ๋ช ๋ น์
-XX:MaxRAM
์ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ผ๋ก ์ค์ ํ๊ณ ์ต๋ ํ ํฌ๊ธฐ(-XX:MaxHeapSize
/-Xmx
)๋ฅผ 1/-XX:MaxRAMFraction
(๊ธฐ๋ณธ๊ฐ: 1/4)์ผ๋ก ์ค์ ํฉ๋๋ค.-XX:MaxRAM
,-XX:MaxHeapSize
๋๋-Xmx
์ค ํ๋๋ฅผ ์ง์ ๋ฎ์ด์๋๋ค.์ด ์ต์ ์ ์ํํ๋ ค๋ฉด ๊ฐ์ ํ๋ ์ฝ๋ฉํด์ผ ํ์ง๋ง ์์ ํ ์ฌ๋ฐฑ์ ๊ณ์ฐํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
8.5.2.2. JVM์์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ ์ฒด์ ์ ์ ๊ณตํ๋๋ก ์ ๋ํ๋ ๋ฐฉ๋ฒ ์ดํด
๊ธฐ๋ณธ์ ์ผ๋ก OpenJDK๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ ์ฒด์ ์ ์ ๊ทน์ ์ผ๋ก ๋ฐํํ์ง ์์ต๋๋ค. ์ด๋ ๋๋ค์์ ์ปจํ ์ด๋ํ๋ Java ์ํฌ๋ก๋์ ์ ํฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ถ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ค์ดํฐ๋ธ์ธ์ง ์ถ๊ฐ JVM์ธ์ง ๋๋ ์ด ๋์ ์กฐํฉ์ธ์ง์ ๊ด๊ณ์์ด ์ปจํ ์ด๋ ๋ด์์ ์ถ๊ฐ ํ์ฑ ํ๋ก์ธ์ค๊ฐ JVM๊ณผ ๊ณต์กดํ๋ ์ํฌ๋ก๋๋ ์ฃผ๋ชฉํ ๋งํ ์์ธ์ ๋๋ค.
OpenShift Container Platform Jenkins maven ์ฌ๋ ์ด๋ธ ์ด๋ฏธ์ง์์๋ ๋ค์ JVM ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ JVM์์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ ์ฒด์ ์ ์ ๊ณตํ๋๋ก ์ ๋ํฉ๋๋ค.
-XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90.
์ด๋ฌํ ์ธ์๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ ์ค์ธ ๋ฉ๋ชจ๋ฆฌ์ 110%(-XX:MaxHeapFreeRatio
)๋ฅผ ์ด๊ณผํ ๋๋ง๋ค ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ ์ฒด์ ์ ๋ฐํํ๊ธฐ ์ํ ๊ฒ์ผ๋ก, ๊ฐ๋น์ง ์์ง๊ธฐ์์ ์ต๋ 20%(-XX:GCTimeRatio
)์ CPU ์๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
ํ ํ ๋น์ ํญ์ ์ด๊ธฐ ํ ํ ๋น(-XX:InitialHeapSize
/ -Xms
๋ก ๋ฎ์ด์)๋ณด๋ค ์ ์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ OpenShift์์ Java ํํ๋ฆฐํธ ํ๋(1๋ถ), OpenShift์์ Java ํํ๋ฆฐํธ ํ๋(2๋ถ), OpenJDK ๋ฐ ์ปจํ
์ด๋์์ ํ์ธํ ์ ์์ต๋๋ค.
8.5.2.3. ์ปจํ ์ด๋ ๋ด์ ๋ชจ๋ JVM ํ๋ก์ธ์ค๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ ์ดํด
๋์ผํ ์ปจํ ์ด๋์์ ์ฌ๋ฌ ๊ฐ์ JVM์ด ์คํ๋๋ ๊ฒฝ์ฐ ๋ชจ๋ JVM์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ํฌ๋ก๋๊ฐ ๋ง์ ๊ฒฝ์ฐ ๊ฐ JVM์ ๋ฐฑ๋ถ์จ๋ก ๋ ๋ฉ๋ชจ๋ฆฌ ์์ฐ์ ๋ถ์ฌํ์ฌ ์ถ๊ฐ ์์ ๋ฒ์๋ฅผ ์ถฉ๋ถํ ์ ์งํด์ผ ํฉ๋๋ค.
๋๋ค์์ Java ํด์์๋ ๋ค์ํ ํ๊ฒฝ ๋ณ์(JAVA_OPTS
, GRADLE_OPTS
, MAVEN_OPTS
๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ JVM์ ๊ตฌ์ฑํ๋ฉฐ, ์ฌ๋ฐ๋ฅธ ์ค์ ์ ์ฌ๋ฐ๋ฅธ JVM์ ์ ๋ฌํ๋ ๊ฒ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค.
OpenJDK๋ ํญ์ JAVA_TOOL_OPTIONS
ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ํ๊ณ JAVA_TOOL_OPTIONS
์ ์ง์ ๋ ๊ฐ์ JVM ๋ช
๋ น์ค์ ์ง์ ๋ ๋ค๋ฅธ ์ต์
์์ ๋ฎ์ด์๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฌํ ์ต์
์ด ์ฌ๋ ์ด๋ธ ์ด๋ฏธ์ง์์ ์คํ๋๋ ๋ชจ๋ JVM ์ํฌ๋ก๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋๋ก OpenShift Container Platform Jenkins maven ์ฌ๋ ์ด๋ธ ์ด๋ฏธ์ง๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
JAVA_TOOL_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true"
UseCGroupMemoryLimitForHeap
์ต์
์ด JDK 11์์ ์ ๊ฑฐ๋์์ต๋๋ค. ๋์ -XX:+UseContainerSupport
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ์ค์ ์ ํตํด ์ถ๊ฐ ์ต์ ์ด ํ์ํ์ง ์๋ค๊ณ ๋ณด์ฅํ ์๋ ์์ง๋ง ์ ์ฉํ ์์์ ์ด ๋ ์ ์์ต๋๋ค.
8.5.3. Pod ๋ด์์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๋ฐ ์ ํ ์ฐพ๊ธฐ
Pod ๋ด์์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ ๋ฐ ์ ํ์ ๋์ ์ผ๋ก ๊ฒ์ํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ Downward API๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ ์ฐจ
MEMORY_REQUEST
๋ฐMEMORY_LIMIT
์คํ ์๋ฅผ ์ถ๊ฐํ๋๋ก Pod๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.๋ค์๊ณผ ์ ์ฌํ YAML ํ์ผ์ ์์ฑํฉ๋๋ค.
apiVersion: v1 kind: Pod metadata: name: test spec: containers: - name: test image: fedora:latest command: - sleep - "3600" env: - name: MEMORY_REQUEST 1 valueFrom: resourceFieldRef: containerName: test resource: requests.memory - name: MEMORY_LIMIT 2 valueFrom: resourceFieldRef: containerName: test resource: limits.memory resources: requests: memory: 384Mi limits: memory: 512Mi
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ Pod๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
๊ฒ์ฆ
์๊ฒฉ ์์ ์ฌ์ฉํ์ฌ Pod์ ์ก์ธ์คํฉ๋๋ค.
$ oc rsh test
์์ฒญ๋ ๊ฐ์ด ์ ์ฉ๋์๋์ง ํ์ธํฉ๋๋ค.
$ env | grep MEMORY | sort
์ถ๋ ฅ ์
MEMORY_LIMIT=536870912 MEMORY_REQUEST=402653184
๋ฉ๋ชจ๋ฆฌ ์ ํ ๊ฐ์ /sys/fs/cgroup/memory/memory.limit_in_bytes
ํ์ผ์ ํตํด ์ปจํ
์ด๋ ๋ด๋ถ์์๋ ํ์ธํ ์ ์์ต๋๋ค.
8.5.4. OOM ์ข ๋ฃ ์ ์ฑ ์ดํด
์ปจํ ์ด๋์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ด๊ณผํ๊ฑฐ๋ ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ๊ฐ ์ฌ๊ฐํ ๊ฒฝ์ฐ์๋ OpenShift Container Platform์์ ์ปจํ ์ด๋์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค.
ํ๋ก์ธ์ค๊ฐ OOM(Out of Memory) ์ข ๋ฃ๋๋ฉด ์ปจํ ์ด๋๊ฐ ์ฆ์ ์ข ๋ฃ๋ ์ ์์ต๋๋ค. ์ปจํ ์ด๋ PID 1 ํ๋ก์ธ์ค์์ SIGKILL์ ์์ ํ๋ฉด ์ปจํ ์ด๋๊ฐ ์ฆ์ ์ข ๋ฃ๋ฉ๋๋ค. ๊ทธ ์ธ์๋ ์ปจํ ์ด๋ ๋์์ด ๊ธฐํ ํ๋ก์ธ์ค์ ๋์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์๋ฅผ ๋ค์ด ์ปจํ ์ด๋ ํ๋ก์ธ์ค๊ฐ ์ฝ๋ 137๋ก ์ข ๋ฃ๋๋ฉด SIGKILL ์ ํธ๊ฐ ์์ ๋์์์ ๋ํ๋ ๋๋ค.
์ปจํ ์ด๋๊ฐ ์ฆ์ ์ข ๋ฃ๋์ง ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด OOM ์ข ๋ฃ๋ฅผ ํ์งํ ์ ์์ต๋๋ค.
์๊ฒฉ ์์ ์ฌ์ฉํ์ฌ Pod์ ์ก์ธ์คํฉ๋๋ค.
# oc rsh test
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
/sys/fs/cgroup/memory/memory.oom_control
์์ ํ์ฌ OOM ์ข ๋ฃ ์๋ฅผ ํ์ธํฉ๋๋ค.$ grep '^oom_kill ' /sys/fs/cgroup/memory/memory.oom_control
์ถ๋ ฅ ์
oom_kill 0
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ OOM ์ข ๋ฃ๋ฅผ ์ ๋ํฉ๋๋ค.
$ sed -e '' </dev/zero
์ถ๋ ฅ ์
Killed
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
sed
๋ช ๋ น์ ์ข ๋ฃ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.$ echo $?
์ถ๋ ฅ ์
137
137
์ฝ๋๋ ์ปจํ ์ด๋ ํ๋ก์ธ์ค๊ฐ ์ฝ๋ 137๋ก ์ข ๋ฃ๋์์์ ๋ํ๋ ๋๋ค. ์ด ์ฝ๋๋ SIGKILL ์ ํธ๊ฐ ์์ ๋์์์ ๋ํ๋ ๋๋ค.๋ค์ ๋ช ๋ น์ ์คํํ์ฌ
/sys/fs/cgroup/memory/memory.oom_control
์์ OOM ์ข ๋ฃ ์นด์ดํฐ๊ฐ ์ฆ๊ฐํ๋์ง ํ์ธํฉ๋๋ค.$ grep '^oom_kill ' /sys/fs/cgroup/memory/memory.oom_control
์ถ๋ ฅ ์
oom_kill 1
Pod์์ ํ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ OOM ์ข ๋ฃ๋ ๊ฒฝ์ฐ ๋์ค์ Pod๊ฐ ์ข ๋ฃ๋๋ฉด(์ฆ์ ์ฌ๋ถ์ ๊ด๊ณ์์ด) ๋จ๊ณ๋ ์คํจ, ์ด์ ๋ OOM ์ข ๋ฃ๊ฐ ๋ฉ๋๋ค.
restartPolicy
๊ฐ์ ๋ฐ๋ผ OOM ์ข ๋ฃ๋ Pod๊ฐ ๋ค์ ์์๋ ์ ์์ต๋๋ค. ์ฌ์์๋์ง ์๋ ๊ฒฝ์ฐ ๋ณต์ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ์ปจํธ๋กค๋ฌ๋ Pod์ ์คํจ ์ํ๋ฅผ ํ์ธํ๊ณ ์ Pod๋ฅผ ์์ฑํ์ฌ ์ด์ Pod๋ฅผ ๊ต์ฒดํฉ๋๋ค.๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Pod ์ํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
$ oc get pod test
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE test 0/1 OOMKilled 0 1m
Pod๊ฐ ์ฌ์์๋์ง ์์ ๊ฒฝ์ฐ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ Pod๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get pod test -o yaml
์ถ๋ ฅ ์
... status: containerStatuses: - name: test ready: false restartCount: 0 state: terminated: exitCode: 137 reason: OOMKilled phase: Failed
์ฌ์์๋ ๊ฒฝ์ฐ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ Pod๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get pod test -o yaml
์ถ๋ ฅ ์
... status: containerStatuses: - name: test ready: true restartCount: 1 lastState: terminated: exitCode: 137 reason: OOMKilled state: running: phase: Running
8.5.5. Pod ์ ๊ฑฐ ์ดํด
๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ชจ๋๋ฉด OpenShift Container Platform์ ํด๋น ๋ ธ๋์์ Pod๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์๋ชจ ๋ฒ์์ ๋ฐ๋ผ ์ ๊ฑฐ๊ฐ ์ ์์ ์ผ๋ก ์ํ๋์ง ์์ ์ ์์ต๋๋ค. ์ ์์ ์ธ ์ ๊ฑฐ์์๋ ํ๋ก์ธ์ค๊ฐ ์์ง ์ข ๋ฃ๋์ง ์์ ๊ฒฝ์ฐ ๊ฐ ์ปจํ ์ด๋์ ๊ธฐ๋ณธ ํ๋ก์ธ์ค(PID 1)์์ SIGTERM ์ ํธ๋ฅผ ์์ ํ ๋ค์ ์ ์ ํ SIGKILL ์ ํธ๋ฅผ ์์ ํฉ๋๋ค. ๋น์ ์์ ์ธ ์ ๊ฑฐ์์๋ ๊ฐ ์ปจํ ์ด๋์ ๊ธฐ๋ณธ ํ๋ก์ธ์ค์์ SIGKILL ์ ํธ๋ฅผ ์ฆ์ ์์ ํฉ๋๋ค.
์ ๊ฑฐ๋ Pod์ ๋จ๊ณ๋ ์คํจ, ์ด์ ๋ ์ ๊ฑฐ๋จ์
๋๋ค. restartPolicy
๊ฐ๊ณผ ๊ด๊ณ์์ด ์ฌ์์๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ณต์ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ์ปจํธ๋กค๋ฌ๋ Pod์ ์คํจ ์ํ๋ฅผ ํ์ธํ๊ณ ์ Pod๋ฅผ ์์ฑํ์ฌ ์ด์ Pod๋ฅผ ๊ต์ฒดํฉ๋๋ค.
$ oc get pod test
์ถ๋ ฅ ์
NAME READY STATUS RESTARTS AGE test 0/1 Evicted 0 1m
$ oc get pod test -o yaml
์ถ๋ ฅ ์
... status: message: 'Pod The node was low on resource: [MemoryPressure].' phase: Failed reason: Evicted
8.6. ๊ณผ๋ค ํ ๋น๋ ๋ ธ๋์ Pod๋ฅผ ๋ฐฐ์นํ๋๋ก ํด๋ฌ์คํฐ ๊ตฌ์ฑ
๊ณผ๋ค ํ ๋น ์ํ์์๋ ์ปจํ ์ด๋ ์ปดํจํ ๋ฆฌ์์ค ์์ฒญ ๋ฐ ์ ํ์ ํฉ๊ณ๊ฐ ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ์ด๊ณผํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฉ๋์ ๋ง๊ฒ ๋ณด์ฅ๋ ์ฑ๋ฅ์ ์ ์ถฉํ ์ ์๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๊ณผ๋ค ํ ๋น์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋๋ ์ปดํจํ ๋ฆฌ์์ค ์์ฒญ ๋ฐ ์ ํ์ ์ง์ ํ ์ ์์ต๋๋ค. ์์ฒญ์ ์ปจํ ์ด๋ ์์ฝ์ ์ฌ์ฉ๋๋ฉฐ ์ต์ ์๋น์ค ๋ณด์ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ํ์ ๋ ธ๋์์ ์ฌ์ฉํ ์ ์๋ ์ปดํจํ ๋ฆฌ์์ค์ ์์ ์ ํํฉ๋๋ค.
์ค์ผ์ค๋ฌ๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ์ปดํจํ ๋ฆฌ์์ค ์ฌ์ฉ์ ์ต์ ํํฉ๋๋ค. Pod์ ์ปดํจํ ๋ฆฌ์์ค ์์ฒญ ๋ฐ ๋ ธ๋์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฉ๋์ ๊ณ ๋ คํ์ฌ ํน์ ๋ ธ๋์ Pod๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
OpenShift Container Platform ๊ด๋ฆฌ์๋ ๋ ธ๋์์ ๊ณผ๋ค ํ ๋น ์์ค์ ์ ์ดํ๊ณ ์ปจํ ์ด๋ ๋ฐ๋๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ClusterResourceOverrideOperator๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ์์ค ๊ณผ๋ค ํ ๋น์ ๊ตฌ์ฑํ๋ฉด ๊ฐ๋ฐ์ ์ปจํ ์ด๋์ ์ค์ ๋ ์์ฒญ๊ณผ ์ ํ ์ฌ์ด์ ๋น์จ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ๋ ธ๋ ๊ณผ๋ค ํ ๋น ๋ฐ ํ๋ก์ ํธ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ ํ๊ณผ ๊ธฐ๋ณธ๊ฐ๊ณผ ํจ๊ป ๋ฆฌ์์ค ์ ํ ๋ฐ ์์ฒญ์ ์กฐ์ ํ์ฌ ์ํ๋ ์์ค์ ๊ณผ๋ค ํ ๋น์ ์ํํ ์ ์์ต๋๋ค.
OpenShift Container Platform์์๋ ํด๋ฌ์คํฐ ์์ค ๊ณผ๋ค ํ ๋น์ ํ์ฑํํด์ผ ํฉ๋๋ค. ๋ ธ๋ ๊ณผ๋ค ํ ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค. ๋ ธ๋์ ๊ณผ๋ค ํ ๋น ๋นํ์ฑํ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
8.6.1. ๋ฆฌ์์ค ์์ฒญ ๋ฐ ๊ณผ๋ค ํ ๋น
๊ฐ ์ปดํจํ ๋ฆฌ์์ค์ ๋ํด ์ปจํ ์ด๋๋ ๋ฆฌ์์ค ์์ฒญ ๋ฐ ์ ํ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ ธ๋์ ์์ฒญ๋ ๊ฐ์ ์ถฉ์กฑํ ์ ์๋ ์ถฉ๋ถํ ์ฉ๋์ ํ๋ณดํ๊ธฐ ์ํ ์์ฒญ์ ๋ฐ๋ผ ์ค์ผ์ค๋ง ๊ฒฐ์ ์ด ๋ด๋ ค์ง๋๋ค. ์ปจํ ์ด๋๊ฐ ์ ํ์ ์ง์ ํ์ง๋ง ์์ฒญ์ ์๋ตํ๋ฉด ์์ฒญ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์ปจํ ์ด๋๊ฐ ๋ ธ๋์์ ์ง์ ๋ ์ ํ์ ์ด๊ณผํ ์ ์์ต๋๋ค.
์ ํ ์ ์ฉ์ ์ปดํจํ ๋ฆฌ์์ค ์ ํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์ปจํ ์ด๋๊ฐ ์์ฒญํ๊ฑฐ๋ ์ ํํ์ง ์์ผ๋ฉด ์ปจํ ์ด๋๋ ๋ฆฌ์์ค ๋ณด์ฅ์ด ์๋ ์ํ์์ ๋ ธ๋๋ก ์์ฝ๋ฉ๋๋ค. ์ค์ ๋ก ์ปจํ ์ด๋๋ ๊ฐ์ฅ ๋ฎ์ ๋ก์ปฌ ์ฐ์ ์์๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋งํผ์ ์ง์ ๋ ๋ฆฌ์์ค๋ฅผ ์๋นํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ ์ํ์์๋ ๋ฆฌ์์ค ์์ฒญ์ ์ง์ ํ์ง ์๋ ์ปจํ ์ด๋์ ๊ฐ์ฅ ๋ฎ์ ์์ค์ QoS (Quality of Service)๊ฐ ์ค์ ๋ฉ๋๋ค.
์์ฝ์ ์์ฒญ๋ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ๋ ๋ฐ๋ฉด ํ ๋น๋ ๋ฐ ํ๋ ์ ํ์ ๋ฆฌ์์ค ์ ํ์ ๋ํ๋ด๋ฉฐ ์ด๋ ์์ฒญ๋ ๋ฆฌ์์ค๋ณด๋ค ๋์ ๊ฐ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์์ฒญ๊ณผ ์ ํ์ ์ฐจ์ด์ ๋ฐ๋ผ ์ค๋ฒ ์ปค๋ฐ ์์ค์ด ๊ฒฐ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปจํ ์ด๋์ 1Gi์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๊ณผ 2Gi์ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์ง์ ๋๋ฉด ๋ ธ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ 1Gi ์์ฒญ์ ๋ฐ๋ผ ์ปจํ ์ด๋๊ฐ ์์ฝ๋์ง๋ง ์ต๋ 2Gi๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ 200% ์ค๋ฒ ์ปค๋ฐ๋๋ ๊ฒ์ ๋๋ค.
8.6.2. Cluster Resource Override Operator๋ฅผ ์ฌ์ฉํ ํด๋ฌ์คํฐ ์์ค ์ค๋ฒ ์ปค๋ฐ
Cluster Resource Override Operator๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ ธ๋์์ ์ค๋ฒ ์ปค๋ฐ ์์ค์ ์ ์ดํ๊ณ ์ปจํ ์ด๋ ๋ฐ๋๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ์น์ธWebhook์ ๋๋ค. Operator๋ ํน์ ํ๋ก์ ํธ์ ๋ ธ๋๊ฐ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ํ๊ณ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ์ ๋ํด ์ ์ดํฉ๋๋ค.
๋ค์ ์น์
์ ์ค๋ช
๋๋๋ก OpenShift Container Platform ์ฝ์ ๋๋ CLI๋ฅผ ์ฌ์ฉํ์ฌ Cluster Resource Override Operator๋ฅผ ์ค์นํด์ผํฉ๋๋ค. ์ค์นํ๋ ๋์ ๋ค์ ์์ ํ์๋ ๊ฒ์ฒ๋ผ ์ค๋ฒ ์ปค๋ฐ ์์ค์ ์ค์ ํ๋ ClusterResourceOverride
์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค (CR)๋ฅผ ๋ง๋ญ๋๋ค.
apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster 1 spec: podResourceOverride: spec: memoryRequestToLimitPercent: 50 2 cpuRequestToLimitPercent: 25 3 limitCPUToMemoryPercent: 200 4 # ...
- 1
- ์ด๋ฆ์
instance
์ด์ด์ผ ํฉ๋๋ค. - 2
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์ง์ ๋์ด ์๊ฑฐ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ์ด ์ ํ ๋ฐฑ๋ถ์จ (1-100)๋ก ๋ฎ์ด ์ฐ๊ธฐ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 50์ ๋๋ค.
- 3
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ CPU ์ ํ์ด ์ง์ ๋์ด ์๊ฑฐ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ CPU ์์ฒญ์ด 1-100 ์ฌ์ด์ ์ ํ ๋ฐฑ๋ถ์จ๋ก ๋ฎ์ด ์ฐ๊ธฐ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 25์ ๋๋ค.
- 4
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์ง์ ๋์ด ์๊ฑฐ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ, CPU ์ ํ์ด ์ง์ ๋์ด ์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ฐฑ๋ถ์จ๋ก ๋ฎ์ด ์ฐ๊ธฐ๋ฉ๋๋ค. 1Gi์ RAM์ 100 %๋ก ์ค์ผ์ผ๋งํ๋ ๊ฒ์ 1 ๊ฐ์ CPU ์ฝ์ด์ ๊ฐ์ต๋๋ค. CPU ์์ฒญ์ ์ฌ์ ์ํ๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ฉ๋๋ค (์ค์ ๋ ๊ฒฝ์ฐ). ๊ธฐ๋ณธ๊ฐ์ 200์ ๋๋ค.
์ปจํ
์ด๋์ ์ ํ์ด ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ Cluster Resource Override Operator ๋ฎ์ด ์ฐ๊ธฐ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค. ํ๋ก์ ํธ๋ณ ๊ธฐ๋ณธ ์ ํ์ด ์๋ LimitRange
์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ฑฐ๋ Pod
์ฌ์์ ์ ํ์ ๊ตฌ์ฑํ์ฌ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ ์ฉํ์ญ์์ค.
๊ฐ ํ๋ก์ ํธ์ ๋ค์ ์คํ์ด์ค ์ค๋ธ์ ํธ์ ๋ค์ ๋ผ๋ฒจ์ ์ ์ฉํ์ฌ ํ๋ก์ ํธ๋ณ๋ก ๋ฎ์ด ์ฐ๊ธฐ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
apiVersion: v1 kind: Namespace metadata: # ... labels: clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true" # ...
Operator๋ ClusterResourceOverride
CR์ ๊ฐ์ํ๊ณ ClusterResourceOverride
์น์ธ Webhook๊ฐ operator์ ๋์ผํ ๋ค์ ์คํ์ด์ค์ ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
8.6.2.1. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Cluster Resource Override Operator ์ค์น
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Cluster Resource Override Operator๋ฅผ ์ค์นํ์ฌ ํด๋ฌ์คํฐ์ ์ค๋ฒ ์ปค๋ฐ์ ์ ์ดํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
์ปจํ
์ด๋์ ์ ํ์ด ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ Cluster Resource Override Operator์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ ์ฉํ๋ ค๋ฉด
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ์ ํ์ ์ง์ ํ๊ฑฐ๋Pod
์ฌ์์ ์ ํ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์ ์ฐจ
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ Cluster Resource Override Operator๋ฅผ ์ค์นํฉ๋๋ค.
OpenShift Container Platform ์น ์ฝ์์์ Home โ Projects๋ก ์ด๋ํฉ๋๋ค.
- Create Project๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
clusterresourceoverride-operator
๋ฅผ ํ๋ก์ ํธ ์ด๋ฆ์ผ๋ก ์ง์ ํฉ๋๋ค. - Create๋ฅผ ํด๋ฆญํฉ๋๋ค.
Operators โ OperatorHub๋ก ์ด๋ํฉ๋๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅํ Operator ๋ชฉ๋ก์์ ClusterResourceOverride Operator๋ฅผ ์ ํํ ๋ค์ Install์ ํด๋ฆญํฉ๋๋ค.
- Operator ์ค์น ํ์ด์ง์์ ์ค์น ๋ชจ๋์ ๋ํด ํด๋ฌ์คํฐ์ ํน์ ๋ค์์คํ์ด์ค๊ฐ ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- Installed Namespace์ ๋ํด clusterresourceoverride-operator๊ฐ ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- Update Channel ๋ฐ Approval Strategy๋ฅผ ์ ํํฉ๋๋ค.
- ์ค์น๋ฅผ ํด๋ฆญํฉ๋๋ค.
Installed Operators ํ์ด์ง์์ ClusterResourceOverride๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ClusterResourceOverride Operator ์ธ๋ถ ์ ๋ณด ํ์ด์ง์์ Create ClusterResourceOverride ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Create ClusterResourceOverride ํ์ด์ง์์ YAML ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ๊ณ YAML ํ ํ๋ฆฟ์ ํธ์งํ์ฌ ํ์์ ๋ฐ๋ผ ์ค๋ฒ ์ปค๋ฐ ๊ฐ์ ์ค์ ํฉ๋๋ค.
apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster 1 spec: podResourceOverride: spec: memoryRequestToLimitPercent: 50 2 cpuRequestToLimitPercent: 25 3 limitCPUToMemoryPercent: 200 4 # ...
- 1
- ์ด๋ฆ์
instance
์ด์ด์ผ ํฉ๋๋ค. - 2
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ 1-100 ์ฌ์ด์ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 50์ ๋๋ค.
- 3
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ CPU ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ 1-100 ์ฌ์ด์ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 25์ ๋๋ค.
- 4
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค (์ฌ์ฉ๋๋ ๊ฒฝ์ฐ). 1Gi์ RAM์ 100 %๋ก ์ค์ผ์ผ๋งํ๋ ๊ฒ์ 1 ๊ฐ์ CPU ์ฝ์ด์ ๊ฐ์ต๋๋ค. CPU ์์ฒญ์ ๋ฎ์ด ์ฐ๊ธฐํ๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ฉ๋๋ค (์ค์ ๋ ๊ฒฝ์ฐ). ๊ธฐ๋ณธ๊ฐ์ 200์ ๋๋ค.
- Create๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํด๋ฌ์คํฐ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ํ๋ฅผ ํ์ธํ์ฌ ์น์ธ Webhook์ ํ์ฌ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
- ClusterResourceOverride Operator ํ์ด์ง์์ cluster๋ฅผ ํด๋ฆญํฉ๋๋ค.
ClusterResourceOverride Details ํ์ด์ง์์ YAML ์ ํด๋ฆญํฉ๋๋ค. webhook ํธ์ถ ์
mutatingWebhookConfigurationRef
์น์ ์ด ํ์๋ฉ๋๋ค.apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"operator.autoscaling.openshift.io/v1","kind":"ClusterResourceOverride","metadata":{"annotations":{},"name":"cluster"},"spec":{"podResourceOverride":{"spec":{"cpuRequestToLimitPercent":25,"limitCPUToMemoryPercent":200,"memoryRequestToLimitPercent":50}}}} creationTimestamp: "2019-12-18T22:35:02Z" generation: 1 name: cluster resourceVersion: "127622" selfLink: /apis/operator.autoscaling.openshift.io/v1/clusterresourceoverrides/cluster uid: 978fc959-1717-4bd1-97d0-ae00ee111e8d spec: podResourceOverride: spec: cpuRequestToLimitPercent: 25 limitCPUToMemoryPercent: 200 memoryRequestToLimitPercent: 50 status: # ... mutatingWebhookConfigurationRef: 1 apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration name: clusterresourceoverrides.admission.autoscaling.openshift.io resourceVersion: "127621" uid: 98b3b8ae-d5ce-462b-8ab5-a729ea8f38f3 # ...
- 1
ClusterResourceOverride
์น์ธ Webhook ์ฐธ์กฐ
8.6.2.2. CLI๋ฅผ ์ฌ์ฉํ์ฌ Cluster Resource Override Operator ์ค์น
OpenShift Container Platform CLI๋ฅผ ์ฌ์ฉํ์ฌ Cluster Resource Override Operator๋ฅผ ์ค์นํ๋ฉด ํด๋ฌ์คํฐ์ ์ค๋ฒ ์ปค๋ฐ์ ์ ์ดํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
์ปจํ
์ด๋์ ์ ํ์ด ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ Cluster Resource Override Operator์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ ์ฉํ๋ ค๋ฉด
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ์ ํ์ ์ง์ ํ๊ฑฐ๋Pod
์ฌ์์ ์ ํ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์ ์ฐจ
CLI๋ฅผ ์ฌ์ฉํ์ฌ Cluster Resource Override Operator๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
Cluster Resource Override Operator์ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
Cluster Resource Override Operator์
Namespace
์ค๋ธ์ ํธ YAML ํ์ผ(์:cro-namespace.yaml
)์ ์์ฑํฉ๋๋ค.apiVersion: v1 kind: Namespace metadata: name: clusterresourceoverride-operator
๋ค์์คํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f cro-namespace.yaml
Operator ๊ทธ๋ฃน์ ์์ฑํฉ๋๋ค.
Cluster Resource Override Operator์
OperatorGroup
์ค๋ธ์ ํธ YAML ํ์ผ(์: cro-og.yaml)์ ์์ฑํฉ๋๋ค.apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: clusterresourceoverride-operator namespace: clusterresourceoverride-operator spec: targetNamespaces: - clusterresourceoverride-operator
Operator ๊ทธ๋ฃน์ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f cro-og.yaml
์๋ธ์คํฌ๋ฆฝ์ ์ ์์ฑํฉ๋๋ค.
Cluster Resource Override Operator์
Subscription
์ค๋ธ์ ํธ YAML ํ์ผ(์: cro-sub.yaml)์ ์์ฑํฉ๋๋ค.apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: clusterresourceoverride namespace: clusterresourceoverride-operator spec: channel: "4.10" name: clusterresourceoverride source: redhat-operators sourceNamespace: openshift-marketplace
์๋ธ์คํฌ๋ฆฝ์ ์ ์์ฑํฉ๋๋ค.
$ oc create -f <file-name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f cro-sub.yaml
clusterresourceoverride-operator
๋ค์ ์คํ์ด์ค์์ClusterResourceOverride
์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค (CR) ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.clusterresourceoverride-operator
๋ค์ ์คํ์ด์ค๋ก ๋ณ๊ฒฝํฉ๋๋ค.$ oc project clusterresourceoverride-operator
Cluster Resource Override Operator์
ClusterResourceOverride
์ค๋ธ์ ํธ YAML ํ์ผ (์: cro-cr.yaml)์ ๋ง๋ญ๋๋ค.apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster 1 spec: podResourceOverride: spec: memoryRequestToLimitPercent: 50 2 cpuRequestToLimitPercent: 25 3 limitCPUToMemoryPercent: 200 4
- 1
- ์ด๋ฆ์
instance
์ด์ด์ผ ํฉ๋๋ค. - 2
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ 1-100 ์ฌ์ด์ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 50์ ๋๋ค.
- 3
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ CPU ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ 1-100 ์ฌ์ด์ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 25์ ๋๋ค.
- 4
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค (์ฌ์ฉ๋๋ ๊ฒฝ์ฐ). 1Gi์ RAM์ 100 %๋ก ์ค์ผ์ผ๋งํ๋ ๊ฒ์ 1 ๊ฐ์ CPU ์ฝ์ด์ ๊ฐ์ต๋๋ค. CPU ์์ฒญ์ ๋ฎ์ด ์ฐ๊ธฐํ๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ฉ๋๋ค (์ค์ ๋ ๊ฒฝ์ฐ). ๊ธฐ๋ณธ๊ฐ์ 200์ ๋๋ค.
ClusterResourceOverride
์ค๋ธ์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.$ oc create -f <file-name>.yaml
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc create -f cro-cr.yaml
ํด๋ฌ์คํฐ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค์ ์ํ๋ฅผ ํ์ธํ์ฌ ์น์ธ Webhook์ ํ์ฌ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
$ oc get clusterresourceoverride cluster -n clusterresourceoverride-operator -o yaml
webhook ํธ์ถ ์
mutatingWebhookConfigurationRef
์น์ ์ด ํ์๋ฉ๋๋ค.์ถ๋ ฅ ์
apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"operator.autoscaling.openshift.io/v1","kind":"ClusterResourceOverride","metadata":{"annotations":{},"name":"cluster"},"spec":{"podResourceOverride":{"spec":{"cpuRequestToLimitPercent":25,"limitCPUToMemoryPercent":200,"memoryRequestToLimitPercent":50}}}} creationTimestamp: "2019-12-18T22:35:02Z" generation: 1 name: cluster resourceVersion: "127622" selfLink: /apis/operator.autoscaling.openshift.io/v1/clusterresourceoverrides/cluster uid: 978fc959-1717-4bd1-97d0-ae00ee111e8d spec: podResourceOverride: spec: cpuRequestToLimitPercent: 25 limitCPUToMemoryPercent: 200 memoryRequestToLimitPercent: 50 status: # ... mutatingWebhookConfigurationRef: 1 apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration name: clusterresourceoverrides.admission.autoscaling.openshift.io resourceVersion: "127621" uid: 98b3b8ae-d5ce-462b-8ab5-a729ea8f38f3 # ...
- 1
ClusterResourceOverride
์น์ธ Webhook ์ฐธ์กฐ
8.6.2.3. ํด๋ฌ์คํฐ ์์ค ์ค๋ฒ ์ปค๋ฐ ์ค์
Cluster Resource Override Operator์๋ Operator๊ฐ ์ค๋ฒ ์ปค๋ฐ์ ์ ์ดํด์ผ ํ๋ ๊ฐ ํ๋ก์ ํธ์ ๋ํ ๋ผ๋ฒจ ๋ฐ ClusterResourceOverride
์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค (CR)๊ฐ ํ์ํฉ๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
์ปจํ
์ด๋์ ์ ํ์ด ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ Cluster Resource Override Operator์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ ์ฉํ๋ ค๋ฉด
LimitRange
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ์ ํ์ ์ง์ ํ๊ฑฐ๋Pod
์ฌ์์ ์ ํ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์ ์ฐจ
ํด๋ฌ์คํฐ ์์ค ์ค๋ฒ ์ปค๋ฐ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
ClusterResourceOverride
CR์ ํธ์งํฉ๋๋ค.apiVersion: operator.autoscaling.openshift.io/v1 kind: ClusterResourceOverride metadata: name: cluster spec: podResourceOverride: spec: memoryRequestToLimitPercent: 50 1 cpuRequestToLimitPercent: 25 2 limitCPUToMemoryPercent: 200 3 # ...
- 1
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ 1-100 ์ฌ์ด์ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 50์ ๋๋ค.
- 2
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ CPU ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ 1-100 ์ฌ์ด์ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 25์ ๋๋ค.
- 3
- ์ ํ ์ฌํญ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ฎ์ด ์ฐ๊ธฐํ๋ ๊ฒฝ์ฐ ๋ฐฑ๋ถ์จ๋ก ์ง์ ํฉ๋๋ค (์ฌ์ฉ๋๋ ๊ฒฝ์ฐ). 1Gi์ RAM์ 100 %๋ก ์ค์ผ์ผ๋งํ๋ ๊ฒ์ 1 ๊ฐ์ CPU ์ฝ์ด์ ๊ฐ์ต๋๋ค. CPU ์์ฒญ์ ๋ฎ์ด ์ฐ๊ธฐํ๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ฉ๋๋ค (์ค์ ๋ ๊ฒฝ์ฐ). ๊ธฐ๋ณธ๊ฐ์ 200์ ๋๋ค.
Cluster Resource Override Operator๊ฐ ์ค๋ฒ ์ปค๋ฐ์ ์ ์ดํด์ผ ํ๋ ๊ฐ ํ๋ก์ ํธ์ ๋ค์ ์คํ์ด์ค ์ค๋ธ์ ํธ์ ๋ค์ ๋ผ๋ฒจ์ด ์ถ๊ฐ๋์๋์ง ํ์ธํฉ๋๋ค.
apiVersion: v1 kind: Namespace metadata: # ... labels: clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true" 1 # ...
- 1
- ์ด ๋ผ๋ฒจ์ ๊ฐ ํ๋ก์ ํธ์ ์ถ๊ฐํฉ๋๋ค.
8.6.3. ๋ ธ๋ ์์ค ์ค๋ฒ ์ปค๋ฐ
QoS (Quality of Service) ๋ณด์ฅ, CPU ์ ํ ๋๋ ๋ฆฌ์์ค ์์ฝ๊ณผ ๊ฐ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํน์ ๋ ธ๋์์ ์ค๋ฒ ์ปค๋ฐ์ ์ ์ดํ ์ ์์ต๋๋ค. ํน์ ๋ ธ๋ ๋ฐ ํน์ ํ๋ก์ ํธ์ ์ค๋ฒ ์ปค๋ฐ์ ๋นํ์ฑํํ ์๋ ์์ต๋๋ค.
8.6.3.1. ์ปดํจํ ๋ฆฌ์์ค ๋ฐ ์ปจํ ์ด๋ ์ดํด
์ปดํจํ ๋ฆฌ์์ค์ ๋ํ ๋ ธ๋ ์ ์ฉ ๋์์ ๋ฆฌ์์ค ์ ํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
8.6.3.1.1. ์ปจํ ์ด๋์ CPU ์๊ตฌ ์ดํด
์ปจํ ์ด๋์ ์์ฒญ๋ CPU์ ์์ด ๋ณด์ฅ๋๋ฉฐ ์ปจํ ์ด๋์์ ์ง์ ํ ํ๋๊น์ง ๋ ธ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ด๊ณผ CPU๋ฅผ ์ถ๊ฐ๋ก ์๋นํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ์ด๊ณผ CPU๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ๊ฐ ์ปจํ ์ด๋์์ ์์ฒญ๋ CPU ์์ ๋ฐ๋ผ CPU ์๊ฐ์ด ๋ถ๋ฐฐ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ ์ปจํ ์ด๋๊ฐ 500m์ CPU ์๊ฐ์ ์์ฒญํ๊ณ ๋ค๋ฅธ ์ปจํ ์ด๋๊ฐ 250m์ CPU ์๊ฐ์ ์์ฒญํ ๊ฒฝ์ฐ ๋ ธ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ถ๊ฐ CPU ์๊ฐ์ด 2:1 ๋น์จ๋ก ์ปจํ ์ด๋๊ฐ์ ๋ถ๋ฐฐ๋ฉ๋๋ค. ์ปจํ ์ด๋๊ฐ ์ ํ์ ์ง์ ํ ๊ฒฝ์ฐ ์ง์ ๋ ํ๋๋ฅผ ์ด๊ณผํ๋ ๋ง์ CPU๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ ํ๋ฉ๋๋ค. CPU ์์ฒญ์ Linux ์ปค๋์์ CFS ๊ณต์ ์ง์์ ์ฌ์ฉํ์ฌ ์ ์ฉ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก CPU ์ ํ์ Linux ์ปค๋์์ CFS ํ ๋น๋ ์ง์์ ์ฌ์ฉํ์ฌ 100ms ์ธก์ ๊ฐ๊ฒฉ์ผ๋ก ์ ์ฉ๋์ง๋ง ์ด ๊ธฐ๋ฅ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
8.6.3.1.2. ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ดํด
์ปจํ ์ด๋์ ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ ์์ด ๋ณด์ฅ๋ฉ๋๋ค. ์ปจํ ์ด๋๋ ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ์์ฒญ๋ ์์ ์ด๊ณผํ๋ฉด ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ์์ ์ข ๋ฃ๋ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์์คํ ์์ ๋๋ ๋ฐ๋ชฌ์ด ๋ ธ๋์ ๋ฆฌ์์ค ์์ฝ์ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋กํ์ง ์๋ ํ ์ปจํ ์ด๋๋ ์ข ๋ฃ๋์ง ์์ต๋๋ค. ์ปจํ ์ด๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ง์ ํ ๊ฒฝ์ฐ ์ ํ ์์ ์ด๊ณผํ๋ฉด ์ฆ์ ์ข ๋ฃ๋ฉ๋๋ค.
8.6.3.2. ์ค๋ฒ์ปค๋ฐ ๋ฐ QoS (Quality of Service) ํด๋์ค ์ดํด
์์ฒญ์ด ์๋ pod๊ฐ ์์ฝ๋์ด ์๊ฑฐ๋ ํด๋น ๋ ธ๋์ ๋ชจ๋ pod์์ ์ ํ์ ํฉ๊ณ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋จธ์ ์ฉ๋์ ์ด๊ณผํ๋ฉด ๋ ธ๋๊ฐ ์ค๋ฒ ์ปค๋ฐ๋ฉ๋๋ค.
์ค๋ฒ ์ปค๋ฐ๋ ํ๊ฒฝ์์๋ ๋ ธ๋์ pod๊ฐ ํน์ ์์ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ ธ๋๋ ๊ฐ pod์ ์ฐ์ ์์๋ฅผ ์ง์ ํด์ผํฉ๋๋ค. ์ด๋ฌํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ QoS (Quality of Service) ํด๋์ค๋ผ๊ณ ํฉ๋๋ค.
Pod๋ ์ฐ์ ์์๊ฐ ๊ฐ์ํ๋ ์ธ ๊ฐ์ง QoS ํด๋์ค ์ค ํ๋๋ก ์ง์ ๋ฉ๋๋ค.
์ฐ์ ์์ | ํด๋์ค ์ด๋ฆ | ์ค๋ช |
---|---|---|
1 (๊ฐ์ฅ ๋์) | Guaranteed | ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํด ์ ํ ๋ฐ ์์ฒญ(์ ํ ์ฌํญ)์ด ์ค์ ๋์ด ์๊ณ (0์ด ์๋) ๋์ผํ ๊ฒฝ์ฐ Pod๋ Guaranteed ๋ก ๋ถ๋ฅ๋ฉ๋๋ค. |
2 | Burstable | ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํด ์์ฒญ ๋ฐ ์ ํ(์ ํ ์ฌํญ)์ด ์ค์ ๋์ด ์๊ณ (0์ด ์๋) ๋์ผํ์ง ์์ ๊ฒฝ์ฐ Pod๋ Burstable ๋ก ๋ถ๋ฅ๋ฉ๋๋ค. |
3 (๊ฐ์ฅ ๋ฎ์) | BestEffort | ๋ฆฌ์์ค์ ๋ํ ์์ฒญ ๋ฐ ์ ํ์ด ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ Pod๋ BestEffort ๋ก ๋ถ๋ฅ๋ฉ๋๋ค. |
๋ฉ๋ชจ๋ฆฌ๋ ์์ถํ ์ ์๋ ๋ฆฌ์์ค์ด๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ ์ปจํ ์ด๋๊ฐ ๋จผ์ ์ข ๋ฃ๋ฉ๋๋ค.
- Guaranteed ์ปจํ ์ด๋๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์ปจํ ์ด๋๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ ํ์ ์ด๊ณผํ๊ฑฐ๋ ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๊ณ ์ ๊ฑฐํ ์ ์๋ ์ฐ์ ์์๊ฐ ๋ฎ์ ์ปจํ ์ด๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ์ข ๋ฃ๋ฉ๋๋ค.
- ์์คํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ์ ์๋ Burstable ์ปจํ ์ด๋๋ ์ ํ์ ์ด๊ณผํ๊ณ ๋ค๋ฅธ BestEffort ์ปจํ ์ด๋๊ฐ ์์ผ๋ฉด ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
- BestEffort ์ปจํ ์ด๋๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ ์ปจํ ์ด๋๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ด๋ฌํ ์ปจํ ์ด๋์ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ข ๋ฃ๋ฉ๋๋ค.
8.6.3.2.1. Quality of Service (QoS) ๊ณ์ธต์์ ๋ฉ๋ชจ๋ฆฌ ์์ฝ ๋ฐฉ๋ฒ
qos-reserved
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ QoS ์์ค์์ pod์ ์์ฝ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฑ๋ถ์จ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์์ฒญ๋ ๋ฆฌ์์ค๋ฅผ ์์ฝํ์ฌ ํ์ OoS ํด๋์ค์ pod๊ฐ ๊ณ ๊ธ QoS ํด๋์ค์ pod์์ ์์ฒญํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ํฉ๋๋ค.
OpenShift Container Platform์ ๋ค์๊ณผ ๊ฐ์ด qos-reserved
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
qos-reserved=memory=100%
๊ฐ์Burstable
๋ฐBestEffort
QoS ํด๋์ค๊ฐ ๋ ๋์ QoS ํด๋์ค์์ ์์ฒญํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ์ง ๋ชปํ๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํดBestEffort
๋ฐBurstable
์ํฌ๋ก๋์์ OOM์ด ๋ฐ์ํ ์ํ์ด ์ฆ๊ฐ๋์ดGuaranteed
๋ฐBurstable
์ํฌ๋ก๋์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค์ ๋ณด์ฅ ์์ค์ ๋์ด๋ ๊ฒ์ด ์ฐ์ ๋ฉ๋๋ค. -
qos-reserved=memory=50%
๊ฐ์Burstable
๋ฐBestEffort
QoS ํด๋์ค๊ฐ ๋ ๋์ QoS ํด๋์ค์์ ์์ฒญํ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ฐ์ ์๋นํ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค. -
qos-reserved=memory=0%
๊ฐ์Burstable
๋ฐBestEffort
QoS ํด๋์ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ ๋น ๊ฐ๋ฅํ ์ต๋ ๋ ธ๋ ์๊น์ง ์๋นํ๋ ๊ฒ์ ํ์ฉํ์ง๋งGuaranteed
์ํฌ๋ก๋๊ฐ ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ์ง ๋ชปํ ์ํ์ด ๋์์ง๋๋ค. ์ด๋ก ์ธํด ์ด ๊ธฐ๋ฅ์ ๋นํ์ฑํ๋์ด ์์ต๋๋ค.
8.6.3.3. ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ QOS ์ดํด
QoS (Quality of Service) ๋ณด์ฅ์ ์ ์งํ๊ธฐ ์ํด ๋ ธ๋์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์์ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ ธ๋์ ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ์ด๊ณผ ๊ตฌ๋ ํ์ฌ Pod ๋ฐฐํฌ ์ค์ Kubernetes ์ค์ผ์ค๋ฌ๊ฐ ๋ง๋๋ ๋ฆฌ์์ค์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด 2 ๊ฐ์ Guaranteed pod๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋๋ฌํ๋ฉด ๊ฐ ์ปจํ ์ด๋๊ฐ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ ์ค์ ๊ณต๊ฐ์ด ์ถฉ๋ถํ์ง ์์ผ๋ฉด ์์คํ ์ ์ด๊ณผ ๊ตฌ๋ ์ผ๋ก ์ธํด Pod์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
์ค์์ ๋นํ์ฑํํ์ง ๋ชปํ๋ฉด ๋ ธ๋์์ MemoryPressure๊ฐ ๋ฐ์ํ๊ณ ์์์ ์ธ์ํ์ง ๋ชปํ์ฌ Pod๊ฐ ์ค์ผ์ค๋ง ์์ฒญ์์ ๋ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ Pod๋ฅผ ์ถ๊ฐ๋ก ๋๋ฆฌ๊ธฐ ์ํด ์ถ๊ฐ Pod๊ฐ ๋ ธ๋์ ๋ฐฐ์น๋์ด ๊ถ๊ทน์ ์ผ๋ก ์์คํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ (OOM) ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ํ์ด ๋์์ง๋๋ค.
์ค์์ด ํ์ฑํ๋๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ฆฌ์์ค ๋ถ์กฑ ์ฒ๋ฆฌ ์ ๊ฑฐ ์๊ณ ๊ฐ์ด ์์๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค. ๋ฆฌ์์ค ๋ถ์กฑ ์ฒ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ์์ Pod๋ฅผ ๋ ธ๋์์ ์ ๊ฑฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ๊ฐ ์๋ ๋ค๋ฅธ ๋ ธ๋์์ ์ผ์ ์ ์ฌ์กฐ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
8.6.3.4. ๋ ธ๋ ๊ณผ๋ค ํ ๋น ์ดํด
์ค๋ฒ ์ปค๋ฐ๋ ํ๊ฒฝ์์๋ ์ต์์ ์์คํ ๋์์ ์ ๊ณตํ๋๋ก ๋ ธ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ ธ๋๊ฐ ์์๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํ ์ปค๋ ์กฐ์ ๊ฐ๋ฅํ ํ๋๊ทธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋ฉ๋๋ค. ์ปค๋์ ์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ง๋์ง ์๋ ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์คํจํด์๋ ์๋ฉ๋๋ค.
์ด ๋์์ ํ์ธํ๊ธฐ ์ํด OpenShift Container Platform์ vm.overcommit_memory
๋งค๊ฐ๋ณ์๋ฅผ 1
๋ก ์ค์ ํ์ฌ ๊ธฐ๋ณธ ์ด์ ์ฒด์ ์ค์ ์ ์ฌ์ ์ํ์ฌ ์ปค๋์ด ํญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค๋ฒ ์ปค๋ฐํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
OpenShift Container Platform์ vm.panic_on_oom
๋งค๊ฐ๋ณ์๋ฅผ 0
์ผ๋ก ์ค์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ ์ปค๋์ด ํจ๋ ์ํ๊ฐ๋์ง ์๋๋ก ๊ตฌ์ฑํฉ๋๋ค. 0์ผ๋ก ์ค์ ํ๋ฉด ์ปค๋์์ OOM (๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ) ์ํ์ผ ๋ oom_killer๋ฅผ ํธ์ถํ์ฌ ์ฐ์ ์์์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํฉ๋๋ค.
๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ํ์ฌ ์ค์ ์ ๋ณผ ์ ์์ต๋๋ค.
$ sysctl -a |grep commit
์ถ๋ ฅ ์
#... vm.overcommit_memory = 0 #...
$ sysctl -a |grep panic
์ถ๋ ฅ ์
#... vm.panic_on_oom = 0 #...
์์ ํ๋๊ทธ๋ ์ด๋ฏธ ๋ ธ๋์ ์ค์ ๋์ด ์์ด์ผํ๋ฉฐ ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๊ฐ ๋ ธ๋์ ๋ํด ๋ค์ ๊ตฌ์ฑ์ ์ํํ ์๋ ์์ต๋๋ค.
- CPU CFS ํ ๋น๋์ ์ฌ์ฉํ์ฌ CPU ์ ํ ๋นํ์ฑํ ๋๋ ์คํ
- ์์คํ ํ๋ก์ธ์ค์ ๋ฆฌ์์ค ์์ฝ
- Quality of Service (QoS) ๊ณ์ธต์์์ ๋ฉ๋ชจ๋ฆฌ ์์ฝ
8.6.3.5. CPU CFS ํ ๋น๋์ ์ฌ์ฉํ์ฌ CPU ์ ํ ๋นํ์ฑํ ๋๋ ์คํ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ ธ๋๋ Linux ์ปค๋์์ CFS (Completely Fair Scheduler) ํ ๋น๋ ์ง์์ ์ฌ์ฉํ์ฌ ์ง์ ๋ CPU ์ ํ์ ์คํํฉ๋๋ค.
CPU ์ ํ ์ ์ฉ์ ๋นํ์ฑํํ ๊ฒฝ์ฐ ๋ ธ๋์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ์ปจํ ์ด๋์ CPU ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ ์์ฒญ์ Linux ์ปค๋์ CFS ๊ณต์ ๋ฅผ ํตํด ๊ณ์ ๊ฐ์ ์ ์ฉ๋ฉ๋๋ค.
- ์ปจํ ์ด๋์ CPU ์์ฒญ์ ์์ง๋ง CPU ์ ํ์ด ์๋ ๊ฒฝ์ฐ CPU ์์ฒญ ๊ธฐ๋ณธ๊ฐ์ด ์ง์ ๋ CPU ์ ํ์ผ๋ก ์ค์ ๋๋ฉฐ Linux ์ปค๋์ CFS ๊ณต์ ๋ฅผ ํตํด ๊ฐ์ ์ ์ฉ๋ฉ๋๋ค.
- ์ปจํ ์ด๋์ CPU ์์ฒญ ๋ฐ ์ ํ์ด ๋ชจ๋ ์๋ ๊ฒฝ์ฐ Linux ์ปค๋์ CFS ๊ณต์ ๋ฅผ ํตํด CPU ์์ฒญ์ด ๊ฐ์ ์ ์ฉ๋๋ฉฐ CPU ์ ํ์ ๋ ธ๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
๋ค์ ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ๊ตฌ์ฑํ ๋ ธ๋ ์ ํ์ ์ ์
MachineConfigPool
CRD์ ์ฐ๊ด๋ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.$ oc edit machineconfigpool <name>
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ oc edit machineconfigpool worker
์ถ๋ ฅ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: creationTimestamp: "2022-11-16T15:34:25Z" generation: 4 labels: pools.operator.machineconfiguration.openshift.io/worker: "" 1 name: worker
- 1
- ๋ ์ด๋ธ์ด Labels ์๋์ ํ์๋ฉ๋๋ค.
์์ ์ ๋ณด๋ผ๋ฒจ์ด ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํค/๊ฐ ์์ ์ถ๊ฐํฉ๋๋ค.
$ oc label machineconfigpool worker custom-kubelet=small-pods
์ ์ฐจ
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ํ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค (CR)๋ฅผ ๋ง๋ญ๋๋ค.
CPU ์ ํ ๋นํ์ฑํ๋ฅผ ์ํ ์ค์ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: disable-cpu-units 1 spec: machineConfigPoolSelector: matchLabels: pools.operator.machineconfiguration.openshift.io/worker: "" 2 kubeletConfig: cpuCfsQuota: false 3
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ CR์ ์์ฑํฉ๋๋ค.
$ oc create -f <file_name>.yaml
8.6.3.6. ์์คํ ํ๋ก์ธ์ค์ ๋ฆฌ์์ค ์์ฝ
๋ณด๋ค ์์ ์ ์ธ ์ค์ผ์ค๋ง์ ์ ๊ณตํ๊ณ ๋ ธ๋ ๋ฆฌ์์ค ์ค๋ฒ ์ปค๋ฐ์ ์ต์ํํ๊ธฐ ์ํด ๊ฐ ๋ ธ๋๋ ํด๋ฌ์คํฐ๊ฐ ์๋ํ ์ ์๋๋ก ๋ ธ๋์์ ์คํํ๋ ๋ฐ ํ์ํ ์์คํ ๋ฐ๋ชฌ์์ ์ฌ์ฉํ ๋ฆฌ์์ค์ ์ผ๋ถ๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. ํนํ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์์ถ ๋ถ๊ฐ๋ฅํ ๋ฆฌ์์ค์ ๊ฒฝ์ฐ ๋ฆฌ์์ค๋ฅผ ์์ฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์ฐจ
pod๊ฐ ์๋ ํ๋ก์ธ์ค์ ๋ฆฌ์์ค๋ฅผ ๋ช ์์ ์ผ๋ก ์์ฝํ๋ ค๋ฉด ์ค์ผ์ค๋ง์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ์ง์ ํ์ฌ ๋ ธ๋ ๋ฆฌ์์ค๋ฅผ ํ ๋นํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ ธ๋์ ๋ฆฌ์์ค ํ ๋น์ ์ฐธ์กฐํ์ญ์์ค.
8.6.3.7. ๋ ธ๋์ ์ค๋ฒ ์ปค๋ฐ ๋นํ์ฑํ
์ด๋ฅผ ํ์ฑํํ๋ฉด ๊ฐ ๋ ธ๋์์ ์ค๋ฒ ์ปค๋ฐ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
์ ์ฐจ
๋ ธ๋์์ ์ค๋ฒ ์ปค๋ฐ์ ๋นํ์ฑํํ๋ ค๋ฉด ํด๋น ๋ ธ๋์์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ sysctl -w vm.overcommit_memory=0
8.6.4. ํ๋ก์ ํธ ์์ค ์ ํ
์ค๋ฒ ์ปค๋ฐ์ ์ ์ดํ๊ธฐ ์ํด ์ค๋ฒ ์ปค๋ฐ์ ์ด๊ณผํ ์์๋ ํ๋ก์ ํธ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ ํ๊ณผ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ์ฌ ํ๋ก์ ํธ ๋ณ ๋ฆฌ์์ค ์ ํ ๋ฒ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ์์ค ๋ฆฌ์์ค ์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋๋ ํน์ ํ๋ก์ ํธ์ ์ค๋ฒ ์ปค๋ฐ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
8.6.4.1. ํ๋ก์ ํธ์ ์ค๋ฒ ์ปค๋ฐ ๋นํ์ฑํ
์ด๋ฅผ ํ์ฑํํ๋ฉด ํ๋ก์ ํธ ๋ณ ์ค๋ฒ ์ปค๋ฐ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋ฒ ์ปค๋ฐ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ธํ๋ผ ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ ์ฐจ
ํ๋ก์ ํธ์์ ์ค๋ฒ ์ปค๋ฐ์ ๋นํ์ฑํํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
๋ค์์คํ์ด์ค ์ค๋ธ์ ํธ๋ฅผ ํธ์งํ์ฌ ๋ค์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
apiVersion: v1 kind: Namespace metadata: annotations: quota.openshift.io/cluster-resource-override-enabled: "false" 1 # ...
- 1
- ์ด ์ฃผ์์
false
๋ก ์ค์ ํ๋ฉด ์ด ๋ค์์คํ์ด์ค์ ๋ํ ์ค๋ฒ ์ปค๋ฐ์ด ๋นํ์ฑํ๋ฉ๋๋ค.
8.6.5. ์ถ๊ฐ ๋ฆฌ์์ค
8.7. FeatureGates๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Container Platform ๊ธฐ๋ฅ ํ์ฑํ
๊ด๋ฆฌ์๋ Feature Gate ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ์ธํธ์ ์ผ๋ถ๊ฐ ์๋ ๊ธฐ๋ฅ์ ํ์ฑํํ ์ ์์ต๋๋ค.
8.7.1. FeatureGate ์ดํด
FeatureGate
์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค (CR)๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์์ ํน์ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค. ๊ธฐ๋ฅ ์ธํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ง ์์ OpenShift Container Platform ๊ธฐ๋ฅ ์ปฌ๋ ์
์
๋๋ค.
FeatureGate
CR์ ์ฌ์ฉํ์ฌ ์ค์ ํ ๋ค์ ๊ธฐ๋ฅ์ ํ์ฑํํ ์ ์์ต๋๋ค.
TechPreviewNoUpgrade
. ์ด ๊ธฐ๋ฅ ์ธํธ๋ ํ์ฌ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ํ์ ์งํฉ์ ๋๋ค. ์ด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋์ ํด๋ฌ์คํฐ์์ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ ๋์ ํ ์คํธ ํด๋ฌ์คํฐ์์ ์ด๋ฌํ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ํ์ฑํํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ๋ฉด ์ทจ์ํ ์ ์์ผ๋ฉฐ ๋ง์ด๋ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ด ๊ธฐ๋ฅ ์ธํธ๋ ํ๋ก๋์ ํด๋ฌ์คํฐ์์๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค.์ฃผ์ํด๋ฌ์คํฐ์์
TechPreviewNoUpgrade
๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ๋ฉด ์ทจ์ํ ์ ์์ผ๋ฉฐ ๋ง์ด๋ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ํ๋ก๋์ ํด๋ฌ์คํฐ์์ ์ด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํด์๋ ์ ๋ฉ๋๋ค.๊ธฐ๋ฅ ์ธํธ๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ํ๋ฆฌ๋ทฐ ๊ธฐ๋ฅ์ ํ์ฑํํ ์ ์์ต๋๋ค.
- Microsoft Azure File CSI Driver Operator. Microsoft Azure File Storage์ฉ CSI(Container Storage Interface) ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ PV(์๊ตฌ ๋ณผ๋ฅจ)๋ฅผ ํ๋ก๋น์ ๋ํ ์ ์์ต๋๋ค.
CSI ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ง์๋๋ in-tree ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ๋๋ฑํ CSI(Container Storage Interface) ๋๋ผ์ด๋ฒ๋ก ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ํ์ฑํํฉ๋๋ค. ๋ค์์ ์ํด ์ง์๋ฉ๋๋ค.
- AWS(Amazon Web Services) EBS(Elastic Block Storage)
- OpenStack Cinder
- Azure Disk
- Azure File
- Google Cloud Platform ์๊ตฌ ๋์คํฌ(CSI)
- VMware vSphere
Cluster Cloud Controller Manager Operator. in-tree ํด๋ผ์ฐ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ Cluster Cloud Controller Manager Operator๋ฅผ ํ์ฑํํฉ๋๋ค. ๋ค์์ ์ํ ๊ธฐ์ ํ๋ฆฌ๋ทฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Alibaba Cloud
- AWS(Amazon Web Services)
- GCP(Google Cloud Platform)
- IBM Cloud
- Microsoft Azure
- Red Hat OpenStack Platform (RHOSP)
- VMware vSphere
- ๊ณต์ ๋ฆฌ์์ค CSI ๋๋ผ์ด๋ฒ
- OpenShift Container Platform ๋น๋ ์์คํ ์ ๋ํ CSI ๋ณผ๋ฅจ ์ง์
- ๋ ธ๋์ ์ค์ ๋ฉ๋ชจ๋ฆฌ
์ถ๊ฐ ๋ฆฌ์์ค
TechPreviewNoUpgrade
๊ธฐ๋ฅ ๊ฒ์ดํธ์์ ํ์ฑํํ ๊ธฐ๋ฅ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ํญ๋ชฉ์ ์ฐธ์กฐํ์ญ์์ค.
8.7.2. ์น ์ฝ์์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ ์ธํธ ํ์ฑํ
OpenShift Container Platform ์น ์ฝ์์ ์ฌ์ฉํ์ฌ FeatureGate
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ํธ์งํ์ฌ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ ๋ํด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
์ ์ฐจ
๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- OpenShift Container Platform ์น ์ฝ์์์ ๊ด๋ฆฌ โ ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค ์ ์ ํ์ด์ง๋ก ์ ํํฉ๋๋ค.
- ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค ์ ์ ํ์ด์ง์์ FeatureGate๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ์ ์ธ๋ถ ์ ๋ณด ํ์ด์ง์์ ์ธ์คํด์ค ํญ์ ํด๋ฆญํฉ๋๋ค.
- ํด๋ฌ์คํฐ ๊ธฐ๋ฅ ๊ฒ์ดํธ๋ฅผ ํด๋ฆญํ ๋ค์ YAML ํญ์ ํด๋ฆญํฉ๋๋ค.
ํน์ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ํด๋ฌ์คํฐ ์ธ์คํด์ค๋ฅผ ํธ์งํฉ๋๋ค.
์ฃผ์ํด๋ฌ์คํฐ์์
TechPreviewNoUpgrade
๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ๋ฉด ์ทจ์ํ ์ ์์ผ๋ฉฐ ๋ง์ด๋ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ํ๋ก๋์ ํด๋ฌ์คํฐ์์ ์ด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํด์๋ ์ ๋ฉ๋๋ค.FeatureGate ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค ์ํ
apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster 1 # ... spec: featureSet: TechPreviewNoUpgrade 2
๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ๋ฉด ์ ๋จธ์ ๊ตฌ์ฑ์ด ์์ฑ๋๊ณ ๋จธ์ ๊ตฌ์ฑ ํ์ด ์ ๋ฐ์ดํธ๋๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๋ ๋์ ๊ฐ ๋ ธ๋์ ์ค์ผ์ค๋ง์ด ๋นํ์ฑํ๋ฉ๋๋ค.
๊ฒ์ฆ
๋
ธ๋๊ฐ ์ค๋น ์ํ๋ก ๋์๊ฐ ํ ๋
ธ๋์ kubelet.conf
ํ์ผ์ ํ์ธํ์ฌ ๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ์น ์ฝ์์ ๊ด๋ฆฌ์ ๊ด์ ์์ Compute โ Nodes ๋ก ์ด๋ํฉ๋๋ค.
- ๋ ธ๋๋ฅผ ์ ํํฉ๋๋ค.
- ๋ ธ๋ ์ธ๋ถ ์ ๋ณด ํ์ด์ง์์ ํฐ๋ฏธ๋ ์ ํด๋ฆญํฉ๋๋ค.
ํฐ๋ฏธ๋ ์ฐฝ์์ root ๋๋ ํ ๋ฆฌ๋ฅผ
/host
:๋ก ๋ณ๊ฒฝํฉ๋๋ค.sh-4.2# chroot /host
kubelet.conf
ํ์ผ์ ํ์ธํฉ๋๋ค.sh-4.2# cat /etc/kubernetes/kubelet.conf
์ํ ์ถ๋ ฅ
# ... featureGates: InsightsOperatorPullingSCA: true, LegacyNodeRoleBehavior: false # ...
true
๋ก ๋์ด๋ ๊ธฐ๋ฅ์ ํด๋ฌ์คํฐ์์ ํ์ฑํ๋ฉ๋๋ค.์ฐธ๊ณ๋์ด๋ ๊ธฐ๋ฅ์ OpenShift Container Platform ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
8.7.3. CLI๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ ์ธํธ ํ์ฑํ
OpenShift CLI(oc
)๋ฅผ ์ฌ์ฉํ์ฌ FeatureGate
CR(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค)์ ํธ์งํ์ฌ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ ๋ํด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
-
OpenShift CLI(
oc
)๊ฐ ์ค์น๋์ด ์์ต๋๋ค.
์ ์ฐจ
๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
cluster
๋ผ๋FeatureGate
CR์ ํธ์งํฉ๋๋ค.$ oc edit featuregate cluster
์ฃผ์ํด๋ฌ์คํฐ์์
TechPreviewNoUpgrade
๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํ๋ฉด ์ทจ์ํ ์ ์์ผ๋ฉฐ ๋ง์ด๋ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ํ๋ก๋์ ํด๋ฌ์คํฐ์์ ์ด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฑํํด์๋ ์ ๋ฉ๋๋ค.FeatureGate ์ฌ์ฉ์ ์ง์ ๋ฆฌ์์ค ์ํ
apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster 1 # ... spec: featureSet: TechPreviewNoUpgrade 2
๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ๋ฉด ์ ๋จธ์ ๊ตฌ์ฑ์ด ์์ฑ๋๊ณ ๋จธ์ ๊ตฌ์ฑ ํ์ด ์ ๋ฐ์ดํธ๋๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๋ ๋์ ๊ฐ ๋ ธ๋์ ์ค์ผ์ค๋ง์ด ๋นํ์ฑํ๋ฉ๋๋ค.
๊ฒ์ฆ
๋
ธ๋๊ฐ ์ค๋น ์ํ๋ก ๋์๊ฐ ํ ๋
ธ๋์ kubelet.conf
ํ์ผ์ ํ์ธํ์ฌ ๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ์น ์ฝ์์ ๊ด๋ฆฌ์ ๊ด์ ์์ Compute โ Nodes ๋ก ์ด๋ํฉ๋๋ค.
- ๋ ธ๋๋ฅผ ์ ํํฉ๋๋ค.
- ๋ ธ๋ ์ธ๋ถ ์ ๋ณด ํ์ด์ง์์ ํฐ๋ฏธ๋ ์ ํด๋ฆญํฉ๋๋ค.
ํฐ๋ฏธ๋ ์ฐฝ์์ root ๋๋ ํ ๋ฆฌ๋ฅผ
/host
:๋ก ๋ณ๊ฒฝํฉ๋๋ค.sh-4.2# chroot /host
kubelet.conf
ํ์ผ์ ํ์ธํฉ๋๋ค.sh-4.2# cat /etc/kubernetes/kubelet.conf
์ํ ์ถ๋ ฅ
# ... featureGates: InsightsOperatorPullingSCA: true, LegacyNodeRoleBehavior: false # ...
true
๋ก ๋์ด๋ ๊ธฐ๋ฅ์ ํด๋ฌ์คํฐ์์ ํ์ฑํ๋ฉ๋๋ค.์ฐธ๊ณ๋์ด๋ ๊ธฐ๋ฅ์ OpenShift Container Platform ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
9์ฅ. ๋คํธ์ํฌ ์ฃ์ง์ ์๊ฒฉ ์์ ์ ๋ ธ๋
9.1. ๋คํธ์ํฌ ์ฃ์ง์์ ์๊ฒฉ ์์ ์ ๋ ธ๋ ์ฌ์ฉ
๋คํธ์ํฌ ์ฃ์ง์ ์๋ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ OpenShift Container Platform ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด ์ฃผ์ ์์๋ ํด๋น ๋ ธ๋๋ฅผ ์๊ฒฉ ์์ ์ ๋ ธ๋๋ผ๊ณ ํฉ๋๋ค. ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์๋ ์ผ๋ฐ ํด๋ฌ์คํฐ์์๋ ์จํ๋ ๋ฏธ์ค ๋ง์คํฐ ๋ฐ ์์ ์ ๋ ธ๋๋ฅผ ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์์น์ ์๋ ์์ ์ ๋ ธ๋์ ๊ฒฐํฉํฉ๋๋ค. ์ด ์ฃผ์ ๋ ์๊ฒฉ ์์ ์ ๋ ธ๋ ์ฌ์ฉ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ง์นจ์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฒ์ผ๋ก, ํน์ ๊ตฌ์ฑ ์ธ๋ถ ์ ๋ณด๋ ํฌํจํ์ง ์์ต๋๋ค.
ํต์ , ์๋งค, ์ ์กฐ, ์ ๋ถ์ ๊ฐ์ด ๋ค์ํ ์ ๊ณ์์ ์๊ฒฉ ์์ ์ ๋ ธ๋์์ ๋ฐฐํฌ ํจํด์ ์ฌ์ฉํ๋ ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๊ฒฉ ์์ ์ ๋ ธ๋๋ฅผ Kubernetes ์์ญ์ ๊ฒฐํฉํ์ฌ ํ๋ก์ ํธ ๋ฐ ์ํฌ๋ก๋๋ฅผ ๋ถ๋ฆฌํ๊ณ ๊ฒฉ๋ฆฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๋๊ธฐ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๊ฐํ์ ์ผ๋ก ๋์ด์ง๋ฉฐ ๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์๋ ํด๋ฌ์คํฐ์ ๋ฌธ์ ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋คํธ์ํฌ ๋ถ๋ฆฌ: OpenShift Container Platform ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์๋ก ํต์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ์๊ฒฉ ์์ ์ ๋ ธ๋ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ก ์ธํด ๋คํธ์ํฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์ด๋ฌํ ํต์ ์ ๋ฐฉํดํ ์ ์์์ต๋๋ค. OpenShift Container Platform์์ ๋คํธ์ํฌ ๋ถ๋ฆฌ์ ์๋ตํ๋ ๋ฐฉ๋ฒ ๋ฐ ํด๋ฌ์คํฐ์ ๋ํ ์ํฅ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ด์ฉ์ ์๊ฒฉ ์์ ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋ถ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ์ ์ : ์ปจํธ๋กค ํ๋ ์ธ ๋ฐ ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ๋ณ๋์ ์์น์ ์๊ธฐ ๋๋ฌธ์ ์๊ฒฉ ์์น ๋๋ ์ด ๋ ์ฌ์ด์ ์ด๋ ์ง์ ์์ ์ ์ ์ด ๋ฐ์ํ๋ฉด ํด๋ฌ์คํฐ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. OpenShift Container Platform์์ ๋ ธ๋ ์ ์ ์ ๋์ํ๋ ๋ฐฉ๋ฒ๊ณผ ํด๋ฌ์คํฐ์ ๋ฏธ์น๋ ์ํฅ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ด์ฉ์ ์๊ฒฉ ์์ ์ ๋ ธ๋์ ์ ์ ์ ์ฐธ์กฐํ์ญ์์ค.
- ๋๊ธฐ ์๊ฐ ๊ธ์ฆ ๋๋ ์ผ์์ ์ธ ์ฒ๋ฆฌ๋ ๊ฐ์: ๋ชจ๋ ๋คํธ์ํฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ฌ์คํฐ์ ์๊ฒฉ ์์ ์ ๋ ธ๋ ๊ฐ์ ๋คํธ์ํฌ ์กฐ๊ฑด์ด ๋ณ๊ฒฝ๋๋ฉด ํด๋ฌ์คํฐ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ํ์ ์ํฉ์ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.
์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์๋ ํด๋ฌ์คํฐ๋ฅผ ๊ณํํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ ํ ์ฌํญ์ ์ ์ํ์ญ์์ค.
- OpenShift Container Platform์ ์จํ๋ ๋ฏธ์ค ํด๋ฌ์คํฐ์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ฅผ ์ฌ์ฉํ๋ ์๊ฒฉ ์์ ์ ๋ ธ๋๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
- ํน์ Kubernetes ์์ญ์์ ๋ค๋ฅธ Kubernetes ์์ญ์ผ๋ก ์ํฌ๋ก๋๋ฅผ ์ด๋ํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ญ์์ ์ฌ์ฉํ ์ ์๋ ํน์ ์ ํ์ ๋ฉ๋ชจ๋ฆฌ ๋ฑ ์์คํ ๋ฐ ํ๊ฒฝ ๋ฌธ์ ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํ๋ก์ ๋ฐ ๋ฐฉํ๋ฒฝ์ ์ด ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์ถ๊ฐ ์ ํ ์ฌํญ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ฐฉํ๋ฒฝ ๊ตฌ์ฑ๊ณผ ๊ฐ์ ์ ํ ์ฌํญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ด๋ จ OpenShift Container Platform ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋คํธ์ํฌ ์ฃ์ง ๋ ธ๋ ๊ฐ์ L2/L3 ์์ค ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๊ตฌ์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
9.1.1. ์๊ฒฉ ์์ ์ ๋ ธ๋ ์ถ๊ฐ
ํด๋ฌ์คํฐ์ ์๊ฒฉ ์์ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ณ ๋ ค ์ฌํญ์ด ํ์ํฉ๋๋ค.
- ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋ชจ๋ ์๊ฒฉ ์์ ์ ๋ ธ๋ ๊ฐ์ ํธ๋ํฝ์ ๋ผ์ฐํ ํ๋ ค๋ฉด ๊ฒฝ๋ก ๋๋ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด๊ฐ ์ ์์น์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
- ์ปจํธ๋กค ํ๋ ์ธ์ Ingress VIP๋ฅผ ๋ฐฐ์นํด์ผ ํฉ๋๋ค.
- ์ฌ์ฉ์ ํ๋ก๋น์ ๋ ์ธํ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ์์ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ค๋ฅธ ์์ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
-
์ค์น ์ ์ค์น ์ ์ค์น ๊ด๋ฆฌ์ ํ๋ก๋น์ ๋ ํด๋ฌ์คํฐ์ ์๊ฒฉ ์์
์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ค์น ์ ์
install-config.yaml
ํ์ผ์ ๊ฐ ์์ ์ ๋ ธ๋์ ์๋ธ๋ท์ ์ง์ ํฉ๋๋ค. DHCP ์๋ฒ์๋ ์ถ๊ฐ ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค. ์๊ฒฉ ์์ ์ ๋ ธ๋๋ ๋ก์ปฌ ํ๋ก๋น์ ๋ ๋คํธ์ํฌ์ ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ๊ฐ์ ๋ฏธ๋์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. -
provisioning ๋คํธ์ํฌ์ ํจ๊ป ๋ฐฐํฌ๋ ์ค์น ๊ด๋ฆฌ์ ํ๋ก๋น์ ๋ ํด๋ฌ์คํฐ์ ์๊ฒฉ ์์
์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด
install-config.yaml
ํ์ผ์์virtualMediaViaExternalNetwork
ํ๋๊ทธ๊ฐtrue
๋ก ์ค์ ๋์ด ๊ฐ์ ๋ฏธ๋์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์๊ฒฉ ์์ ์ ๋ ธ๋๋ ๋ก์ปฌ ํ๋ก๋น์ ๋ ๋คํธ์ํฌ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. PXE๊ฐ ์๋ ๊ฐ์ ๋ฏธ๋์ด์ ํจ๊ป ๋ฐฐํฌํด์ผ ํฉ๋๋ค. ๋ํ DHCP ์๋ฒ์ ๊ฐ ์๊ฒฉ ์์ ์ ๋ ธ๋ ๋ฐ ์ปจํธ๋กค ํ๋ ์ธ ๋ ธ๋์ ๊ฐ ์๋ธ๋ท์ ์ง์ ํฉ๋๋ค.
9.1.2. ์๊ฒฉ ์์ ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋ถ๋ฆฌ
๋ชจ๋ ๋ ธ๋๋ 10์ด๋ง๋ค OpenShift Container Platform ํด๋ฌ์คํฐ์ Kubernetes Controller Manager Operator(kube ์ปจํธ๋กค๋ฌ)๋ก ํํธ๋นํธ๋ฅผ ๋ณด๋ ๋๋ค. ํด๋ฌ์คํฐ์์ ๋ ธ๋์ ํํธ๋นํธ๋ฅผ ์์ ํ์ง ์๋ ๊ฒฝ์ฐ OpenShift Container Platform์ ์ฌ๋ฌ ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์๋ตํฉ๋๋ค.
OpenShift Container Platform์ ๋คํธ์ํฌ ํํฐ์ ๋ฐ ๊ธฐํ ์ค๋จ์ ๋ํด ํ๋ ฅ์ ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ์ํํธ์จ์ด ์ ๊ทธ๋ ์ด๋๋ก ์ธํ ์ค๋จ, ๋คํธ์ํฌ ๋ถํ , ๋ผ์ฐํ ๋ฌธ์ ์ ๊ฐ์ด ๋น๊ต์ ์ผ๋ฐ์ ์ธ ์ผ๋ถ ์ค๋จ์ ์ํํ ์ ์์ต๋๋ค. ์ํ ์ ๋ต์๋ ์๊ฒฉ ์์ ์ ๋ ธ๋์ Pod๊ฐ ์ฌ๋ฐ๋ฅธ ์์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋์ง ํ์ธ, ์ ์ ํ ๋ณต์ ์ ์ฑ ๊ตฌ์ฑ, ์์ญ ์ ์ฒด์์ ์ค๋ณต์ฑ ์ฌ์ฉ, ์ํฌ๋ก๋์ Pod ์ค๋จ ์์ฐ ์ฌ์ฉ์ด ํฌํจ๋ฉ๋๋ค.
๊ตฌ์ฑ๋ ๊ธฐ๊ฐ์ด ์ง๋ ํ kube ์ปจํธ๋กค๋ฌ์ ๋
ธ๋์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์ ๋
ธ๋ ์ปจํธ๋กค๋ฌ์์ ๋
ธ๋ ์ํ๋ฅผ Unhealthy
๋ก ์
๋ฐ์ดํธํ๊ณ ๋
ธ๋ Ready
์กฐ๊ฑด์ Unknown
์ผ๋ก ํ์ํฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ์ด์ ๋ํ ์๋ต์ผ๋ก ํด๋น ๋
ธ๋์ ๋ํ Pod ์์ฝ์ ์ค์งํฉ๋๋ค. ์จํ๋ ๋ฏธ์ค ๋
ธ๋ ์ปจํธ๋กค๋ฌ๋ NoExecute
ํจ๊ณผ๊ฐ ์๋ node.kubernetes.io/unreachable
ํ
์ธํธ๋ฅผ ๋
ธ๋์ ์ถ๊ฐํ๊ณ ๋
ธ๋์ Pod๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก 5๋ถ ํ์ ์ ๊ฑฐํ๋๋ก ์์ฝํฉ๋๋ค.
Deployment
์ค๋ธ์ ํธ ๋๋ StatefulSet
์ค๋ธ์ ํธ์ ๊ฐ์ ์ํฌ๋ก๋ ์ปจํธ๋กค๋ฌ์์ ๋น์ ์ ๋
ธ๋์ Pod๋ก ํธ๋ํฝ์ ์ ์กํ๊ณ ๊ธฐํ ๋
ธ๋์์ ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ OpenShift Container Platform์ ๋
ธ๋์ Pod ์ธ๋ถ๋ก ํธ๋ํฝ์ ๋ผ์ฐํ
ํฉ๋๋ค. ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐํ ์ ์๋ ๋
ธ๋๋ ์ ํธ๋ํฝ ๋ผ์ฐํ
์ ํตํด ์
๋ฐ์ดํธ๋์ง ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋น ๋
ธ๋์ ์ํฌ๋ก๋๊ฐ ๋น์ ์ ๋
ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ณ์ ์๋ํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ๊ฒฐ ์์ค์ ์ํฅ์ ์ํํ ์ ์์ต๋๋ค.
- ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ธํธ๋ฅผ ํ์ฉํ๋ pod ์์ฑ
- ๋ ธ๋๊ฐ ์ค๋จ๋๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ฌ์์ํ๋ ์ ์ Pod ์ฌ์ฉ
- Kubernetes ์์ญ์ ์ฌ์ฉํ์ฌ Pod ์ ๊ฑฐ ์ ์ด
- Pod ์ ๊ฑฐ๋ฅผ ์ง์ฐํ๊ฑฐ๋ ๋ฐฉ์งํ๋๋ก Pod ํ์ฉ ์ค์ฐจ ๊ตฌ์ฑ
- ๋ ธ๋๋ฅผ ๋น์ ์์ผ๋ก ํ์ํ๋ ์๊ธฐ๋ฅผ ์ ์ดํ๋๋ก kubelet ๊ตฌ์ฑ.
์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์๋ ํด๋ฌ์คํฐ์์ ์ด๋ฌํ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๊ฒฉ ์์ ์ ๋ ธ๋ ์ ๋ต ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
9.1.3. ์๊ฒฉ ์์ ์ ๋ ธ๋์ ์ ์
์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์ ์ ๋๊ฑฐ๋ ๊ฐ์ ๋ค์ ์์๋๋ฉด OpenShift Container Platform์ ์ฌ๋ฌ ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์๋ตํฉ๋๋ค.
๊ตฌ์ฑ๋ ๊ธฐ๊ฐ์ด ์ง๋ ํ Kubernetes Controller Manager Operator(kube ์ปจํธ๋กค๋ฌ)์ ๋
ธ๋์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์์ ๋
ธ๋ ์ํ๋ฅผ Unhealthy
๋ก ์
๋ฐ์ดํธํ๊ณ ๋
ธ๋ Ready
์กฐ๊ฑด์ Unknown
์ผ๋ก ํ์ํฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ์ด์ ๋ํ ์๋ต์ผ๋ก ํด๋น ๋
ธ๋์ ๋ํ Pod ์์ฝ์ ์ค์งํฉ๋๋ค. ์จํ๋ ๋ฏธ์ค ๋
ธ๋ ์ปจํธ๋กค๋ฌ๋ NoExecute
ํจ๊ณผ๊ฐ ์๋ node.kubernetes.io/unreachable
ํ
์ธํธ๋ฅผ ๋
ธ๋์ ์ถ๊ฐํ๊ณ ๋
ธ๋์ Pod๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก 5๋ถ ํ์ ์ ๊ฑฐํ๋๋ก ์์ฝํฉ๋๋ค.
๋ ธ๋๊ฐ ์ ์์ ๋ณต๊ตฌํ๊ณ ์ปจํธ๋กค ํ๋ ์ธ์ ๋ค์ ์ฐ๊ฒฐ๋๋ฉด ๋ ธ๋์์ Pod๋ฅผ ์ฌ์์ํด์ผ ํฉ๋๋ค.
์ฌ์์ ์ฆ์ Pod๋ฅผ ์ฌ์์ํ๋ ค๋ฉด ์ ์ Pod๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋
ธ๋๋ฅผ ์ฌ์์ํ๋ฉด kubelet๋ ์ฌ์์๋๊ณ ๋
ธ๋์ ์์ฝ๋ Pod๋ฅผ ์ฌ์์ํ๋ ค๊ณ ํฉ๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ์ ๋ํ ์ฐ๊ฒฐ์ด ๊ธฐ๋ณธ๊ฐ์ธ 5๋ถ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ์ปจํธ๋กค ํ๋ ์ธ์์ ๋
ธ๋ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๊ณ node.kubernetes.io/unreachable
ํ
์ธํธ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๋
ธ๋์์ kubelet์ ์คํ ์ค์ธ Pod๋ฅผ ๋ชจ๋ ์ข
๋ฃํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์ด ํด์ ๋๋ฉด ์ค์ผ์ค๋ฌ๋ ํด๋น ๋
ธ๋์ Pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค.
๋ค์์ ํตํด ์ ์ ์ ์ํฅ์ ์ํํ ์ ์์ต๋๋ค.
- ๋ฐ๋ชฌ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ธํธ๋ฅผ ํ์ฉํ๋ pod ์์ฑ
- ๋ ธ๋์ ํจ๊ป ์๋์ผ๋ก ์ฌ์์ํ๋ ์ ์ Pod ์ฌ์ฉ
- Pod ์ ๊ฑฐ๋ฅผ ์ง์ฐํ๊ฑฐ๋ ๋ฐฉ์งํ๋๋ก Pod ํ์ฉ ์ค์ฐจ ๊ตฌ์ฑ
- ๋ ธ๋ ์ปจํธ๋กค๋ฌ์์ ๋ ธ๋๋ฅผ ๋น์ ์์ผ๋ก ํ์ํ๋ ์๊ธฐ๋ฅผ ์ ์ดํ๋๋ก kubelet ๊ตฌ์ฑ.
์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ์๋ ํด๋ฌ์คํฐ์์ ์ด๋ฌํ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๊ฒฉ ์์ ์ ๋ ธ๋ ์ ๋ต ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
9.1.4. ์๊ฒฉ ์์ ์ ๋ ธ๋ ์ ๋ต
์๊ฒฉ ์์ ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ฐ ์ฌ์ฉํ ์ค๋ธ์ ํธ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
๋คํธ์ํฌ ๋ฌธ์ ๋๋ ์ ์ ์ ์ํ๋ ๋์์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ๋ชฌ ์ธํธ ๋๋ ์ ์ Pod๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ํ ์ปจํธ๋กค ํ๋ ์ธ์์ ์๊ฒฉ ์์ ์ ๋ ธ๋์ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ Kubernetes ์์ญ ๋ฐ ํ์ฉ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ Pod ์ ๊ฑฐ๋ฅผ ์ ์ดํ๊ฑฐ๋ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๋ฐ๋ชฌ ์ธํธ
- ๋ฐ๋ชฌ ์ธํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์๊ฒฉ ์์ ์ ๋ ธ๋์์ Pod๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
-
๋ฐ๋ชฌ ์ธํธ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ผ์ ์กฐ์ ๋์์ด ํ์ํ์ง ์์ต๋๋ค. ๋
ธ๋์ ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ๋
ธ๋์ Pod๊ฐ ๊ณ์ ์คํ๋ ์ ์์ต๋๋ค. OpenShift Container Platform์์๋ ๋ฐ๋ชฌ ์ธํธ Pod์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ Pod๋ฅผ ๋ง์ง๋ง์ผ๋ก ๋ณด๊ณ ๋ ์ํ๋ก ์ ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ๋ชฌ ์ธํธ Pod๊ฐ
Running
์ํ์ ์๋ ๊ฒฝ์ฐ ๋ ธ๋์์ ํต์ ์ ์ค์งํ๋ฉด Pod๊ฐ ๊ณ์ ์คํ๋๊ณ OpenShift Container Platform์์ Pod๊ฐ ์คํ ์ค์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ๋ชฌ ์ธํธ Pod๋
tolerationSeconds
๊ฐ์ด ์๋node.kubernetes.io/unreachable
๋ฐnode.kubernetes.io/not-ready
ํ ์ธํธ์ ๋ํNoExecute
ํ์ฉ ์ค์ฐจ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์์ ๋ ธ๋์ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ๋ฐ๋ชฌ ์ธํธ Pod๊ฐ ์ ๊ฑฐ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.๋ฐ๋ชฌ ์ธํธ Pod์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฉ ์ค์ฐจ ์ถ๊ฐ
tolerations: - key: node.kubernetes.io/not-ready operator: Exists effect: NoExecute - key: node.kubernetes.io/unreachable operator: Exists effect: NoExecute - key: node.kubernetes.io/disk-pressure operator: Exists effect: NoSchedule - key: node.kubernetes.io/memory-pressure operator: Exists effect: NoSchedule - key: node.kubernetes.io/pid-pressure operator: Exists effect: NoSchedule - key: node.kubernetes.io/unschedulable operator: Exists effect: NoSchedule
- ๋ฐ๋ชฌ ์ธํธ์์๋ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ์ผ์นํ๋ ์์ ์ ๋ ธ๋์์ ์ํฌ๋ก๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- OpenShift Container Platform ์๋น์ค ๋์ ์ ์ฌ์ฉํ์ฌ ๋ฐ๋ชฌ ์ธํธ Pod์ ๋ถํ๋ฅผ ๋ถ์ฐํ ์ ์์ต๋๋ค.
OpenShift Container Platform์์ ๋ ธ๋์ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ๋ฐ๋ชฌ ์ธํธ์์๋ ๋ ธ๋ ์ฌ๋ถํ ํ Pod๋ฅผ ์์ฝํ์ง ์์ต๋๋ค.
- ๊ณ ์ Pod
- ๋ ธ๋๊ฐ ์ฌ๋ถํ ๋ ๋(์: ์ ์ ํ) Pod๋ฅผ ์ฌ์์ํ๋ ค๋ฉด ์ ์ Pod๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ ธ๋์ Kubelet์ ๋ ธ๋๊ฐ ์ฌ์์๋๋ฉด ์ ์ Pod๋ฅผ ์๋์ผ๋ก ์ฌ์์ํฉ๋๋ค.
์ ์ Pod์์๋ ๋ณด์ ๋ฐ ๊ตฌ์ฑ ๋งต์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Kubernetes ์์ญ
- Kubernetes ์์ญ์ ์๋๋ฅผ ๋ฆ์ถ๊ฑฐ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ Pod ์ ๊ฑฐ๋ฅผ ์์ ํ ์ค์งํ ์ ์์ต๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ์์ ๋
ธ๋์ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ๋
ธ๋ ์ปจํธ๋กค๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก node.kubernetes.io/unreachable
ํ
์ธํธ๋ฅผ ์ ์ฉํ๊ณ ์ด๋น 0.1 ๋
ธ๋์ ์๋๋ก Pod๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๊ทธ๋ฌ๋ Kubernetes ์์ญ์ ์ฌ์ฉํ๋ ํด๋ฌ์คํฐ์์๋ Pod ์ ๊ฑฐ ๋์์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
์์ญ์ด ์์ ํ ์ค๋จ๋๊ณ ํด๋น ์์ญ์ ์๋ ๋ชจ๋ ๋
ธ๋์ Ready
์กฐ๊ฑด์ด False
๋๋ Unknown
์ธ ๊ฒฝ์ฐ ์ปจํธ๋กค ํ๋ ์ธ์์ ํด๋น ์์ญ์ ๋
ธ๋์ node.kubernetes.io/unreachable
ํ
์ธํธ๋ฅผ ์ ์ฉํ์ง ์์ต๋๋ค.
๋ถ๋ถ์ ์ผ๋ก ์ค๋จ๋ ์์ญ์ ๊ฒฝ์ฐ ๋
ธ๋์ 55% ์ด์์ False
๋๋ Unknown
์กฐ๊ฑด์ด ์์ผ๋ฉด Pod ์ ๊ฑฐ ๋น์จ์ด ์ด๋น 0.01 ๋
ธ๋๋ก ์ค์ด๋ญ๋๋ค. ๋
ธ๋๊ฐ 50๊ฐ ๋ฏธ๋ง์ธ ์๊ท๋ชจ ํด๋ฌ์คํฐ์ ๋
ธ๋๋ ํ
์ธํธ๋์ง ์์ต๋๋ค. ์ด๋ฌํ ๋์์ ์ ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ์ ์์ญ์ด ๋ค ๊ฐ ์ด์ ์์ด์ผ ํฉ๋๋ค.
๋
ธ๋ ์ฌ์์ topology.kubernetes.io/region
๋ผ๋ฒจ์ ์ ์ฉํ์ฌ ํน์ ์์ญ์ ๋
ธ๋๋ฅผ ํ ๋นํฉ๋๋ค.
Kubernetes ์์ญ์ ๋ ธ๋ ๋ผ๋ฒจ ์ํ
kind: Node apiVersion: v1 metadata: labels: topology.kubernetes.io/region=east
KubeletConfig
์ค๋ธ์ ํธ
Kubelet์์ ๊ฐ ๋ ธ๋์ ์ํ๋ฅผ ํ์ธํ๋ ์๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
์จํ๋ ๋ฏธ์ค ๋
ธ๋ ์ปจํธ๋กค๋ฌ์์ ๋
ธ๋๋ฅผ Unhealthy
๋๋ Unreachable
์กฐ๊ฑด์ผ๋ก ํ์ํ๋ ํ์ด๋ฐ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฐ๊ฒฉ์ ์ค์ ํ๋ ค๋ฉด node-status-update-frequency
๋ฐ node-status-report-frequency
๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋ KubeletConfig
์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
๊ฐ ๋
ธ๋์ kubelet์ node-status-update-frequency
์ค์ ์์ ์ ์ํ๋ ๋
ธ๋ ์ํ๋ฅผ ํ์ธํ๊ณ node-status-report-frequency
์ค์ ์ ๋ฐ๋ผ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก kubelet์ Pod ์ํ๋ฅผ 10์ด ๊ฐ๊ฒฉ์ผ๋ก ํ์ธํ๊ณ ์ํ๋ฅผ 1๋ถ ๊ฐ๊ฒฉ์ผ๋ก ๋ณด๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋
ธ๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด Kubelet์์ ์ด๋ฌํ ๋ณ๊ฒฝ์ ํด๋ฌ์คํฐ์ ์ฆ์ ๋ณด๊ณ ํฉ๋๋ค. OpenShift Container Platform์์๋ ๋
ธ๋ ๋ฆฌ์ค ๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ(OpenShift Container Platform ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ ์ํ)์๋ง node-status-report-frequency
์ค์ ์ ์ฌ์ฉํฉ๋๋ค. ๋
ธ๋ ๋ฆฌ์ค ๊ธฐ๋ฅ ๊ฒ์ดํธ๊ฐ ๋นํ์ฑํ๋ ๊ฒฝ์ฐ ๋
ธ๋๋ node-status-update-frequency
์ค์ ์ ๋ฐ๋ผ ํด๋น ์ํ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
kubelet ๊ตฌ์ฑ์ ์
apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: disable-cpu-units spec: machineConfigPoolSelector: matchLabels: machineconfiguration.openshift.io/role: worker 1 kubeletConfig: node-status-update-frequency: 2 - "10s" node-status-report-frequency: 3 - "1m"
- 1
MachineConfig
์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ์ดKubeletConfig
์ค๋ธ์ ํธ๊ฐ ์ ์ฉ๋๋ ๋ ธ๋ ์ ํ์ ์ง์ ํฉ๋๋ค.- 2
- Kubelet์์ ์ด
MachineConfig
์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์ํ๋ฅผ ์ ๊ฒํ๋ ๋น๋๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์10s
์ ๋๋ค. ์ด ๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํ๋ฉดnode-status-report-frequency
๊ฐ์ด ๋์ผํ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. - 3
- Kubelet์์ ์ด
MachineConfig
์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์ํ๋ฅผ ๋ณด๊ณ ํ๋ ๋น๋๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์1m
์ ๋๋ค.
node-status-update-frequency
๋งค๊ฐ๋ณ์๋ node-monitor-grace-period
๋ฐ pod-eviction-timeout
๋งค๊ฐ๋ณ์์ ํจ๊ป ์๋ํฉ๋๋ค.
-
node-monitor-grace-period
๋งค๊ฐ๋ณ์๋ ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์๊ฐ ๋ ธ๋ ํํธ๋นํธ๋ฅผ ์์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐMachineConfig
์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ ธ๋๊ฐUnhealthy
๋ก ํ์๋ ํ OpenShift Container Platform์์ ๋๊ธฐํ๋ ์๊ฐ์ ์ง์ ํฉ๋๋ค. ๋ ธ๋์ ์ํฌ๋ก๋๋ ์ด ์๊ฐ ์ดํ ๊ณ์ ์คํ๋ฉ๋๋ค.node-monitor-grace-period
๊ฐ ๋ง๋ฃ๋ ํ ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์ ๋ค์ ์ฐธ์ฌํ๋ฉด Pod๊ฐ ๊ณ์ ์คํ๋ฉ๋๋ค. ํด๋น ๋ ธ๋์ ์ Pod๋ฅผ ์์ฝํ ์ ์์ต๋๋ค.node-monitor-grace-period
๊ฐ๊ฒฉ์40s
์ ๋๋ค.node-status-update-frequency
๊ฐ์node-monitor-grace-period
๊ฐ๋ณด๋ค ์์์ผ ํฉ๋๋ค. -
pod-eviction-timeout
๋งค๊ฐ๋ณ์๋ Pod๋ฅผ ์ ๊ฑฐํ๋๋ก ํ์ํ๊ธฐ ์ํดMachineConfig
์ค๋ธ์ ํธ์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผUnreachable
๋ก ํ์ํ ํ OpenShift Container Platform์์ ๋๊ธฐํ๋ ์๊ฐ์ ์ง์ ํฉ๋๋ค. ์ ๊ฑฐ๋ Pod๋ ๋ค๋ฅธ ๋ ธ๋์ ๋ค์ ์์ฝ๋ฉ๋๋ค. ๋ ธ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์จํ๋ ๋ฏธ์ค์์ Pod๋ฅผ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์pod-eviction-timeout
์ด ๋ง๋ฃ๋ ํ ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ์ ๋ค์ ์ฐธ์ฌํ๋ฉด ์๊ฒฉ ์์ ์ ๋ ธ๋์์ ์คํ ์ค์ธ Pod๊ฐ ์ข ๋ฃ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Pod๋ฅผ ํด๋น ๋ ธ๋์ ๋ค์ ์์ฝํ ์ ์์ต๋๋ค.pod-eviction-timeout
๊ธฐ๊ฐ์5m0s
์ ๋๋ค.
node-monitor-grace-period
๋ฐ pod-eviction-timeout
๋งค๊ฐ๋ณ์ ์์ ์ ์ง์๋์ง ์์ต๋๋ค.
- ํ์ฉ ์ค์ฐจ
-
์จํ๋ ๋ฏธ์ค ๋
ธ๋ ์ปจํธ๋กค๋ฌ์์
NoExecute
ํจ๊ณผ๊ฐ ์๋node.kubernetes.io/unreachable
ํ ์ธํธ๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๋ ธ๋์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ Pod ํ์ฉ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์ํฅ์ ์ํํ ์ ์์ต๋๋ค.
NoExecute
ํจ๊ณผ๊ฐ ์๋ ํ
์ธํธ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋
ธ๋์์ ์ด๋ฏธ ์คํ๋๊ณ ์๋ Pod์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ํด๋น ํ ์ธํธ๋ฅผ ํ์ฉํ์ง ์๋ Pod๊ฐ ์ ๊ฑฐ๋ฅผ ์ํด ํ์ ์ถ๊ฐ๋ฉ๋๋ค.
-
ํ์ฉ ์ค์ฐจ ์ฌ์์
tolerationSeconds
๊ฐ์ ์ง์ ํ์ง ์์ ์ํ๋ก ํ ์ธํธ๋ฅผ ํ์ฉํ๋ Pod๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. -
tolerationSeconds
๊ฐ์ด ์ง์ ๋ ํ ์ธํธ๋ฅผ ํ์ฉํ๋ Pod๋ ์ง์ ๋ ์๊ฐ ๋์ ๋ฐ์ธ๋ฉ๋ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ์๊ฐ์ด ์ง๋๋ฉด Pod๊ฐ ์ ๊ฑฐ๋ฅผ ์ํด ํ์ ์ถ๊ฐ๋ฉ๋๋ค.
node.kubernetes.io/unreachable
๋ฐ node.kubernetes.io/not-ready
ํ
์ธํธ์ ๋ํด NoExecute
ํจ๊ณผ๋ฅผ ์ฌ์ฉํ์ฌ Pod ํ์ฉ ์ค์ฐจ๋ฅผ ๊ตฌ์ฑํ๋ฉด Pod ์ ๊ฑฐ๋ฅผ ์ง์ฐํ๊ฑฐ๋ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
Pod ์ฌ์์ ํ์ฉ ์ค์ฐจ ์
... tolerations: - key: "node.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" 1 - key: "node.kubernetes.io/not-ready" operator: "Exists" effect: "NoExecute" 2 tolerationSeconds: 600 ...
- 1
tolerationSeconds
๊ฐ ์๋NoExecute
ํจ๊ณผ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์์ ๋ ธ๋์ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ Pod๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.- 2
tolerationSeconds
: 600์ผ๋กNoExecute
ํจ๊ณผ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์์ ๋ ธ๋๋ฅผUnhealthy
๋ก ํ์ํ๋ ๊ฒฝ์ฐ Pod๊ฐ 10๋ถ ๋์ ์ ์ง๋ฉ๋๋ค.
OpenShift Container Platform์์๋ pod-eviction-timeout
๊ฐ์ด ๊ฒฝ๊ณผํ๋ฉด tolerationSeconds
๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
- ๊ธฐํ ์ ํ์ OpenShift Container Platform ์ค๋ธ์ ํธ
- ๋ณต์ ๋ณธ ์ธํธ, ๋ฐฐํฌ, ๋ณต์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ธ๋๊ฐ 5๋ถ ๋์ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์ค์ผ์ค๋ฌ์์ ํด๋น Pod๋ฅผ ๋ค๋ฅธ ๋ ธ๋์ ๋ค์ ์์ฝํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ์๊ฐ ํน์ ์์ Pod๊ฐ ์คํ๋๊ณ ํด๋น Pod์ ์ก์ธ์คํ๋๋ก ๋ณด์ฅํ ์ ์๋ ์ผ๋ถ ์ํฌ๋ก๋์ ๊ฒฝ์ฐ(์: REST API) ๋ค๋ฅธ ๋ ธ๋์ ๋ค์ ์์ฝํ๋ฉด ์ ์ฉํ ์ ์์ต๋๋ค.
์๊ฒฉ ์์ ์ ๋ ธ๋๋ก ์์ ํ ๋ ์๊ฒฉ ์์ ์ ๋ ธ๋๊ฐ ํน์ ๊ธฐ๋ฅ์ ์ํด ์์ฝ๋๋๋ก ์๋๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ ธ๋์ Pod๋ฅผ ๋ค์ ์์ฝํ์ง ๋ชปํ ์ ์์ต๋๋ค.
์ํ ์ ์ฅ ์ธํธ๋ ์ค๋จ ๋ฐ์ ์ ์ฌ์์๋์ง ์์ต๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ์์ Pod๊ฐ ์ข
๋ฃ๋์์์ ์ธ์ํ ๋๊น์ง Pod๋ terminating
์ํ๋ก ์ ์ง๋ฉ๋๋ค.
๋คํธ์ํฌ ๋ถ๋ฆฌ์ ๊ฒฝ์ฐ OpenShift Container Platform์์๋ ๋์ผํ ์ ํ์ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ์ก์ธ์คํ ์ ์๋ ๋ ธ๋์ ์์ฝํ์ง ์๋๋ก ์๊ตฌ ๋ณผ๋ฅจ์ด ํ์ํ Pod๋ฅผ ๋ค๋ฅธ ์์ญ์ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค.
์ถ๊ฐ ๋ฆฌ์์ค
- Daemoneset์ ๋ํ ์์ธํ ๋ด์ฉ์ DaemonSets๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ํ ์ธํธ ๋ฐ ํ์ฉ ์ค์ฐจ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ ธ๋ ํ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ Pod ๋ฐฐ์น ์ ์ด๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
-
KubeletConfig
์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ KubeletConfig CRD ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ญ์์ค. - ๋ณต์ ๋ณธ ์ธํธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ๋ฐฐํฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐฐํฌ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ๋ณต์ ์ปจํธ๋กค๋ฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณต์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์์ ๋ํ ์์ธํ ๋ด์ฉ์ Kubernetes Controller Manager Operator๋ฅผ ์ฐธ์กฐํ์ญ์์ค.