运行 针对特定项目和集群的单个 kubectl 命令?
Run a single kubectl command for a specific project and cluster?
背景
我们正在使用 Jenkins 将新版本的 Kubernetes (k8s) 复制控制器部署到我们的测试或生产集群。 test 和 prod (k8s) 集群位于不同的(google 云平台)项目下。我们在 Jenkins 上为我们的 gcloud SDK 配置了两个配置文件,一个用于测试 (test-profile),一个用于 prod (prod-profile)。我们在 Jenkins 中定义了一个托管脚本,用于为我们的复制控制器执行滚动更新。问题是我无法找到一种方法来控制我想将 kubectl rolling-update
命令定位到哪个项目(您可以指定哪个集群,但不能指定哪个项目受影响)。所以现在我们对测试服务器进行滚动更新的脚本看起来像这样:
gcloud config configurations activate test-profile && kubectl rolling-update ...
虽然这可行,但如果两个作业 运行 同时针对不同的环境,则可能会非常危险。假设作业 1 以测试环境为目标,而作业 2 以生产环境为目标。如果作业 2 在作业 1 执行其 rolling-update
命令之前将活动配置文件切换到 "prod-profile",作业 1 将以错误的项目为目标,并且在更坏的情况下更新错误的复制控制器(如果集群具有相同的名称)。
问题
有没有一种方法可以指定 kubectl 命令所针对的项目(例如在滚动更新期间)对 运行 同时是安全的?
您可以使用gcloud config set project yourProject
设置项目属性。参见 https://cloud.google.com/sdk/gcloud/reference/config/set
您可以将 --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
对
$ 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
背景
我们正在使用 Jenkins 将新版本的 Kubernetes (k8s) 复制控制器部署到我们的测试或生产集群。 test 和 prod (k8s) 集群位于不同的(google 云平台)项目下。我们在 Jenkins 上为我们的 gcloud SDK 配置了两个配置文件,一个用于测试 (test-profile),一个用于 prod (prod-profile)。我们在 Jenkins 中定义了一个托管脚本,用于为我们的复制控制器执行滚动更新。问题是我无法找到一种方法来控制我想将 kubectl rolling-update
命令定位到哪个项目(您可以指定哪个集群,但不能指定哪个项目受影响)。所以现在我们对测试服务器进行滚动更新的脚本看起来像这样:
gcloud config configurations activate test-profile && kubectl rolling-update ...
虽然这可行,但如果两个作业 运行 同时针对不同的环境,则可能会非常危险。假设作业 1 以测试环境为目标,而作业 2 以生产环境为目标。如果作业 2 在作业 1 执行其 rolling-update
命令之前将活动配置文件切换到 "prod-profile",作业 1 将以错误的项目为目标,并且在更坏的情况下更新错误的复制控制器(如果集群具有相同的名称)。
问题
有没有一种方法可以指定 kubectl 命令所针对的项目(例如在滚动更新期间)对 运行 同时是安全的?
您可以使用gcloud config set project yourProject
设置项目属性。参见 https://cloud.google.com/sdk/gcloud/reference/config/set
您可以将 --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
对
$ 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