Install Knative Serving
์ด ๊ธ์ ์์ฑํ๋ 24๋
6์์ Knative v1.14.1
๋ฒ์ ์ด ์ต์ ๋ฒ์ ์
๋๋ค.
Apple M3 ๋งฅ๋ถ(Sonoma 14.5)์์ Rancher Desktop(1.14.1
) ํตํด Local Kubernetes Cluster ๊ตฌ์ฑํ์ฌ ์งํํ์์ต๋๋ค. K8s ๋ฒ์ ์ 1.28.9
์
๋๋ค.
Check Knative Compatibility
Knative๋ฅผ ์ค์นํ๊ฑฐ๋ ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ํ ๋๋ K8s์์ ํธํ์ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค. Knative์ Release Support ๋ฌธ์๋ฅผ ๋ณด๋ฉด, ํธํ๋๋ minimum k8s version์ด ๋ช ์๋์ด ์๋ค.
์ด๋ฒ ๊ธ์์ ์ฌ์ฉํ๋ Knative ๋ฒ์ ์ 1.14.1
๋ฒ์ ์ด๋ค. ์ ๋ฒ์ ์ ์ต์ K8s 1.28
๋ฒ์ ์ ์๊ตฌํ๋ค. ์๋ง, K8s ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ๋ฉด์ K8s API ๊ท๊ฒฉ์ด๋ ๊ธฐ๋ฅ๋ค์ด ์ถ๊ฐ๋๊ฑฐ๋ ๋ณ๊ฒฝ ๋๋๋ฐ, Knative์์ ์ฌ์ฉํ๋ ๋ก์ง์์ ํด๋น ๋ฒ์ ์ด์๋ถํฐ ์ง์ํ๋ ๊ฒ๋ค์ด ์๋๊ฐ๋ณด๋ค.
Using YAMLs
Install knative CRDs
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.14.1/serving-crds.yaml
Install Serving Core
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.14.1/serving-core.yaml
์์ ๋ช
๋ น์ด๋ฅผ ํตํด Knative์ serving core ์ปดํฌ๋ํธ๋ฅผ ์ค์นํ๋ค. core ์ปดํฌ๋ํธ๋ knative-serving
๋ค์์คํ์ด์ค์ ๋ํ๋ก์ด ๋๋ค.
$ kgp -n knative-serving
NAME READY STATUS RESTARTS AGE
webhook-5676f857c4-vp4bw 1/1 Running 0 75s
autoscaler-d57d974cb-8fnxb 1/1 Running 0 75s
controller-b8b47f9b9-jd8fw 1/1 Running 0 75s
activator-5d7f9fc58d-bwtk2 1/1 Running 0 75s
๋ํ๋ก์ด๋ ๊ฐ ์ปดํฌ๋ํธ๋ค์ด ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ์์ธํ ๋ด์ฉ์ Knative Architecture์ ๋ํด ๋ฐ๋ก ์ ๋ฆฌํ ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ์.
Deploy a Knative Service
YAML ํ์ผ๋ก ์ ์ํด์ Knative Service๋ฅผ ๋ํ๋ก์ด ํ๋ ๋ฐฉ๋ฒ๋ ์๋๋ฐ, ์ฌ๊ธฐ์์ Knative CLI์ธ kn
์ ์ฌ์ฉํด์ ์ฐ์ตํด๋ณด๊ฒ ๋ค.
kn service create hello \
--image ghcr.io/knative/helloworld-go:latest \
--port 8080 \
--env TARGET=World
์ข
์ข
kn
์ ์ฌ์ฉํด์ Knative ๋ฆฌ์์ค๋ฅผ ์ ์ดํ๋๊ฒ ํธ๋ฆฌํ ๋๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด, Knative์ Service๋ K8s Service์ ์ด๋ฆ์ด ๋๊ฐ์์ kubectl
๋ก ๋ฆฌ์์ค๋กค ํ์ธํ ๋ k get service
๋ก ํ๋ฉด ์ ๋๊ณ , k get services.serving.knative.dev
๋ก ํ๋ค์์ ์ ์ด์ค์ผ ํ๋ค. kn
์ ์ฌ์ฉํ๋ฉด kn service list
๋ง ํ๋ฉด ๋๋ ํจ์ฌ ๊ฐ๊ฒฐํด์ง๋ค!!
๋ณธ์ธ์ IngressNotConfigured
์ Ingress has not yet been reconciled.
๋ผ๋ ๋ฉ์์ง๋ก Knative Service๊ฐ ์์ฑ๋๋ค๊ฐ ๋ง์๋คโฆ ๐ค ์ ์๋ฌ๋ Knative Service๊ฐ ์ฌ์ฉํ Ingress๊ฐ ์ ๋๋ก ๊ตฌ์ฑ๋์ง ์์์ ๋ ๋ฐ์ํ๋ค. ์ด๋์ Ingress๋ K8s์ Ingress ๋ฆฌ์์ค๊ฐ ์๋๋ผ Istio์ Ingress Gateway์ ๊ฐ์ด ๋ผ์ฐํ
ํ๊น์ ๋์ ์ผ๋ก ์ ์ดํ ์ ์๋ Ingress ์ปดํฌ๋ํธ๋ฅผ ๋งํ๋ค. ์์ธํ ๋ด์ฉ์ ๋ณ๋์ ํฌ์คํธ์์ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค. ์ผ๋จ์ ๋ง์ ๋ถํธํ๊ฒ ํ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋์ ๋จ๊ณ๋ฅผ ์ํํ์.
Install Istio
Knative์ ๋คํธ์ํน ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์๋น์ค ๋ฉ์ฌ์ธ Istio๋ฅผ ์ค์นํ์!! Istio๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง, ์ฌ๊ธฐ์๋ istioctl
๋ก ์งํํ๋ค. Istio๋ฅผ ์ค์นํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํ๋ค๋ฉด, โInstall Istio and Addonsโ ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ์.
istioctl install -y
์์ ๋ช
๋ น์ด๋ก istio๋ฅผ ์ค์นํ๋ค. istio-system
๋ค์์คํ์ด์ค์ istiod
์ istio-ingressgateway
๊ฐ ํ๋ ์ค์น๋ ๊ฑธ ํ์ธํ๋ค.
Install net-istio
Istio๋ฅผ ์ค์น ํ๋ค๊ณ ๋๋๋๊ฒ ์๋๋ผ, Knative์์ Istio์ ๋ฆฌ์์ค์ CRD API๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก net-istio
๋ผ๋ ๋ณ๋์ ์ปดํฌ๋ํธ๋ฅผ ์ค์นํด์ผ ํ๋ค. ์ค์นํ ๊ฒ๋ ๋ง๋ค;;
net-istio
๋ Knative์ Networking Layer๋ฅผ ์ด๋ฃจ๋ ์ปดํฌ๋ํธ๋ก Istio์ Ingress GW๋ฅผ ํตํด ํธ๋ํฝ์ Knative Service ๋ฆฌ์์ค๋ก ๋ผ์ฐํ
ํ๊ณ , Istio์ DestinationRule
๊ณผ VirtualService
๋ฅผ ์ฌ์ฉํด Knative์ ๊ฐ Revision์ผ๋ก ํธ๋ํฝ์ ๋ถ๋ฐฐํ๋ค. ๊ฒ๋ค๊ฐ ํธ๋ํฝ ๊ธฐ์ค์ผ๋ก auto-scaling์ ํ๊ฒ ๋ ๊ฒฝ์ฐ๋ Istio์ ํธ๋ํฝ ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ฒ ๋๋ค.
์ํผ net-istio
์ ๋ํ ๋ด์ฉ์ ๋ณ๋ ํฌ์คํธ์์ ์ข๋ ๋ค๋ค๋ณด๋๋ก ํ๊ณ ์ผ๋จ net-istio
๋ฅผ ์๋ ์ปค๋งจ๋๋ก ์ค์นํ์.
kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.14.1/net-istio.yaml
knative-serving
๋ค์์คํ์ด์ค์ ๊ธฐ์กด Knative์ ์ปจํธ๋กค ์ปดํฌ๋ํธ์ธ์ net-istio
์ ์ปจํธ๋กค ์ปดํฌ๋ํธ๋ค์ด ๋ํ๋ก์ด ๋๋ค.
NAME READY STATUS RESTARTS AGE
webhook-5676f857c4-vp4bw 1/1 Running 0 3h43m
autoscaler-d57d974cb-8fnxb 1/1 Running 0 3h43m
controller-b8b47f9b9-jd8fw 1/1 Running 0 3h43m
activator-5d7f9fc58d-bwtk2 1/1 Running 0 3h43m
net-istio-webhook-7dcd9cd55d-5nfsz 1/1 Running 0 13m
net-istio-controller-67c556df5f-g4j9q 1/1 Running 0 13m
Knative Service Re-deploying
Networking Layer์ธ Istio๋ ์ธํ ํ๊ฒ ๋ค. ๋ค์ Knative Serving์ ๋ํ๋ก์ด ํด๋ณด์.
kn service create hello \
--image ghcr.io/knative/helloworld-go:latest \
--port 8080 \
--env TARGET=World
---
---
...
0.014s The Route is still working to reflect the latest desired specification.
0.023s ...
0.037s Configuration "hello" is waiting for a Revision to become ready.
3.525s ...
3.531s Ingress has not yet been reconciled.
3.566s Ready to serve.
Service 'hello' created to latest revision 'hello-00001' is available at URL:
http://hello.default.svc.cluster.local
์ด์ ๋ Ingress ์ ์ ์์ ๋งํ์ง ์๊ณ Knative ๋ฆฌ์์ค๊ฐ ์ ๋ํ๋ก์ด ๋๋ค ใ ใ
Clean-up
์งํํ ์์์ ์ญ์์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋ค. ์ฐธ๊ณ ๋ก Destroy ํ ๋ ์ฝ๊ฐ์ ๋๋ ์ด๊ฐ ์์ผ๋, ๋ฆฌ์์ค๊ฐ ์ ์ญ์ ๋์๋์ง ํ์ธํ๊ณ ๋ค์ ๋จ๊ณ๋ฅผ ์งํํ์.
# destroy Knative Service
kn service delete hello
# destroy net-istio
kubectl delete -f https://github.com/knative/net-istio/releases/download/knative-v1.14.1/net-istio.yaml
# destroy istio
istioctl uninstall --purge
# destroy knative core components
kubectl delete -f https://github.com/knative/serving/releases/download/knative-v1.14.1/serving-core.yaml
# remove knative CRDs
kubectl delete -f https://github.com/knative/serving/releases/download/knative-v1.14.1/serving-crds.yaml
Using Knative Operator
Knative๋ Operator ํจํด์ผ๋ก ๋ํ๋ก์ดํ ์๋ ์๋ค.
Install Knative Operator
์ผ๋จ Knative Operator๋ฅผ ๋จผ์ ๋ํ๋ก์ด ํ์.
kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.14.3/operator.yaml
knative-operator
๋ผ๋ ๋ค์์คํ์ด์ค์ knative operator์ ๋ฆฌ์์ค๊ฐ ์์ฑ๋๋ค.
NAME READY STATUS RESTARTS AGE
operator-webhook-7cc7b89bdf-b5z76 1/1 Running 0 47s
knative-operator-fdbbd86d4-rqnvg 1/1 Running 0 47s
Deploy Knative Serving
์๋์ YAML์ ๋ํ๋ก์ด ํ์ฌ, KnativeServing
๋ฆฌ์์ค๋ฅผ knative-service
๋ค์์คํ์ด์ค์ ๋์ด๋ค.
apiVersion: v1
kind: Namespace
metadata:
name: knative-serving
---
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
name: knative-serving
namespace: knative-serving
์ ์ฉ์ด ๋ ํ์ ์๋ ๋ช ๋ น์ด๋ก ํ์ธํด๋ณด๋ฉด,
kubectl get knativeservings -A
---
NAMESPACE NAME VERSION READY REASON
knative-serving knative-serving 1.14.1 True
๊ทธ๋ฆฌ๊ณ knative-serivng
๋ค์์คํ์ด์ค๋ฅผ ํ์ธํด๋ณด๋ฉด ์๋์ ๊ฐ์ด K8s Pod๋ค์ด ๋ ์๋ค.
kubectl get pods -n knative-serving
---
NAME READY STATUS RESTARTS AGE
controller-b8b47f9b9-b68b4 1/1 Running 0 95s
autoscaler-d57d974cb-d78ct 1/1 Running 0 95s
webhook-5676f857c4-h5wwv 1/1 Running 0 94s
net-istio-controller-67c556df5f-5h4cl 1/1 Running 0 92s
activator-5d7f9fc58d-t9jpp 1/1 Running 0 96s
net-istio-webhook-7dcd9cd55d-xwgwk 1/1 Running 0 92s
autoscaler-hpa-54586c6544-gkm2t 1/1 Running 0 94s
storage-version-migration-serving-serving-1.14.1-lpbwj 0/1 Completed 0 93s
๋ฐ๋ก ๋ช
์ํ์ง ์์๋๋ฐ๋ Networking Layer์ธ net-istio
์ปดํฌ๋ํธ๊ฐ ์ค์น๋์๋ค!! ๐ฒ
Deploy a Knative Serving
kn
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด Knative Serving์ ํ๋ ๋ํ๋ก์ด ํด๋ณด์.
kn service create hello \
--image ghcr.io/knative/helloworld-go:latest \
--port 8080 \
--env TARGET=World
---
...
0.014s The Route is still working to reflect the latest desired specification.
0.023s ...
0.037s Configuration "hello" is waiting for a Revision to become ready.
3.525s ...
3.531s Ingress has not yet been reconciled.
3.566s Ready to serve.
Service 'hello' created to latest revision 'hello-00001' is available at URL:
http://hello.default.svc.cluster.local
๋ํ๋ก์ด๊ฐ ์ ๋๋ค~~~
Clean-up
๋ํ๋ก์ด ํ ์ญ์์ผ๋ก ์ง์์ฃผ๋ฉด ๋๋ค. ์ฐธ๊ณ ๋ก Destroy ํ ๋ ์ฝ๊ฐ์ ๋๋ ์ด๊ฐ ์์ผ๋, ๋ฆฌ์์ค๊ฐ ์ ์ญ์ ๋์๋์ง ํ์ธํ๊ณ ๋ค์ ๋จ๊ณ๋ฅผ ์งํํ์.
# destroy Knative Service
kn service delete hello
# destroy knative serving
kubectl delete knativeserving knative-serving -n knative-serving
# destroy knative serving operator
kubectl delete -f https://github.com/knative/operator/releases/download/knative-v1.14.3/operator.yaml
# destroy istio
istioctl uninstall --purge
๋ง๋ฌด๋ฆฌ ํ๋ฉฐ
ํ์ฌ์์ Knative๋ก Serverless Application์ ๋ฐฐํฌํ๊ณ ์ด์ํ๋๋ฐ, ์ด๋ฏธ ๊ตฌ์ถ๋ K8s ์ธํ๋ผ ์์์ ์ด์ํ๊ณ ์๋ ๊ฑฐ๋ผ ์์จ๋ณด๋ค๋ ํ์ฑ์ผ๋ก ์ด์ํ๊ณ ์๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ด๋ฒ์ Knative Serving์ ์ง์ ๋ก์ปฌ์ ์ค์น ํด๋ณด๋ฉด์ ์ ๊ทธ๋ฐ์ง ์ด๋ ดํ์ด ์๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
Knative๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ ์ด๋ฒ์ ๋ก์ปฌ์์ ๊ตฌ์ถํ๋ฉด์ ๊ถ๊ธํ๋ ๊ฑด ์ Networking Layer๊ฐ ๋ณ๋๋ก ํ์ํ ๊ฑธ๊น๋ฅผ ์๊ฐํ๊ฒ ๋์๋ค. ์งง์ ์ถ์ธก์ด์ง๋ง Knative๊ฐ Serverless Application์ ๋ฐฐํฌ/์ด์ํ๋ ๊ณผ์ ์์ Native K8s ๋ณด๋ค ๋ ์ ๊ตํ ๋ ๋ฒจ์ Network ์ ์ด์ ํธ๋ํฝ ์ ์ด๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค. ์๋ฌด๋๋ ์ฌ๋ฌ Revision์ ํธ๋ํฝ์ ์ํ๋ ๋น์จ๋ก ๋ผ์ฐํ ํ๋ค๊ฑฐ๋, ํธ๋ํฝ ๊ธฐ๋ฐ์ผ๋ก auto-scaling ํ๊ธฐ ์ํด ํธ๋ํฝ ์งํ๋ค์ ์์งํด์ผ ํ๋๋ฐ, ์๋น์ค ๋ฉ์ฌ๊ฐ ์์ด์ผ ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ค์ด๋ค. ๊ทธ๋์ Networking Layer๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค.
Knative๋ Istio๋ฅผ Default Networking Layer๋ก ์ฌ์ฉํ๊ณ ์๊ณ , ๊ทธ์ธ์๋ Kourier, Contour ๋ฑ์ Networking Layer๋ก๋ ์ง์ํ๋ค๊ณ ํ๋ค. Kourier๋ Knative์์ ๋ง๋ ๊ฒฝ๋ ์๋น์ค ๋ฉ์ฌ์ธ๋ฐ, Istio๋ณด๋ค ๊ฐ๋ฒผ์ด Ingress GW๋ฅผ ์ ๊ณตํ๋ค๊ณ ํ๋ค. Contour๋ ์๋น์ค ๋ฉ์ฌ์ ์ผ์ข ์ผ๋ก Envoy Proxy๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. Istio, Kourier, Contour ์ ๋ค Envoy Proxy๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ณตํต์ ์ ๊ฐ๋๋ค.
์ด ๊ธ์ ์ ์ผ๋ฉฐ Knative ๊ณต๋ถ์ ์ฒซ๊ฑธ์์ ๋ ๋ค. ์์ฆ์ ์ํ๊ณผ ์กธ์
์ํ ์ค๋นํ๋ค๊ณ ๊ณต๋ถ์ ์ธ ์ ์๋ ๋ฆฌ์์ค๊ฐ ์๊พธ๋ง ๋ถ์ฐ๋๊ณ ์๋ค. ๊ทธ๋๋ ์ค๋๋ง์ K8s์ ์๋ก์ด ์ํฌ๋ก๋๋ค์ ์ฌ๋ ค๋ณด๊ณ ํ๋ ํ๋ฉด์ ์ฌ๋ฐ์๋ค ใ
ใ
์ญ์ ์ํ๊ณผ ๋ฌธ์ ํธ๋ ๊ฒ๋ณด๋จ ์ด๋ฐ ์ชฝ์ด ์ ๋ง๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฌ๋๊น ์ปด๊ณต๊ณผ๋ฅผ ๊ฐ๊ฒ ์ง..?