【问题标题】:Script that checks I'm deploying to the correct kubernetes cluster检查我正在部署到正确的 kubernetes 集群的脚本
【发布时间】:2019-05-19 07:24:27
【问题描述】:

我有一个脚本可以将我的应用程序部署到我的 kubernetes 集群。但是,如果我当前的 kubectl 上下文指向错误的集群,我很容易最终将我的应用程序部署到我不打算将其部署到的集群中。什么是检查(从脚本内部)我正在部署到正确集群的好方法?

我真的不想硬编码特定的 kubectl 上下文名称,因为我团队中的不同开发人员对于如何命名他们的 kubectl 上下文有不同的约定。

相反,我想要类似if $(kubectl get cluster-name) != "expected-clsuter-name" then error 的东西。

【问题讨论】:

标签: kubernetes kubectl


【解决方案1】:
#!/bin/bash

if [ $(kubectl config current-context) != "your-cluster-name" ]
then
    echo "Do some error!!!"
    return
fi

echo "Do some kubectl command"

以上脚本获取集群名称并匹配your-desired-cluster 名称。如果不匹配则给出错误。否则运行desired kubectl 命令。

【讨论】:

  • 我真的不想硬编码特定的 kubectl 上下文名称,因为我团队中的不同开发人员对于如何命名他们的 kubectl 上下文有不同的约定。
  • 那你如何定义愿望集群名称。传递变量什么的?还是交互式 CLI?
【解决方案2】:

对于每个集群运行一次kubectl cluster-info 以查看what the IP/host for master is - 这对于集群来说应该是稳定的,并且不会随着 kubectl 上下文中的名称而变化(开发人员可能会设置不同的名称)。然后在脚本中使用export MASTERA=<HOST/IP> 捕获它,这是集群 A 的主节点。然后脚本可以执行以下操作:

kubectl cluster-info | grep -q $MASTERA && echo 'on MASTERA'

use an if-else:

if kubectl cluster-info | grep -q $MASTERA; then
   echo 'on $MASTERA'
else
  exit 1
fi

【讨论】:

  • 嗯,在 GKE 上没有主节点的主机名,而且 IP 地址不是很有意义或容易记住
  • 是的,大概这就是为什么你在stackoverflow.com/questions/53842487/…下尝试不同的方法,因为这似乎给你一个更有意义的名字
  • 使用 gke 的另一种方法是使用 kubectl get nodes 作为节点名称中使用的集群名称,但这不适用于其他云。
猜你喜欢
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2018-10-17
  • 2019-11-25
相关资源
最近更新 更多