对接概述
BCI能为Kubernetes提供基础的容器Pod运行环境,但业务间的依赖、负载均衡、弹性伸缩、定期调度等能力依然需要Kubernetes来提供。本文为您介绍百度智能云容器引擎(Cloud Container Engine,即CCE)如何与BCI对接,使用BCI作为Pod的运行资源。
对接方式
BCI为Kubernetes提供一种层次化的解决方案:即BCI负责底层Pod容器资源的调度和管理工作,Kubernetes在BCI之上作为PaaS层来管理业务负载,例如管理Deployment、Service、StatefulSet、CronJob等。
基于Kubernetes社区的Virtual Kubelet(简称VK)技术,BCI可以以虚拟节点的形式接入到Kubernetes集群中,使得集群可以轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。BCI在接管Pod容器底层基础设施的管理工作后,Kubernetes不再需要直接负责单个Pod的放置、启动等工作,也不再需要关心底层虚拟机的资源情况,通过BCI即可确保Pod需要的资源随时可用。
目前BCI已经无缝集成到百度智能云容器引擎(Cloud Container Engine,即CCE)中,您可以通过CCE快速体验BCI的容器运行能力。
CCE(混合使用BCI和BCC)
百度智能云容器引擎(Cloud Container Engine,即CCE)是高度可扩展的高性能容器管理服务,您可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务,您将无需安装、运维、扩展您的集群管理基础设施,只需进行简单的API调用,便可启动和停止Docker应用程序,查询集群的完整状态,以及使用各种云服务。您可以根据您的资源需求和可用性要求在您的集群中部署容器,满足业务或应用程序的特定要求。
如果您已经建立了CCE集群,可以通过部署虚拟节点(基于VK)的方式来使用BCI。有了虚拟节点后,当您的CCE集群需要扩容时,无需规划节点的计算容量,可以直接在虚拟节点下按需创建BCI,BCI与集群中真实节点上的Pod之间网络互通。建议您将长时间运行的业务负载的弹性流量部分调度至BCI,这可以缩短弹性扩容的时间,减少扩容成本,并充分利用已有资源。当业务流量下降后,您可以快速释放部署在BCI上的Pod,从而降低使用成本。
在CCE集群中,您需要手动部署虚拟节点(即VNode),才能创建BCI Pod。虚拟节点上的Pod均基于BCI运行在安全隔离的容器运行环境中,每个Pod对应一个BCI容器实例。更多信息,请参见CCE产品概述。
管理工具
通过VK将BCI以虚拟节点的方式接入Kubernetes集群后,您可以通过以下方式管理Kubernetes集群及BCI实例的运行情况:
- 容器实例BCI控制台
您可以通过弹性容器实例控制台查看BCI实例的运行情况。操作步骤如下:
a. 登录容器实例BCI控制台。
b. 在顶部菜单栏左上角处选择地域。
c. 在容器组页面,您可以查看该地域下已经创建的BCI实例。 - 容器引擎CCE控制台
您可以通过容器引擎CCE控制台来操作CCE集群,并查看BCI实例的运行情况。查看BCI实例的操作步骤如下:
a. 登录容器引擎CCE控制台。
b. 在左侧导航栏单击集群管理。
c. 在集群列表中找到想要查看的集群,单击集群ID进入详情页面。
d. 在左侧导航栏,选择工作负载>容器组。
e. 在容器组页面,选择命名空间,您可以查看该命名空间下的BCI实例。 - kubectl客户端
您可以通过kubectl客户端在本地计算机来访问远端的Kubernetes集群,使用Kubectl命令来管理集群。具体操作,请参见通过kubectl连接Kubernetes集群
功能限制和说明
由于公有云安全性及虚拟节点带来的限制,BCI目前还不支持Kubernetes中HostPath、DaemonSet等功能,如下表所示。
不支持的功能 | 说明 | 推荐替代方案 |
---|---|---|
HostPath | 挂载本地宿主机文件到容器中 | 使用EmptyDir,CFS文件系统,NFS,BOS,暂不支持CDS云盘 |
HostNetwork | 将宿主机端口映射到容器上 | BCI将忽略HostNetwork字段,推荐使用type=LoadBalancer的负载均衡 |
DaemonSet | 在容器所在宿主机上部署Static Pod | 通过sidecar形式在Pod中部署多个镜像 |
Privileged权限 | 容器拥有privileged权限 | 去除业务逻辑特权依赖 |
type=NodePort的Service | 将宿主机端口映射到容器上 | 使用type=LoadBalancer的负载均衡 |
通过CCE使用BCI时,请注意以下事项:
- 请先将容器镜像上传到容器镜像仓库中,便于镜像拉取。推荐您使用百度云容器镜像服务CCR,详细见镜像一节。
- 支持Deployment、ReplicaSet、Job、Cronjob、StatefulSet等常见负载,可以直接运行。
- 支持负载均衡,即配置type=LoadBalancer的Service。
使用流程
推荐使用:CCE托管版 + BCI 混合集群
1. 创建CCE托管集群
推荐创建CCE托管集群,操作说明详见:创建集群
您可以根据自身业务情况按需定义参数,其中以下几点需要特别注意:
- 集群类型请选择 『标准Kubermetes托管集群』
- Master配置请选择 『托管Master』
集群创建成功后,请增加2个BCC worker节点,用于运行集群系统组件,配置在2C8G起即可。
2. 在集群中添加虚拟节点
上述集群创建完毕后,在集群中安装cce-virtual-kubelet Helm模板生成虚拟节点,详情请参考文档管理虚拟节点 Helm安装关键必填参数说明(以下带有*参数参数为用户必填项),其他参数可默认:
参数 | 描述 | 获取方式 | 示例 |
region* | 地域 | 填写所在地域的英文缩写,仅支持开放[BCI](https://cloud.baidu.com/doc/BCI/s/Ujxessavb)产品的地域 | 例如测试资源在 保定,因此请填写 bd |
clusterID* | CCE集群id | 从集群列表页获取 | **cce-xxxxxxx** |
bci.subnets* | 创建BCI的子网信息,需要填写子网id和子网所属可用区。 1、至少填写一个子网;指定多个子网时,每次创建会从子网列表中随机选择一个。 2、BCI必须和CCE在一个VPC | 从私有网络VPC-子网页面获取,需与CCE集群处于同一VPC | 例如测试资源在可用区B,这里可用区为zoneB,同时子网选择可用区B的子网。 **subnetID: sbn-xxxxxxx** **zone: zoneB** |
bci.securityGroupID* | 安全组ID,可以和集群内BCC选择同一个安全组 | 从私有网络VPC-安全组页面获取 | **g-f9024xxxxxx** |
3. 准备容器镜像
请先将容器镜像上传到容器镜像仓库中,便于镜像拉取。
需要注意的是,您需要保证网络畅通,如果需要拉取公网镜像。则需要为BCI Pod配置公网访问,具体操作请参考文档连接公网
4. 创建BCI Pod
具体创建详细信息和步骤可参考如下文档
调度方式
- 手动调度Pod到BCI, 详细说明见将Pod调度到VNode
- 使用混合调度插件调度到BCI, 详细说明和步骤见混合调度
使用BCI功能
在Kubernetes集群中创建Pod到BCI时,为充分使用BCI提供的功能,在不改变Kubernetes语义的前提下,您可以根据需求为Pod添加Annotation。Annotation需添加到Pod级别的metadata中,支持的Annotation列表以及配置示例,请参见Pod Annotation。