容器引擎CCE

    在虚拟节点启动Pod

    目录

    1.调度Pod到虚拟节点
    2.配置CPU和Memory资源
    3.镜像拉取
    4.存储
    5.网络
    6.绑定EIP
    7.错误排查
    8.支持的annotation列表
    9.BCI限制

    在虚拟节点启动Pod

    当CCE集群中存在状态为正常的虚拟节点时,可以调度Pod到该虚拟节点上。

    调度到该虚拟节点时候的Pod将以BCI实例的方式启动,不占用集群内物理资源。

    调度Pod到虚拟节点

    在虚拟节点列表页,点击操作-如何使用按钮。

    image.png

    弹窗中显示的是一段PodSpec的yaml文件片段,根据该片段配置Pod的nodeSelector和tolerations即可将对应的Pod调度到该虚拟点上。

    示例如下,假设虚拟节点名称为bci-virtual-kubelet-0

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        run: nginx
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: nginx
      template:
        metadata:
          labels:
            run: nginx
        spec:
          containers:
          - image: nginx
            name: nginx
        nodeSelector:
          type: virtual-kubelet
          kubernetes.io/hostname: bci-virtual-kubelet-0
        tolertions:
        - key: virtual-kubelet.io/provider
          operator: Equal
          value: baidu
          effect: NoSchedule

    如果集群中存在多个虚拟节点,只需要Pod以BCI的方式启动而不希望指定具体启动Pod的虚拟节点,去掉nodeSelector中kubernetes.io/hostname的selector即可。

    配置CPU和Memory资源

    当前支持通过指定Pod中每个容器的resource.quota,对BCI实例的规格进行配置。若不指定,则默认单个容器使用的资源的是1c2g。BCI的资源为Pod中所有容器资源的总和。

    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 Pod默认每次启动后使用内部的containerd从远端拉取容器镜像。如果镜像为外网镜像,则需要使用NAT网关,或者给BCI Pod绑定EIP。建议您将容器镜像存储在百度云镜像仓库,可以通过内网拉取缩短镜像拉取时间。

    如果镜像为私有镜像,可以为BCI Pod配置imagePullSecrets拉取私有镜像,示例可以参考CCE集群中使用私有镜像实践

    存储

    当前BCI Pod支持挂载以下类型的volume:

    • ConfigMap
    • Secret
    • NFS(CFS)
    • EmptyDir

    使用方式与原生k8s使用方式一致。

    暂不支持挂载PVC。

    网络

    如需要对集群内的ClusterIP发起访问,需要使用以下annotation在BCI Pod中注入kube-proxy sidecar:

    • "bci.virtual-kubelet.io/kube-proxy-enabled": "true"

    其他网络访问方式与原生Pod一致。

    绑定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后,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时,需要保证相互之间的一致性,如长短id需要一致,子网需要从属于对应安全组,等等。没有特殊配置的情况下默认使用虚拟节点本身的配置。

    annotation 含义 示例
    bci.virtual-kubelet.io/bci-logical-zone BCI实例所在可用区 "bci.virtual-kubelet.io/bci-logical-zone": "zoneB"
    bci.virtual-kubelet.io/bci-vpc-id BCI实例所在VPC短id "bci.virtual-kubelet.io/bci-vpc-id": "vpc-izpjfvg27jua"
    bci.virtual-kubelet.io/bci-vpc-uuid BCI实例所在VPC长id "bci.virtual-kubelet.io/bci-vpc-uuid": "2d750722-d829-4886-9a44-1472885ae37a"
    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限制

    相比原生Pod,BCI Pod暂不支持以下功能。

    • 不支持在虚拟节点上运行DaemonSet Pod。
    • 不支持hostPath/hostPid。
    • 不支持privileged权限开放。
    • 不支持过大的configmap和secret volume挂载。
    • 不支持liveness/readiness probe。
    • 不支持init container。
    上一篇
    管理虚拟节点
    下一篇
    Serverless集群