September 18th, 2019
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ตฌ๊ธ์ด ์ง๋ 10์ฌ๋ ๊ฐ ์ปจํ ์ด๋๋ฅผ ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ฉด์ ์ป์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ๊ฐ๋ฐํ ์ปจํ ์ด๋-ํตํฉ๋๊ตฌ์ด๋ค.
์ฌ๋ฌ ๊ฐ์ ํธ์คํธ๋ฅผ ํ๋๋ก ๋ฌถ์ด Docker๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ์ค์ผ์คํธ๋ ์ด์ ํด
๋ถ์ฐ ํ๊ฒฝ์์ ํ ๋์ ์ปดํจํฐ์ฒ๋ผ ํฌ๊ณผ์ ์ผ๋ก ์ปจํ ์ด๋์ ์์ธ์คํ ์ ์๋ค.
์์คํ ์ด์ฉ์๋ก๋ถํฐ ์ค๋ ๋ถํ์ ๊ธ์ฆ์ ๋ํด ์ค์ผ์ผํ๊ฑฐ๋ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ํจ์จ์ ์ผ๋ก ํตํฉ ๊ด๋ฆฌํ๋ ์ฅ์น๋ ์๋ค.
์ฃผ์ ๊ธฐ๋ฅ๋ค
Master Server
kubect11 ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ์กฐ์ํ ๋ Master Server๊ฐ command๋ก๋ถํฐ request๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ค. ํด๋ฌ์คํฐ ๋ด์ ๋ ธ๋์ ๋ฆฌ์์ค ์ฌ์ฉ ํํฉ์ ํ์ธํ๊ณ , ์ปจํ ์ด๋๋ฅผ ์์ํ ๋ ธ๋๋ฅผ ์๋์ผ๋ก ์ ํํ๋ค. ๋ค์คํ๋ฅผ ๊ฒํ ํ ํ์๊ฐ ์๋ค.
Back-end Database(etcd)
ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ์ค์ ์ ๋ณด๊ฐ ๋ค์ด ์๋ค.
์์คํ ๊ตฌ์ฑ์ ๋ฐ๋ผ์ etcd๋ฅผ master server์์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ๋ ์๋ค. master server์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์คํ๋ฅผ ๊ฒํ ํ ํ์๊ฐ ์๋ค.
Node
๋ ธ๋๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ จํ์ฌ cluster๋ฅผ ๊ตฌ์ฑํ๋ค. master server์ ๊ด๋ฆฌ๋ฅผ ๋ฐ๋๋ค. ๋ ธ๋๋ฅผ ๋ช ๋ ๋ง๋ จํ ์ง๋ ์์คํ ์ ๊ท๋ชจ๋ ๋ถํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ Node ํ๋๊ฐ ๊ฐ์ ๋จธ์ ์ ์ธ์คํด์ค ํ๋๊ฐ ๋๋ค.
application ์คํ ํ๊ฒฝ์ orchestration ์ ์ ์ฐํ๊ฒ ์ํํ๊ธฐ ์ํด ๋ค์ํ ์ถ์ํ๋ฅผ ํ๊ณ ์๋ค.
Pod
app server์ฉ ์ปจํ ์ด๋์ proxy server์ฉ ์ปจํ ์ด๋ ๋ฑ ๊ด๋ จ๋ ๊ฒ๋ค์ pod๋ก ๋ชจ์๋ค. Pod๋ application์ Deployment ๋จ์๊ฐ ๋๋ฉฐ Pod ๋จ์๋ก ์ปจํ ์ด๋ ์์ฑ/์์/์ ์ง/์ญ์ ์ ๊ฐ์ ์กฐ์์ ์ํํ๋ค. ๋ฐ๋ผ์ ์น ํ๋ก ํธ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ฒ๋ผ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๋์ Pod์ ์ ์ฅํ๋ฉด ์๋๋ค.
Pod๋ ๋ฐ๋์ ๋์ผํ ๋ ธ๋ ์์ ๋์์ ์ ๊ฐ๋๋ค. Pod ์์ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๊ฐ์ NIC(private IP)2๋ฅผ ๊ณต์ ํ๋ ๊ตฌ์ฑ์ ์ทจํ๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๋ผ๋ฆฌ localhost ๊ฒฝ์ ๋ก ํต์ ํ ์ ์๋ค.
Replica Set
ํด๋ฌ์คํฐ ์์ ์ ํด์ง ์์ Pod๋ฅผ ๋ฐ๋์ ์คํ์์ผ ๋๋ค๋ ๊ฒ ์คํ์ค์ธ Pod๋ฅผ ๊ฐ์ํ๊ณ ์ ์ง๋ ๊ฒฝ์ฐ์ ํด๋น Pod๋ฅผ ์ญ์ ํ๊ณ , ์๋ก์ด Pod๋ฅผ ์คํ์ํจ๋ค. ํด๋ผ์ฐ๋ ์์ pod๋ฅผ ์ผ๋ง๋ ์คํ์์ผ ๋์ง๋ฅผ **'Replica ์'**๋ผ๊ณ ํ๋ค. pod์ ์๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์คํ ์ค์ผ์ผ์ ๊ตฌํํ ์ ์๋ค.
Deployment
ReplicaSet์ ํ ํ๋ฆฟ์ ๊ฐ์ง๊ณ ๊ฑฐ๊ธฐ์ Pod์ ๊ตฌ์ฑ์ ์ ์ํ์ฌ ํด๋น ํ ํ๋ฆฟ์ ๋ฐ๋ฅด๋ ReplicaSet์ ๋ง๋ ๋ค. ์ด๋ ฅ์ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ pod ์์ ์ปจํ ์ด๋์ ๋ฒ์ ์ ์ ํ๊ณ ์ถ์ ๋ ๋กค๋ง ์ ๋ฐ์ดํธ3๋ฅผ ํ๊ฑฐ๋ ์ด์ ์ธ๋๋ก ๋กค๋ฐฑํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก 'Blue-Green Deployment' ๋ฐฉ๋ฒ์ด ์๋ค.
์ด ์ธ์๋
๋ฑ์ ๊ด๋ฆฌ ํด๋ค์ด ์๋ค.
ํด๋ฌ์คํฐ ์์์ ์คํ๋๋ Pod์ ๋ํด ์ธ๋ถ๋ก๋ถํฐ ์์ธ์คํ ๋๋ ์๋น์ค๋ฅผ ์ ์ํ๋ค. Service๋ ๋คํธ์ํฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ผ๋ก ์ข ๋ฅ๊ฐ ๋ค์ํ๋ค.
Service์ ํ ๋น๋๋ IP ์ฃผ์๋
Service ์ธ์..
Ingress๋ผ๋ pod์ ๋ํ ํต์ ์ ์ ์ดํ๋ ๊ธฐ๋ฅ์ด ์๋ค. Ingress๋ Service์ ์ฐ๊ฒฐ๋์ด ํต์ ๋ด์ฉ์ ์ค๊ณ(proxy)ํ๋ค. ์ด๋ ์๋ํ๋ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅธ๋ฐ, GCP์ ๊ฒฝ์ฐ HTTP Load Balancer๋ฅผ ์ฌ์ฉํ๋ค. L7์์ ์๋ํ๊ธฐ ๋๋ฌธ์ request url ๋ณ ๋ถ๋ฅ๋ virtual host ๊ธฐ๋ฅ ๋ฑ ๋ณด๋ค ์ธ์ธํ ๋คํธ์ํฌ ์ ์ด๋ฅผ ํ ์ ์๋ค.
๋ฆฌ์์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ด๋ถ์์ ์๋์ผ๋ก ๋๋คํ ์ด๋ฆ์ด ๋ถ์ฌ๋จ ์ด ์ด๋ฆ์ผ๋ก ์ ์ ํ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ Label์ ๋ถ์ฌ์ ๊ด๋ฆฌํ๋ค.
Label์ identifier๋ก ํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
Label์ ํ๋์ ๋ฆฌ์์ค์ ์ฌ๋ฌ๊ฐ๋ฅผ ์ค์ ํ ์ ์์ด์ Pod์ ์ญํ ๋ณ๋ก ์์์ ์ด๋ฆ์ ๋ถ์ด๊ฑฐ๋ ๊ด๋ จ ์๋ Pod ๋ณ๋ก ๋ชจ์์ ์ ์ฐํ๊ฒ ๊ด๋ฆฌํ๊ณ ์ ํ ๋ ์ ์ฉํ๋ค.
๋ํ ๋งค๋ํ์คํธ ๋ผ๋ kubernetes์ ์ ์ ํ์ผ์ ์ฐธ์กฐํ ๋๋ ์ฌ์ฉ๋ฉ๋๋ค.
ex)
labels:
app: v1.0
selector:
type: webserver
app: v1.0
๋ง์คํฐ, ๋ฐ์ดํฐ ์คํ ์ด, ๋ ธ๋๊ฐ ์๋ก ํ๋ ฅํ๋ฉด์ ์ปจํ ์ด๋์ ์คํํ๊ฒฝ์ ๊ด๋ฆฌํ๋ค.
Master
API Server
kubernetes์ ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ Front-end REST API
๊ฐ component๋ก๋ถํฐ ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ๋ฐ์ etcd์ ์ ์ฅํ๋ค.
component๋ค์ etcd์ ์ ๊ทผํ๊ธฐ์ํด API server๋ฅผ ๊ฑฐ์น๊ณ
ํ๋ก๊ทธ๋๋จธ๋ ์น์ GUIํด์ด๋ kubectl ๋ช ๋ น์ ์ฌ์ฉํ๊ณ , app ๋ด์์ API Server๋ฅผ ํธ์ถํ๋ค.
์ธ์ฆ, ์ธ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์์
Scheduler
Pod๋ฅผ ์ด๋ค Node์์ ์๋์ํฌ์ง ์ ์ดํ๋ Back-end component
Node๊ฐ ํ ๋น๋์ง ์์ Pod๋ฅผ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ํ์ธํ๊ณ ๋น ์์ญ์ ๊ฐ์ง Node๋ฅผ ์ฐพ์
์คํ์ํค๋ ์ค์บ์ฅด๋ง์ ์ํ
Controller Manager
Kubernetes ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ํญ์ ๊ฐ์ํ๋ Back-end Component
์ ์ ํ์ผ์์ ์ ์ํ ๊ฒ๊ณผ ์ค์ Node๋ Container์์ ์์ง์ด๊ณ ์๋ ์ํ๋ฅผ ๋ชจ์์ ๊ด๋ฆฌ
Data Store(etcd)
ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์ ์ง ๊ด๋ฆฌํ๋ KVS(key value store)
์ด๋ค pod๋ฅผ ์ด๋ป๊ฒ ๋ฐฐ์นํ ์ง์ ๊ฐ์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ API server๊ฐ ์ฐธ์กฐํ๋ค.
Node
kubelet
Node์์ ์๋ํ๋ ์์ด์ ํธ
Pod์ ์ ์ ํ์ผ์ ๋ฐ๋ผ Docker ์ปจํ ์ด๋๋ฅผ ์คํํ๊ฑฐ๋ Storage๋ฅผ ๋ง์ดํธํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋๋ค.
Node์ status๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๊ฐ์ํ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ณ , status๊ฐ ๋ณ๊ฒฝ๋๋ฉด API server์๊ฒ ์๋ฆฐ๋ค.
kubernetes์ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ๋ณด๋ฅผ YAML์ด๋ JSON์ผ๋ก ๊ด๋ฆฌํ๋๋ฐ ์ด ์ ์ํ์ผ์ Manifest file์ด๋ผ๊ณ ํ๋ค. Jenkins์ ๊ฐ์ ์ํํธ์จ์ด ๋ฒ์ ๊ด๋ฆฌ ์์คํ ๊ณผ ์ฐ๊ณํ ์ ์๋ค.