如果您连接到多个集群,任何跟踪/维护 kubectl 配置 (./kube/config) 的简单方法

Any easy way to keep track/ maintain kubectl config (./kube/config) if you are connecting to multiple clusters

关于如何跟踪允许您访问 kubernetes 集群的 kubectl 配置 (~/.kube/config) 有什么建议吗?我在不同的环境 (local/prod) 上有集群 运行ning,我在其中连接到 same 名称空间,在该名称空间上部署了项目,并且每当我需要连接到特定的环境时集群,我 运行 下面进行配置(aws/gcp/microk8s 等上的不同命令)并且配置附加到 ~/.kube/config。有什么简单的方法可以知道您的连接位置或跟踪正在使用的配置?除非你做一个明确的检查,否则这是一场等待发生的灾难。

aws eks --region region update-kubeconfig --name cluster_name

当前使用的方法:

如果您不介意使用 UI 工具,镜头 (https://k8slens.dev/) 真的很棒。你可以注册多个集群,给他们起名字,也可以给他们不同的图片。

对于命令行,有 shell 扩展将当前集群 + 命名空间添加到 shell 的提示符中,例如。 https://github.com/jonmosco/kube-ps1

对于组织,我在嵌套文件夹结构中为我的文件系统中的每个集群存储一个单独的 kubeconfig 文件,并使用我的 .zshrc 文件(zshell 配置文件)中定义的函数访问它们,例如:

env-dev-foo() {
    KUBECONFIG="/home/user/.kube/otherkubeconfig/dev/foo/config"
}

env-prod-bar() {
    KUBECONFIG="/home/user/.kube/otherkubeconfig/prod/bar/config"
}

env-prod-legacy() {
    KUBECONFIG="/home/user/.kube/otherkubeconfig/prod/legacy/config"
    PATH=$PATH:<path-to-legacy-kubectl
    PATH=$PATH:<path-to-legacy-helm
    connect-via-vpn
    create-ssh-tunnel-to-customer-system
}

除了切换 kubeconfig 之外,您还可以在该函数中执行各种操作。例如。如果您需要处理遗留集群,您可能希望使用不同版本的 kubectl/helm 二进制文件。或者您可能需要创建一个 ssh 隧道才能连接到该集群或通过 VPN 连接。

您可能希望 kubectl config unset current-context 以便您必须始终明确要使用的上下文。

上下文可能包括 clusterusernamespace,因此可以定义多个特定上下文。

我个人不使用 Kubernetes 的一件事(但使用与 GitHub 类似的东西)是更新命令提示符以包含您的集群|上下文(使用 GitHub 我的命令提示符反映回购的分支)。您还可以将生产上下文的上下文着色为红色。

我还没有尝试 this 解决方案。

使用 kubectl

Kubectl 内置了对 managing contexts 的支持。在 ~/.kube/config 文件中手动或通过 aws eks update-kubeconfig 添加上下文后,您可以使用 config 子命令在上下文之间切换。

要查看所有保存的上下文并突出显示当前上下文:

kubectl config get-contexts

只查看当前上下文:

kubectl config current-context

切换到另一个上下文

kubectl config use-context <context-name>

要删除上下文:

kubectl config delete-context <context-name>

具体配置文件

有时可能无法将所有集群连接都放在同一个 kube 配置文件中,相反,用户每个集群都有单独的 kube 配置文件。

对运行kubectl有一个特定的配置,可以使用--kubeconfig参数:

kubectl --kubeconfig ./someConfig -n someNs get pods

Shell 别名

而当运行来自Linux shell或windows powershell时,也可以使用“别名”。

Linux Bash 示例:

使用bash alias将命令定义为别名:

# Define a kubectl alias for specific cluster
alias myCluster="kubectl --kubeconfig ./myClusterConfig"

# Define a kubectl alias for specific cluster and specific namespace
alias myClusterNs="kubectl --kubeconfig ./myClusterConfig -n myNamespace"

用法:

# Using cluster kubectl alias
myCluster -n myNamespace get pods

# Using cluster kubectl alias with namespace
myClusterNs get pods

别名定义可以保存到 ~/.profile 以供永久使用。

Windows 功率shell 示例:

在WindowsPowershell中,可以定义一个函数如下:

function myCluster { kubectl --kubeconfig .\myClusterConfig $args }

并用作:

myCluster -n myNamespace get pods

更多参数如-n <namespace>也可以在$args之前的函数定义中指定。确保在 windows.

上正确引用 (") 带有特殊字符的参数