在 Kubernetes 的 kubectl 命令式命令中使用 --record

Posted

技术标签:

【中文标题】在 Kubernetes 的 kubectl 命令式命令中使用 --record【英文标题】:Usage of --record in kubectl imperative commands in Kubernetes 【发布时间】:2020-10-31 00:36:39 【问题描述】:

我试图找到什么时候应该使用--record 的有用信息。我创建了 3 个命令:

k set image deployment web1 nginx=lfccncf/nginx:latest --record k rollout undo deployment/web1 --record k -n kdpd00202 edit deployment web1 --record

谁能告诉我是否需要在这 3 个命令中的每一个中使用 --record

什么时候需要使用--record,什么时候没用?

【问题讨论】:

【参考方案1】:

你可以指定--record标志来写在资源注解kubernetes.io/change-cause中执行的命令。记录的更改对于将来的自省很有用。例如,查看在每个 Deployment 修订中执行的命令。

kubectl rollout history deployment.v1.apps/nginx-deployment
The output is similar to this:

deployments "nginx-deployment"
REVISION    CHANGE-CAUSE
1           kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml --record=true
2           kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1 --record=true
3           kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true

因此对于任何命令都不是强制性的,但建议在 kubectl set image 使用,因为如果您跳过 --record,您将不会在上面的 CHANGE-CAUSE 部分看到任何内容

【讨论】:

如果您想从记录的声明性命令中查看参数,请执行kubectl rollout history deployment.v1.apps/nginx-deployment --revision=[revision_number]【参考方案2】:

Kubernetes 所需的状态可以通过两种范式进行更新/变异:

    必须使用 kubectl adhoc 命令(k setk createk runk rollout,..) 或以声明方式使用带有单个 k apply 的 YAML 清单

声明性方式非常适合将您的 k8s 清单视为代码,然后您可以与团队共享此代码,例如通过 Git 对其进行版本化,并利用 GitOps 实践(分支模型、代码审查、CI/光盘)。

但是,团队无法审查命令式方法,因为这些临时命令将由个人运行,并且在更改完成后没有其他人可以轻松找出更改的原因制作。

为了克服命令式命令缺少审计跟踪的问题,--record 选项可将更改的根本原因绑定为名为 kubernetes.io/change-cause 的注释,并且此注释的值是命令式命令本身。

(以下注释来自official doc)

注意:你可以指定 --record 标志来写在资源注解 kubernetes.io/change-cause 中执行的命令。记录的更改对于将来的自省很有用。例如,查看在每个 Deployment 修订中执行的命令。

结论:

理论上,--record 不是强制性的 实际上,这是强制性的,以确保更改留下基本的审计线索并符合 SRE 流程和 DevOps 文化。

【讨论】:

以上是关于在 Kubernetes 的 kubectl 命令式命令中使用 --record的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes组件——kubectl命令行工具管理

第七章 kubernetes 集群命令行工具 kubectl

kubernetes集群命令行工具kubectl

kubernetes集群客户端命令 kubectl

Kubernetes集群管理工具kubectl命令技巧大全

Kubernetes集群管理工具kubectl命令技巧大全