本文汇总了通过阿里云容器服务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,示例如下:Name: nginx-deployment-baxx-xxxB-lkwfd Namespace: default Priority: 0 Node: virtual-kubelet-cn-beijing-k/172.xxx.xxx.234 Start Time: Wed, 08 Jun 2022 07:21:31 +0000 Labels: app=nginx pod-template-hash=567d5c59f8 Annotations: ProviderCreate: done k8s.aliyun.com/cluster-dns: k8s.aliyun.com/cluster-domain: cluster.local k8s.aliyun.com/eci-created-by-template: true k8s.aliyun.com/eci-drop-apiserver-interactive-caps: k8s.aliyun.com/eci-instance-cpu: 0.5 k8s.aliyun.com/eci-instance-id: eci-2zefca8k0xxxzqjr2 k8s.aliyun.com/eci-instance-mem: 1.0 k8s.aliyun.com/eci-instance-spec: 0.5-1.0Gi k8s.aliyun.com/eci-instance-zone: cn-beijing-k方式二:通过弹性容器实例控制台
在弹性容器实例控制台的容器组页面,根据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日志,根据报错信息进行问题排查。
此时容器组列表中,该 Pod 状态显示为等待,监控信息中显示 PodScheduled: True,但无后续事件产生。
如果有新的事件产生,您可以先根据产生的事件进行报错分析和处理。
解决方法
在容器服务控制台的集群页面,单击目录集群操作列下的更多>通过 Cloud Shell 管理集群。
运行以下命令获取virtual-kubelet Pod名称。
kubectl -n kube-system get pods命令输出中,
ack-virtual-node-affinity-admission-controller和ack-virtual-node-controller即为 virtual-kubelet 相关 Pod。shell@Alicloud:~$ kubectl -n kube-system get pods NAME READY STATUS RESTARTS AGE ack-virtual-node-affinity-admission-controller-b877f9dcb-tsz78 1/1 Running 0 3d21h ack-virtual-node-controller-5664954b96-zhrcs 1/1 Running 0 3d21h alibaba-log-controller-67d6fd6558-g69t6 1/1 Running 0 35d alicloud-application-controller-5c9d6f9ff8-w2nkr 1/1 Running 0 35d alicloud-disk-controller-65c588684d-b2rfs 1/1 Running 0 35d alicloud-monitor-controller-99d88f745-mc6dk 1/1 Running 0 35d aliyun-acr-credential-helper-7946599dd7-hmzv2 1/1 Running 0 35d coredns-7d577ff8d7-7sn4z 1/1 Running 0 35d coredns-7d577ff8d7-c4rr9 1/1 Running 0 35d flexvolume-c7c6c 1/1 Running 0 35d flexvolume-lnpvr 1/1 Running 0 35d flexvolume-z24nc 1/1 Running 0 35d kube-proxy-worker-4jjl8 1/1 Running 0 35d kube-proxy-worker-7vzp9 1/1 Running 0 35d kube-proxy-worker-kls4w 1/1 Running 0 35d logtail-ds-gkplj 1/1 Running 0 35d logtail-ds-jvxx4 1/1 Running 0 35d logtail-ds-snczh 1/1 Running 0 35d metrics-server-6b46f99d99-mhn7n 1/1 Running 0 35d nginx-ingress-controller-68c56cd9b6-gjvts 1/1 Running 0 35d nginx-ingress-controller-68c56cd9b6-wf2ht 1/1 Running 0 35d terway-9lstv 2/2 Running 0 35d terway-q5lqc 2/2 Running 0 35d terway-wszqg 2/2 Running 0 35d tiller-deploy-5c9c59b4dc-96jt6 1/1 Running 0 35d virtual-kubelet-autoscaler-76479fdcf-lvmwz 1/1 Running 0 3d21h运行以下命令获取对应Pod的日志信息。其中ack-virtual-node-controller-xxxxxxxxxx请替换为步骤2获取的Pod名称。
kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx根据最新的日志报错进行处理,或者提供RequestID和报错信息,发起工单处理流程。
time="2019-08-23T07:11:30Z" level=warning msg="requeuing \"vk/nginx-gpu-demo-1-fc769bdf6-5klpj\" due to failed sync: failed to sync pod \"vk/nginx-gpu-demo-1-fc769bdf6-5klpj\" in the provider: SDK.ServerError\nErrorCode: InternalError\nRecommend: \nRequestId: 960DB5E6-D421-4EB1-BEDF-C03D0055332F\nMessage: An unknown error occurred while processing your request." namespace= node=virtual-kubelet operatingSystem=Linux provider=alibabacloud time="2019-08-23T07:11:30Z" level=warning msg="skipping update of pod nginx-gpu-demo-1-fc769bdf6-5klpj as pod updates are not supported" namespace= node=virtual-kubelet operatingSystem=Linux provider=alibabacloud
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监控。