Knative:基于 K8S 的开源 Serverless / 云原生应用平台

一、Knative 是什么

Knative 是一个运行在 Kubernetes 之上的开源 Serverless / 云原生应用平台,最早由 Google 于 2018 年发起,后加入 CNCF,并在 2025 年成为 CNCF 毕业项目。它的目标很直接:让开发者“写代码、打镜像、发请求”,而不用深究 Pod、Deployment、Ingress、HPA、滚动发布这些底层细节。

传统 Kubernetes 很强大,但对业务开发并不友好:部署一个 HTTP 服务要写 Deployment、Service、Ingress、HPA、PodDisruptionBudget 等一堆 YAML。Knative 把这些“无聊但难做”的事抽象成更高层原语——源码到容器、请求驱动扩缩容、缩容到零、流量切分、事件驱动——从而把 Kubernetes 变成类似 FaaS/PaaS 的运行时。

Knative 不是取代 Kubernetes,而是在上面加一层中间件:容器仍是部署单元,CRD 仍是扩展方式,任何云、本地机房、边缘集群只要能跑 K8s,就能跑 Knative。

二、主要功能

  1. Serverless 化部署
    只需声明一个 knative Service,系统自动创建 Route、Configuration、Revision,并管理网络与扩缩容。

  2. 自动扩缩容 / 缩容到零
    没流量时实例数降到 0,有请求时冷启动拉起 Pod;流量上涨时按并发或 RPS 扩容到成千上万实例,特别适合 Webhook、API、定时任务、推理服务。

  3. 版本管理与流量治理
    每次更新产生不可变 Revision,可做蓝绿、金丝雀、A/B、按百分比分流(如 90% 老版本 + 10% 新版本),回滚就是改流量比例。

  4. 事件驱动架构
    通过 CloudEvents 接入 GitHub、Kafka、定时任务、消息队列等事件源,生产者与消费者解耦,Broker/Trigger/Subscription 模型让事件管道像 K8s 资源一样声明。

  5. 函数化开发体验
    Knative Functions(func CLI)让开发者用语言模板写函数,本地构建后直接部署成 Knative Service,不必手写 Dockerfile 和 K8s 清单。

  6. 跨云与可移植
    不绑定厂商,ACK、GKE、EKS、DOKS、Kind、MiniKube、自建集群都能装,避免云厂商 FaaS 锁定。

  7. 可观测与生态集成
    与 Prometheus、Grafana、OpenTelemetry、Istio/Contour/Kourier 网关、Tekton CI 天然衔接。

三、组件清单

Knative 当前核心由三块组成:

  • Knative Serving:Serverless HTTP 服务运行时

    • CRD:Service、Route、Configuration、Revision
    • 控制面:controller、webhook、autoscaler、activator、domain-mapping
    • 网络层插件:Kourier、Istio、Contour、ALB、ASM(社区/云厂商实现)
  • Knative Eventing:异步事件与 CloudEvents 路由

    • 概念:Source、Broker、Trigger、Channel、Subscription、Sink
    • 实现:in-memory channel、Kafka、RabbitMQ、Camel、PingSource、GitHub Source 等
    • 控制面:eventing-controller、broker-filter、broker-ingress、dispatcher
  • Knative Functions:开发者侧函数框架(不装进集群)

    • CLI:func
    • 模板:Go / Python / Node / Quarkus / Spring / TypeScript
    • 产出:标准容器镜像 + Knative Service

可选扩展:

  • 网关:Kourier(轻量)、Istio(全功能)、Contour、ALB、ASM
  • 可观测:Prometheus、Grafana、OTel Collector
  • 构建:Tekton Pipelines(Knative 早期 Build 已演进为 Tekton 生态)
  • 云产品托管版:ACK Knative、GKE Serverless、DOKS 1-Click、ACS Knative

四、如何部署

1. 前提

  • 一个 Kubernetes 集群(1.28+ 生产推荐,本地可用 Kind/Docker Desktop)
  • 已装 kubectl
  • 集群有网络插件和足够资源(如 2 节点 × 2C4G 起步)
  • 选一个 Knative 网络层(新手用 Kourier 最省事)

2. 安装 CLI(可选)

# kn CLI
curl -L https://github.com/knative/client/releases/latest/download/kn-linux-amd64 -o kn
chmod +x kn && mv kn /usr/local/bin/

3. 用 Operator 部署(推荐)

kubectl apply -f https://github.com/knative/operator/releases/latest/download/operator.yaml

kubectl create ns knative-serving
kubectl apply -f - <<EOF
apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
  name: knative-serving
  namespace: knative-serving
spec:
  ingress:
    kourier: {}
  defaultIngressClass: kourier
EOF

kubectl create ns knative-eventing
kubectl apply -f - <<EOF
apiVersion: operator.knative.dev/v1beta1
kind: KnativeEventing
metadata:
  name: knative-eventing
  namespace: knative-eventing
EOF

4. 用 YAML 快速装(GitOps 友好)

kubectl apply -f https://github.com/knative/serving/releases/latest/download/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/latest/download/serving-core.yaml
kubectl apply -f https://github.com/knative/net-kourier/releases/latest/download/kourier.yaml
kubectl patch configmap/config-network \
  -n knative-serving \
  --type merge \
  -p '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'

kubectl apply -f https://github.com/knative/eventing/releases/latest/download/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/latest/download/eventing-core.yaml

5. 部署第一个服务

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
    name: hello
    namespace: default
spec:
    template:
        spec:
            containers:
                - image: gcr.io/knative-samples/helloworld-go
                  env:
                      - name: TARGET
                        value: "Knative"
kubectl apply -f hello.yaml
kubectl get ksvc hello
curl http://hello.default.example.com   # 或取 EXTERNAL-IP / 域名访问

6. 云厂商一键部署

  • 阿里云 ACK / ACS:控制台“应用 > Knative > 一键部署”,选 Kourier / ALB / ASM
  • GKE:Serverless 插件 / Knative Operator
  • DigitalOcean:DOKS 1-Click Knative(默认 Kourier)

五、一句话总结

Knative = Kubernetes 上的 Serverless 中间件:Serving 管“服务怎么跑、怎么扩、怎么分流”,Eventing 管“事件从哪来、到哪去”,Functions 管“人怎么写代码”。它适合想用 Kubernetes 又不想被运维细节拖垮的团队,也适合搭建自有 FaaS / 事件平台 / AI 推理网关。

如果你说的 knaive 是某个具体小众仓库(比如 kNN 验证工具 kNAVe、某前端 Naive UI 衍生项目、或者你们公司内部项目名),把 GitHub 链接发我,我可以按那个项目重写。

如果你有魔法,你可以看到一个评论框~