1

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

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

当前使用的方法:

  • 无论是(cat ~/.kube/config),我都会检查以查看我正在连接的集群。
  • 将配置移动到其他目录并在我完成后将配置移回。
  • kubectl 获取节点以查看我连接的位置。
4

3 回答 3

2

使用 kubectl

Kubectl 内置了对管理上下文的支持。在~/.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

壳牌别名

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

Linux Bash 示例:

使用 bashalias将命令定义为别名:

# 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 Powershell 示例:

在 Windows Powershell 中,函数可以定义如下:

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

并用作:

myCluster -n myNamespace get pods

-n <namespace>也可以在函数定义之前指定更多参数,例如$args。确保在 Windows 上正确引用 (") 带有特殊字符的参数。

于 2021-05-02T17:53:03.787 回答
0

如果您不介意使用 UI 工具,那么 lens ( 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 连接。

于 2021-05-01T17:44:53.110 回答
0

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

上下文可能包括clusteruser因此namespace可以定义多个特定的上下文。

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

我没有尝试过这个解决方案。

于 2021-05-01T19:44:01.857 回答