Kubernetes 中 kubectl 命令式命令中 --record 的使用
Usage of --record in kubectl imperative commands in Kubernetes
我试图找到有用的信息,我应该在什么时候使用 --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
什么时候没用?
可以指定--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
[=16,您将不会在上面的 CHANGE-CAUSE
部分中看到任何内容=]
Kubernetes 期望的状态可以是 updated/mutated 通过两个范例:
- 强制性 使用 kubectl adhoc 命令(
k set
、k create
、k run
、k rollout
,..)
- 或声明性地使用 YAML 清单和单个
k apply
声明式方式非常适合将您的 k8s 清单视为代码,然后您可以与团队共享此代码,例如通过 Git 对其进行版本控制,并利用 Git 继续跟踪其历史记录Ops 实践(分支模型、代码审查、CI/CD)。
但是,团队无法审查命令式方式,因为这些临时命令将由个人 运行 执行,其他人无法轻易找出 更改的原因 修改完成后。
为了克服命令式命令缺少审计跟踪的问题,--record
选项用于将更改的根本原因绑定为名为 kubernetes.io/change-cause
的注解,该注解的值为命令式命令本身。
(以下注释来自official doc)
Note: You can specify the --record flag to write the command executed in the resource annotation kubernetes.io/change-cause. The recorded change is useful for future introspection. For example, to see the commands executed in each Deployment revision.
作为结论:
- 理论上,
--record
不是强制性的
- 实际上,这是强制性的,以确保更改留下基本的审计线索并符合 SRE 流程和 DevOps 文化。
--record
标志也有助于查看修订历史的详细信息,因此回滚到以前的版本也会更顺利。
当你不附加 --record
标志时 Change-Cause table 将只是 <none>
in
kubectl rollout history
$ kubectl rollout history deployment/app
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
我试图找到有用的信息,我应该在什么时候使用 --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
什么时候没用?
可以指定--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
[=16,您将不会在上面的 CHANGE-CAUSE
部分中看到任何内容=]
Kubernetes 期望的状态可以是 updated/mutated 通过两个范例:
- 强制性 使用 kubectl adhoc 命令(
k set
、k create
、k run
、k rollout
,..) - 或声明性地使用 YAML 清单和单个
k apply
声明式方式非常适合将您的 k8s 清单视为代码,然后您可以与团队共享此代码,例如通过 Git 对其进行版本控制,并利用 Git 继续跟踪其历史记录Ops 实践(分支模型、代码审查、CI/CD)。
但是,团队无法审查命令式方式,因为这些临时命令将由个人 运行 执行,其他人无法轻易找出 更改的原因 修改完成后。
为了克服命令式命令缺少审计跟踪的问题,--record
选项用于将更改的根本原因绑定为名为 kubernetes.io/change-cause
的注解,该注解的值为命令式命令本身。
(以下注释来自official doc)
Note: You can specify the --record flag to write the command executed in the resource annotation kubernetes.io/change-cause. The recorded change is useful for future introspection. For example, to see the commands executed in each Deployment revision.
作为结论:
- 理论上,
--record
不是强制性的 - 实际上,这是强制性的,以确保更改留下基本的审计线索并符合 SRE 流程和 DevOps 文化。
--record
标志也有助于查看修订历史的详细信息,因此回滚到以前的版本也会更顺利。
当你不附加 --record
标志时 Change-Cause table 将只是 <none>
in
kubectl rollout history
$ kubectl rollout history deployment/app
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>