Google cloud platform 是否为特定项目和集群运行单个kubectl命令?
背景 我们正在使用Jenkins将Kubernetes(k8s)复制控制器的新版本部署到我们的测试或prod集群。测试和生产(k8s)集群位于不同的(谷歌云平台)项目下。我们在Jenkins上为我们的gcloud SDK配置了两个配置文件,一个用于测试(测试配置文件),另一个用于prod(prod配置文件)。我们在Jenkins中定义了一个托管脚本,用于执行复制控制器的滚动更新。问题在于,我无法找到一种方法来控制我要将Google cloud platform 是否为特定项目和集群运行单个kubectl命令?,google-cloud-platform,kubernetes,google-kubernetes-engine,Google Cloud Platform,Kubernetes,Google Kubernetes Engine,背景 我们正在使用Jenkins将Kubernetes(k8s)复制控制器的新版本部署到我们的测试或prod集群。测试和生产(k8s)集群位于不同的(谷歌云平台)项目下。我们在Jenkins上为我们的gcloud SDK配置了两个配置文件,一个用于测试(测试配置文件),另一个用于prod(prod配置文件)。我们在Jenkins中定义了一个托管脚本,用于执行复制控制器的滚动更新。问题在于,我无法找到一种方法来控制我要将kubectl滚动更新命令作为目标的项目(您可以指定哪个集群,但不能指定哪个项
kubectl滚动更新
命令作为目标的项目(您可以指定哪个集群,但不能指定哪个项目)。因此,现在我们对测试服务器进行滚动更新的脚本如下所示:
gcloud config configurations activate test-profile && kubectl rolling-update ...
虽然这是可行的,但如果两个作业在不同的环境中同时运行,则可能会非常危险。假设作业1以测试环境为目标,作业2以产品为目标。如果作业2在作业1执行其滚动更新
命令之前将活动配置文件切换为“产品配置文件”,作业1将以错误的项目为目标,在更坏的情况下更新错误的复制控制器(如果集群具有相同的名称)
问题
有没有办法指定kubectl命令所针对的项目(例如在滚动更新期间)可以安全地同时运行?您可以使用
gcloud config set project yourProject
设置项目属性。请参见您可以使用gcloud config set project yourProject
设置项目属性。请参见您可以将--cluster=
或--context=
标志传递给kubectl以设置单个运行。例如,如果我的~/.kube/config“foo”和“bar”中有两个集群:
vs
您可以将--cluster=
或--context=
标志传递给kubectl以设置单个运行。例如,如果我的~/.kube/config“foo”和“bar”中有两个集群:
vs
嗯,不确定这是否能解决问题,因为集群在不同的项目中运行。所以我想同时指定集群和项目。指定集群包括主集群——在这里我看不到任何需要了解GCE的东西。您可以在不同的项目、不同的云提供商或裸机上混合使用集群。嗯,不确定这是否能解决问题,因为集群在不同的项目中运行。所以我想同时指定集群和项目。指定集群包括主集群——在这里我看不到任何需要了解GCE的东西。您可以在不同的项目、不同的云提供商或裸机上混合使用集群。
$ 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
$ 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