配置BCIPod
配置CPU和Memory资源
当前支持通过指定Pod中每个容器的resources.requests
,对BCI实例的规格进行配置。若不指定,则默认单个容器使用的资源的是1vCPU+2GiB内存。对应BCI实例的计费资源为Pod中所有容器资源的总和。
不支持resources.limits
字段,该字段的值在创建时会被忽略。
BCI实例的运行费用与实例资源配置和实例运行时长有关,详情可以参考BCI计费规则。
目前BCI Pod中,每个容器可以配置的CPU和Memory规格如下:
注意:1GiB=1024MiB, 1MiB=1024KiB,1KiB=1024B。
vCPU | Memory |
---|---|
.25 vCPU | 0.5GiB, 1GiB |
.5 vCPU | 1GiB, 1.5GiB, 2GiB |
1 vCPU | 2+n*0.5GiB, 0≤n≤4 |
2 vCPU | 4+n*0.5GiB, 0≤n≤8 |
4 vCPU | 8+n*0.5GiB, 0≤n≤16 |
如果配置了不合法的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-application |
BCI实例所属application | "bci.virtual-kubelet.io/bci-application": "default" |
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带宽 | "bci.virtual-kubelet.io/bci-create-eip-bandwidth": "100" |
bci.virtual-kubelet.io/kube-proxy-enabled |
为BCI实例注入kube-proxy sidecar,用于创建ClusterIP | "bci.virtual-kubelet.io/kube-proxy-enabled": "true" |
bci.virtual-kubelet.io/bci-enable-log-push |
开启Pod日志推送,当前推送目标为BLS | "bci.virtual-kubelet.io/bci-enable-log-push": "true" |
bci.virtual-kubelet.io/bci-enable-auto-log-push-phases |
对于进入Succeeded/Failed状态的pod,自动推送日志到BLS | "bci.virtual-kubelet.io/bci-enable-auto-log-push-phases": "Failed" |
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的负载均衡 |