配置BCIPod
配置CPU和Memory资源
当前支持通过指定Pod中每个容器的resources.requests
,对BCI实例的规格进行配置。若不指定,则默认单个容器使用的资源的是1vCPU+2GiB内存。对应BCI实例的计费资源为Pod中所有容器资源的总和。
不支持resources.limits
字段,该字段的值在创建时会被忽略。
BCI实例的运行费用与实例资源配置和实例运行时长有关,详情可以参考BCI计费规则。
BCI支持的规格如下表所示
CPU/核 | 内存区间(GiB) |
0.25 | 0.5、1、2 |
0.5 | 1、2、3、4 |
1 | 1、2、4、8 |
2 | 4、8、16 |
4 | 8、16、32 |
8 | 16、32 |
12 | 24、48 |
16 | 32、64 |
32 | 64、128 |
如果配置了不合法的CPU和Memory规格,将无法成功创建BCI实例。
如果您有不在上述规格内的实例规格诉求,请提交工单。
镜像拉取
当前BCI仅支持拉取存储于以下仓库中的容器镜像:
- 百度智能云容器镜像服务CCR(镜像地址为
registry.baidubce.com/<namespace>/<name>:<tag>
) - Docker Hub(镜像地址为
[<namespace>/]<name>:<tag>
) - 百度智能云CCE镜像仓库(镜像地址为
hub.baidubce.com/<namespace>/<name>:<tag>
)
如果镜像为私有镜像,可以为BCI Pod配置imagePullSecrets拉取私有镜像,示例可以参考CCE集群中使用私有镜像实践。
存储
BCI Pod中每个容器rootfs可用空间为3GB。
当前BCI Pod支持挂载以下类型的volume:
- ConfigMap
- Secret
- NFS(CFS)
- EmptyDir(暂不支持指定
sizeLimit
,单个Pod的emptyDir可用存储空间为10GB) - PersistentVolumeClaim(PVC)
PVC类型当前仅支持CFS/NFS PVC挂载,详细操作可以参考使用文件存储CFS。
暂不支持挂载CDS云磁盘。
暂不支持subPath/subPathExpr挂载。
网络
如需要对集群内的ClusterIP发起访问,需要使用以下annotation在BCI Pod中注入kube-proxy sidecar:
"bci.virtual-kubelet.io/kube-proxy-enabled": "true"
其他网络访问方式与原生Pod一致。
Serverless集群中Pod访问ClusterIP的方式根据集群创建时的参数不同有所区别,详情请参考在Serverless集群中使用Service。若Cluster Service模式选择为BLB则无需在BCI Pod中注入kube-proxy sidecar。
绑定EIP
创建Pod时,可以通过如下annotation自动创建EIP并绑定。
"bci.virtual-kubelet.io/bci-create-eip": "true"
:创建实例时自动创建并绑定EIP,默认创建的EIP类型为按流量计费的后付费型实例。"bci.virtual-kubelet.io/bci-create-eip-bandwidth": "100"
:自动创建的EIP带宽,单位Mbps,若不指定,默认创建的EIP带宽为100Mbps。
配置日志推送
当前BCI支持将Pod容器内日志推送到BLS,进行日志的持久化存储和结构化查询。通过如下annotation可以开启日志推送相关功能:
"bci.virtual-kubelet.io/bci-enable-log-push": "true"
: 为该Pod开启日志推送,开启后该pod内所有容器的日志会被推送到BLS对应的日志集内。-
"bci.virtual-kubelet.io/bci-enable-auto-log-push-phases": "Failed"
: 如果Pod终态为特定的状态,则自动将Pod内容器日志推送到BLS。支持的value如下:"bci.virtual-kubelet.io/bci-enable-auto-log-push-phases": "Failed
,仅自动推送终态为Failed的Pod内容器日志;"bci.virtual-kubelet.io/bci-enable-auto-log-push-phases": "Succeeded
,仅自动推送终态为Succeeded的Pod内容器日志;"bci.virtual-kubelet.io/bci-enable-auto-log-push-phases": "Succeeded,Failed
,自动推送终态为Failed或Succeeded的Pod内容器日志
错误排查
若创建BCI Pod后,Pod状态变为ProviderFailed
,代表BCI实例创建失败。可以通过kubectl describe po <pod名称> --namespace <命名空间>
查看具体失败原因。
若创建BCI Pod后,实例状态长时间处于Creating
,一般为BCI订单异常导致,可以通过查看pod annotation中的bci.virtual-kubelet.io/order-id
字段查询到BCI订单ID,查询对应的订单失败原因。
支持的annotation列表
注意:annotation需要配置在PodSpec中,而不是DeploymentSpec中。
注意:配置网络,安全组和可用区相关annotation时,需要保证相互之间的一致性,如子网与安全组应该同属一个VPC,子网与可用区参数需要匹配,等等。没有在Pod中单独配置的情况下默认使用虚拟节点本身的配置。
注意:若通过annotation指定了子网参数,必须同时通过annotation指定可用区参数,可用区参数的值为子网所属可用区。
annotation | 含义 | 示例 |
---|---|---|
bci.virtual-kubelet.io/bci-logical-zone | BCI实例所在可用区 | "bci.virtual-kubelet.io/bci-logical-zone": "zoneB" |
bci.virtual-kubelet.io/bci-subnet-id | BCI实例所在子网短id | "bci.virtual-kubelet.io/bci-subnet-id": "sbn-wiheujsumeqc" |
bci.virtual-kubelet.io/bci-security-group-id | BCI实例使用的安全组id | "bci.virtual-kubelet.io/bci-security-group-id": "g-0c25zsii79hv" |
bci.virtual-kubelet.io/bci-create-eip | 自动为BCI实例创建并绑定EIP | "bci.virtual-kubelet.io/bci-create-eip": "true" |
bci.virtual-kubelet.io/bci-create-eip-bandwidth | 自动为BCI实例创建的EIP带宽,单位Mbps,默认100Mbps | "bci.virtual-kubelet.io/bci-create-eip-bandwidth": "100" |
bci.virtual-kubelet.io/bci-create-eip-route-type | 自动为BCI实例设置EIP的线路类型。不指定时,默认为标准BGP类型。 取值范围: BGP:标准型BGP BGP_S:增强型BGP ChinaMobile:中国移动 ChinaUnicom:中国联通 ChinaTelcom:中国电信 (如果选择移动、联通、电信线路,需要先申请单线EIP白名单。) |
"bci.virtual-kubelet.io/bci-create-eip-route-type": "BGP_S" |
bci.virtual-kubelet.io/bci-create-eip-paymethod | 计费方式: ByTraffic:流量 ByBandwidth:带宽 |
"bci.virtual-kubelet.io/bci-create-eip-paymethod": "ByBandwidth" |
bci.virtual-kubelet.io/kube-proxy-enabled | 为BCI实例注入kube-proxy sidecar,用于访问ClusterIP | "bci.virtual-kubelet.io/kube-proxy-enabled": "true" |
bci.virtual-kubelet.io/pod-delay-release-duration-minute | 设置延迟销毁时长,只针对job任务类型Pod(即restartPolicy为never)生效 | "bci.virtual-kubelet.io/pod-delay-release-duration-minute": '30' |
bci.virtual-kubelet.io/pod-delay-release-succeeded | 延迟销毁默认只对Failed状态的Pod生效,变更此字段可将延迟销毁也应用于 Succeeded状态的Pod | "bci.virtual-kubelet.io/pod-delay-release-succeeded": 'true' |
bci.virtual-kubelet.io/resource-tag | 绑定的标签(Tag)字符串,最多可以绑定10个标签。标签键和标签值之间用半角冒号隔开,多个标签之间用半角逗号隔开。 | bci.virtual-kubelet.io/resource-tag: "key1:value1,key2:value2" |
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的负载均衡 |