当前位置: 首页 > 工具软件 > Knative > 使用案例 >

knative-serving的使用

陆耀
2023-12-01

knative-serving的使用

编写时间:2021-12-18
友情链接:knative-serving安装
这里列举三个例子,其他用法都是类似

1. 前提条件

安装好knative-serving和对应的网络

2. 文件来源

文件需要自行获取

3. 三个例子

3.1 流量分流

1: knative-serving流量分流主要是通过traffic字段控制的,可以对比yaml文件即可看出
2: 后面会有yaml文件详情,其他yaml配置可以在文件中获取

  1. 执行serving-test-namespaces.yaml文件,创建serving-test命名空间
kubectl apply -f serving-test/serving-test-namespaces.yaml
  1. 执行helloworld-go-traffic-one.yaml文件,创建一个服务,流量会以100%进入此服务
kubectl allpy -f serving-test/helloworld-go-traffic-one.yaml
  1. 通过访问进行验证

1: <helloworld-go.serving-test.127.0.0.1.nip.io>:是kubectl get route -n serving-test获取的url,去掉urlhttp://
2: <serving_network_ip>和<serving_network_port>是knative-serving的网络服务ip和端口,kourier网络可以通过kubectl get service kourier -n kourier-system获取,端口是内部端口
3: 1-2分钟如果没有请求访问,pod会自动扩缩容到0
4: 响应值为Hello World!,表示成功

curl -H "Host: <helloworld-go.serving-test.127.0.0.1.nip.io>" http://<serving_network_ip>:<serving_network_port>
  1. 执行helloworld-go-traffic-two.yaml文件,创建一个服务,流量会以100%进入此服务
kubectl apply -f serving-test/helloworld-go-traffic-two.yaml
  1. 通过查看revision,可以看到有两个版本
kubectl get revision -n serving-test

# 响应值
NAME                CONFIG NAME     K8S SERVICE NAME   GENERATION   READY   REASON   ACTUAL REPLICAS   DESIRED REPLICAS
helloworld-go-one   helloworld-go                      1            True             1                 1
helloworld-go-two   helloworld-go                      2            True             1                 1
  1. 通过访问进行验证和3. 通过访问进行验证一样的操作,响应值为Hello World Two!,表示成功
  2. 执行helloworld-go-traffic-three.yaml文件,创建一个服务,流量会以60%进入helloworld-go-three版本(最后一个版本),以30%进入helloworld-go-two版本,以10%进入helloworld-go-one版本
kubectl apply -f serving-test/helloworld-go-traffic-three.yaml
  1. 通过查看revision,可以看到有三个版本
kubectl get revision -n serving-test

# 响应值
helloworld-go-one     helloworld-go                      1            True             1                 1
helloworld-go-three   helloworld-go                      3            True             1                 1
helloworld-go-two     helloworld-go                      2            True             1                 1
  1. 通过访问进行验证和3. 通过访问进行验证一样的操作,响应值为Hello World !Hello World Two!Hello World Three!,出现比例约为6:3:1

3.2 禁止自动扩缩容到0

1: ConfigMap为kubernetes的配置文件类型,可以通过kubectl get configmap -A查询所有的ConfigMap
2: 修改名为config-autoscaler的ConfigMap,在date中添加enable-scale-to-zero: "false"即可完成
3: 后面会有文件详情,其他类似配置可以在文件中获取

3.2.1 yaml形式修改

  1. 创建config-autoscaler.yaml文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: config-autoscaler
  namespace: knative-serving
data:
  # 配置后pod不会缩容到0
  enable-scale-to-zero: "false"
  1. 运行config-autoscaler.yaml文件
kubectl apply -f config-autoscaler.yaml
  1. 检查是否生效,通过观察1-2分钟的pod(不访问的状态下)数量是否为0
kubectl get pod -n serving-test

3.2.2 命令行形式

  1. 执行一下命令,修改config-autoscaler的data属性
kubectl patch configmap config-autoscaler -n knative-serving --type merge -p '{"data":{"enable-scale-to-zero":"false"}}'
  1. 检查是否生效,通过观察1-2分钟的pod(不访问的状态下)数量是否为0
kubectl get pod -n serving-test

3.3 使用kubernetes的节点选择器属性

1: 使用kubernetes的属性,需要在config-features ConfigMap添加对应配置,之后才能在yaml文件中使用
2: 后面会有文件详情,其他属性设置在文件中获取

3.3.1 yaml形式修改

  1. 获取config-features.yaml文件
kubectl get configmap config-features -n knative-serving -o yaml > config-features.yaml
  1. 修改config-features.yaml文件,添加kubernetes.podspec-nodeselector: "enabled"配置,以下yaml内容是简化的
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app.kubernetes.io/part-of: knative-serving
    app.kubernetes.io/version: 1.0.0
    serving.knative.dev/release: v1.0.0
  name: config-features
  namespace: knative-serving
data:
  kubernetes.podspec-nodeselector: "enabled"
  1. 运行config-features.yaml文件
kubectl apply -f config-features.yaml
  1. 创建test-node-select.yaml文件,添加kubernetes的节点选择器

<node_name>: 为kubernetes的node节点

apiVersion: serving.knative.dev/v1
kind: Service
...
spec:
  template:
    spec:
      nodeSelector:
        nodeName: <node_name>
  1. 运行test-node-select.yaml文件
kubectl apply -f test-node-select.yaml
  1. 查看对于的pod是否在node节点上
kubectl get pod -n serving-test -o wide

3.3.2 命令行形式修改

  1. 执行一下命令,修改config-autoscaler的data属性
kubectl patch configmap config-features -n knative-serving --type merge -p '{"data":{"kubernetes.podspec-nodeselector": "enabled"}}'
  1. 之后执行3.3.1 yaml形式修改的4.5.6

4. 配置高可用组件,为组件创建副本

除了activator组件之外,您可以使用以下命令扩展knative-serving(或kourier-system) 中运行的任何部署

$ kubectl -n knative-serving scale deployment <deployment-name> --replicas=2

设置--replicas为值大于或等于2启用 HA,设置--replicas=1禁用 HA。

5. 配置缩放activator组件

  1. 查看组件缩放情况,spec下的minReplicasmaxReplicas
$ kubectl get hpa activator -n knative-serving -o yaml
  1. 修改缩放 建议至少运行3个
$ kubectl patch hpa activator -n knative-serving -p '{"spec":{"minReplicas":9,"maxReplicas":19}}'

6. 其他文件详情

knative-serving各文件详情

7. 参考

Knative官网

 类似资料: