测试环境:ubuntu
安装依赖:主要安装docker+go
安装选择:目前优先使用kn结合minikube进行单机部署,后续搭建完整k8s节点,使用标准yaml方式安装
1.安装kind或者minikube,优先选择minikube,直接选择最新版本
2.安装kubectl v.28.03.安装kn,选择go方式安装,依赖安装 golang环境
4.安装knative quickstart plugin
验证功能:说明:自行测试,可以先清理已有环境,使用 minikube delete -p knative
5.利用knative quickstart启动(选择minikube方式)
5.1 安装Knative和k8s环境,最好是按照提示安装1.28.0,执行kn-quickstart minikube -k 1.28.0
5.2 开启minikube tunnel,执行minikube tunnel --profile knative(打开固定的终端,使用期间不需要关闭)
5.3 验证安装是否正确,执行minikube profile list
6.部署第一个knative service,执行kn service create hello --image ghcr.io/knative/helloworld-go:latest --port 8080 --env TARGET=World,执行kn service list 查看hello服务
测试一:观察autoscaling
先打开一个终端,配置观察命令:(之前没有对应pod,当在另外一个终端发起请求,会触发创建,响应请求后自然消亡),kubectl get pod -l serving.knative.dev/service=hello -w,在另一个终端发起 请求,即可得到函数执行后的回应。
Watch the pods and see how they scale to zero after traffic stops going to the URL:
NAME READY STATUS
hello-world 2/2 Running
hello-world 2/2 Terminating
hello-world 1/2 Terminating
hello-world 0/2 Terminating
Rerun the Knative Service in your browser. You can see a new pod running again:
NAME READY STATUS
hello-world 0/2 Pending
hello-world 0/2 ContainerCreating
hello-world 1/2 Running
hello-world 2/2 Running
测试二:观察traffic splitting
创建hello函数的两个revision,执行多次curl请求之后,会发现在两个revison进行交替执行
kn service update hello
--env TARGET=Knative
kn revisions list
NAME SERVICE TRAFFIC TAGS GENERATION AGE CONDITIONS READY REASON
hello-00002 hello 50% 2 10m 3 OK / 4 True
hello-00001 hello 50% 1 36m 3 OK / 4 True
echo "Accessing URL $(kn service describe hello -o url)"
curl "$(kn service describe hello -o url)"
Hello Knative!
Hello World!
Hello Knative!
Hello World!
清理环境:minikube delete -p knative