基本使用

基本功能-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 比较多,这里再把它们统一放这里梳理一下,一图胜千言:

crd-serving

基本功能-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?