如果您连接到多个集群,任何跟踪/维护 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
当前使用的方法:
- 或者 (cat ~/.kube/config) 我检查一下我连接到哪个集群。
- 将配置移至其他目录,完成后将配置移回。
- kubectl 获取节点以查看我连接的位置。
如果您不介意使用 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
以便您必须始终明确要使用的上下文。
上下文可能包括 cluster
、user
和 namespace
,因此可以定义多个特定上下文。
我个人不使用 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.
上正确引用 (") 带有特殊字符的参数
关于如何跟踪允许您访问 kubernetes 集群的 kubectl 配置 (~/.kube/config) 有什么建议吗?我在不同的环境 (local/prod) 上有集群 运行ning,我在其中连接到 same 名称空间,在该名称空间上部署了项目,并且每当我需要连接到特定的环境时集群,我 运行 下面进行配置(aws/gcp/microk8s 等上的不同命令)并且配置附加到 ~/.kube/config。有什么简单的方法可以知道您的连接位置或跟踪正在使用的配置?除非你做一个明确的检查,否则这是一场等待发生的灾难。
aws eks --region region update-kubeconfig --name cluster_name
当前使用的方法:
- 或者 (cat ~/.kube/config) 我检查一下我连接到哪个集群。
- 将配置移至其他目录,完成后将配置移回。
- kubectl 获取节点以查看我连接的位置。
如果您不介意使用 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
以便您必须始终明确要使用的上下文。
上下文可能包括 cluster
、user
和 namespace
,因此可以定义多个特定上下文。
我个人不使用 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.