配置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限制
相比原生Pod,BCI Pod暂不支持以下功能。
- 不支持hostPath/hostPid。
- 不支持privileged权限开放。
- 不支持过大的configmap和secret volume挂载。
- 不支持liveness/readiness probe。
- 不支持init container。
- 不支持subPath/subPathExpr挂载。