【问题标题】:Run a single kubectl command for a specific project and cluster?为特定项目和集群运行单个 kubectl 命令?
【发布时间】:2016-02-29 18:57:04
【问题描述】:

背景

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

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

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

问题

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案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
      

      $ 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
      

      【讨论】:

      • 嗯不确定这是否能解决问题,因为集群在不同的项目中运行。所以我想同时指定集群和项目。
      • 指定集群包括主节点——我在这里看到的任何东西都不需要了解 GCE。您可以在不同的项目、不同的云提供商或裸机上将集群混合在一起。
      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 2018-11-07
      • 2019-07-19
      • 2021-04-15
      • 1970-01-01
      • 2022-08-23
      • 2016-11-11
      • 1970-01-01
      相关资源
      最近更新 更多