在 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 set
,k create
,k run
,k 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的主要内容,如果未能解决你的问题,请参考以下文章