演示如何在kubernetes集群,部署virtual-kubelet,为集群增加虚拟节点,以下简称:VK节点;使kubenetes集群通过VK节点接入ECI平台,在ECI平台上创建Pod。
kubernetes集群分类:
自建kuberenetes集群: 可以是基于阿里云ECS搭建的kubenetes集群。 可以是基于其他云平台搭建的kubenetes集群。 可以是基于机房搭建的kubenetes集群。 可以是基于台式机或笔记本搭建的kubernetes集群。 阿里云容器服务kubernetes集群: 专有版 Kubernetes(Dedicated Kubernetes)。 托管版 Kubernetes(Managed Kubernetes)。 Serverless Kubernetes。 下面我们,针对不同的kubernetes集群,介绍如何部署virtual-kubeket;由于阿里云Serverless Kubernetes,默认部署virtual-kubelet,是由系统管理员统一管理,本文不涉及阿里云Serverless Kubernetes集群部署virtual-kubelet。
前提条件 您需要开通阿里云弹性容器实例 ECI 服务,登录弹性容器实例控制台开通服务。 kubernetes集群上创建的Pod具有访问外网能力,因为virtual-kubelet是Pod形式部署,需要访问阿里云公网ECI服务。 部署virtual-kubelet 容器服务kubernetes集群
通过安装ack-virtual-node插件,部署vitual-kubelet。
执行部署
登录容器服务管理控制台。 在Kubernetes 菜单下,单击左侧导航栏中的市场 > 应用目录,在右侧选中ack-virtual-node。 在应用目录>ack-virtual-node页面,单击参数,配置虚拟节点参数。 参数 参数含义 获取路径 ECI_ACCESS_KEY 用户AccessKey 请参见如何获取AccessKey ECI_SECRET_KEY 用户SecretKey 请参见如何获取AccessKey ALIYUN_CLUSTERID 集群ID 您可以在集群基本信息,基本信息区域中,获取集群ID的值 ECI_REGION 地域名称 您可以在集群基本信息,基本信息区域中,获取地域的值 ECI_VPC 集群的VPC 您可以在集群基本信息的集群资源区域中,获取虚拟专有网络 VPC的值 ECI_VSWITCH 虚拟交换机 您可以在节点列表单击某个节点,在实例详情页签的配置信息区域中,获取虚拟交换机的值 ECI_SECURITY_GROUP 安全组ID 您可以在节点列表单击某个节点,在本实例安全组页签的安全组列表区域中,获取安全组ID的值 配置完成后,在右侧的创建页面,选择对应的集群,可以看到命名空间已设定为kube-system,发布名称已设定为ack-virtual-node,单击创建。
验证
检查节点列表
安装完成后,您可以通过集群 > 节点,在节点列表页面可以看到添加了一个节点virtual-kubelet。
您可以通过 kubectl 命令,查看节点列表信息。
$ kubectl get node NAME STATUS ROLES AGE VERSION cn-beijing.192.168.0.238 Ready 66d v1.14.6-aliyun.1 cn-beijing.192.168.0.239 Ready 66d v1.14.6-aliyun.1 cn-beijing.192.168.0.240 Ready 66d v1.14.6-aliyun. virtual-kubelet Ready agent 19d v1.11.2 创建Pod到VK节点
当集群中存在虚拟节点时,您可以把Pod调度到虚拟节点上,Virtual Kubelet将会创建出相应的ECI Pod。
在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 无状态,选择集群和命名空间,单击右上角的使用模板创建。 选择样例模板或自定义,然后单击创建,您可以使用如下 yaml 示例模板创建Deployment: apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx imagePullPolicy: Always nodeName: virtual-node-eci-0 #virtual node name 在应用 > 无状态中,当出现如下界面时,表示 Deployment 创建成功。 在应用>容器组中,会出现如下界面时,表示 Pod 部署完成 自建kubernetes集群 采用yaml的方式部署virtual-kubelet。
准备工作
部署virtual-kubelet准备工作,需要通过阿里云获取信息:
参数 参数含义 获取路径 ECI_ACCESS_KEY 用户AccessKey 请参见如何获取AccessKey ECI_SECRET_KEY 用户SecretKey 请参见如何获取AccessKey ALIYUN_CLUSTERID 集群ID 用户自定义一个唯一标示,作为集群ID ECI_REGION 地域名称 登录弹性容器实例控制台,获取Region信息,例如:华北2,对应RegionID cn-beijing ECI_VPC 集群的VPC 登录专有网络,根据已选Region,获取合适VPC ID ECI_VSWITCH 虚拟交换机 登录专有网络>交换机,根据已选VpcID,获取合适交换机ID ECI_SECURITY_GROUP 安全组 登录专有网络,根据已选VpcID,点击进入专有网络详情>网络资源>安全组,获取合适安全组ID YAML文件
apiVersion: apps/v1beta2 kind: Deployment metadata: name: virtual-node-controller namespace: kube-system labels: app: virtual-node-controller spec: replicas: 1 selector: matchLabels: app: virtual-node-controller template: metadata: labels: app: virtual-node-controller spec: serviceAccount: virtual-node-sa containers: - name: alicloud-virtual-kubelet image: registry.cn-hangzhou.aliyuncs.com/acs/virtual-nodes-eci:v1.0.0.1-aliyun imagePullPolicy: Always args: ["--provider", "alibabacloud"] env: - name: KUBELET_PORT value: "10250" - name: VKUBELET_POD_IP valueFrom: fieldRef: 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_REGION value: ${aliyun_region_name} - name: ECI_VPC value: ${aliyun_vpc_id} - name: ECI_VSWITCH value: ${aliyun_vswitch_id} - name: ECI_SECURITY_GROUP value: ${aliyun_sg_id} - name: ECI_ACCESS_KEY value: ${aliyun_access_key} - name: ECI_SECRET_KEY value: ${aliyun_secret_key} - name: ALIYUN_CLUSTERID value: ${custom_define_cluster_id} 根据之前准备的信息,替换yaml文件中的:
aliyun_region_name aliyun_vpc_id aliyun_vswitch_id aliyun_sg_id aliyun_access_key aliyun_secret_key 最后,需要给你的集群设置集群ID,替换custom_define_cluster_id。
执行部署
[root@k8s-master01 ~]# [root@k8s-master01 ~]# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s-master01 Ready 50d v1.14.2 192.168.0.15 CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.9.6 k8s-master02 Ready 50d v1.14.2 192.168.0.16 CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.9.6 k8s-master03 Ready 50d v1.14.2 192.168.0.17 CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.9.6
[root@k8s-master01 ~]# kubectl apply -f deployment-vk.yaml serviceaccount/virtual-node-sa created clusterrolebinding.rbac.authorization.k8s.io/virtual-node-role-binding created deployment.apps/virtual-node-controller created
[root@k8s-master01 ~]# kubectl get deploy/virtual-node-controller -n kube-system NAME READY UP-TO-DATE AVAILABLE AGE virtual-node-controller 1/1 1 1 161m
[root@k8s-master01 ~]# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s-master01 Ready 50d v1.14.2 192.168.0.15 CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.9.6 k8s-master02 Ready 50d v1.14.2 192.168.0.16 CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.9.6 k8s-master03 Ready 50d v1.14.2 192.168.0.17 CentOS Linux 7 (Core) 3.10.0-957.21.3.el7.x86_64 docker://18.9.6 virtual-kubelet Ready agent 82m v1.11.2 172.30.176.3
验证
指定节点创建pod。 $ cat test-pod.yaml apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: centos image: centos:latest args: - /bin/sh - -c - date; sleep 6000h nodeName: virtual-kubelet
[root@k8s-master01 ~]# kubectl create -f test-pod.yaml pod/test-pod created 检查Pod创建情况。 [root@k8s-master01 ~]# kubectl get pod/test-pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-pod 1/1 Running 0 95s 192.168.6.165 virtual-kubelet
[root@k8s-master01 ~]# kubectl get pod -o yaml test-pod apiVersion: v1 kind: Pod metadata: annotations: ProviderCreate: done k8s.aliyun.com/eci-instance-id: eci-2zeaak7c7i6xb5uqnw4m 通过ECI控制台查看。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。