全部产品
Search
文档中心

线下K8s集群部署VK的常见问题

更新时间: 2021-10-26

如果您在线下IDC自建了Kubernetes集群,您需要在K8s集群中需要部署VK(Virtual Kubelet),即部署虚拟节点后才能使用ECI。本文介绍线下K8s集群部署VK来使用ECI的常见问题。

云上服务如何访问线下IDC的Pod IP?

如果您使用高速通道(专线)来打通线下和云上网络,则线下IDC和云上服务之间可以通过边界路由协议BGP相互学习路由规则,IDC可以将Pod IP的路由信息通过BGP广播给云上服务,实现云上服务可以访问线下IDC的Pod IP。具体操作,请参见配置BGP

线下IDC服务如何访问云上的Pod IP?

如果您使用高速通道(专线)来打通线下和云上网络,配置BGP后,线下IDC和云上服务之间可以相互学习路由规则,云上的Pod IP的路由信息可以部署CCM实现自动同步。更多关于CCM的信息,请参见Cloud Controller Manager

自建K8s集群部署CCM后,可以将K8s的Pod IP路由信息同步到VPC路由表。部署CCM时,请注意以下事项:

  • 需要将K8s集群节点的providerID修改为<region-id>.<ecs-id>的格式,例如cn-shanghai.i-ankb8zjh2nzchf*******

  • 确保Pod IP与节点的Pod CIDR相匹配,即该节点上的Pod IP地址均在该节点定义的Pod CIDR网段内。例如:Calico IPAM需要配置为host-local才能使Pod IP与节点的Pod CIDR相匹配。

    Pod CIDR网段可以在节点的spec信息中查看:

    spec:
      podCIDR: 172.23.XX.0/26
      podCIDRs:
      - 172.23.XX.0/26
      providerID: cn-shanghai.i-ankb8zjh2nzchfxxxxxxx

内网域名无法解析怎么办?

问题描述

云上和线下服务由于无法解析内网域名,导致无法进行业务调用,包括:

  • 云上服务无法解析IDC内网域名

  • IDC服务无法解析云上PrivateZone域名

解决方案

线下IDC和阿里云VPC分别属于两套网络环境,如果部署在线下IDC和云上的服务都需要通过DNS解析进行业务间调用,您可以配置PrivateZone云解析实现云上和线下服务通过内网域名方式实现相互访问。具体操作,请参见PrivateZone&VPN网关联动实现云上访问云下资源

线下IDC服务如何访问云上服务?

问题描述

线下IDC服务通过专线无法访问阿里云服务,例如IDC通过专线无法访问云数据库RDS、对象存储OSS、日志服务SLS等。

解决方案

您可以通过以下两种方式解决问题,推荐您使用方案一。

  • 方案一

    在云上配置云服务域名,边界路由器VBR将通过边界路由协议BGP发布路由给线下IDC。具体操作,请参见访问云服务

  • 方案二:配置IDC添加静态路由,将100.64.0.0/10路由到专线。

使用自建的容器镜像仓库无法拉取镜像,怎么办?

问题描述

使用自建的容器镜像仓库无法拉取镜像,报错如下:

VK常见问题

解决方案

上述问题可能是因为镜像仓库使用的自签发的证书,拉取镜像时无法通过证书认证导致。在创建Pod时,您可以添加以下Annotation来跳过证书认证:

"k8s.aliyun.com/insecure-registry": "<host-name>"

例如:假设私有镜像仓库中的Nginx镜像的链接为test.example.com/test/nginx:apline,则可以添加"k8s.aliyun.com/insecure-registry": "test.example.com"的Annotation来跳过证书认证。

如何调度Pod到VK?

您可以根据业务需要选择合适的方式将Pod调度到VK,即在ECI上运行Pod。常用方式如下:

  • 手动调度Pod

    通过配置Pod Label、配置Namespace Label和配置ECI弹性调度等方式,可以手动将Pod调度到ECI上运行。更多信息,请参见调度Pod到ECI

  • 自动调度Pod

    ECI Profile提供ECI Scheduler能力,基于Mutating Webhook机制实现了一种新的调度机制,即在ECI Profile中,您可以声明需要匹配的Namespace或者Pod的Label,对于Label能够匹配上的Pod,将被自动调度到ECI。更多信息,请参见配置ECI Profile

为什么DaemonSet Pod调度到VK后一直是Pending状态?

由于VK对应的是虚拟节点,并不支持DaemonSet,因此在创建DaemonSet时,您需要配置反亲和性调度策略,禁止DaemonSet Pod调度到VK(即虚拟节点)上。配置示例如下:
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: type
            operator: NotIn
            values:
            - virtual-kubelet

使用配置Pod Label的方式调度Pod到VK,为什么调度失败?

使用配置Pod Label的方式调度Pod到VK时,需要确保K8s版本为1.16及以上版本。VK常见问题2