对接概述
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集群中,您需要手动部署虚拟节点(基于VK),才能创建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实例。
使用流程
推荐使用:CCE托管版 + BCI 混合集群
创建CCE托管集群
创建CCE托管集群,操作说明详见:https://cloud.baidu.com/doc/CCE/s/zjxpoqohb
您可以根据自身业务情况按需定义参数,其中以下几点需要特别注意:
- 集群类型请选择 标准Kubermetes托管集群
- Master配置请选择 托管Master
在集群中添加虚拟节点
上述集群创建完毕后,在集群中安装虚拟节点对接BCI,详情请参考:https://cloud.baidu.com/doc/CCE/s/Xk9cut3x8 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-子网页面获取 | 例如测试资源在可用区B,这里可用区为 zoneB,子网选择可用区B的子网。 **subnetID: sbn-xxxxxxx** **zone: zoneB** |
bci.securityGroupID | 安全组ID,可以和集群内BCC选择同一个安全组 | 从私有网络VPC-安全组页面获取 | **g-f9024xxxxxx** |
repository | virtual-kubelet镜像repository,需要覆盖默认值时填写 | 默认参数,无需更改 | **registry.baidubce.com/cce-plugin-pro/bci-virtual-kubelet** |
tag | virtual-kubelet镜像tag,默认为空则使用默认值,需要覆盖默认值时填写 | - | tag必填**bciv2** |
调度业务到BCI
虚拟节点安装完毕后,用户可以手动调度业务到BCI上。需要在业务YAML增加如下配置:
- 由于虚拟节点上默认配置了污点,用户需要为工作负载增加容忍以及调度策略
spec:
nodeSelector:
type: "virtual-kubelet"
tolerations:
- key: "virtual-kubelet.io/provider"
operator: "Equal"
value: "baidu"
effect: "NoSchedule"
使用BCI功能
在Kubernetes集群中创建Pod到BCI时,为充分使用BCI提供的功能,在不改变Kubernetes语义的前提下,您可以根据需求为Pod添加Annotation。Annotation需添加到Pod级别的metadata中,支持的Annotation列表以及配置示例,请参见配置BCI Pod。