Kubernetes ã¯ééããªãã³ã³ãã ãããã€ã¡ã³ãã®äž»èŠãªãã©ãããã©ãŒã ã«ãªããŸããã API ãšãã«ã¹ã¿ã ãªãœãŒã¹ã§ API ãæ¡åŒµããã«ã¹ã¿ã ã³ã³ãããŒã©ãŒã䜿çšããŠãã»ãŒãã¹ãŠã®ãã®ãå¶åŸ¡ããæ©èœãæäŸããŸãã
ãã ãããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãæ£ç¢ºã«å±éãæ§æã管çãæ¡åŒµããæ¹æ³ã«ã€ããŠè©³çŽ°ãªæ±ºå®ãäžãå¿ èŠããããŸããã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒãªã³ã°ãä¿è·ããã©ãã£ã㯠ãããŒã®åé¡ã¯ããŠãŒã¶ãŒã®è£éã«ä»»ãããŠããŸããããã«ãããKubernetes ã¯ãCloud Foundry ã Heroku ãªã©ã®åŸæ¥ã®ãµãŒãã¹ãšããŠã®ãã©ãããã©ãŒã (PaaS) ãšã¯ç°ãªããŸãã
ãããã®ãã©ãããã©ãŒã ã¯ç°¡çŽ åããããŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ãåããŠãããåã ã®ã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ããã«é¢ããããšãå€ãã¢ããªã±ãŒã·ã§ã³éçºè ã察象ãšããŠããŸããã«ãŒãã£ã³ã°ããããã€ã¡ã³ããããã³ã¡ããªã¯ã¹ã¯ãåºç€ãšãªã PaaS ã·ã¹ãã ã«ãã£ãŠãŠãŒã¶ãŒã«å¯ŸããŠééçã«ç®¡çãããŸãã
ãœãŒã¹ããåºè·ãŸã§ã®ã¯ãŒã¯ãããŒã¯ãã«ã¹ã¿ã ã³ã³ãã ã€ã¡ãŒãžã®äœæããããã€ãåä¿¡ãã©ãã£ãã¯çšã®æ°ããã«ãŒããš DNS ãµããã¡ã€ã³ã®èšå®ã«ãã£ãŠ PaaS ã«ãã£ãŠåŠçãããŸãããããã¯ãã¹ãŠã³ãã³ãã§èµ·åãããŸã git push
.
Kubernetes ã¯ããã®ãããªãã©ãããã©ãŒã ã®ã³ã¢æ§æèŠçŽ ã®ã¿ã (æå³çã«) æäŸãããããã³ãã¥ããã£ãèªç±ã«äœæ¥ãè¡ãããšãã§ããŸããã©ããã£ãŠ
Kubernetes ã¯ãã©ãããã©ãŒã ãæ§ç¯ããããã®ãã©ãããã©ãŒã ã§ããã¹ã¿ãŒãã«ã¯æé©ã§ããããã£ããã·ã¥ã«ã¯æé©ãªäœçœ®ã§ãã
ãã®çµæãå€æ°ã® Kubernetes ãã«ããèŠãããã»ããOpenShift ã Rancher ãªã©ãKubernetes çšã® PaaS ãäœæããããšããŠãããã¹ãã£ã³ã°äŒç€ŸãèŠãããŸãã Kube-PaaS åžå Žãæé·ããäžãGoogle ãš Pivotal ã«ãã£ãŠ 2018 幎 XNUMX æã«èšç«ããã Knative ããã®ãªã³ã°ã«åå ¥ããŠããŸãã
Knative 㯠Google ãš Pivotal ã®ã³ã©ãã¬ãŒã·ã§ã³ã§ãããIBMãRedHatãSolo.im ãªã©ã®ä»ã®äŒæ¥ã®æ¯æŽãå°ãåããŠããŸãã Kubernetes ãšåæ§ã® PaaS æ©èœãæäŸãããµãŒããŒã¬ã¹ ã³ã³ãã¥ãŒãã£ã³ã° ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã«å¯Ÿããæé«ã®ãµããŒããæäŸããŸãã Kubernetes ãã«ããšã¯ç°ãªããKnative ã¯äºææ§ã®ãã Kubernetes ã¯ã©ã¹ã¿ãŒã«ã¢ããªã³ãšããŠã€ã³ã¹ããŒã«ããããŠãŒã¶ãŒ ãªãœãŒã¹ãéããŠæ§æãããŸãã
ãã€ãã£ããšã¯äœã§ããïŒ
Knative ã¯ããææ°ã®ãµãŒããŒã¬ã¹ ã³ã³ãã¥ãŒãã£ã³ã°ã䜿çšããŠã¯ãŒã¯ããŒããé ä¿¡ããã³ç®¡çããããã® Kubernetes ããŒã¹ã®ãã©ãããã©ãŒã ããšèª¬æãããŠããŸãã Knative ã¯ããã®ãããªãã©ãããã©ãŒã ãšããŠèªããè«æ±ããªãããåæ HTTP ãªã¯ãšã¹ãã«å¿ããŠã³ã³ãããç©æ¥µçã«èªåã¹ã±ãŒãªã³ã°ããŸãã䜿çšãããŠããªããµãŒãã¹ã¯æçµçã«ãŒããŸã§ã¹ã±ãŒã«ããŠã³ããããµãŒããŒã¬ã¹ ã¹ã¿ã€ã«ã®ãªã³ããã³ã ã¹ã±ãŒãªã³ã°ãæäŸãããŸãã
Knative ã¯ãKubernetes ã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ããã次ã®æ©èœãæäŸããäžé£ã®ã³ã³ãããŒã©ãŒã§æ§æãããŠããŸãã
- ãœãŒã¹ ã³ãŒã (ã³ã³ããŒãã³ãã«ãã£ãŠæäŸããã) ããã³ã³ããåãããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãã å®æã«åããŠããªãã®èäžãæŒããŠããããå·çã®ããã®æç¶å¯èœã§æ¬ç©ã®ã¢ãŒã¡ã³ã¿ã ãäœãåºãã),
- ã¢ããªã±ãŒã·ã§ã³ãžã®åä¿¡ãã©ãã£ãã¯ãžã®ã¢ã¯ã»ã¹ãæäŸãã (ã³ã³ããŒãã³ãã«ãã£ãŠæäŸããã) ãµãŒãã³ã°),
- ã¢ããªã±ãŒã·ã§ã³ã®é ä¿¡ãšãªã³ããã³ãã®èªåã¹ã±ãŒãªã³ã° (ãããã³ã³ããŒãã³ãã«ãã£ãŠæäŸãããŸã) ãµãŒãã³ã°),
- ã¢ããªã±ãŒã·ã§ã³ã®èµ·åã«ã€ãªããã€ãã³ãã®ãœãŒã¹ãç¹å®ãã (ã³ã³ããŒãã³ãã«ãã£ãŠæäŸããã) ã€ãã³ãã£ã³ã°).
äž»èŠãªã³ã³ããŒãã³ãã¯ãµãŒãã¹ã§ããããããŒãžã ã¢ããªã±ãŒã·ã§ã³ã®ããããžã§ãã³ã°ãèªåã¹ã±ãŒãªã³ã°ããã©ãã£ãã¯ç®¡çãæäŸããŸãã Knative ãã€ã³ã¹ããŒã«ããåŸããKubernetes API ã«å®å šã«ã¢ã¯ã»ã¹ã§ããããããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã管çã§ããŸãã æ®éã® ãŸããKnative ãµãŒãã¹ããããã°ãã圹å²ãæããããããã®ãµãŒãã¹ã䜿çšãããã®ãšåã API ããªããã£ã (ã¢ãžã¥ãŒã«ããµãŒãã¹ãªã©) ãæäœããŸãã
Serving ã®å©ããåããŠãBlue-Green ãã©ãã£ã㯠ã«ãŒãã£ã³ã°ãèªååããããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã®æŽæ°ããŒãžã§ã³ãé ä¿¡ãããšãã«ãã¢ããªã±ãŒã·ã§ã³ã®æ°ããŒãžã§ã³ãšæ§ããŒãžã§ã³ã®éã§ãã©ãã£ãã¯ã確å®ã«åé¢ãããŸãã
Knative èªäœã¯ãäºææ§ã®ããã€ã³ã°ã¬ã¹ ã³ã³ãããŒã©ãŒã®ã€ã³ã¹ããŒã«ã«äŸåããŠããŸãããã®èšäºã®å·çæç¹ã§ã¯ãµããŒããããŠããŸã
Knative ã¯ã²ãŒããŠã§ã€ã®ã¿ã«äŸåãããããIstio Service Mesh ã¯ãIstio ã³ã³ãããŒã« ããã«ãã€ã³ã¹ããŒã«ããã«è©Šããã Knative ãŠãŒã¶ãŒã«ãšã£ãŠå€§ããªäŸåé¢ä¿ã«ãªãå¯èœæ§ããããŸãã
ãã®ãããã»ãšãã©ã®ãŠãŒã¶ãŒã¯ Knative ãžã®ã²ãŒããŠã§ã€ãšã㊠Gloo ã奜ã¿ã(Knative ã®ã¿ã䜿çšããç®çã§) Istio ãšåæ§ã®æ©èœã»ãããæäŸããªããã䜿çšãããªãœãŒã¹ãå€§å¹ ã«å°ãªããªããéçšã³ã¹ããäœããªããŸãã
Knative ãã¹ã¿ã³ãã§åäœãããŠãã¹ãããŠã¿ãŸãããã GKE ã§å®è¡ãããŠãããæ°ããã€ã³ã¹ããŒã«ãããã¯ã©ã¹ã¿ã䜿çšããŸãã
kubectl get namespace
NAME STATUS AGE
default Active 21h
kube-public Active 21h
kube-system Active 21h
Knative ãš Gloo ã®ã€ã³ã¹ããŒã«ãéå§ããŸããããããã¯ä»»æã®é åºã§å®è¡ã§ããŸãã
# ÑÑавОЌ Knative-Serving
kubectl apply -f
https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ÑÑавОЌ Gloo
kubectl apply -f
https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...
ãã¹ãŠã®ãããããå®è¡äžãã¹ããŒã¿ã¹ã§ããããšã確èªããŸãã
kubectl get pod -n knative-serving
NAME READY STATUS RESTARTS AGE
activator-5dd55958cc-fkp7r 1/1 Running 0 7m32s
autoscaler-fd66459b7-7d5s2 1/1 Running 0 7m31s
autoscaler-hpa-85b5667df4-mdjch 1/1 Running 0 7m32s
controller-85c8bb7ffd-nj9cs 1/1 Running 0 7m29s
webhook-5bd79b5c8b-7czrm 1/1 Running 0 7m29s
kubectl get pod -n gloo-system
NAME READY STATUS RESTARTS AGE
discovery-69548c8475-fvh7q 1/1 Running 0 44s
gloo-5b6954d7c7-7rfk9 1/1 Running 0 45s
ingress-6c46cdf6f6-jwj7m 1/1 Running 0 44s
knative-external-proxy-7dd7665869-x9xkg 1/1 Running 0 44s
knative-internal-proxy-7775476875-9xvdg 1/1 Running 0 44s
Gloo ã¯ã«ãŒãã£ã³ã°ã®æºåãã§ããŠããŸããèªåã¹ã±ãŒãªã³ã°ã® Knative ãµãŒãã¹ (kservice ãšåŒã³ãŸã) ãäœæããããã«ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããŸãããã
Knative ãµãŒãã¹ã¯ãåŸæ¥ã® Deployment+Service+Ingress ã¢ãã«ãããã¢ããªã±ãŒã·ã§ã³ã Kubernetes ã«é ä¿¡ããç°¡åãªãã¹ãæäŸããŸãããã®äŸã䜿ã£ãŠäœæ¥ããŠãããŸãã
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
name: helloworld-go
namespace: default
spec:
template:
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go
env:
- name: TARGET
Value: Knative user
ããããã¡ã€ã«ã«ã³ããŒãã次ã®ããã«ã㊠Kubernetes ã¯ã©ã¹ã¿ãŒã«é©çšããŸããã
kubectl apply -f ksvc.yaml -n default
ãhelloworld-goããé ä¿¡ããåŸãã¯ã©ã¹ã¿ãŒå 㧠Knative ã«ãã£ãŠäœæããããªãœãŒã¹ã衚瀺ã§ããŸãã kãµãŒãã¹:
kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8 2/2 Running 0 68s
ãhelloworld-goãã€ã¡ãŒãžãå«ããããã¯ãkservice ããããã€ããããšãã«èµ·åãããŸãããã©ãã£ãã¯ããªãå Žåããããã®æ°ã¯ãŒãã«æžããŸããéã«ãåæãªã¯ãšã¹ãã®æ°ãç¹å®ã®æ§æå¯èœãªãããå€ãè¶ ãããšããããã®æ°ãå¢å ããŸãã
kubectl get ingresses.networking.internal.knative.dev -n default
NAME READY REASON
helloworld-go True
Knative ã¯ãå éš Knative API ã®ç¹å¥ãªãingressããªãœãŒã¹ã䜿çšã㊠ingress ãæ§æããŸãã Gloo ã¯ããã® API ãæ§æãšããŠäœ¿çšããŠãBlue-Green å°å ¥ã¢ãã«ãèªå TLS 匷å¶ãã¿ã€ã ã¢ãŠãããã®ä»ã®é«åºŠãªã«ãŒãã£ã³ã°æ©èœãªã©ã® PaaS ã®ãããªæ©èœãæäŸããŸãã
ãã°ãããããšãããããæ¶ããŠããããšãããããŸã (åä¿¡ãã©ãã£ãã¯ããªãã£ããã)ã
kubectl get pod -n default
No resources found.
kubectl get deployment -n default
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
helloworld-go-fjp75-deployment 0 0 0 0 9m46s
æåŸã«ãç§ãã¡ã¯åœŒãã«å°éããããšããŸãã次ã䜿çšãããšãKnative Proxy ã® URL ãç°¡åãã€ç°¡åã«ååŸã§ããŸãã glooctl
:
glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80
ã€ã³ã¹ããŒã«ãããŠããªãå Žå glooctl
kube ãµãŒãã¹ã®ã¢ãã¬ã¹ãšããŒãã確èªã§ããŸãã
kubectl get svc -n gloo-system knative-external-proxy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
knative-external-proxy LoadBalancer 10.16.11.157 35.190.151.188 80:32168/TCP,443:30729/TCP 77m
cURL ã䜿çšããŠããŒã¿ãå®è¡ããŠã¿ãŸãããã
curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!
Knative ã¯ãGloo ã®é«æ§èœãã«ã¹ã¿ã㯠API ã²ãŒããŠã§ã€ã䜿çšããŠãããã«äœ¿ãã Kubernetes äžã§éçºè ã«ã»ãŒ PaaS ãæäŸããŸãããã®æçš¿ã¯ãKnative ã®åºç¯ãªã«ã¹ã¿ãã€ãº ãªãã·ã§ã³ãšè¿œå æ©èœã®è¡šé¢ããªãã£ãã ãã§ããã°ããåãã ïŒ
Knative ã¯ãŸã è¥ããããžã§ã¯ãã§ããã«ããããããããã®ããŒã 㯠6 é±éããšã«æ°ããããŒãžã§ã³ããªãªãŒã¹ããTLS ã®èªåå±éãã³ã³ãããŒã« ããã«ã®èªåã¹ã±ãŒãªã³ã°ãªã©ã®é«åºŠãªæ©èœã®å®è£ ãå§ãŸããŸãããè€æ°ã®ã¯ã©ãŠãäŒæ¥éã®ååã®çµæããŸã Google ã®æ°ãã Cloud Run ãµãŒãã¹ã®åºç€ãšããŠãKnative ããµãŒããŒã¬ã¹ ã³ã³ãã¥ãŒãã£ã³ã°ãš Kubernetes äžã® PaaS ã®äž»èŠãªéžæè¢ãšãªãå¯èœæ§ã¯ååã«ãããŸãããã¥ãŒã¹ããã©ããŒããŠãã ããïŒ
ãµãŠã¹ããªããžã®ç·šéè
ãã
èªè
ã®æèŠã¯ç§ãã¡ã«ãšã£ãŠéèŠã§ãããããKnativeãKubernetesããµãŒããŒã¬ã¹ ã³ã³ãã¥ãŒãã£ã³ã°ã«é¢ããä»åŸã®èšäºã«é¢é£ããç°¡åãªã¢ã³ã±ãŒãã«ãåå ãã ããã
ç»é²ãŠãŒã¶ãŒã®ã¿ãã¢ã³ã±ãŒãã«åå ã§ããŸãã
Knative ãšãµãŒããŒã¬ã¹ ã³ã³ãã¥ãŒãã£ã³ã°ã«é¢ããèšäºãã¬ã€ããæžãç¶ããã¹ãã§ãããã?
-
ã¯ã
-
ããããšã
28 人ã®ãŠãŒã¶ãŒãæ祚ããŸããã 4åã®ãŠãŒã¶ãŒãæ£æš©ããã
åºæïŒ habr.com