如果您在自建机房或者其他线下环境部署了Kubernetes集群,需要部署Virtual Kubelet来使用ECI,本文为您介绍如何部署Virtual Kubelet。
前提条件
使用限制
在该混合云场景下,部分功能无法支持或有条件支持,不支持的功能如下:
准备工作
执行部署前,您需要准备好以下信息:
参数 | 描述 | 获取方式 |
---|---|---|
ECI_ACCESS_KEY | 用户AccessKey | 请参见获取AccessKey。 |
ECI_SECRET_KEY | 用户SecretKey | 请参见获取AccessKey。 |
ALIYUN_CLUSTERID | 集群ID | 自定义。集群的唯一标识。 |
ECI_REGION | 地域ID | 通过弹性容器实例控制台或者调用DescribeRegions获取地域信息。 |
ECI_VPC | 专有网络VPC ID | 在专有网络控制台的专有网络页面查看。 |
ECI_VSWITCH | 虚拟交换机ID | 在专有网络控制台的交换机页面,根据已选的VPC来获取对应的交换机ID。 |
ECI_SECURITY_GROUP | 安全组ID | 在专有网络控制台找到已选的VPC,单击ID进入详情页面,然后在下方的资源管理页签下,单击安全组对应的数字,跳转到安全组列表页面获取对应的安全组ID。 |
部署Virtual Kubelet
为Virtual Kubelet创建一个服务账号并绑定至集群角色中,用于正常创建Pod资源。
执行以下命令,创建一个名为vk-admin的服务账号。
kubectl create serviceaccount vk-admin -n kube-system
执行以下命令,将vk-admin账号绑定至cluster-admin集群角色中。
kubectl create clusterrolebinding vk-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:vk-admin
创建部署Virtual Kubelet的模板文件vk.yaml。
yaml文件的内容示例如下,您需要根据之前准备的信息,替换yaml文件中对应的参数值。
注意Virtual Kubelet版本必须为v2.0.0.608-0b919e1d2-aliyun及以后版本。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: virtual-node-controller name: virtual-node-controller namespace: kube-system spec: serviceName: vk-svc replicas: 1 selector: matchLabels: app: virtual-node-controller template: metadata: labels: app: virtual-node-controller spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - virtual-node-controller topologyKey: kubernetes.io/hostname weight: 100 containers: - name: virtual-node-controller # 部署Virtual Kubelet所需的镜像及版本 image: registry.cn-beijing.aliyuncs.com/acs/virtual-nodes-eci:v2.0.0.34-252556a33-aliyun imagePullPolicy: Always args: - --provider - alibabacloud - --nodename - $(VN_INSTANCE) env: - name: VN_INSTANCE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: KUBELET_PORT value: "10250" - name: VKUBELET_POD_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.podIP - name: VKUBELET_TAINT_KEY value: "virtual-kubelet.io/provider" - name: VKUBELET_TAINT_VALUE value: "alibabacloud" - name: VKUBELET_TAINT_EFFECT value: "NoSchedule" - name: ECI_QUOTA_CPU value: "1000000" - name: ECI_QUOTA_MEMORY value: 6400Ti - name: ECI_QUOTA_POD value: "3000" - name: ECI_KUBE_PROXY value: "true" # ECI创建的地域 - name: ECI_REGION value: <region-id> # ECI创建使用的Access Key - name: ECI_ACCESS_KEY value: <access-key> # ECI创建使用的Secret Key - name: ECI_SECRET_KEY value: <secret-kty> # ECI创建使用的VPC ID - name: ECI_VPC value: <vpc-id> # ECI创建使用的虚拟交换机ID - name: ECI_VSWITCH value: <vsw-id> # ECI创建使用的安全组ID - name: ECI_SECURITY_GROUP value: <security-group-id> # ECI创建自定义的集群ID - name: ALIYUN_CLUSTERID value: <cluster-id> - name: ALIYUN_PRIVATE_ZONE value: "false" # ECI创建时,混合云场景开关配置 - name: ECI_HYBRID_MODE value: "true" dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler serviceAccount: admin serviceAccountName: admin
部署Virtual Kubelet。
kubectl apply -f vk.yaml
查看部署情况。
kubectl get deploy/virtual-node-controller -n kube-system
部署完成的返回示例如下。
NAME READY UP-TO-DATE AVAILABLE AGE virtual-node-controller 1/1 1 1 161m
查看部署Virtual Kubelet后的节点信息。
kubectl get nodes
如果能查询到virtual-kubelet节点,且状态为Ready,表示部署成功。示例如下:
NAME STATUS ROLES AGE VERSION master-1 Ready <none> 19d v1.18.8-aliyun.1 master-2 Ready <none> 19d v1.18.8-aliyun.1 virtual-kubelet Ready agent 18d v1.18.8-aliyun.1
调度Pod到虚拟节点
当集群中存在虚拟节点时,您可以将Pod调度到虚拟节点上。相关配置如下:
创建容器负载到虚拟节点时,由于虚拟节点有特殊的Taints,Pod需要配置nodeSelector和tolerations后才能指定调度到虚拟节点上。示例如下:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx nodeSelector: type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists
由于ECI对接Kubernetes集群使用的是Virtual Kubelet,即虚拟节点,没有真实的计算节点存在,因此不支持部署DaemonSet。在创建DaemonSet时,您需要配置反亲和调度策略,防止DaemonSet调度到虚拟节点上。示例如下:
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
升级Virtual Kubelet
如果您需要使用新功能,可能需要更新vk镜像的版本。
您可以执行以下命令编辑对应的资源,修改image tag到需要升级的版本。
kubectl edit deployment -n kube-system virtual-node-controller
在文档使用中是否遇到以下问题
更多建议
匿名提交