在脚本中处理 kubectl 上下文的良好做法是什么?

what are the good practices in handling kubectl context in scripts?

我的 bash 带有 kubectl 的脚本有时会在更改上下文时引起问题。在 运行 之后,脚本用户可能会意外地在错误的集群中进行更改。我想探讨一下您在处理脚本中的上下文方面的智慧。

脚本是否可以保存旧上下文并在完成后恢复旧上下文? (我考虑过 运行 kubectl config get-contexts 找到当前上下文并在脚本完成后将其设置回去。但是如果用户没有保存上下文,这可能会失败)

我想的其他方法是保存 KUBECONFIG env var 的值,将其更改为临时文件,获取凭据并在脚本完成时恢复值。

在我去重新发明轮子之前,我想在这里了解高级用户如何处理这种情况?你能分享你的 thoughts/ideas 吗?

一般来说,我认为隐式依赖可能由其他进程和用户任意更新的全局状态是有问题的。

即使有多个配置文件,关于正在使用哪个集群、用户、命名空间、上下文仍然是不透明的。

对于单个用户,kubectl 的配置文件提供了不必为每个命令重新键入标志的便利,我认为这应该是它的唯一目的。

在脚本中,我认为最好(更清晰|自我记录)明确并包括 --context--cluster--user(可能 --namespace) 每一次。

这就是说,使用变量而不是硬编码值也是可取的,这样仍有出错的余地。

kubectl delete deployment/primary-service

# vs

KUBECONFIG=sam-monday-morning-config.yaml \
kubectl delete deplopyment/primary-service

# vs

kubectl delete deployment/primary-service \
--cluster=test-cluster \
--namespace=test-namespace \
--user=test-user