在虚拟节点启动Pod
所有文档

          容器引擎 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中每个容器的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 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集群