常见问题

本文介绍自建Kubernetes集群部署VNode来使用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到VNode?

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

  • 手动调度

    通过配置nodeSelector和tolerations、指定nodeName的方式,可以手动将Pod调度到VNode。具体操作,请参见将Pod调度到VNode

  • 自动调度

    部署eci-profile组件后,可以自定义配置Selector,将满足条件的Pod自动调度到VNode。具体操作,请参见使用eci-profile调度Pod到VNode

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

由于VNode不是真实节点,并不支持DaemonSet,因此在创建DaemonSet时,您需要配置反亲和性调度策略,禁止DaemonSet Pod调度到VNode上。配置示例如下:

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: type
            operator: NotIn
            values:
            - virtual-kubelet

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

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

挂载NAS目录超时,怎么办?

问题原因

由于K8s的工作流程是挂载NAS后按照Pod指定的权限及归属,对相应NAS目录中的文件递归执行chmod/chown操作,因此如果NAS目录中文件较多,且在创建Pod时在安全上下文中配置了文件的权限及归属时,会产生NAS Volume挂载超时的问题。

解决方案

配置安全上下文时,将fsGroupChangePolicy配置为OnRootMismatch,实现当NAS中根目录权限及归属与Pod预期匹配时,跳过chmod/chown操作。更多信息,请参见为Pod或容器配置安全上下文

如何采集日志到阿里云日志服务SLS?

您可以在自建Kubernetes集群上安装Logtail组件(即安装alibaba-log-controller组件),以实现采集日志到SLS。在安装Logtail组件过程中,系统将自动完成以下操作:

  1. 创建alibaba-log-configuration ConfigMap,该ConfigMap中包含日志服务配置信息,例如Project等。

  2. (可选)创建AliyunLogConfig CRD资源。

  3. (可选)部署alibaba-log-controller Deployment,用于监听AliyunLogConfig CRD资源的变更、创建Logtail采集配置。

  4. 部署logtail-ds Daemonset,用于采集节点的日志。

具体操作,请参见安装Logtail组件

说明

如果您的集群版本较低(例如1.13),请获取并部署早期版本的日志采集CRD(下载链接为alibaba-cloud-log-0.1.1)。如果还有其他问题,请提交工单。

metrics-server报404错误,如何处理?

目前VNode支持0.5.x及以下版本的metrics-server,如果出现404报错,请尝试降低metrics-server的版本。

说明

从0.6.x版本开始,metrics-server获取node metrics信息时,由/stats/summary切换到了/metrics/resource,VNode暂时不支持/metrics/resource API。

通常情况下,metrics-server的启动参数如下:

        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --kubelet-insecure-tls