Knative 入门
Contents
Knative 是一款基于 Kubernetes 的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 编排标准。Knative 通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件模型这三者来实现的这一 Serverless 标准
Knative 包含以下两个组件:
- Eventing:它是一组 API,使用标准的 HTTP POST 请求产生生产者/消费者模式以及响应 HTTP 请求。这些事件符合 CloudEvents 规范,允许以任何编程语言创建、解析、发送和接收事件
- Serving:管理 Serverless 工作负载,提供了应用部署、多版本管理、基于请求的自动弹性、灰度发布等能力,而且在没有服务需要处理的时候可以缩容到零个实例。定义了一组特定的对象,包括 Revision(修订版本)、Configuration(配置)、Route(路由)和Service(服务)。Knative 通过 Kubernetes CRD 的方式实现这些 Kubernetes 对象
安装
文档地址:About YAML-based installation
需要把 gcr.io 无法拉取的镜像地址替换为 docker.io/gcrioknative
安装 Serving 组件
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.12.0/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.12.0/serving-core.yaml
安装 Istio 网络层控制器
kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.12.0/net-istio.yaml
安装 Eventing 组件
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.12.0/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.12.0/eventing-core.yaml
实验
发布一个服务
文档地址:Deploying a Knative Service
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ksvc1
namespace: myknative
spec:
template:
spec:
containers:
- image: nginx:1.18-alpine
ports:
- containerPort: 80
查看
$ kubectl get deploy -n myknative
NAME READY UP-TO-DATE AVAILABLE AGE
ksvc1-00001-deployment 1/1 1 1 39m
$ kubectl get ksvc -n myknative
NAME URL LATESTCREATED LATESTREADY READY REASON
ksvc1 http://ksvc1.myknative.svc.cluster.local ksvc1-00001 ksvc1-00001 Unknown IngressNotConfigured
配置副本自动伸缩
文档地址:Supported autoscaler types
apiVersion: v1
kind: ConfigMap
metadata:
name: config-autoscaler
namespace: knative-serving
labels:
app: test
data:
enable-scale-to-zero: "false" # 是否会收缩为0副本
scale-to-zero-grace-period: "30s"
配置域名
文档地址:Configuring domain names ,配置实例:configmaps/domain.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-domain
namespace: knative-serving
labels:
app.kubernetes.io/name: knative-serving
app.kubernetes.io/component: controller
app.kubernetes.io/version: devel
data:
test.com: |
selector:
app: test
使用函数创建服务
下载 knative/func 客户端,执行命令创建一个项目
func create -l go kweb
修改 func.yaml 文件
specVersion: 0.35.0
name: kweb
runtime: go
registry: docker.io/xxx
image: docker.io/xxx/kweb:v1
imageDigest: ""
created: xxx
build:
builderImages:
pack: anjia0532/paketo-buildpacks.builder:base
buildpacks:
- paketo-buildpacks/go-dist
- ghcr.io/boson-project/go-function-buildpack:tip
builder: pack
buildEnvs:
- name: GOPROXY
value: "https://goproxy.cn"
run:
volumes: []
envs: []
deploy:
namespace: default
remote: false
annotations: {}
options: {}
labels: []
healthEndpoints:
liveness: /health/liveness
readiness: /health/readiness
编译并创建服务
// 本地测试
func run
func invoke
// 执行编译
func build
// 发布镜像
docker tag kweb:v1 docker.io/xxx/kweb:v1
docker push docker.io/xxx/kweb:v1
// 创建服务
func deploy --build=false --push=false