知识卡片
Knative用单一资源抽象取代多个K8s资源
内容
部署一个标准 Kubernetes 应用通常要同时维护 Deployment、Service、Ingress 三种资源,各自管伸缩、内部路由、外部暴露。Knative 把这些拆散的关注点合并成一种资源——Knative Service,只需要声明容器镜像、端口、资源配额,Knative 就会在背后自动创建并维护对应的 Deployment/ReplicaSet/Pod/Service,甚至不用配置 Ingress 就能直接给出一个可访问的外部 URL,自动伸缩(包括缩容到零)也是默认内置的能力,不需要额外配置 HPA。它不只是给 Serverless 用的——任何标准容器化应用都能部署成 Knative Service,只是缩容到零这个特性只对真正支持快速冷启动的应用(比如配合 GraalVM 原生镜像)才有意义;对不希望被缩到零的应用,可以用 minScale 注解显式豁免。发散:这是”给同一个概念(一个可运行的应用服务)提供单一声明入口”的设计思路——用户心智模型里”我要部署一个服务”这个意图,本该对应一份声明,而不是被拆成三份需要手动保持一致的资源清单,Knative 把底层资源的编排复杂度留给了平台自己。
参考来源
《Cloud Native Spring in Action》第16章《Serverless, GraalVM, and Knative》