本文介绍如何通过Serverless Kubernetes使用ECI或者通过虚拟节点对接Kubernetes集群。希望能帮助您了解在迁移到ECI中需要进行的适配和改造,并帮助您解决部分在迁移应用中可能会遇到的问题。

假设

本文假设您对Kubernetes的基本概念已经有所了解,或者已经在私有云或者公有云中使用过基于Kubernetes的容器编排服务。

迁移前的准备工作

如何管理Kubernetes及ECI运行情况

如何查看已经创建的ECI实例

  • 进入弹性容器实例控制台,在左上角选择相应的可用区,您可以看到已经创建的ECI实例。如果您看到的是空白页面,请申请弹性容器实例页面的访问权限。
  • 进入容器服务控制台,从左侧导航栏中点击应用>容器组,选择对应的集群和namespace,可以查看到已有的pod,被调度到virtual-kubelet节点上的即是ECI实例,点击实例的‘详情’可以查看详细信息。

应用迁移的限制

virtual-kubelet是作为一个虚拟节点对接Kubernetes,因此ECI实例并不会跑在一个集中式的“真实”节点上,而是会被打散分布在整个阿里云的资源池中。

考虑到公有云的安全性和虚拟节点本身带来的限制,ECI目前还不支持Host相关功能以及DaemonSet。具体如下:

不支持的功能 具体内容 备选方案
HostPath Mount本地宿主机文件到容器中 使用emptyDir,或者NAS存储
HostNetwork 将宿主机端口映射到容器中 使用type=LoadBalancer的负载均衡
DaemonSet 在容器所在宿主机上部署static pod 通过sidecar形式在pod中部署多个镜像
Privileged权限 容器拥有privileged权限 使用securityContext为pod添加Capability
type=NodePort的Service 通过宿主机端口映射到容器端口 使用type=LoadBalancer的负载均衡

应用迁移的说明

  • Kubernetes集群和Serverless Kubernetes共享容器镜像仓库,因此可以将容器镜像先上传到容器镜像仓库中。为了加速镜像的拉取,建议使用专有网络的镜像地址(registry-vpc.xxx)。
  • Serverless Kubernetes和虚拟节点扩展 支持Deployment, ReplicaSet,Job,Cronjob,StatefulSet等常见controller,理论上可以直接运行。
  • Serverless Kubernetes和虚拟节点扩展 利用 PrivateZone 实现 服务发现,因此建议在创建集群时默认勾选 PrivateZone支持。
  • Serverless Kubernetes和虚拟节点扩展 支持 type=LoadBalancer 的Service。您可以将Service修改为type=LoadBalancer,详情请参考访问控制概述
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Cluster
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: LoadBalancer