常见问题

更新时间:
复制 MD 格式

本文汇总了通过阿里云容器服务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,示例如下:

    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。

    容器组IDECI实例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,但无后续事件产生。

说明

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

解决方法

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

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

    kubectl -n kube-system get pods

    命令输出中,ack-virtual-node-affinity-admission-controllerack-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
  3. 运行以下命令获取对应Pod的日志信息。其中ack-virtual-node-controller-xxxxxxxxxx请替换为步骤2获取的Pod名称。

    kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx
  4. 根据最新的日志报错进行处理,或者提供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、corednsYAML解决问题,需要增加的YAML如下:

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

如何修改ECI PodClusterDomain?

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

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

问题描述

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

问题解释

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

ACK集群是支持的。

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

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

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

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

  • ECI实例运行时间太短

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

  • 收集路径(Path)错误

    首次在Pod中指定环境变量收集日志时,ECI会自动在日志服务中创建LogstorePath,后续再次创建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监控