本文介绍把ECI通过虚拟节点(virtual node)方式接入到您的阿里云Kubernetes集群(ACK),ECI与Kubernetes的Pod为一一对应关系。有了虚拟节点,当您的Kubernetes集群需要扩容时,无需规划node节点计算容量,直接使用虚拟节点动态创建ECI实例,ECI实例与您集群中的真实节点上的Pod网络互联互通。

简介

虚拟节点的工作原理参考virtual-kubelet。此外,虚拟节点以Pod为单位按需收费,收费规则请参见计费概述

安装虚拟节点

容器服务kubernetes集群

通过安装ack-virtual-node插件,部署vitual-kubelet。

执行部署

  1. 登录容器服务管理控制台
  2. 在Kubernetes 菜单下,单击左侧导航栏中的市场 > 应用目录,在右侧选中ack-virtual-node
  3. 应用目录>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的值
  4. 配置完成后,在右侧的创建页面,选择对应的集群,可以看到命名空间已设定为kube-system,发布名称已设定为ack-virtual-node,单击创建

验证

检查节点列表

安装完成后,您可以通过集群 > 节点,在节点列表页面可以看到添加了一个节点virtual-kubelet。

您可以通过 kubectl 命令,查看节点列表信息。

说明 virtual-kubelet 的 kubernetes 版本与集群中不一致属于正常现象,可以忽略。
$ kubectl get node
NAME                                STATUS   ROLES    AGE   VERSION
cn-beijing.192.168.0.238   Ready    <none>   66d    v1.14.6-aliyun.1
cn-beijing.192.168.0.239   Ready    <none>   66d    v1.14.6-aliyun.1
cn-beijing.192.168.0.240   Ready    <none>   66d    v1.14.6-aliyun.
virtual-node-eci-0           Ready    agent      19d    v1.11.2	

创建Pod到VK节点

当集群中存在虚拟节点时,您可以把Pod调度到虚拟节点上,Virtual Kubelet将会创建出相应的ECI Pod。

  1. 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 无状态,选择集群命名空间,单击右上角的使用模板创建
  2. 选择样例模板或自定义,然后单击创建,您可以使用如下 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
  3. 应用 > 无状态中,当出现如下界面时,表示 Deployment 创建成功。
  4. 应用>容器组中,会出现如下界面时,表示 Pod 部署完成

调度Pod到虚拟节点

当ACK集群中存在虚拟节点时,您可以把Pod调度到虚拟节点上,Virtual Node Controller将会创建出相应的ECI Pod。您可以通过以下两种方法操作:

  • 配置Pod所在Namespace的标签。
  • 配置Pod标签。

完整的容器服务虚拟节点使用方法,请参见使用虚拟节点

更新ack-virtual-node版本

  1. kubectl edit statefulset -n kube-system virtual-node-eci
  2. 修改image tag到需要升级的版本,参见ack-virtual-node组件变更记录获取最新版本

早期版本的ack-virtual-node为deployment部署,上述方式不生效,需要删除对应的deployment(前提:Virtual Node上已没有ECI)后重新部署ack-virtual-node。