对接概述
本文为您介绍自建Kubernetes集群如何与BCI对接,以及如何使用BCI。
BCI能为Kubernetes提供基础的容器Pod运行环境,但业务间的依赖、负载均衡、弹性伸缩、定期调度等能力依然需要Kubernetes来提供。
对接方式
BCI负责底层Pod容器资源的调度和管理工作,Kubernetes在BCI之上作为PaaS层来管理业务负载,例如管理Deployment、Service、StatefulSet、CronJob等。 BCI在接管Pod容器底层基础设施的管理工作后,Kubernetes不再需要直接负责单个Pod的放置、启动等工作,也不再需要关心底层虚拟机的资源情况,通过BCI即可确保Pod需要的资源随时可用。
使用场景
对于长时间运行的业务负载,您可以将此类负载的弹性流量部分调度至BCI,缩短弹性扩容的时间,减少弹性部分的扩容成本,并尽可能充分利用已有资源。当业务流量下降后,可以快速释放部署在BCI上的Pod,从而降低您的使用成本。
混合集群架构
如果您在本地IDC,或者百度云的BCC上自建了Kubernetes集群,则可以通过部署虚拟节点(VNode)的方式来使用BCI。VNode对标原生kubernetes节点,内置了virtual-kubelet、kube-proxy等组件,兼容原生kubernetes节点API。 当有Pod调度到VNode上时,VNode会自动创建并管理底层的BCI资源。 在VNode上运行的每个Pod都对应一个BCI实例,架构如下图所示:
功能限制
由于公有云安全性及虚拟节点带来的限制,BCI目前还不支持Kubernetes中HostPath、DaemonSet等功能,如下表所示。
不支持的功能 | 说明 | 推荐替代方案 |
---|---|---|
HostPath | 挂载本地宿主机文件到容器中 | 使用emptyDir、云盘或者CFS文件系统 |
HostNetwork | 将宿主机端口映射到容器上 | BCI将忽略HostNetwork字段,推荐使用type=LoadBalancer的负载均衡 |
DaemonSet | 在容器所在宿主机上部署Static Pod | 通过sidecar形式在Pod中部署多个镜像 |
Privileged权限 | 容器拥有privileged权限 | 去除业务逻辑特权依赖 |
type=NodePort的Service | 将宿主机端口映射到容器上 | 使用type=LoadBalancer的负载均衡 |
调度方式
对于混合使用普通节点和虚拟节点的Kubernetes集群,您可以根据需要将Pod调度到VNode,以BCI来运行。主要方式如下:
- 手动调度通过配置nodeSelector和tolerations、指定nodeName的方式,可以手动将Pod调度到VNode。具体操作,请参见将 Pod调度到VNode。
使用BCI功能
在Kubernetes集群中创建Pod到BCI时,为充分使用BCI提供的功能,在不改变Kubernetes语义的前提下,您可以根据需求为Pod添加Annotation。Annotation需添加到Pod级别的metadata中,支持的Annotation列表以及配置示例,请参见BCI Pod Annotation。