基本使用
基本功能-serving
本小节会按照“从零开始写一个 go 应用”的流程,来梳理功能
编写 go 代码
$ cat hello.go
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello, world!\n")
}
func main() {
http.HandleFunc("/", handler)
port := "8080"
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}在 serving 体系下编写 go 应用,跟常规 go web 开发并无区别
构造镜像
常规编译,没什么要补充的
部署应用
创建 ksvc 涉及的完整流程是:
创建了 ksvc
controller 依据 ksvc 创建了对应的 rt、cfg
controller 依据 cfg 创建了对应的 rev
controller 依据 rt 创建了 king
networking-istio 依据 king 创建了 VirtualService(vs),后者是 istio CRD,接下来就是 istio 的逻辑了,这里就不再展开
controller 依据 rev 创建了 kpa
autoscaler 依据 kpa 创建了 sks
controller 依据 rev 创建了 deploy
svc 的创建要稍微麻烦一些,实际上创建了3个 service
我们的用例只用到了其中一个,其它的如 hello-go,是用于外部域名到内部域名映射用的,我们用例中不涉及
注意一些细节,比如:svc 是指向 activator 的;部分 svc 没有 selector(Knative 自己来同步)
访问应用
访问应用涉及的完整流程是:
访问请求发送到 istio gateway
istio 会完成域名到 k8s svc 的解析,访问请求转发到 activator
activator 触发 deploy 扩容
访问新建 pod,返回响应
如果是较为频繁的访问,则还会触发其它的逻辑
autoscaler 更新 sks
controller 更新 ep,由 activator 改为应用 pod
小结
因为 serving 涉及的 CRD 比较多,这里再把它们统一放这里梳理一下,一图胜千言:

基本功能-eventing
本小节会按照“从零开始写一个 go 应用”的流程,来梳理功能
编写 go 代码
在 eventing 体系下编写 go 应用,需要借助 cloudevents sdk
构造镜像
常规编译,没什么要补充的
部署应用
这里部署的都是 k8s 原生对象,没什么要补充的
创建 broker
创建 broker 涉及的完整流程是:
创建了 broker
mt-broker-controller 将 channel 地址填充到 broker status
而这个地址实际上也就是指向了 imc-dispatcher
eventing-controller 依据 broker 创建了对应的 imc
imc 中将 broker-filter 作为 subscriber
创建 trigger
创建 trigger 涉及的完整流程是:
创建了 trigger
mt-broker-controller 将应用地址填充到 trigger.status
访问应用
访问应用涉及的完整流程是:
访问请求发送到 broker-ingress
broker-ingress 从 broker.status 里获取 channel 地址,转发 event 到 imc-dispatcher
imc-dispatcher 从 channel.spec 里获取 subscriber 地址,转发 event 到 broker-dispatcher
broker-dispatcher 从 trigger.spec 里获取 filter 配置,对 event 进行过滤
broker-dispatcher 从 trigger.status 里获取 subscriber 地址,转发 event 到应用
Last updated
Was this helpful?