最近更新时间:2024-04-23 16:43:55
在对容器实例的性能有特殊需求的场景(如:网络吞吐量、网卡队列数等),可在虚拟节点维度配置自动匹配机型。这样您无需在创建Pod时通过Annotation指定云服务器套餐,系统会根据Pod的request/limit值从虚拟节点配置的机型中,自动匹配相应规格的套餐。
您可以配置多个自动匹配机型,系统会根据配置的顺序依次匹配套餐,例如:当第一个机型没有符合要求的套餐时,会从第二个机型中匹配套餐,以此类推。
已在Kubernetes集群中部署虚拟节点,部署方式:KCE集群参考Kubernetes集群对接KCI,自建集群参考自建Kubernetes集群中对接KCI。
使用本功能需要将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如下:
注:
金山云容器服务会根据Pod的request/limit值自动规整KCI Pod的规格,详细计算方法请参考指定KCI Pod规格。
您也可以通过
k8s.ksyun.com/kci-instance-cpu
和k8s.ksyun.com/kci-instance-memory
这两个Annotation指定KCI Pod的规格。如您在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机型中匹配套餐。
纯净模式