今天在集群中创建yaml,使用create就创建成功,apply就创建失败原因分析。

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 今天在集群中创建yaml,使用create就创建成功,apply就创建失败原因分析。
1. 背景:今天在集群中搭建 Prometheus 监控,在使用 kubectl apply -f [文件名] 时,出现了报错,我对集群资源、命名空间、权限等进行一系列排查,甚至在没部署任何服务新集群部署该服务依旧显示部署失败。

第一次使用 kubectl apply -f 文件命 显示报错。

#kubectl apply -f setup/
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/scrapeconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created
namespace/monitoring created
Error from server (Invalid): error when creating "setup/0alertmanagerCustomResourceDefinition.yaml": CustomResourceDefinition.apiextensions.k8s.io "alertmanagers.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
Error from server (Invalid): error when creating "setup/0prometheusCustomResourceDefinition.yaml": CustomResourceDefinition.apiextensions.k8s.io "prometheuses.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
Error from server (Invalid): error when creating "setup/0prometheusagentCustomResourceDefinition.yaml": CustomResourceDefinition.apiextensions.k8s.io "prometheusagents.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
Error from server (Invalid): error when creating "setup/0thanosrulerCustomResourceDefinition.yaml": CustomResourceDefinition.apiextensions.k8s.io "thanosrulers.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes

使用 kubectl delete -f setup/ --grace-period=0 --force 强制删除创建yaml。

kubectl delete -f setup/ --grace-period=0 --force
Warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
customresourcedefinition.apiextensions.k8s.io "alertmanagerconfigs.monitoring.coreos.com" force deleted
customresourcedefinition.apiextensions.k8s.io "podmonitors.monitoring.coreos.com" force deleted
customresourcedefinition.apiextensions.k8s.io "probes.monitoring.coreos.com" force deleted
customresourcedefinition.apiextensions.k8s.io "prometheusrules.monitoring.coreos.com" force deleted
customresourcedefinition.apiextensions.k8s.io "scrapeconfigs.monitoring.coreos.com" force deleted
customresourcedefinition.apiextensions.k8s.io "servicemonitors.monitoring.coreos.com" force deleted
namespace "monitoring" force deleted
Error from server (NotFound): error when deleting "setup/0alertmanagerCustomResourceDefinition.yaml": customresourcedefinitions.apiextensions.k8s.io "alertmanagers.monitoring.coreos.com" not found
Error from server (NotFound): error when deleting "setup/0prometheusCustomResourceDefinition.yaml": customresourcedefinitions.apiextensions.k8s.io "prometheuses.monitoring.coreos.com" not found
Error from server (NotFound): error when deleting "setup/0prometheusagentCustomResourceDefinition.yaml": customresourcedefinitions.apiextensions.k8s.io "prometheusagents.monitoring.coreos.com" not found
Error from server (NotFound): error when deleting "setup/0thanosrulerCustomResourceDefinition.yaml": customresourcedefinitions.apiextensions.k8s.io "thanosrulers.monitoring.coreos.com" not found

重新使用 kubectl create -f setup/ 显示成功。

#kubectl create -f setup/
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusagents.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/scrapeconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created
namespace/monitoring created
2. 经过查询各种相关资讯,在知识星球有篇文章可以解释create与apply在创建yaml有很大区别。
1. kubectl create 命令只是简单地创建资源对象,它不会去检查或者处理对象的注解数据,所以它不会因为注解数据过大而报错。
2. kubectl apply 命令则会对资源对象进行更复杂的处理。在创建或者更新资源对象时,它会将整个资源对象的配置数据(包括注解数据)保存在 kubectl.kubernetes.io/last-applied-configuration 注解中。这样在以后的 apply 操作中,kubectl 就可以通过比较这个注解中的配置数据和当前的配置数据,来决定哪些字段需要更新,哪些字段不需要更新。由于这个原因,如果你的注解数据过大,超过了 Kubernetes 对注解数据大小的限制,那么 kubectl apply 就会报错。

总结,如果你的注解数据过大,你可以选择使用 kubectl create 命令来创建资源对象,但是你需要注意,这样做之后你就不能再使用 kubectl apply 命令来更新这个资源对象了,因为 apply 命令仍然会因为注解数据过大而报错。你需要使用其他的命令,比如 kubectl edit 或者 kubectl patch 来更新资源对象。

3. create与apply更详细区别请参考知识星球"云原生运维圈 ":https://wx.zsxq.com/dweb2/index/topic_detail/588548181528454


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Kubernetes 应用服务中间件 nginx
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208
201 0
|
23天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
61 0
|
3月前
|
JSON Kubernetes 数据格式
k8s集群yaml文件方式迁移
k8s集群yaml文件方式迁移
|
6月前
|
算法 Go vr&ar
YOLOv8模型yaml结构图理解(逐层分析)
YOLOv8模型yaml结构图理解(逐层分析)
6725 0
|
JavaScript 前端开发 应用服务中间件
SAP UI5 本地开发时 ui5.yaml 文件对构建 Release 版本应用目录的影响分析试读版
SAP UI5 本地开发时 ui5.yaml 文件对构建 Release 版本应用目录的影响分析试读版
|
Kubernetes 大数据 容器
三、kubernetes 集群 YAML 文件详解
是一个可读性高,用来表大数据列的格式。Yaml的意思其实是:仍是一种标记语言,但是为了强调这种语言以数据为中心。而不是以标记语言为重点。
1166 0
三、kubernetes 集群 YAML 文件详解
|
Kubernetes Ubuntu Shell
shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份
在基于 `k8s` 平台的容器化部署环境中,有时候需要快速的实现部署文件的迁移备份,当 `k8s` 平台部署一个 `app` 时,都会相应的产生一堆 `yaml` 文件,如果 `yaml` 文件数量较少,我们可以人工手动的方式进行拷贝,但是当 `yaml` 文件数量多,并且该 `k8s` 平台部署了多个 `app` 时,如果在采用...
540 0
shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份
|
JSON Kubernetes 应用服务中间件
K8S集群-(YAML.YML)文件详解
K8S集群-(YAML.YML)文件详解
424 0
K8S集群-(YAML.YML)文件详解
|
存储 Kubernetes 应用服务中间件
K8S 集群资源清单(YAML)文件书写方法_资源清单描述方法 | 学习笔记
快速学习 K8S 集群资源清单(YAML)文件书写方法_资源清单描述方法
198 0
K8S 集群资源清单(YAML)文件书写方法_资源清单描述方法 | 学习笔记
|
XML 运维 Kubernetes
K8S 集群资源清单(YAML)文件书写方法 | 学习笔记
快速学习 K8S 集群资源清单(YAML)文件书写方法
266 0