Knative Components
์ง๋ ํฌ์คํธ์์๋ ๋ก์ปฌ Kubernetes ํ๊ฒฝ์์ Knative๋ฅผ ์ ์ ํด๋ณด์๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ๊ทธ๋ ๋ํ๋ก์ด ํ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ์ดํด๋ณด๊ณ ์ ํ๋ค.
Architecture
Knative๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ค์ด ๊ฐ์์ ์ญํ ์ ๋งก์ ๋์ํ๋ Serverless ํ๋ ์์ํฌ์ด๋ค. ๊ทธ๋์ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ์์๋๋ฉด ์ฅ์ ๊ฐ ๋ฐ์ ํ์ ๋, ์ฝ๊ฒ ๋๋ฒ๊ทธ ํ ์ ์์ ๊ฒ์ด๋ค.
Activator
Knative๋ ์๋ฒ๋ฆฌ์ค์ ์ปจ์ ์ ์ ๋๋ก ์ง์ํ๊ธฐ ์ํด โscale-to-zeroโ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๊ฒ์ ํธ๋ํฝ์ด๋ ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ์์ ๋๋ ์ํฌ๋ก๋๋ฅผ โzeroโ ์์ค๊น์ง ๊บผ๋๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ด๋ ๊ฒ scale-to-zero๊ฐ ๋ ์ํ์์ ์ฒซ ํธ๋ํฝ์ด ๋ค์ด์ค๋ฉด, ๊ทธ ํธ๋ํฝ์ ์๋น์ค๋ก ์ ๋ฌ๋๋ ๊ฒ์ด ์๋๋ผ Activator์๊ฒ ์ ๋ฌ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด, Activator๋ ํด๋น ํธ๋ํฝ์ Autoscaler(๋ค์ ๋์ด)์๊ฒ ์ ๋ฌํ๊ณ , Autoscaler๊ฐ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ Knative์ ํ๊น Service๋ฅผ scale-up ํ๊ฒ ๋ฉ๋๋ค.
์์ฒญ์ด ๋๋ ๋๋๊ฑด ์๋๊น?
์ ๋ zero-scale ์ํฉ์์ ์ ๋ฌ๋ ์ฒซ ํธ๋ํฝ์ด ๋๋ ๋๋๊ฒ ์๋๊น ๊ฑฑ์ ์ด ๋์์ต๋๋ค. ์๋ฌด๋ฆฌ Serverless ์ฑ์ด๋ผ๊ณ ํด๋, ์ด๊ธฐ start-up์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋ง๋ จ์ด๋๊น์! ๐ค
Knative์ Activator๋ ๋ด๋ถ์ ์ผ๋ก โํ(Queue)โ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ 0-to-1 ์ํฉ์์ ๋ค์ด์ค๋ ํธ๋ํฝ์ ์ผ๋ถ ์์ฉํ ์ ์๋ค๊ณ ํฉ๋๋ค!
์ด โ์์ฒญ ๋ฒํผ๋งโ์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๋ ์๋ก์ด pod์ด ์์ํ ๋๊น์ง ์์ฒญ์ ๋ณด๊ดํฉ๋๋ค.
ํธ๋ํฝ ๋ฒ์คํธ ์ํฉ์ ๋์
๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์์ฒญ ๋ฒํผ๋ง์ ํธ๋ํฝ์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ ํธ๋ํฝ ๋ฒ์คํธ(traffic burst) ์ํฉ์์๋ ์ด๋ค์ง๋ค๊ณ ํฉ๋๋ค. ํ์ฌ scale๋ก ๊ฐ๋นํ๊ธฐ ์ด๋ ค์ด ํฐ ํธ๋ํฝ์ด ์๊ฐ์ ์ผ๋ก ๋ฐ์ํ๊ฒ ๋๋ฉด, ์์ฒญ์ ์ฆ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ฒ ๋ ์ ์๋๋ฐ, ์ด๋ ํด๋น ์์ฒญ์ Activator๊ฐ ๋ฒํผ๋ง ํ๊ณ , ์ดํ pod์ด ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ถํ ๋ถ์ฐ์ ์ํํ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Activator๋ ๋จ์ํ ์์ฒญ ํ ์ญํ ๋ฟ๋ง ์๋๋ผ ์ถ๊ฐ์ ์ธ Pod์ด ํ์ํ๋ค๊ณ ํ๋จ๋๋ฉด, ์๋์ผ๋ก ์๋ก์ด Pod์ ์์ฑํ๋๋ก ํธ๋ฆฌ๊ฑฐ ํ๋ ์ญํ ๋ ์ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์์ Knative์ Autoscaler์ ํ๋ ฅํด scale-up์ ์ํ ํฉ๋๋ค.
์ด ๊ฐ์ target-burst-capacity
์ ๊ฐ์ผ๋ก ์ค์ ํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ โ200โ ์
๋๋ค. ์ ์ญ์ ์ผ๋ก ์ค์ ํ ์๋ ์๊ณ , Revision ๋จ์๋ก ์ค์ ํ ์๋ ์์ต๋๋ค. [doc]
Autoscaler
Knative์ ์๋น์ค ํธ๋ํฝ์ ๋ชจ๋ํฐ๋ง ํ๊ณ , ํ์ํ ๊ฒฝ์ฐ Pod ๊ฐฏ์๋ฅผ ์๋์ผ๋ก ์กฐ์ ํฉ๋๋ค.
์์์ ์๊ฐํ scale-to-zero๋ฅผ ์ํํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฐ๋ก ์ด ๋ ์ ์ ๋๋ค.
Autoscaler๋ Pod์ ํธ๋ํฝ์ ๊ณ์ ๋ชจ๋ํฐ๋ง ํ๋ฉด์, scale-up๊ณผ scale-down์ ์ํ ํฉ๋๋ค.
์ ๋ Autoscaler๋ ํญ์ Activator์ ์ํด ํธ๋ฆฌ๊ฑฐ ๋๋ ์ค ์์๋๋ฐ, ๊ทธ๋ ์ง ์๊ณ ์ค์ค๋ก ๋ ๋ฆฝ์ ์ผ๋ก auto-scaling์ ์ํ ํฉ๋๋ค.
Activator์ ํ๋ ฅ
๋จ, Autoscaler๊ฐ Activator์ ๋์์ด ํ์ํ ๋๊ฐ ์์ต๋๋ค! ๋ฐ๋ก 0-to-1 ์ํฉ์ผ๋ก ๊ทธ๋์ pod์ด ์ ํ ์์ด ํธ๋ํฝ์ด ๋ชจ๋ํฐ๋ง ๋์ง ์์๊ณ , ์ด๋๋ Activator์ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ๋์ ํ์ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์์์ ์ดํด๋ณธ ํธ๋ํฝ ๋ฒ์คํธ๊ฐ ๋ฐ์ ํ๋ฉด, Activator๋ ์์ ๋ฒํผ์ ์ญํ ๋ง ์ํํ์ง, Pod ํ์ฅ์ ์ง์ ํธ๋ฆฌ๊ฑฐ ํ๋ ๊ฒ์ ์๋๋๋ค. ํธ๋ํฝ ๋ฒ์คํธ๋ฅผ ํด์ํ๊ธฐ ์ํ scale-up์ Autoscaler๊ฐ ์ํํ๊ฒ ๋ฉ๋๋ค.
Autoscaler HPA
Knative์์๋ 2๊ฐ์ง์ autosacler๋ฅผ ์ง์ ํฉ๋๋ค. ํ๋๋ ์๊น ์ดํด๋ณธ ํธ๋ํฝ ๊ธฐ๋ฐ์ autoscaler, ๊ทธ๋ฆฌ๊ณ ํ๋๋ Kubernetes์ HPA๋ฅผ ํ์ฉํ๋ autoscaler ์ ๋๋ค.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: my-service
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/metric: "concurrency" # ๋์ ์์ฒญ ์ ๊ธฐ๋ฐ ์ค์ผ์ผ๋ง
autoscaling.knative.dev/target: "10" # Pod๋น ์ต๋ ๋์ ์์ฒญ 10๊ฐ
autoscaling.knative.dev/minScale: "0" # ํ์ ์์ผ๋ฉด 0๊ฐ๋ก ์ค์ด๊ธฐ (Scale-to-Zero)
autoscaling.knative.dev/maxScale: "10" # ์ต๋ 10๊ฐ๊น์ง ํ์ฅ
---
annotations:
autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev" # HPA ๊ธฐ๋ฐ ์ค์ผ์ผ๋ง
autoscaling.knative.dev/metric: "cpu" # CPU ๊ธฐ๋ฐ ์ค์ผ์ผ๋ง
autoscaling.knative.dev/target: "75" # CPU ์ฌ์ฉ๋ 75% ๋๋ฌ ์ ํ์ฅ
autoscaling.knative.dev/minScale: "1" # ์ต์ Pod ๊ฐ์ 1๊ฐ ์ ์ง
autoscaling.knative.dev/maxScale: "10" # ์ต๋ 10๊ฐ๊น์ง ํ์ฅ
autoscaler HPA๋ CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ธฐ์ค์ผ๋ก pod ๊ฐฏ์๋ฅผ ์กฐ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ scale-to-zero๋ฅผ ์ง์ ํ์ง ์๊ณ , ์ต์ 1๊ฐ์ Pod์ด ์ ์ง ๋์ด์ผ ํฉ๋๋ค.
HPA ๊ธฐ๋ฐ์ ์ด autoscaler๋ ํธ๋ํฝ ๊ธฐ๋ฐ์ autoscaler ๋ณด๋ค ํ์ฅ์ด ๋๋ฆฌ๊ฒ ์ผ์ด๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ ๋ฉํธ๋ฆญ์ ์์งํ๋ ์ฃผ๊ธฐ์ ๊ด๋ จ์ด ์๋๋ฐ์.
- Kubernetes์
metric-server
์ ์งํ ์์ง ์ฃผ๊ธฐ- ๊ธฐ๋ณธ๊ฐ์ โ30์ดโ ์ ๋๋ค.
- Kubernetes ๊ธฐ๋ณธ ์ปดํฌ๋ํธ ์ ๋๋ค.
- ํด๋น Pod์
--metric-resolution=10s
๋ช ๋ น์ด๋ก ์์ง ์ฃผ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- HPA๊ฐ ํ์ฅ์ ๊ฒฐ์ ํ๋ ์ฃผ๊ธฐ
- ๊ธฐ๋ณธ๊ฐ์ โ15์ดโ ์ ๋๋ค.
- ์ด๊ฒ์ Kubernetes HPA์ ์ปดํฌ๋ํธ ์ ๋๋ค.
metric-server
์์ CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์์ ํ์ฅ ํ ์ง ์ฌ๋ถ๋ฅผ ํ๋จ ํฉ๋๋ค.--horizontal-pod-autoscaler-sync-period=5s
๋ช ๋ น์ด๋ก ์์ง ์ฃผ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Controller
Knative์ ๋ฆฌ์์ค ์ ๋ฐ์ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ ์ ๋๋ค. Knative์ Service์ Configuration, Revision ๋ฑ์ ๊ด๋ฆฌ ํฉ๋๋ค.
ksvc์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒ์ ๊ฐ์งํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด Revision์ ์์ฑ ๋ฐ ์ ๊ท pod์ด ์์ฑ๋๋๋ก ํฉ๋๋ค.
Webhook
์ฌ์ฉ์๊ฐ kubectl create ksvc ...
๋ฅผ ํตํด Knative ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ฉด, ์ด ์์ฒญ์ Kubernetes API ์๋ฒ๋ก ์ ๋ฌ ๋ฉ๋๋ค.
API ์๋ฒ๋ โAdmission Webhookโ์ ํธ์ถํ์ฌ ๋ฆฌ์์ค๋ฅผ ๊ฒ์ฆ & ๋ณํํ๋๋ก ํ๋๋ฐ์. ์ด๋, Knative์ webhook ์๋น์ค๊ฐ ์ด ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌ ํฉ๋๋ค. ํ๋ ์ญํ ์ 2๊ฐ์ง ์ธ๋ฐ,
- Validation Webhook
- ๋ฆฌ์์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ ๋์๋์ง ํ์ธ ํฉ๋๋ค.
- ์๋ชป๋ ์ค์ ์ด๋ผ๋ฉด ๋ฆฌ์์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๊ฑฐ๋ถ ํฉ๋๋ค.
- Mutation Webhook
- ์ค์ ์ด ๋ถ์กฑํ๊ฒ ๋ค์ด์๋ค๋ฉด, ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ์ ์ฑ์ ์ค๋๋ค.
Kubernetes Admission Webhook
์์ ์ CKA ๊ณต๋ถํ ๋ ๋ดค๋ ๊ฒ ๊ฐ์๋ฐ, ์ด๋ฒ๋ฐ ๋ค์ ๋ณด๋ ์๋กญ๊ฒ ๋๊ปด์ก๋ค ใ ใ
์ฌ์ฉ์๊ฐ kubectl create/apply ...
๋ก ๋ฆฌ์์ค ์์ฑ์ Kubernetes API์ ์์ฒญํ๋ฉด, Kubernetes์ Admission Webhook์ด ์์ฒญ์ ๊ฐ๋ก ์ฑ๊ณ , ๊ฒ์ฆ๊ณผ ๋ณํ ์์
์ ์ํ ํฉ๋๋ค.
๊ฒ์ฆ์ด ํต๊ณผ ํ๋ฉด, API ์๋ฒ๊ฐ ์์ฒญ์ etcd์ ์ ์ฅํ๊ณ , ํด๋น ๋ฆฌ์์ค๋ฅผ ์ค์ ๋ก ์์ฑํฉ๋๋ค.