顺便聊一下TKE 平台常见问题 QA

本文章将以 QA 方式记录在使用 TKE 产品过程中的可能会遇到的常见问题解答,将不定期更新

集群相关问题

通过 kubectl get componentstatuses 查看 controller-manager和scheduler状态有问题?

scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused

原因:主要是因为托管集群部署架构导致不能通过127.0.0.1 连接到相关组件,实际上组件状态是正常的,可以忽略此告警。

TKE 集群节点突然被全部删除?

可能原因:检查是否安装了 Rancher 来管理集群,且做了 删除 Rancher 的 Namespace 操作

TKE 普通节点和超级节点 Pod 同功能注解以那个为准?

TKE 普通节点 + 超级节点集群:以 TKE 集群文档注解为准。

TKE Serverless 集群(只有超级节点):以 TKE Serverless 集群文档注解为准。

在 TKE 节点尝试查看集群报错

$ kubectl get node
error: You must be logged in to the server (Unauthorized)

原因:节点临时凭证 12 小时后过期导致,参考:下发节点 kubeconfig 文件的说明

代金券余额还有的情况下,创建集群报余额不足

初始化集群时报错“Insufficient account balance”

原因:创建(购买)集群需要冻结一小时费用,需要您的账户本身要有1小时的费用,但是真正消费会走代金劵的。

资源操作相关问题

创建的 Workloads/ Service/Ingress 等资源一直“转圈”是什么原因?

  1. 查看创建的相关资源列表的【事件列表】 事件信息(1小时内,超过1个小时的事件查看需要开启 集群事件持久化),通过事件报错信息检查配置。
  2. 无相关事件信息显示但是还是转圈? 工作负载如果是 LB 类型 svc 暴露,确保 LB 对于后端 RS pods 健康检查(lb 直连pod 模式)是否健康, 不健康的原因一般是 安全组未放通,或svc 端口映射与实际容器暴露服务不符。

Ingress 资源编辑时报 webhook 拒绝但是相关 webhook 服务并没有报错日志

可能原因: 分析集群中是否有多个 webhook 服务资源范围有重叠冲突导致(调用了非预期 webhook 被拒绝)。

GR 网络模式开启 已有CLB 实例直连 Pod 模式 Service 显示 Pending

可能原因:已有 CLB 实例和集群网络不在同一个 VPC 内,如果要跨VPC的话,需要使用云联网的 跨地域(跨VPC) 方案。

TKE 控制台无法通过 YAML 创建 CRD 资源?

可能是 TKE 前端出于安全考虑,禁止用户通过 WEB 页面创建 CRD 资源, 如果需要创建,请通过 kubectl 或helm 客户端创建。

应用商店自定义第三方 Chart 源的地址必须要公网能访问是吗?

是的, 拉取chart 源的托管组件和用户集群网络不互通,只支持公网拉取。

Nginx ingress 组件工作负载异常扩缩容

可能原因: Nginx Ingress 组件在部署时选择了 Deployment + HPA 模式, 但是后续修改副本数方式为手动模式(会删除HPA),相关配置控制器会自动再创建 HPA 资源使用HPA模式导致。

解决方式:推荐通过修改HPA 扩缩容范围解决,即不影响 HPA 还能达到快速扩缩容需求。

工作负载/Pods 相关问题

Pod 调度相关问题

查看创建的相关资源列表的【事件列表】 事件信息(1小时内,超过1个小时的事件查看需要开启 集群事件持久化),通过事件报错信息检查调度不了原因。

Pod 中容器重启原因

  1. 查看事件信息(1小时内,超过1个小时的事件查看需要开启 集群事件持久化)。
  2. Describe Pod 查看相关容器退出状态码, 例如状态码为 137 ,一般是收到 kill -9 信号导致,可能是容器本身 OOM ,K8S 重新调度Pod 等,若为其他退出码,可能是容器主进程(业务)退出,需要排查容器业务进程和日志,详情参考:通过 Exit Code 定位 Pod 异常退出原因

工作负载 Pod 起不来是什么原因?

  1. 查看事件信息(1小时内,超过1个小时的事件查看需要开启 集群事件持久化 查看)。
  2. Pod 为 “CrashLoopBackOff” 状态时, 一般是因为容器业务程序启动异常,可以通过查看业务启动日志或修改容器启动命令为“sleep” 调试容器下,手动执行业务启动命令查看报错。

如何在容器中获取 Pod ip ?

1. 解析本机 IP 获取:hostname -i
2. 通过 Downward 传环境变量:

env:
- name: MY_POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP

磁盘存储相关问题

部署工作负载时该选择什么类型存储?

有状态服务(StatefullSet)一般为块存储 (CBS), 无状态服务(Deployment, DaemonSet)一般使用共享存储,如 NFS, COS 等。

创建了一个 CFS 的 StorageClass 并选择了 CFS 实例,但在创建 PVC 的时候没有自动创建 PV

事件报错信息:“Code=AuthFailure.UnauthorizedOperation, Message=CAM签名/鉴权错误: 请求未CAM授权”。

解决办法:给TKE_QCSRole这个角色授予预设策略 QcloudAccessForTKERoleInCreatingCFSStorageclass 解决。

单副本的 Deployment 类型服务可以使用块存储吗?

可以使用,但是还是建议使用Statefullset, 因为Deployment 类型工作负载一般会滚动更新,在滚动更新过程中,可能存在新本 Pod 已经创建,但是旧版本Pod 还没有销毁,导致新Pod 无法正常挂载 PVC(PVC 还被旧Pod 挂载)的情况。

CBS 存储类申请的 PV 和调度的Pod 不在同一个可用区导致 PVC 无法正常挂载问题

解决办法:修改存储类的“卷绑定模式”为“等待调度”(WaitForFirstCustomer) ,控制台配置参考:创建 StorageClass

超级节点配置 pod 磁盘回收策略(重启容器)不生效?

可能原因:容器写入层可能挂载的是 emptyDir 卷, 只重启容器是无法释放的,只能重建 Pod 清理。

容器镜像相关问题

先查看 容器镜像服务常见问题

TCR 镜像拉取超时

通过拉取超时日志查看解析的ip 是否正确,例如使用 TCR 且使用公网拉取,请确保拉取客户端 ip 在 TCR 公网访问百名单中。

TCR 镜像拉取没有权限

私有仓库镜像拉取需要配置 内网免密拉取 或给工作负载配置拉取密钥 ,拉取密钥生成参考 TCR 镜像仓库 自动创建镜像密钥下发配置

超级节点拉取私有仓库报未知机构证书错误

原始报错:”x509: certificate signed by unknown authority”

解决办法:超级节点可通过注解配置忽略证书校验

网络访问相关问题

容器网络访问超时问题

  1. 梳理网络访问链路,首先查看安全组策略
  2. 梳理网络访问链路,在关键链路处抓包排查。

DNS 解析超时/失败问题

查看请求解析容器的 /etc/resolv.conf 配置信息,确保配置无误。

1. 解析集群内域名超时/失败

  • 确认需要解析的集群内域名资源是否存在,解析域名为“短域名”(如svc 名)时注意 search 域配置, 检查 FQDN 完整后缀是否可正常解析。
  • 在 “StatefullSet + Headless svc” 场景下,如需要解析 $(podname).$(service name).$(namespace).svc.cluster.local 时,需要注意 StatefullSet 资源中 serviceName 和 $(service name) 保持一致。

2. 解析集群外域名超时/失败

查看 coredns 配置文件中的 forward 配置项是转发到具体上游 dns ,还是coredns 容器所在节点的 /etc/resolv.conf 文件中的上游,按照具体情况测试相关dns 上游是否可以正常解析。

如何配置集群内自定义域名解析

推荐使用 Private DNS 配置解析,维护方便,配置方式类似:使用 Private DNS 实现内网访问集群时的自动域名解析

增强组件相关问题

安装了 TKE 增强组件为什么功能不生效?

原因:可能是组件相关 pod 没有 ready 导致, 可以通过查看 kube-system(一般情况下)命名空间下的组件 Pod 状态。

日志收集相关问题

如何递归采集子目录中的日志文件?

例如目录结构为:/a/xx.log /a/folder1/yy.log /a/folder2/zz.log,配置日志采集规则:logPath:/a,filePattern: *.log,即可采集到,*.log 文件匹配式默认可以递归收集子目录下的日志。

TKE 集群Pod 调度到超级节点后日志收集失效?

检查是否缺少TKE_QCSLinkedRoleInEKSLog 角色权限,点一下 这个链接 可进入到该权限授权管理界面同意授权,参考文档:首次授权

注意: 点击授权前的 Pods 需要重建后生效。

监控告警相关问题

超级节点 Pod rootfs(底层系统盘默认 20G)使用如何监控?

超级节点 Pod rootfs(底层系统盘) 监控指标相关计算如下:

rootfs空间总量 =  sum(pod_filesystem_size_bytes{device="/dev/root"} )
rootfs空间使用量 = sum(pod_filesystem_size_bytes{device="/dev/root"} ) -sum(pod_filesystem_free_bytes{device="/dev/root"})
rootfs空间使用率 = rootfs空间使用量 * 100.0 / rootfs空间总量

kube-system 下的一些组件 Pod 的网络流量监控为什么显示很大?

原因:相关组件 pod 因为是 hostNetwork 网络,所以 Pod 监控显示的是节点网络流量,并不是组件 Pod 真实流量大小。

超级节点 Pod 通过 9100 端口获取metrics 数据超时请求不到?

可能原因:
1.在容器中请求目的端为所在 pod 导致(产品限制),需要在该 pod 之外的客户端才能访问。
2. 目的 Pod 安全组策略未放通。

正文完