常见问题

本文汇总了通过阿里云容器服务Kubernetes版使用ECI时的常见问题,包括ECI Pod、网络等问题。

如何创建GPU实例?

ECI支持指定ECS GPU规格来创建GPU实例,具体操作,请参见创建GPU实例

如何查看ECI实例ID?

Kubernetes场景下,一个Pod对应一个ECI实例。您可以通过以下两种方式查看ECI实例ID:

  • 方式一:通过kubectl命令

    通过kubectl describe pod命令查看Pod详情,在Pod详情的Annotation中可以查看对应的ECI实例ID。

    k8s.aliyun.com/eci-instance-id字段对应的值即为ECI实例ID,格式为eci-xxxx,示例如下:

    查看实例ID

  • 方式二:通过弹性容器实例控制台

    弹性容器实例控制台容器组页面,根据Pod名称可以查询对应的ECI实例,然后查看ECI实例ID。

    容器组ID即ECI实例ID,格式为eci-xxxx,示例如下:

    容器组页面.png

使用了镜像缓存,为什么创建ECI Pod的速度还是很慢?

问题描述

在标准节点上创建一个Pod只需要两到三秒,而创建ECI实例时使用了镜像缓存,Pod却用了十几秒才启动。

问题说明

这种情况是正常的。因为在标准节点上创建Pod时,不需要单独申请资源,可以直接在节点上创建容器,因此时间比较快。而在创建ECI实例时,系统需要申请资源,如果指定了多可用区,还需要在库存不足时逐个尝试各个可用区是否有库存,因此时间相对会慢一些。

如果您指定了多可用区创建ECI实例,建议您把库存比较多的可用区ID放在第一个,这样可以避免由重试导致的启动延迟。

创建ECI Pod后,Pod一直处于Pending状态怎么办?

问题描述

创建Pod后几个小时内,Pod一直处于为Pending状态。查看Pod事件列表,显示在挂载Volume时,由于连接API Server超时导致失败。

解决方法

该问题通常是由于实例与API Server网络不通导致,您可以按以下思路进行排查:

  • 检查Pod与集群的API Server是否在同一个专有网络VPC中。

  • 如果为集群SLB添加了访问控制,请确保已将Pod所处网段加入到访问控制列表中。

Pod显示已调度至virtual-kubelet,但一直未成功,怎么办?

问题描述

在ACK+Virtual Node的场景下,可能会出现Pod显示已经调度到virtual-kubelet节点,但是一直没有新的事件更新的现象。 这种情况下,您需要获取对应的virtual-kubelet日志,根据报错信息进行问题排查。

faq-vk-log-1 faq-vk-log2

说明

如果有新的事件产生,您可以先根据产生的事件进行报错分析和处理。

解决方法

  1. 在容器服务控制台的集群页面,单击目录集群操作列下的更多>通过 Cloud Shell 管理集群

  2. 运行以下命令获取virtual-kubelet Pod名称。

    kubectl -n kube-system get pods

    faq-vk-log-4

  3. 运行以下命令获取对应Pod的日志信息。其中ack-virtual-node-controller-xxxxxxxxxx请替换为步骤2获取的Pod名称。

    kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx

    faq-vk-log-5

  4. 根据最新的日志报错进行处理,或者提供RequestID和报错信息,发起工单处理流程。

    faq-vk-log-6

ACK+Virtual Node的场景下,kube-proxy、coredns被调度到了虚拟节点,启动失败怎么办?

kube-proxy、coredns调度的时候是忽略taints的,所以有可能被调度到虚拟节点上。此时,您可以编辑kube-proxy、coredns的YAML解决问题,需要增加的YAML如下:

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

如何修改ECI Pod的ClusterDomain?

您可以修改VK对应的deployment,为容器增加环境变量CLUSTER_DOMAIN,从而修改VK创建的ECI Pod的ClusterDomain。建议您提交工单,联系阿里云技术支持进行操作。

ACK Serverless集群的Ingress中设置了鉴权,但不生效是什么原因?

问题描述

nginx-ingress 中设置了注解 nginx.ingress.kubernetes.io/auth-url ,但不生效。

问题解释

ACK Serverless集群中基于SLB的Ingress Controller,不支持设置鉴权URL。

ACK集群是支持的。

集群升级后,服务IP地址ping不通怎么办?

在2020年10月之前,每个Service IP会对应一张虚拟网卡,所以能ping通。但在2020年10月份之后,为了优化高并发,Service IP只存在ipvs的规则中,所以无法ping通(ipvs是基于IP+Port做数据转发的,所以ping包无法做转发)。

为什么采集不到ECI实例日志?

如果您在Pod中设置了日志服务的环境变量aliyun_logs_{Logstore名称},但在日志服务中却没有找到ECI实例的日志,可能是以下原因导致:

  • ECI实例运行时间太短

    ECI实例启动后,如果业务容器在20秒内执行完毕,这种情况下,日志服务可能还没有来得及收集日志,容器就已经退出且日志相关的Volume已经被卸载,因此日志服务无法收集到日志。

  • 收集路径(Path)错误

    首次在Pod中指定环境变量收集日志时,ECI会自动在日志服务中创建Logstore和Path,后续再次创建Pod时也只能使用该Path。如果使用了其他Path,则会导致日志服务收集不到日志。如果您想要更换Path,可以将Logstore一起更换,此时ECI会自动在日志服务中创建新的Logstore。

ACK+Virtual Node的场景下,Prometheus如何获取ECI Pod的监控指标?

Virtual Node和普通节点保持兼容,Prometheus(ARMS Prometheus或自建开源Prometheus)会自动获取Virtual Node管理的ECI Pod的基础监控指标,您无需做额外配置。

关于ACK集群如何部署Prometheus,请参见阿里云Prometheus监控开源Prometheus监控