在咱們部署Knative Serving service 以前,重要的是要了解其部署模型和構成Knative服務的Kubernetes資源。web
上一節咱們安裝部署了Knative Serving。文本主要介紹當咱們安裝了Knative Serving以後,安裝了那些Kubernetes 服務。總共包含了兩個方面。serving-core 和網絡層。下面咱們分別查看一下。api
執行下面的命令,以查看部署了那些k8s service:網絡
kubectl get services -n knative-serving
能夠看到以下的輸出:dom
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE activator-service ClusterIP 10.100.157.161 <none> 9090/TCP,8008/TCP,80/TCP,81/TCP 24h autoscaler ClusterIP 10.100.73.90 <none> 9090/TCP,8008/TCP,8080/TCP,443/TCP 24h controller ClusterIP 10.100.109.204 <none> 9090/TCP,8008/TCP 24h webhook ClusterIP 10.100.101.64 <none> 9090/TCP,8008/TCP,443/TCP 24h
執行下面的命令,以查看部署了那些Deployments:spa
kubectl get deployments -n knative-serving
能夠看到以下輸出:代理
NAME READY UP-TO-DATE AVAILABLE AGE activator 1/1 1 1 24h autoscaler 1/1 1 1 24h controller 1/1 1 1 24h webhook 1/1 1 1 24h
activator日誌
激活器負責接收和緩衝非活動修訂的請求,並向autoscaler報告指標。在autoscaler根據報告的指標縮放修訂版本後,它還會重試對修訂的請求。code
autoscaler對象
自動縮放器接收請求指標並調整處理流量負載所需的Pod數量。關於此處咱們會在下一章詳細講解。blog
controller
控制器服務協調全部公共Knative對象和自動縮放CRD。當用戶向Kubernetes API應用Knative服務時,這將建立配置和路由。它將配置轉換爲修訂版,並將修訂版本轉換爲部署和Knative Pod自動縮放器(KPA)。
webhook
Webhook攔截全部Kubernetes API調用以及全部CRD插入和更新。它設置默認值,拒毫不一致和無效的對象,並驗證和更改Kubernetes API調用。
咱們網絡層選擇的是kourier。
執行下面的命令,以查看安裝的service:
kubectl get services -n kourier-system
能夠看到以下的輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 10.100.47.159 a2f4c64ef34ea408933e1137ef-424fef949c9c7ad3.elb.ap-southeast-1.amazonaws.com 80:32327/TCP,443:31313/TCP 21h kourier-control ClusterIP 10.100.163.167 <none> 18000/TCP 21h kourier-internal ClusterIP 10.100.113.134 <none>
執行下面的命令,以查看部署的deployments:
kubectl get deployments -n kourier-system
能夠看到以下的輸出:
NAME READY UP-TO-DATE AVAILABLE AGE 3scale-kourier-control 1/1 1 1 21h 3scale-kourier-gateway 1/1 1 1 21h
kourier本質上是一個基於envoy的ingress gateway。負責南北向流量分發和治理。
3scale-kourier-control
envoy的控制層,本質上也是一個controller,能夠監聽knative serving 建立的關於ingress資源對象,並轉換爲envoy的配置文件,經過xds方式,下發給envoy。
3scale-kourier-gateway
envoy代理,即數據層。負責真實流量的轉發和治理。
以下圖所示,在部署Knative Serving Service(ksvc)的過程當中,Knative Serving控制器會建立配置,修訂版和路由。
與任何Kubernetes資源YAML中同樣,apiVersion定義了Knative Service的API組。這些API資源可經過在前面文章部署的Kubernetes CRD得到。此類是與Knative服務相對應的Kubernetes資源。爲了不與Kubernetes內置服務產生混淆,Knative服務與其apiVersion和種類(即service.serving.knative.dev)相關聯。
資源YAML的spec塊與Kubernetes PodSpec徹底相同,但刪除了如下屬性:
• InitContainers
• RestartPolicy
• TerminationGracePeriodSeconds • ActiveDeadlineSeconds
• DNSPolicy
• NodeSelector
• AutomountServiceAccountToken • NodeName
• HostNetwork
• HostPID
• HostIPC
• ShareProcessNamespace
• SecurityContext
• Hostname
• Subdomain
• Affinity
• SchedulerName
• Tolerations
• HostAliases
• PriorityClassName
• Priority
• DNSConfig
• ReadinessGates
• RuntimeClassName
固然還會有一些輔助組件和監控日誌領域的組件,這些將在後續的系列中詳細一一解讀。