我可以在 运行 helm upgrade 命令期间切换 k8s 上下文吗?
Can I switch k8s context during running helm upgrade command?
我有 6 个 shell 别名,用于在不同 k8s 集群的 k8s 命名空间之间切换上下文。上下文在 kube 配置文件中设置。
别名的一个例子是这样的:
alias kc11='kubectl config use-context cluster1-namespace-1'
我的问题是:
如果我 运行 helm 升级命令需要大约 30 分钟,我可以在升级过程中切换 k8s 上下文以不影响 运行ning 操作吗?
helm 如何与 k8s 上下文一起工作?它是在 helm upgrade 中的每个简单操作开始时还是在每个简单操作之前加载到 运行 时间?
Helm 升级命令如下所示:
helm upgrade my-app . --reuse-values --values values.yaml --timeout 1200s
如您所见,我没有添加 -n 参数来指定 k8s 命名空间。
TL;DR:是的,你可以。
当您发出 helm upgrade
命令时,所有相关清单都会发送到控制平面。这几乎是瞬间发生的,发送完之后,你这边的所有工作就完成了。您可能会注意到,即使您在 运行 期间中断 helm
,最终也会创建所有相关的 pods、服务等。
您还可以自由切换当前上下文,并在安装资源的同时继续工作。
证明我的观点:
我配置了两个集群:
$ kubectl config get-contexts
CURRENT NAME
* cluster-1
istio
举个例子,我要安装 superset
,因为我知道这需要一些时间才能完成。
$ helm install superset superset/superset &
[1] 14291
&
将它发送到后台,这样我就可以在 helm 执行它的时候发出更多命令
现在,切换到另一个上下文
$ kubectl config use-context istio
Switched to context "istio".
helm 仍在后台运行
$ jobs
[1]+ Running helm install superset superset/superset &
一段时间后,helm 完成它的工作,并抛出有关成功部署的信息
NAME: superset
LAST DEPLOYED: Thu Aug 26 13:55:03 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
echo "Visit http://127.0.0.1:8088 to use your application"
kubectl port-forward service/superset 8088:8088 --namespace default
[1]+ Done helm install superset superset/superset
切换回原始上下文,并检查是否所有 pods 都已创建
$ kubectl config use-context cluster-1
Switched to context "cluster-1".
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
superset-9cb794755-jwjls 1/1 Running 0 90s
superset-init-db-ndhlt 0/1 Completed 0 89s
superset-postgresql-0 1/1 Running 0 89s
superset-redis-master-0 1/1 Running 0 89s
superset-worker-66bb97f7ff-4ptq5 1/1 Running 0 90s
如您所见,所有资源都已正确部署在 cluster-1
上下文中,在 default
命名空间中(因为我没有另行指定)。
我有 6 个 shell 别名,用于在不同 k8s 集群的 k8s 命名空间之间切换上下文。上下文在 kube 配置文件中设置。
别名的一个例子是这样的:
alias kc11='kubectl config use-context cluster1-namespace-1'
我的问题是:
如果我 运行 helm 升级命令需要大约 30 分钟,我可以在升级过程中切换 k8s 上下文以不影响 运行ning 操作吗?
helm 如何与 k8s 上下文一起工作?它是在 helm upgrade 中的每个简单操作开始时还是在每个简单操作之前加载到 运行 时间?
Helm 升级命令如下所示:
helm upgrade my-app . --reuse-values --values values.yaml --timeout 1200s
如您所见,我没有添加 -n 参数来指定 k8s 命名空间。
TL;DR:是的,你可以。
当您发出 helm upgrade
命令时,所有相关清单都会发送到控制平面。这几乎是瞬间发生的,发送完之后,你这边的所有工作就完成了。您可能会注意到,即使您在 运行 期间中断 helm
,最终也会创建所有相关的 pods、服务等。
您还可以自由切换当前上下文,并在安装资源的同时继续工作。
证明我的观点:
我配置了两个集群:
$ kubectl config get-contexts
CURRENT NAME
* cluster-1
istio
举个例子,我要安装 superset
,因为我知道这需要一些时间才能完成。
$ helm install superset superset/superset &
[1] 14291
&
将它发送到后台,这样我就可以在 helm 执行它的时候发出更多命令
现在,切换到另一个上下文
$ kubectl config use-context istio
Switched to context "istio".
helm 仍在后台运行
$ jobs
[1]+ Running helm install superset superset/superset &
一段时间后,helm 完成它的工作,并抛出有关成功部署的信息
NAME: superset
LAST DEPLOYED: Thu Aug 26 13:55:03 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
echo "Visit http://127.0.0.1:8088 to use your application"
kubectl port-forward service/superset 8088:8088 --namespace default
[1]+ Done helm install superset superset/superset
切换回原始上下文,并检查是否所有 pods 都已创建
$ kubectl config use-context cluster-1
Switched to context "cluster-1".
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
superset-9cb794755-jwjls 1/1 Running 0 90s
superset-init-db-ndhlt 0/1 Completed 0 89s
superset-postgresql-0 1/1 Running 0 89s
superset-redis-master-0 1/1 Running 0 89s
superset-worker-66bb97f7ff-4ptq5 1/1 Running 0 90s
如您所见,所有资源都已正确部署在 cluster-1
上下文中,在 default
命名空间中(因为我没有另行指定)。