Kubernetes 为所有部署增加资源

Ani*_*lve 8 deployment yaml cluster-analysis kubernetes kubectl

我是 Kubernetes 新手。我有一个具有多个部署(超过 150 个)的 K8 集群,每个部署都有超过 4 个可扩展的 pod。我需要增加集群中所有部署的资源限制;我知道我可以通过部署 YAML 直接增加此值。但是,我在想是否有任何方法可以一次性增加所有部署的资源。

提前感谢您的帮助。

OhH*_*ark 12

这里有几点需要指出:

  1. 有一个kubectl patch命令允许您:

使用策略合并补丁、JSON 合并补丁或 JSON 补丁更新资源的字段。

接受 JSON 和 YAML 格式。

请参阅下面的示例:

kubectl patch deploy deploy1 deploy2 --type json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/resources/limits/memory", "value":"120Mi"}]'
Run Code Online (Sandbox Code Playgroud)

或者:

kubectl patch deploy $(kubectl get deploy -o go-template --template '{{range .items}}{{.metadata.name}}{{" "}}{{end}}') --type json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/resources/limits/memory", "value":"120Mi"}]'
Run Code Online (Sandbox Code Playgroud)

如需进一步参考,请参阅此文档

  1. 您可以通过kubectl set命令将适当的标签添加到部署中:

kubectl set resources deployment -l key=value --limits memory=120Mi
Run Code Online (Sandbox Code Playgroud)
  1. 此外,您还可以使用一些额外的 CLI,例如sedawkxargs。例如:

kubectl get deployments -o name | sed -e 's/.*\///g' | xargs -I {} kubectl patch deployment {} --type=json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/imagePullPolicy", "value": "Always"}]'
Run Code Online (Sandbox Code Playgroud)

或者:

kubectl get deployments -o name | awk '{print $1 }' | xargs kubectl patch deployment $0  -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"
Run Code Online (Sandbox Code Playgroud)
  1. 还值得注意的是,配置文件在推送到集群之前应该存储在版本控制中。有关更多详细信息,请参阅配置最佳实践。


cod*_*ger 0

如果您想将它们全部设置为相同的东西,您可以使用 kustomize 的“组件”系统。但这不太可能。更好的解决方案可能是编写一些 Python(或您喜欢的任何语言)脚本来修改所有 YAML 文件并将它们推回到源代码管理中。