0

我有 6 个 shell 别名,用于在 k8s 命名空间不同的 k8s 集群之间切换上下文。上下文在 kube 配置文件中设置。

别名的一个例子是这样的:

alias kc11='kubectl config use-context cluster1-namespace-1'

我的问题是:

如果我运行 helm upgrade 命令大约需要 30 分钟,我可以在升级过程中切换 k8s 上下文以不影响运行操作吗?

helm 如何在 k8s 上下文中工作?它是在开始时还是在 helm upgrade 中的每个简单操作之前加载到运行时?

Helm 升级命令如下所示:

helm upgrade my-app . --reuse-values --values values.yaml --timeout 1200s

如您所见,我没有添加 -n 参数来指定 k8s 命名空间。

4

1 回答 1

2

TL;DR:是的,你可以。


当您发出helm upgrade命令时,所有相关清单都将发送到控制平面。这几乎是瞬间发生的,并且在发送完毕后,您这边的所有工作都已完成。您可能会注意到,即使您helm在运行时中断,最终也会创建所有相关的 pod、服务等。

您还可以自由切换当前上下文,并在安装资源时继续工作。


为了证明我的观点:
我配置了两个集群:

$ 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

切换回原始上下文,并检查是否创建了所有 pod

$ 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命名空间中(因为我没有指定不同的方式)。

于 2021-08-26T12:12:52.027 回答