StatefulSet
Stateless Application:
Web Server๊ฐ ์ฌ๊ธฐ ํด๋น๋๋ค. (APACHE HTTP Server, Nginx, IIS app์ด ์ฌ๋ฌ๊ฐ ๋ฐฐํฌ๋๋๋ผ๋ ๋ชจ๋ ๋์ผํ ๊ธฐ๋ฅ์ ์ํ
๊ทธ๋์ app์ด ์ฃฝ์ผ๋ฉด ๋จ์ํ ๋์ผํ app์ ํ๋ ๋ ๋ง๋ค๋ฉด ๋๋ค.
๋ฐ๋์ ๋ณผ๋ฅจ์ด ํ์ํ์ง ์์. ๋ง์ฝ app์ ๋ก๊ทธ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ๋ณผ๋ฅจ์ด ์๋ ๋จ์ผ ๋ณผ๋ฅจ์ผ๋ก ์ถฉ๋ถํ ๊ฒฝ์ฐ๊ฐ ๋ง์.
๋ค์ด์ค๋ ํธ๋ํฝ์ ์ฌ๋ฌ ์ฑ์ ๋์ผํ๊ฒ ๋ถ์ฐ์์ผ์ผ ํจ. (๋คํธ์ํฌ์ ์ฐ๊ฒฐ์ ๋จ์ ๋ถ์ฐ ์ฉ๋)
์ฆ, ์ฟ ๋ฒ๋คํฐ์ค์ ReplicaSet์ ํด๋นํจ
Stateful Application:
Database ๋ฑ์ด ์ฌ๊ธฐ ํด๋น๋๋ค. (mongoDB, MariaDB, redis app์ด ์ฌ๋ฌ๊ฐ ๋ฐฐํฌ๋๋๋ผ๋ ๊ฐ๊ฐ์ ์ญํ ์ด ์์)
๋ฐ๋ผ์ app์ด ์ฃฝ์ผ๋ฉด ์ํฉ์ ๋ง๊ฒ ํน์ ํ app์ ๋ณต๊ตฌํด์ผ ํ๋ค. ๊ฐ๊ฐ์ ์ญํ ์ด ๋ค๋ฅธ ๋งํผ ๋ณผ๋ฅจ๋ ๊ฐ๊ฐ์ ๋ง๊ฒ ํ์ํ๋ค. ๊ทธ๋์ผ ํน์ app์ด ์ฃฝ์ด๋ ์ app์ด ๊ฐ๊ฐ์ ๋ณผ๋ฅจ๊ฐ ์ฐ๊ฒฐ๋๋ฉด์ ํด๋น ์ญํ ์ ์ด์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฑ๋ค์ ํน์ฑ์ ๋ง๊ฒ ํธ๋ํฝ์ด ๋ถ์ฐ๋์ด์ผ ํ๋ค. stateless Application๊ณผ ๋ฌ๋ฆฌ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ์ ์๋๊ฐ ์๋ค๋ ๋ป์ด๋ค.
์ฆ, ์ฟ ๋ฒ๋คํฐ์ค์ StatefulSet์ ํด๋นํจ.
StatefulSet vs ReplicaSet
StatefulSet์ ReplicaSet์ ์ฐจ์ด๋ ์๋ ์ฌ์ง๊ณผ ๊ฐ๋ค.
replicas๋ฅผ n์ผ๋ก ์์ฑํ ๊ฒฝ์ฐ ReplicaSet์ Pod์ ์ด๋ฆ์ด ๋๋ค์ผ๋ก ์์ฑ ๋๊ณ , StatefulSet์๋ Ordinal Index ์ด๋ฆ์ผ๋ก ์์ฑ๋๋ค.
Pod๊ฐ ์์ฑ๋ ๋ ReplicaSet์ ๋์์, StatefulSet์ ์์ฐจ์ ์ผ๋ก ์์ฑ๋๋ค.
Pod๊ฐ ์ฌ์์ฑ ๋๋ ๊ฒฝ์ฐ ReplicaSet์ ๋๋ค์ผ๋ก ์๋กญ๊ฒ ์ด๋ฆ์ ์์ฑํ๊ณ , StatefulSet์ ๊ธฐ์กด๊ณผ ๋์ผํ ์ด๋ฆ์ผ๋ก Pod๊ฐ ์์ฑ๋๋ค.
๋ง์ฝ Replicas๊ฐ 0์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ReplicaSet์ Pod๋ค์ด ๋์์ ์ญ์ ๋๋ ๋ฐ๋ฉด StatefulSet์ index๊ฐ ๋์ Pod๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ญ์ ๋๋ค.
๋์ ์ฐจ์ด๋ PVC๋ฅผ ๋ค๋ฃฐ ๋๋ ์ฐจ์ด๊ฐ ์๋ค.
ReplicaSet์ ์์ฑํ ๋ Pod์ PV๋ฅผ ์ฐ๊ฒฐํ๋ ค๋ฉด ์ง์ PVC๋ฅผ ์์ฑํด์ฃผ์ด์ผ ํ๋ค. ๋ฐ๋ฉด StatefulSet์ volumeClaimTemplate์ ์ฌ์ฉํ์ฌ PVC๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ Pod์ ์ฐ๊ฒฐํ ์ ์๋ค.
๋ฐ๋ผ์ ReplicaSet์ ์์ฑ๋๋ Pod๋ค์ด ๋ชจ๋ ๊ฐ์ PVC๋ฅผ ์ฐ๊ฒฐํ์ง๋ง, StatefulSet์ ๊ฒฝ์ฐ Pod๋ง๋ค PVC๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์๋ค.
StatefulSet์ผ๋ก ๋ง๋ค์ด์ง Pod2๊ฐ ์ญ์ ๋๊ณ ๋ค์ ๋ง๋ค์ด์ง๋ฉด ๊ธฐ์กด์ ์๋ PVC-2์ ๋ค์ ์ฐ๊ฒฐ๋๋ค. ์ฆ, Pod๊ฐ ์ญ์ ๋๋ PVC๋ ๋จ์์๋๋ค๋ ๋ง์ด๋ค.
ReplicaSet์ ๊ฐ ๋ ธ๋๋ค๊ณผ PVC๊ฐ ๊ฐ์ ๋ ธ๋์ ์์ด์ผ ์ฐ๊ฒฐํ ์ ์๋ค. ๋ง์ฝ Pod-913jg๊ฐ PVC1๊ณผ ๋ค๋ฅธ ๋ ธ๋์ ์กด์ฌํ๋ค๋ฉด ์ฐ๊ฒฐํ ์ ์๋ค. ๋ฐ๋ผ์ ํ ํ๋ฆฟ ์์ nodeSelector: ๋ฅผ ์ง์ ํด์ ๋ ธ๋๋ฅผ ์ ํด์ค์ผ ํ๋ค.
๋ฐ๋ฉด StatefulSet์ ์์์ ๋ ธ๋์ ๋์ผํ ์์น์ PVC๋ค์ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ท ๋ฑํ๊ฒ ๋ฐฐํฌํ ์ ์๋ค.
ReplicaSet์์ nodeSelector๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฌ ๊ฐ์ Pod๋ค์ ์์ฑํ ๊ฒฝ์ฐ PVC์ ๋ค๋ฅธ node์ ์์ฑ๋ Pod์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
StatefulSet ๋ง๋ค ๋ ServiceName์ด๋ผ๋ ์์ฑ์ผ๋ก ์๋น์ค ์ด๋ฆ์ ๋ฃ์ ์ ์๋๋ฐ ์ด ์ด๋ฆ๊ณผ ๋งค์นญ๋๋ Headless ์๋น์ค๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ๋ง๋ค์ด์ง Pod์ ์์ธก ๊ฐ๋ฅํ ๋๋ฉ์ธ ์ด๋ฆ์ด ๋ง๋ค์ด์ง๊ฒ๋๋ค.
๋ฐ๋ผ์ InternalServer์ ํน์ pod์์ ์ํ๋ pod๋ก ์ฐ๊ฒฐํ ์ ์๋ค.
Ingress
์ฟ ๋ฒ๋คํฐ์ค์์๋ Ingress Controller๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฉ์ธ์ผ๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ๊ฐ ์๋น์ค์ ๋ง๋ Pod๋ก ๋ถ์ฐ์ํฌ ์ ์๋ค.
Ingress ๋ฅผ ์ด์ฉํ๋ฉด Canary Upgrade๋ ์ํํ ์ ์๋ค.
Ingress Controller๋ฅผ ์ฌ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ์ผ๋ถ๋ง ํน์ Service๋ก ๋ถ์ฐ ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ท ์๋น์ค๋ฅผ ํ ์คํธํ ์ ์๋ค.
์ฐ๋ฆฌ๋ Ingress ๋ฅผ ์์ฑํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๋ฃฐ๋ค์ ์ง์ ํ ์ ์๋ค.
์ด๋ฐ Ingress๋ฅผ ์์ฑํ๋ค๋ฉด Ingress Controller๋ฅผ ์ค์นํ์ฌ ์ ์ฉ์์ผ์ผ ํ๋ค.
๋์์ ์ํด์ ๋ณ๋์ ํ๋ฌ๊ทธ์ธ์ธ nginx, kong๋ฑ์ ์ค์นํด์ผํ๋ค. ๋ง์ฝ Nginx๋ฅผ ์ค์นํ๋ค๋ฉด deployment์ replicaset์ด ์์ฑ๋๊ณ ์ค์ ingress์ ๊ตฌํ์ฒด์ธ ingress pod๊ฐ ์์ฑ๋๋ค.
์ด ingress pod๊ฐ ingress rule์ด ์๋์ง ํ์ธํ๊ณ rule๋๋ก service๋ค์ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๊ฒ ๋๋ค.
๋ํ ์ธ๋ถ์์ ingress pod์ ์ ๊ทผํ ์ ์๋๋ก service๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋๋ฐ ์ง์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ค์นํ๋ค๋ฉด NodePort๋ฅผ ์ฌ์ฉ, ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ์ด์ฉํ๊ณ ์๋ค๋ฉด LoadBalancer๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ํด์ค๋ค.
Ingress๋ ์ฌ๋ฌ ๊ฐ ์ค์ ํ ์ ์๋ค.
Ingress ๊ธฐ๋ฅ 3๊ฐ์ง
1. Service Loadbalancing
Ingress rule์ ์ ์ํ์ฌ ์์ฒญํ path์ ์๋ง์ ์๋น์ค๋ก LoadBalancing์ ํ ์ ์๋ค.
2. Canary Upgrade
๊ธฐ์กด๊ณผ ๋์ผํ host๋ก serviceName๋ง ๋ค๋ฅด๊ฒ Ingress๋ฅผ ์์ฑํ์ฌ ํธ๋ํฝ์ ์ผ๋ถ๋ง ์๋ก ์์ฑํ Service๋ก ๋ถ์ฐ์์ผ Canary Upgrade๋ฅผ ์งํํ ์ ์๋ค.
์ด๋ weight๋ฅผ ์ง์ ํ์ฌ ์ผ๋ง์ ํธ๋ํฝ์ ์๋ก ์์ฑํ svc-v2๋ก ๋ณด๋ผ๊ฑด์ง ์ง์ ํ ์ ์๋ค.
๋ํ ํน์ ๋๋ผ๋ณ๋ก ํ ์คํธํ๊ณ ์ถ๋ค๋ฉด ํค๋ ์ต์ ์ ์ฌ์ฉํ์ฌ Language: kr์ธ ์์ฒญ์ด ์ค๋ฉด svc-v2๋ก ๋ณด๋ผ ์๋ ์๋ค.
3. ์ธ์ฆ์ ๊ด๋ฆฌ
Ingress๋ฅผ ์์ฑํ ๋, tls๋ผ๋ ์ต์ ์ผ๋ก secret name์ผ๋ก ์ค์ secret ์ค๋ธ์ ํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ด secret ์์ ์ธ์ฆ์๋ฅผ ๋ด์์ ๊ตฌ์ฑํ๋ฉด ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ ์์ https://๋ฅผ ๋ถ์ฌ์ผ๋ง ์ ๊ทผํ ์ ์๊ฒ๋๋ค.
์ด secret์์๋ data๊ฐ์ผ๋ก ์ธ์ฆ์๋ฅผ ๋ด๊ณ ์๋ค.
Autoscaler
์ฟ ๋ฒ๋คํฐ์ค์ Autoscaler์๋ 3๊ฐ์ง๊ฐ ์๋ค. Pod์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํค๋ HPA(Horizontal Pod Autoscaler), Pod์ ๋ฆฌ์์ค๋ฅผ ์ฆ๊ฐ์ํค๋ VPA(Vertical Pod Autoscaler), ํด๋ฌ์คํฐ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ CA(Cluster AutoScaler)๊ฐ ์๋ค.
3๊ฐ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ HPA์ ๋ํด ์์๋ณด์.
HPA (Horizontal Pod Autoscaler)
Pod์ ๊ฐ์๋ฅผ ์กฐ์ ํ๋ Autoscaler ์ด๋ค.
ํธ๋ํฝ์ด ์ฆ๊ฐํ์ฌ ํ์ฌ ๋์์ค์ธ Pod์ ๋ฆฌ์์ค ์์์ด ๋ชจ๋ ์ฌ์ฉ๋๋ ์ํฉ์ ๋๋ฌํ๊ฒ ๋ ๊ฒฝ์ฐ, ์ฌ์ ์ ์ ์ํ HPA๊ฐ Controller์ replicas๋ฅผ ์กฐ์ ํ์ฌ Pod์ ๊ฐ์๋ฅผ ์กฐ์ ํ๋ค.
Pod์ ๊ฐ์๊ฐ ์ํ์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ฒ์ Scale Out / ์ค์ด๋๋ ๊ฒ์ Scale In์ด๋ผ๊ณ ํฉ๋๋ค. (์์ง์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ฒ์ Scale up์ด๋ผ๊ณ ํจ)
์ฅ์ ๋ณต๊ตฌ๊ฐ ์ ์ํ๊ฒ ์ด๋ฃจ์ด์ ธ์ผํ๋ฏ๋ก App์์ ๊ถ์ฅ์ ํ๋ค. ์์ฒด์ ๊ธฐ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ App์๋ ๊ถ์ฅํ์ง ์์. Pod์ ์ํ์ ์ฆ๊ฐ๋ง์ด ์ผ์ด๋๋ฏ๋ก ๋ชจ๋ pod์ ์ญํ ์ด ๊ฐ์ stateless app์์๋ง ๊ฐ๋ฅ.
์๋ฅผ๋ค์ด stateful app ์ค master, slave Pod๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. HPA๋ master, slave Pod์ค ์ด๋ค๊ฑธ scale up ํด์ผํ ์ง ์ ์ ์๋ค.
HPA์ ์ํคํ ์ฒ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Master Node์๋ ์ฟ ๋ฒ๋คํฐ์ค์ ์ค์ ๊ธฐ๋ฅ์ ํ๋ ์ปดํฌ๋ํธ๋ค์ด Podํํ๋ก ๋์์ ธ์๊ณ ์ฌ๊ธฐ์ Deployment, ReplicaSet, HPA ๋ฑ๋ฑ์ด ์๋ค.
HPA๊ฐ Pod์ ๊ฐ์๋ฅผ ๊ด๋ฆฌํ๋ ๋์ ํ๋ก์ธ์ค๋ ์๋์ ๊ฐ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ค์น ์ kubelet์ด๋ผ๋ ๊ฒ์ด ๊ฐ๊ฐ์ ๋ ธ๋๋ง๋ค ์ค์น๋๊ณ , ๋ ธ๋ ์์ ์๊ฒ ์๋ ํ๋๋ค์ ๊ด๋ฆฌํ๋ค.
์ฌ์ฉ์๊ฐ ReplicaSet์ ์์ฑํ๋ฉด kube-apiserver๋ฅผ ํตํด pod ์์ฑ ์์ฒญ์ด kubelet์๊ฒ ์ ๋ฌ๋๊ณ ์ ๋ฌ๋ ์์ฒญ์ ๊ฐ ๋ ธ๋์์ Container๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
HPA๊ฐ ๊ฐ Pod์ ์ฑ๋ฅ์ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ Resource Estimator์ธ cAdvisor๊ฐ kubelet์ ๋ฉ๋ชจ๋ฆฌ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค. ๊ทธ๋ผ metrics-server๊ฐ ๊ฐ๊ฐ์ ๋ ธ๋์ ์๋ kubelet์ ํตํด ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ด ์ฌ์ฉํ ์ ์๋๋ก kube-apiserver์ ๋ฑ๋กํ๋ค. HPA๋ ์ฌ๊ธฐ ๋ฑ๋ก๋ ์ ๋ณด๋ฅผ ๋ฐ์๊ฐ ์ ์๊ณ , 15์ด๋ง๋ค ์ฒดํฌ๋ฅผ ํ๊ณ ์๋ค๊ฐ ์ ์ ํ Scale Out, Scale In์ ์งํํ๋ ํ๋ก์ธ์ค์ด๋ค.