本文汇总了通过阿里云容器服务Kubernetes版使用ECI时的常见问题,包括ECI Pod、网络等问题。
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
,示例如下:方式二:通过弹性容器实例控制台
在弹性容器实例控制台的容器组页面,根据Pod名称可以查询对应的ECI实例,然后查看ECI实例ID。
容器组ID即ECI实例ID,格式为
eci-xxxx
,示例如下:
使用了镜像缓存,为什么创建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日志,根据报错信息进行问题排查。
如果有新的事件产生,您可以先根据产生的事件进行报错分析和处理。
解决方法
在容器服务控制台的集群页面,单击目录集群操作列下的更多>通过 Cloud Shell 管理集群。
运行以下命令获取virtual-kubelet Pod名称。
kubectl -n kube-system get pods
运行以下命令获取对应Pod的日志信息。其中ack-virtual-node-controller-xxxxxxxxxx请替换为步骤2获取的Pod名称。
kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx
根据最新的日志报错进行处理,或者提供RequestID和报错信息,发起工单处理流程。
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监控。