常见报错及解决方案

更新时间: 2023-07-24 18:28:40

该文档涉及场景问题的报错信息,如操作过程中出现报错,建议查看以下内容。

组件上传

Q:zlink 报错:NAMESPACE_LIMIT_EXCEED

A:ACR namespace 达到上限了,可以删除无用的 namespace。若报错的 namespace 实际已存在,可以通过-namespce 指定该命名空间。

Q:zlink 报错:param illegal. error: chartpath should be provided

A:zlink push -h 看下,需要-c 指定 chart 目录。

Q:zlink 推送 chart 同步镜像提示 USER_NOT_EXIST

A:出现该问题请先确认 ADP_ACCESSKEYID 和 ADP_ACCESSKEYSECRET 是否是子账号的 ak/sk,如果是的话请用主账号对该子账号赋予 ACR 的 RAM 权限,并且以该子账号登录 ACR 控制台并开通 ACR 个人版服务。

Q: zlink推送组件时,如何指定部署的 namespace?

A: 组件 ns 不是通过 zlink push的 -n 参数指定的,想指定组件 ns 可以在 component.yaml 里的 spec.namespaces里指定。

服务目录

Q:MySQL 数据库建表初始化如何操作?

A:组件配置内即可配置初始化 SQL,但是由于初始化 SQL 非常大,MySQL 在组件配置内填写 SQL 有文本限制,提交保存初始化 MySQL 组件配置的初始化 SQL 会报错,所以需要通过创建一个 Job,或 init-container 来执行 SQL 初始化逻辑。

Q:谐云 MySQL 无法启动问题如何排除?

A:检查 MySQL 配置是否正确 `helm get values mysql-<release-name>` 检查 MySQL 磁盘是否打满,执行命令如下 `kubectl get pod <MySQL podName> -ojsonpath='{.metadata.uid}'` 拿到podUID `kubectl debug node/$(kubectl get pod <MySQL podName> -ojsonpath='{.spec.nodeName}' ) -it --image=busybox` 进入交互界面后,执行 `mount | grep podUID`,`df -h` 检查 yoda 挂载卷的磁盘占用

Q:变更谐云 MySQL 的配置没有生效怎么办?

A:1、针对谐云 MysqlCluster CR CPU 跟内存是需要手动 kill pod 来生效 2、storage 是 VolumeClaimTemplate 只在初次生产时 requests 应用 (这个行为跟 K8s 原生的 StatefulSet/Deployment 是一样的), 后面要扩 Storage Size 都是直接更新 PVC storageSize,存储扩容参考文档 https://www.yuque.com/books/share/7a31838b-45c3-4337-8b69-fce43242c17e/tybb81

Q:组件由于反亲和性,污点配置启动失败怎么办?

A:可以根据 event 定位来解决。

Q:自研应用 Helm 部署失败怎么办?

A:自研应用 Helm 模板可能存在语法问题,导致无法正常安装。需要使用 helm template 以及--dry-run来测试helm是否符合期望。

Q:安装 ADP 提供的组件 Redis,发现 PV 被分配到了 master 节点上怎么办?

A:需要根据业务需要配置节点反亲和性。在workload 中设置 affinity 即可,与 pod 调度策略一致。

Q:port-forward 无法连接 Redis 怎么办?

A:redis监听地址为 podIP:6379,port-forward 暴露出 6379 端口后还是无法连接成功的,需要 Redis 暴露一个可以修改 bind 地址的配置。

Q:谐云组件故障排查思路

A:

elasticsearch《故障排查思路》

mysql《故障排查思路》

redis《故障排查思路》

harbor《故障排查思路》

通用排查《中间件通用故障排查思路》

ingress《故障排查思路》

rocketmq《故障排查思路》

kafka《故障排查思路》

Online

Q:出现如下报错:Error: The location 500GiB is outside of the device /dev/vdb.

A:为磁盘超出配额,k8s 管控数据盘默认其实 400 就够了,但是磁盘一共 500G 的话,留给业务应用的存储就只剩下 100G 。

Q:出现如下报错:InstanceOverQuota

A:资源申请不够,需要重新申请 license,

可以先通过命令 kubectl get app -A -o jsonpath='{.items[].status.verification}' 确认license是否激活,如果未激活可以参考文档先进行激活。 如果遇到某个特定组件无法部署,可以检查下是否是申请的CPU核数或组件实例数不够。 另外 1.4.2 底座有时刷新 license 授权会有延迟问题,可以重启下 cn-app-operator 试试。

Q:交付局点拉取镜像失败,报错信息:filesystem layer verification failed for digest

A:原因是镜像损坏了,参照以下步骤替换镜像: (1) chongdocker save 导出镜像 tar 包; (2) 把 tar 包拷贝到机器上,docker load 加载镜像; (3) docker push 更新仓库里的镜像

Q:编辑组件编排参数保存后,报“亲,访问被拒绝,请检查是否使用了代理软件或vpn哦”怎么办?

A:修改的编排参数内容中包含 sql 语句,被防注入攻击给挡掉了

Q:创建环境排错指南

A:账号余额不足,关键字:Your account does not have enough balance.

错误描述:账号余额不足

解决方案:充钱(账号余额建议 >= 100.01)

Q:操作限流,关键字:Request was denied due to request throttling.

A:错误描述:操作被限流,参考文档 https://error-center.aliyun.com/status/product/Public

解决方案:

1、稍等一段时间后重试

2、降低 request 的资源数量,如磁盘数量等,然后重试

Q:NAT 网关未授权,关键字:You are not authorized to create service linked role

A:错误描述:初次使用 NAT 网关时,NAT 网关未创建服务关联角色,需要手动创建,参考文档https://help.aliyun.com/document_detail/203500.html?spm=a2c4g.11174283.6.584.63356dd4ylrwTS#d8e22解决方案:在创建 NAT 网关页面最下方的关联角色创建须知区域,单击创建,创建服务关联角色。角色创建成功后即可创建 NAT 网关。

Q:执行安装报以下错误 error imagepull:failed to pull image registry-internal.adp.aliyuncs.com:5000/oecp/etcd:3.4.3 0

A:如果是自己安装了 docker,会出现该错误,可以先卸载 docker,清理后重新安装;或者更改 docker 配置。

Q:从0.9.x 升级到 1.x.x,提示当前版本不可升级怎么办?

A:ADP 的组件版本管理机制,默认涉及到主版本的变更是不支持升级的。后续产品逻辑上可以支持组件自行配置可升级版本。但是目前如果想升级可以暂时把组件的主版本号往下降下。如:0.10.9。

Q:升级底座时候报错 Maybe somebody has modified it, please use custom coredns configmap and merge their changes, or use --overwrite-coredns-config to overwrite it, this apply uses cluster config: /root/workspace/clusters/./trident-1.10.0.yaml

A:可以先跳过错误,加上--skip-actions install_cluster,执行 ./hopctl install -ppwd--overwrite-coredns-config --skip-actions install_clusteru

Q: 升级底座后 mq 的两个 broker 的 POD 出现 OOMkilled 的报错,这种情况该如何处理?升级前后并没有对这2个 broker 的请求资源和限制资源做过改动。

A: 可以尝试提高 broker 的 limit 值。

Q:安装产品时,并且节点配置 etcd 同系统盘共用,报错“ this instance has 0 data disks, but we require 1”。

A:如果是 SATA 盘,不能配置 etcd 同系统盘共用。

Q:yaml 没办法转换为JSON格式报错怎么办?

A: 目前 values 通过 global 定义,仅仅支持基础类型的,不支持复杂类型

Q:有一个 worker node reboot 起不来,相应的机器上执行 journalctl -f -u kubele 报错如下: 33d3b7 } InitCommit:{ID:fec3683 Expected:fec3683 } SecurityOptions:[name=seccomp,profile=default] ProductLicense:Community Engine Warnings:[] } Apr 18 17:20:49 iZwz9e24qvia1qkoxru7uoZ kubelet[28888]: F0418 17:20:49.188708 28888 server.go:269] failed to run Kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

A:查看一下 docker info | grep -i "Cgroup Driver",输出 cgroupfs,执行如下命令可恢复 echo '{"exec-opts": ["native.cgroupdriver=systemd"]}' >> /etc/docker/daemon.json 然后执行 systemctl daemon-reload && systemctl restart docker

Q:在 ACK 部署时,PVC 状态一直 pending,报错信息为 InvalidAccountStatus.NotEnoughBalance

A:ACK 的存储插件会自动创建云盘,作为 PVC 使用。需要保证账户余额大于 100 元,否则会因账号余额不足,无法创建新的云盘导致 PVC 无法正常运行。

Q:执行./hopctl install -p `pwd`,报错" failed to retrieve cluster config from APIServer: <nil> "

A:先执行 rm 命令“ rm -f /usr/bin/kubectl ”,然后重试下 install。

Q:安装过程中,kubelet 日志中出现“ Failed to create ["kubepods"] cgroup

A:通过升级 systemd 解决 (yum -y update systemd)。

Q:ADP 底座 (1.4.1-beta)版本 harmonycloud.cn minio 中间件镜像下载在线验证环境找不到,但是没有手工重启过 pod 怎么办?

A: 需要节点有 EIP,否则无法下发证书。

Q:kubectl cp 的命令从服务器里往容器内拷贝文件失败是什么原因,报错“ Cannot open: Permission denied” [root@iZuf62fpujsppnaash57kkZ iris.lc]# kubectl cp car_mac_mapping-1.2-SNAPSHOT-shaded.jar default/spark-spark-3-1-2-s3-master-0:/home/ tar: car_mac_mapping-1.2-SNAPSHOT-shaded.jar: Cannot open: Permission denied tar: Exiting with failure status due to previous errors command terminated with exit code 2

A:参考:https://stackoverflow.com/questions/57734514/kubectl-cp-to-a-pod-is-failing-because-of-permission-denied

Q:ADP 底座部署预检时端口冲突怎么办?

A:ADP 底座安装时,会对基础设施环境做预检,预检中,是需要所有机器上的 30000-32767 都没有任何进程在监听。假设某机器有进程在监听 30000-32767 中的某个端口,那ADP 底座预检会预检失败,ADP 底座默认情况下就会安装不上。 但是,ADP 底座安装时,也可以忽略这个错误,确保 ADP 底座可以先安装上。但这也会导致另外一个问题,之后 k8s 在选择 pod 的 node port 时,有可能选择上一个已经被占用的端口,导致某些端口冲突。

Q:32000 端口占用怎么办

A:32000 端口,ADP 底座是没有组件使用的。但是在 ADP 底座安装时,会有一个对基础设施环境做 precheck 的环节,precheck 的环节过程中,是需要所有机器上的 30000-32767 都没有任何进程在监听。 假设其中有进程在监听 30000-32767 中的某个端口,ADP底座默认情况下就会安装不上。 ADP底座安装时,也可以忽略这个错误,确保可以先安装上。但是假设忽略了一个错误,会导致另外一个问题,之后 k8s 在选择 pod 的 node port 时,有可能选择上一个已经被占用的端口,导致某些端口冲突的情况。 https://help.aliyun.com/document_detail/315383.html

Q:报错:the aliyun service is not running on the instance.

A:可能是云助手挂了,可以重启一下试试,重启方式请查看下方文档。 详细参考文档 https://help.aliyun.com/document_detail/134379.html#title-f6s-0gw-m2d

Q:adp 包部署失败,机器上原有 K8s 删掉后部署失败怎么办?

A:失败的原因主要是上次安装中断残留导致的脏数据,建议处理方法如下: 1)全新安装:通过日志提示出来的完整 trident clean xx 命令进行清除,但是此操作会导致所有已安装的程序全部卸载,因此仅适用于新集群。 2)原先有其他 K8s:可通过 Executekubectl get cson current node 排查是否有更具体的错误信息。

Q:交付局点拉取镜像失败,报错信息:filesystem layer verification failed for digest

A:原因是镜像损坏了,参照以下步骤替换镜像: (1) chongdocker save 导出镜像 tar 包; (2) 把 tar 包拷贝到机器上,docker load 加载镜像; (3) docker push 更新仓库里的镜像

Q:更改了底座组件配置,出产品升级包时,发现更新不生效怎么办?

A:如果要生效,需要出底座升级包才可以的。

Q:应用安装失败排查

A: 1、kubectl get app ,然后 kubectl describe app xxx,查看 app 的 event,然后根据 event 错误提示进行处理 2、如果从 event 中查看不到相关的错误信息, kubectl get pods -A | grep cn-app-operator

kubectl logs -f -n acs-system

n-app-operator-xxx

查看相关具体日志,针对组件相关 resources 如 pod 都未创建成功的情况,可以 grep "Component install failed" 进行查看,大概率是组件配置问题。

Q:网卡丢包怎么办?

A:建议排查下 MTU 设置问题。

License

Q:申请局点 License 时提示报错 {"code":InvalidParameter","message":invalid license format"}

A:在创建集群时,需要保证 global.yaml 是从对应的局点生成的,不能在不同局点中,使用相同的 global.yaml

Q:License 申请如果出现以下错误,failed to generate trail license:invalid machine fingerprint

A:主要是未使用 ADP-Online 产品控制台上生成的安装文件。 修复方案:使用平台生成的安装文件(global.yaml) 执行安装命令 ./hopctl install -ppwd--skip-actions install_cluster --skip-actions install_application

Q:安装升级包时未拷贝 global.yaml 导致 license 失效,之后通过拷贝 global.yaml 重新安装,但是 license 未恢复怎么办?

A:可以尝试重启下 cn-app-operator。

Q:在线上验证环境,镜像地址变成了源地址,而不是 adp 的地址怎么办?

A:webhook 重启一下可解决。

集群部署

Q:coredns 解析慢怎么办

A:修改一下节点中的 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,去掉 --cluster-dns=169.254.20.10 这些字符。

Q:部署集群时,失败并发生报错 Reconcile Yoda NLS failed

A:发生此问题的原因有多种:yoda 没有正常工作,机器性能较差,导致检查超时等。 修复方案首先,确定 Yoda 是否正常: kubectl -n kube-system get po |grep yoda 看看是否有不正常的 Pod,如果有 Pod 不正常,请联系技术答疑支持,如果一切正常,请执行: # 获取节点数 kubectl get node | grep -v NAME | wc -l # 获取 nls 数,如果不等于节点数,等待 3 分钟,然后再获取一次 nls 数,看看是否相等 kubectl get nls | grep -v NAME | wc -l 如果两次都不相等,请联系技术答疑支持,如果相等,请继续执行: kubectl apply -f /root/.trident/config.yaml 重新执行一次hopctl install -p `pwd`,如果失败,加上 --ignore-errors CalicoValidator,KubernetesPortsValidator 再试一次

Q:部署时遇到 Initial timeout of 40s passed 怎么办?

A:查看失败节点 kubelet 日志,获取更详细的信息 # 查看日志 journalctl -u kubelet # 保存近一小时的日志 journalctl -u kubelet --no-pager --since "1 hours ago" > kubelet.log

Q:systemd 出现问题,导致 docker 无法重启怎么办?

A:检查 OS 的 systemd 是否出现问题,解决 systemd 问题,实现 docker 重启完成。

ADP-底座

Q:底座拉起来,pod连不上 LVM storage,有 pvc 没有 pv,报错是没有设置 lvm storage 怎么办?

A:可以通过执行 kubectl get nls -oyaml 命令,看下 spec 字段里的磁盘信息填写是否有误

Q:底座版本 1.4.3 中,一体机部署底座拉起时报错怎么办?

A:需要升级内核版本,如果有 yum 源,可以升级到 3.10.0-1160+。

扩宿容

Q:新增的节点,ADP-local 上扩容报错:“no matches for kind "NodeOperation" in version "trident.apsara-stack.alibaba-inc.com/v1alpha2"

A:升级步骤里有一条启用这个 feature 的命令的,可能没有执行。

告警

Q:adp-local 的时间是 utc 格式,这个导致告警的时间和现实对不上怎么办?

A:目前告警是通过 API 取的 AlertManager 的告警时间,与 ADP-Local 自身时间无关,AlertManager 的配置上应该只支持 UTC 时间。 直接修复方案 https://www.cnblogs.com/sanduzxcvbnm/p/13724172.html可以参考此文档,修改 AlertManager 的告警模板,在告警时间渲染时 +8 小时。

Loki

Q:Loki pod 一直重启怎么办?

A:需要从 Loki pod log 定位确切的错误 `kubectl -n acs-system logs --tail 100 {loki_pod}`。如果为储存空间不够可以直接进行 PVC 扩容 `kubect -n acs-system edit pvc storage-loki-stack-0`

Q:Loki 扩容后报错 "file size too small"

A:已知的问题,可以以下命令修复:

kubectl -n acs-system exec -it loki-stack-0 -- rm -rf /data/loki/boltdb-shipper-active/${index_id} /data/loki/boltdb-shipper-cache/${index_id}

${index_id} 替换成日志里面的 index_xxxxx

# get POD UID as {uid} kubectl -n acs-system get po loki-stack-0 -ojsonpath='{.metadata.uid}' # get host IP ssh root@$(kubectl -n acs-system get po loki-stack-0 -ojsonpath='{.status.hostIP}')

Q:mysql binlog 日志太多,如何清理磁盘 binlog 日志,同时希望能设置 binlog 日志保留时间,目前保留 20 天时间较长怎么办?

A:1.0.16 版本之后,支持该参数的设置,默认值为 7

Q:业务日志配置不生效怎么办?

A:需要把日志路径换成改成卷名+路径,也即: {volumeName}/path,{volumeName},参照 pod.spec.volumes,可以把对应的目录挂在 emptydir。

阿里云首页 云原生应用交付平台 相关技术圈