【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

Kubernetes 部署失败的常见原因

  • 2017-03-06
  • 本文字数:1892 字

    阅读完需:约 6 分钟

最近一系列文章重点介绍了 Kubernetes 部署失败的 10 种常见原因。这些原因涵盖了从缺少输入和错误输入,到超出资源限制。在大多数情况下,kubectl describe 命令可以帮助确定背后的原因。

Kubernetes 部署的无效输入包括指定不存在的容器镜像,或者指定没有访问权限的容器镜像。因为默认的 registry 是 Dockerhub,所以如果使用了其它 registry (如 Amazon ECR 或 Quay.io),则需要指定 registry URL。私有 registry 在访问镜像时需要相关证书。 当要拉取的标签名称无效时,镜像拉取也可能遇到错误。比如在 latest 标签不存在但镜像存在时,镜像拉取就会失败(如果没有特别指定,“latest”就是默认标签)。此外网络问题也可能会导致错误。这类情况下的错误消息彼此间十分相似,因此需要更深入的检查以确定确切的原因。

Kubernetes 中的部署失败常常导致特定的 Pod 无法启动。可以使用“kubectl describe pod ”命令输出描述失败原因的事件日志。kubectl 命令采用“pod”,“replicaset”,和“deployment”参数。这些命令与“kubectl logs ”组合是调试部署失败的关键。

如果把 Kubernetes 中的默认策略设置为不总是从registry 中拉取,则即使提交了更新后的改动并推送镜像,这些改动也可能不可见。在产品中推荐的解决方法是为每个镜像分配唯一标签,并在拉取请求中使用这些标签。此外在部署配置中指定不存在的持久卷(persistent volumes)也可能导致部署失败。

另外两种无效输入是缺少程序运行时ConfigMap 或Secrets,以及无效的Spec 对象。 ConfigMap 是一组键值对的映射,该组键值对属于应用程序所需的配置数据。ConfigMap 可以被指定为CLI 参数,环境变量,或已安装卷中的文件。如果缺少了这些信息,那么Pod 创建会停止,并且状态被设置为“RunContainerError”。Secrets 是一种用于存储敏感数据(如证书)的机制。Secrets 缺失将导致类似的问题。ConfigMap 和Secrets 都可以安装为卷,如果安装失败,则容器创建停止,事件日志的状态停留在“ContainerCreating”。

另一种部署失败的原因是无效的Kubernetes Spec 对象,这些无效对象是由YAML 中的缩进错误或拼写错误所导致。通过基于CLI 的YAML 验证和使用–dry-run 参数,我们可以很容易地避免此类错误,如下所示:

kubectl create -f test-application.deploy.yaml --dry-run --validate=true

但该方法需要运行 Kubernetes 集群。移除对集群依赖的工作正在进行当中,同时也会提供对客户端验证的支持。YAML 验证可以被添加到源控制系统中,成为预提交钩子(pre-commit hook)的一部分。

另一类失败的Kubernetes 部署是因为超出资源限制。Pod 和容器都有指定的CPU 和内存限制。超出这些限制将导致无法创建Pod。调试该问题需要花一点精力。命令“kubectl describe deployment ”可以帮助我们获取ReplicaSet 的名称,此ReplicaSet 正是Kubernetes 所尝试去创建的。键入“kubectrl describe replicaset ”,并把上一步中获取的副本集(replica set)名称传递给它,就可以像在其它情况下一样,打印出事件日志,并显示错误消息。

部署失败也可能是因为超出资源配额。当团队间共享节点数固定的集群时,这种资源配额机制可以用来限制每个命名空间的资源消耗。资源包括Pod,服务和部署,以及计算资源的总量。 同样,在这种情况下,“kubectl describe”命令能够帮助我们挖掘出实际的错误消息。

当节点未充分使用资源时或者由于资源不足而无法运行Pod 时,集群自动调整程序(cluster autoscaler)会自动调整Kubernetes 集群大小。如果该自动调整程序未被启用,那么超出资源配额的部署将会失败,并且Pod 停留在“Pending”状态。 事件日志将显示出实际短缺的资源(由于该资源短缺而导致部署失败)。

应用程序行为的意外更改可能以不同的方式引起部署失败。应用程序崩溃常常会导致启动错误,该错误的错误消息是“CrashLoopBackOff”。应用程序日志可以帮助解决此问题。此外,如果配置错误或者响应超时, Liveness/Readiness 探测可能会停止工作,该探测被 Kubernetes 用来检测服务的健康情况。例如,URL 健康检查可能在应用程序中已发生变更,或者由于数据库变动,URL 健康检查可能无法正常工作。某些 URL 可能需要一段时间才能响应 Readiness 检查,这可能会超时并导致部署失败。

文章的作者已开源一个脚本,当创建失败时,该脚本可以在日志里打印出有用的相关信息。

查看英文原文: Common Reasons for Failed Kubernetes Deployments


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-03-06 18:005480

评论

发布
暂无评论
发现更多内容

Java 泛型

Yeats_Liao

后端 Java后端 Java core 10月月更

又一里程碑!阿里首推Java面试通关手册,必须人手一份!

Geek_0c76c3

Java 数据库 程序员 架构 面试

践行ESG理念,缘何成为消费金融行业共识?

易观分析

金融 ESG

大数据ELK(二十一):Logstash简介和安装

Lansonli

Logstash 10月月更

AndroidStudio最新版(2021.1.21)编译C++代码生成so文件

中国好公民st

c++ Android; 10月月更

web3 chainlink 预言机喂价、VRF

1_bit

智能合约 web3 chanlink

cstdio的源码学习分析08-设置文件流buffer函数setbuf

桑榆

源码刨析 10月月更 C++

字符串拆分----split()关键字

魏铁锤

10月月更

Python进阶(十)Python 编程规范

No Silver Bullet

Python 编程规范 10月月更

研发效能领域的“百科全书”重磅来袭!

博文视点Broadview

Spring JPA 如何进行无参数查询布尔类型

HoneyMoose

谈谈前端性能优化-面试版

loveX001

JavaScript

年底前端面试题总结(上)

loveX001

JavaScript

vivo互联网机器学习平台的建设与实践

vivo互联网技术

人工智能 机器学习 推荐系统

算数、赋值、比较、逻辑、三元运算符

共饮一杯无

Java 运算符 10月月更

如何在 SAP BTP 平台上重用另一个已经开发好的 service

Jerry Wang

云原生 SaaS 云平台 SAP 10月月更

数据中台与业务中台的区别与联系

阿泽🧸

业务中台 10月月更

Web前端 | HTML5学习

亮点

html web前端 10月月更

IDEA的Docker插件实战(Docker-compose篇)

程序员欣宸

Docker Docker-compose 10月月更

如何用AR Engine环境Mesh能力实现虚实遮挡

HMS Core

AR

Qt | 深入了解Qt的委托类

YOLO.

qt 10月月更 C++

Qt | Qt的动画框架和类

YOLO.

qt 10月月更 C++

全网首发“Java面试考点大全”,25+专题梳理:JVM+多线程+Spring全家桶+MySQL+Redis等

Geek_0c76c3

Java 数据库 程序员 架构 面试

搜索中常见数据结构与算法探究(一)

京东科技开发者

数据结构 ES 哈希 数据结构算法 搜索算法

Spring之DI依赖注入

楠羽

笔记 spring】 10月月更

LinkedList源码分析(四)

知识浅谈

linkedlist 10月月更

Java数据类型转换

共饮一杯无

Java 类型转换 10月月更

上岸稳了!GitHub标星115k+的阿里内部Java学习教程限时开源

Geek_0c76c3

Java 数据库 程序员 架构 开发

数字化转型:营销数字化

Taylor

数字化 营销数字化 客户数据平台 CDP 营销数据中台

SeaTunnel连接器V1到V2的架构演进与探究

Apache SeaTunnel

API 数据集成 连接器 Apache SeaTunnel 数据集成平台

两数之和

掘金安东尼

算法 10月月更

Kubernetes部署失败的常见原因_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章