全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

虚拟节点维度配置自动匹配机型

最近更新时间:2023-02-15 15:40:52

在对容器实例的性能有特殊需求的场景(如:网络吞吐量、网卡队列数等),可在虚拟节点维度配置自动匹配机型。这样您无需在创建Pod时通过Annotation指定云服务器套餐,系统会根据Pod的request/limit值从虚拟节点配置的机型中,自动匹配相应规格的套餐。

您可以配置多个自动匹配机型,系统会根据配置的顺序依次匹配套餐,例如:当第一个机型没有符合要求的套餐时,会从第二个机型中匹配套餐,以此类推。

前提条件

  1. 已在Kubernetes集群中部署虚拟节点,部署方式:KCE集群参考Kubernetes集群对接KCI,自建集群参考自建Kubernetes集群中对接KCI
  2. 使用本功能需要将virtual-kubelet的镜像升级至不低于v1.3.6的版本,以确保支持虚拟节点维度配置自动匹配机型的环境变量。

配置虚拟节点

执行如下命令,对虚拟节点对应的Deployment进行编辑:

kubectl -n kube-system edit deployment rbkci-virtual-kubelet

配置KCI_INSTANCE_FAMILY的环境变量,示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rbkci-virtual-kubelet
  namespace: kube-system
  labels:
    k8s-app: rbkci-virtual-kubelet
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: rbkci-virtual-kubelet
  template:
    metadata:
      name: rbkci-virtual-kubelet
      labels:
        k8s-app: rbkci-virtual-kubelet
    spec:
      serviceAccountName: virtual-kubelet-sa
      containers:
        - name: virtual-kubelet
          image: hub.kce.ksyun.com/ksyun/rbkci-virtual-kubelet:v1.3.6 # 需使用不低于v1.3.6版本的virtual-kubelet镜像
          args:
            - --nodename=rbkci-virtual-kubelet
            - --cluster-dns=10.254.0.10
            - --cluster-domain=cluster.local
            - --kcilet-kubeconfig-path=/root/.kube/config
            - --enable-node-lease
            - --kube-proxy-enable
            - --base-system-disk-size=50
          imagePullPolicy: Always
          env:
            - name: VKUBELET_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: TEMP_AKSK_CM
              value: user-temp-aksk 
            - name: KCI_CLUSTER_ID
              value: ${cluster_id} 
            - name: KCI_SUBNET_ID
              value: ${subnet_id}
            - name: KCI_SECURITY_GROUP_IDS
              value: ${security_group_ids} 
            # 配置虚拟节点的自动匹配机型,配置时请根据想要使用机型的优先级,按顺序设置多个机型
            - name: KCI_INSTANCE_FAMILY
              value: S6,I3
          volumeMounts:
            - mountPath: /root/.kube
              name: kubeconfig
            - mountPath: /var/log/kci-virtual-kubelet
              name: kci-provider-log
      volumes:
        - name: kubeconfig
          secret:
            secretName: rbkci-kubeconfig-secret
        - name: kci-provider-log
          hostPath:
            path: /var/log/kci-virtual-kubelet

使用示例

按照上一章节中的示例配置了虚拟节点之后,在该虚拟节点上创建的容器实例将按照顺序从S6、I3两个机型中自动匹配云服务器套餐,使用示例如下:

验证虚拟节点维度配置的自动匹配机型是否生效

1.部署测试Deployment,其yaml如下:

注:

  1. 金山云容器服务会根据Pod的request/limit值自动规整KCI Pod的规格,详细计算方法请参考指定KCI Pod规格

  2. 您也可以通过k8s.ksyun.com/kci-instance-cpuk8s.ksyun.com/kci-instance-memory这两个Annotation指定KCI Pod的规格。

  3. 如您在Pod中通过k8s.ksyun.com/kci-instance-type的Annotation指定了云服务器套餐,则其优先级高于虚拟节点维度配置的自动匹配机型,创建的容器实例将使用Annotation中指定的云服务器套餐。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          limits:  # 通过limit配置容器的cpu和内存限制
            cpu: "4"
            memory: "8Gi"
      nodeName: rbkci-virtual-kubelet  # 指定nodeName将pod调度到虚拟节点上

2.调用DescribeContainerGroup接口,查询容器实例的规格和云服务器套餐:

{
...
    "ContainerGroups": [
        {
            "ContainerGroupId": "e8059037-4693-4a4d-b0ef-0ee3323a17b8",
            "ContainerGroupName": "default-nginx-6ff6c84699-7jgv4",
            "AvailabilityZone": "cn-beijing-6a",
            "ChargeType": "HourlyInstantSettlement",
            "NetworkInterfaceAttributes": [
                ...
            ],
            "Cpu": 4,  # 容器实例的CPU规格
            "Memory": 8,  # 容器实例的内存规格
            "Gpu": null,
            "CreateTime": "2023-02-15 09:54:20",
            "RestartPolicy": null,
            "Status": "Running",
            "SucceededTime": null,
            "Volumes": null,
            "DnsConfig": null,
            "Containers": null,
            "Events": null,
            "Labels": [
                ...
            ],
            "HostAliases": null,
            "IngressBandwidth": null,
            "EgressBandwidth": null,
            "InstanceType": "S6.4B",  # 容器实例的云服务器套餐
            "KciType": "RBKCI",
            "KciMode": "CLUSTER",
            "ProjectId": 0,
            "RetainIp": null,
            "RetainIpHours": null
        }
    ]
...
}

可以看到,容器实例匹配到了S6机型下实例规格为4C8G的S6.4B套餐,虚拟节点维度设置的自动匹配机型生效。

验证自动匹配机型的优先级

1.部署测试Deployment,指定其系统盘类型为Local_SSD(本地SSD硬盘)。由于S6机型不支持Local_SSD类型的系统盘,而I3机型支持该类型的系统盘,因此预期容器实例将匹配到I3机型的云服务器套餐。测试Deployment的yaml如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
      annotations:
        k8s.ksyun.com/kci-base-system-disk-type: Local_SSD  # 指定系统盘类型为Local_SSD
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          limits:  # 通过limit配置容器的cpu和内存限制
            cpu: "4"
            memory: "8Gi"
      nodeName: rbkci-virtual-kubelet  # 指定nodeName将pod调度到虚拟节点上

2.调用DescribeContainerGroup接口,查询容器实例的规格和云服务器套餐:

{
...
    "ContainerGroups": [
        {
            "ContainerGroupId": "c5ee7b0c-6d17-4065-8a7c-2b0dc362021d",
            "ContainerGroupName": "default-nginx-869c5f7fd4-6jxps",
            "AvailabilityZone": "cn-beijing-6a",
            "ChargeType": "HourlyInstantSettlement",
            "NetworkInterfaceAttributes": [
                ...
            ],
            "Cpu": 4,  # 容器实例的CPU规格
            "Memory": 8,  # 容器实例的内存规格
            "Gpu": null,
            "CreateTime": "2023-02-15 10:42:37",
            "RestartPolicy": null,
            "Status": "Running",
            "SucceededTime": null,
            "Volumes": null,
            "DnsConfig": null,
            "Containers": null,
            "Events": null,
            "Labels": [
                ...
            ],
            "HostAliases": null,
            "IngressBandwidth": null,
            "EgressBandwidth": null,
            "InstanceType": "I3.4B",  # 容器实例的云服务器套餐
            "KciType": "RBKCI",
            "KciMode": "CLUSTER",
            "ProjectId": 0,
            "RetainIp": null,
            "RetainIpHours": null
        }
    ]
}

可以看到,容器实例匹配到了I3机型下实例规格为4C8G的I3.4B套餐,自动匹配机型的优先级生效:虚拟节点维度按S6、I3的顺序配置了自动匹配机型,当S6机型中没有符合要求的套餐时,会从I3机型中匹配套餐。

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈