为特定项目和集群运行单个kubectl命令?

时间:2015-11-26 15:56:58

标签: google-cloud-platform kubernetes google-kubernetes-engine

背景

我们正在使用Jenkins将新版本的Kubernetes(k8s)复制控制器部署到我们的测试或产品群集中。测试和产品(k8s)集群位于不同的(谷歌云平台)项目下。我们为Jenkins上的gcloud SDK配置了两个配置文件,一个用于测试(测试配置文件),另一个用于prod(prod-profile)。我们在Jenkins中定义了一个托管脚本,用于为复制控制器执行滚动更新。问题是我无法找到一种方法来控制我想要定位kubectl rolling-update命令的项目(您可以指定哪个集群但不指定哪个项目)。所以现在我们的脚本对我们的测试服务器进行滚动更新看起来像这样:

gcloud config configurations activate test-profile && kubectl rolling-update ...

虽然这可行,但如果两个作业同时针对不同的环境运行,则可能会非常危险。假设作业1针对测试环境而作业2针对生产目标。如果job2将活动配置文件切换为" prod-profile"在作业1执行其rolling-update命令之前,作业1将针对错误的项目,更糟糕的是更新错误的复制控制器(如果集群具有相同的名称)。

问题

有没有办法指定kubectl命令所针对的项目(例如在滚动更新期间)可以安全地并发运行?

2 个答案:

答案 0 :(得分:2)

您可以将--cluster=--context=标记传递给kubectl以设置单次运行。例如,如果我的〜/ .kube / config“foo”和“bar”中有两个集群:

$ kubectl --cluster=foo get pods
NAME              READY     STATUS    RESTARTS   AGE
foo-ht1qh   1/1       Running   0          3h
foo-wf8f4   1/1       Running   0          3h
foo-yvgpd   1/1       Running   0          3h

VS

$ kubectl --cluster=bar get pods
NAME              READY     STATUS    RESTARTS   AGE
bar-de4h7   1/1       Running   0          9h
bar-c4g03   1/1       Running   0          9h
bar-2sprd   1/1       Running   0          9h

答案 1 :(得分:0)

您可以使用gcloud config set project yourProject来设置项目属性。见https://cloud.google.com/sdk/gcloud/reference/config/set