如何优雅的使用 Kubectl 来提高你的生产力

如何优雅的使用 Kubectl 来提高你的生产力

来源:admin 发布时间:2022-08-16 13:58:42 点击数:


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

      如果您使用Kubernetes,那么kubectl可能是您最常用的工具之一。无论何时,只要您花了大量时间使用特定的工具,就有必要好好了解它并学习如何有效地使用它。 


    本文包含了一系列的小贴士小技巧,可以让您更高效地使用kubectl。同时,它旨在加深您对Kubernetes各方面工作原理的理解。


    本文的目标不仅是使您与Kubernetes的日常工作更高效,而且也更愉快!

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

0. kubectl 简介


      在学习如何更有效地使用kubectl之前,您应该对它是什么以及它是如何工作的有一个基本的了解。


      从用户的角度来看,kubectl 就是你 控制Kubernetes的驾驶舱。它允许您执行所有可能的Kubernetes操作


        从技术角度来看,kubectlKubernetes API客户端


Kubernetes API是一个HTTP REST API。这个API是真正的Kubernetes用户界面user interface




通过这个 API 可以完全控制 Kubernetes集群。这意味着每个Kubernetes操作都被公开为一个API端点,可以通过对该端点的HTTP请求执行!!!


(简单地说,就是你用Postman也可以完全控制Kubernetes集群!)

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



因此,kubectl主要工作是执行对Kubernetes API的HTTP请求:


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

Kubernetes是一个完全以资源为中心的系统。这意味着,Kubernetes 维护着资源的内部状态,所有Kubernetes 操作都是对这些资源CRUD操作。您可以通过操作这些资源完全控制 Kubernetes (Kubernetes根据资源的当前状态来确定要做什么)。由于这个原因,Kubernetes API 被组织为资源类型及其相关操作列表


现在我们举个例子:


假设您想要创建一个ReplicaSet资源。为此,您需要在名为replicaset.yaml文件中定义ReplicaSet,然后运行以下命令:

$ kubectl create -f replicaset.yaml


显然,这将在Kubernetes 集群中创建ReplicaSet。但幕后发生了什么呢?


Kubernetes有一个创建 ReplicaSet 操作,和所有其他Kubernetes操作一样,它是作为API端点公开的。此操作的具体API端点如下:


POST /apis/apps/v1/namespaces/{namespace}/replicasets


您可以在 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#create-replicaset-v1-apps 中找到所有Kubernetes操作的API端点。要向端点发出实际请求,需要将API服务器的URL添加到API引用中列


因此,当您执行上面的命令时,kubectl向上面的API端点发出一个HTTP POST请求ReplicaSet 的定义(您在replicaset.yaml中提供的)在请求体中的body中传递过去。


kubectl 就是这样与Kubernetes集群交互的。在所有这些情况下,kubectl 只是向适当的 Kubernetes API 端点发出HTTP请求


请注意,通过手动向Kubernetes API发出HTTP请求,完全可以使用curl之类的工具来控制KubernetesKubectl只是让您更容易使用Kubernetes API


这些是kubectl基本概念工作原理。但是Kubernetes API还有很多值得kubectl用户了解的地方。为此,让我们简要地深入研究Kubernetes的内部结构


Kubernetes内部


Kubernetes由一组独立的组件组成,这些组件在集群的节点上作为独立的进程运行。有些组件运行在主节点上,有些运行在工作节点上,每个组件都有一个非常具体的功能。


这些是主节点上最重要的组件:


  • 存储后端: 存储资源定义(通常使用etcd)


  • API Server: 提供Kubernetes API,管理存储后端


  • Controller Manager: 确保资源状态与规格匹配


  • Scheduler: 将Pods调度到工作节点


这是工作节点上最重要的组件:


  • Kubelet: 管理工作节点上容器的执行


为了了解这些组件如何一起工作,让我们考虑一个示例。


假设您刚刚执行了kubectl create -f replicaset.yamlkubectl在此基础上向create ReplicaSet API端点发出HTTP POST请求(传递您的ReplicaSet资源定义)。



长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



在集群中有什么影响? 看下图:


1. 对create ReplicaSet端点API请求由API Server处理。API Server验证请求并在存储后端(etcd)中保存ReplicaSet资源定义

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

2. 此事件首先会触发ReplicaSet controller,它是Controller Manager的一个子进程。(因为ReplicaSet controller一直在监视存储后端etcdReplicaSet资源CRUD)。一旦存储后端etcd中ReplicaSet 的数据被修改,ReplicaSet Controller 会立即获得事件通知

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

3. ReplicaSet controller任务确保存在所需数量的ReplicaSet副本Pod。在我们的示例中,目前还不存在相应的Pod,因此ReplicaSet控制器创建这些Pod的定义(根据ReplicaSet定义中的Pod模板),并将它们保存在存储后端etcd中。


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

4. 创建新的Pod触发SchedulerScheduler监视尚未调度到工作节点Worker Node的Pod定义

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

5. Scheduler为每个Pod选择一个合适的工作节点Worker Node,并使用此信息更新存储后端etcd中的Pod定义

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

 


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

6. 这个事件会触发kubelet,这些kubelet监视调度到其工作节点的Pod

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


7. ReplicaSet Pods的工作节点的kubelet已被安排用于指示配置的容器运行时(可能是Docker)下载所需的容器映像运行容器

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


此时,您的ReplicaSet应用程序终于开始运行了!



长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



Kubernetes API的角色


从上面的示例中可以看到,Kubernetes组件(API Server和存储后端etcd除外)的工作方式是:

1. 观察存储后端中的资源变化

2. 操作存储后端中的资源


但是,这些组件(Controller Manager, Scheduller, kubectl,kubelet等)不能直接访问存储后端etcd,而只能通过Kubernetes API来和后端交互。


考虑以下例子:


  • ReplicaSet控制器使用 ReplicaSets API端点API操作和一个监视参数来监视对ReplicaSet资源的更改

  • ReplicaSet控制器使用create Pod API端点来创建Pod

  • 调度器使用 patch Pod API端点更新所选工作节点的信息。


可以看到,kubectl也使用了相同的API


Kubernetes API对内部组件和外部用户的双重使用是Kubernetes的基本设计理念


有了这些知识,你可以总结Kubernetes的工作方式如下:



长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

Kubernetes的工作方式


1. 存储后端 etcd 存储Kubernetes的状态(即资源)。

2. API server以 Kubernetes API 的形式提供了修改存储后端etcd的接口。

3. 所有其他Kubernetes组件和用户都可以通过Kubernetes API读取、观察和操作Kubernetes的状态(即资源)。



熟悉这些概念将帮助您更好地理解kubectl,并充分利用它!


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



现在让我们看看一系列具体的提示和技巧,以帮助您提高kubectl的生产力。


01

命令自动补全



提高kubectl生产效率率的一个最有用但经常被忽视的技巧是命令自动补全。


命令补全允许您使用Tab键自动补全kubectl命令的各个部分。这适用于子命令、选项参数,包括难以输入的东西,如资源名。


这里你可以看到 kubectl 命令补全的效果:


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


Bash和Zsh shell 都支持命令自动补全。


官方文档包含了关于设置命令自动补全的详细说明,但以下部分将为您提供一个概述。



命令补全是如何工作的

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



一般来说,命令补全是一种shell特性,它通过补全脚本来工作。完成脚本是一种shell脚本,它定义了特定命令的完成行为。查找完成脚本可以完成相应的命令。


Kubectl可以使用以下命令自动生成并打印Bash和Zsh的完成脚本:

$ kubectl completion bash
# or
$ kubectl completion zsh


理论上,在适当的shell中查找该命令的输出都可以通过kubectl命令完成。


但是,在实践中,Bash(包括Linux和macOS之间的差异)和Zsh的细节是不同的。下面几节将解释所有这些情况:


* 为Linux上的Bash设置命令完成

* 在macOS上为Bash设置命令完成

* 为Zsh设置命令完成

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


Bash on Linux


Bash的完成脚本依赖于 bash-completion(https://github.com/scop/bash-completion)项目,因此必须首先安装它。


您可以使用各种包管理器安装bash-completion。例如:

sudo apt-get install bash-completion
# or
yum install bash-completion


您可以使用下面的命令测试bash-comletion完成是否正确安装


$ type _init_completion


如果输出shell函数的代码,则正确安装了bash-completion。如果命令输出一个not found错误,您必须将以下行添加到~/.bashrc文件中 :(


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


是否必须将这一行添加到~/.bashrc文件,取决于你用来安装bash-completion的包管理器。对于apt来说这是必要的,而对于yum则不是。


一旦安装了bash-completion,就必须进行设置,以便在所有shell会话中都能找到kubectl 的自动补全脚本。


一种方法是在~/.bashrc 里添加一行:


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


另一种方法是将kubectl完成脚本添加到/etc/bash_completion中。(如果不存在这个目录,那么我们自己创建一下 ):


kubectl completion bash >/etc/bash_completion.d/kubectl

/etc/bash_completion 目录中的所有自动补全脚本会被 bash-completion source


这两种方法是等价的。


重新加载shell后,kubectl命令补全应该可以工作了!


Bash on macOS



对于macOS,有一点复杂。原因是Bash在macOS上的默认版本是3.2,这已经相当过时了。不幸的是,kubectl完成脚本至少需要Bash 4.1,因此不能与Bash 3.2一起工作。


苹果之所以在macOS中包含一个过时的Bash版本,是因为新版本使用了苹果不支持的GPLv3许可证。


这意味着,要在macOS上使用kubectl命令补全,必须安装更新版本的Bash。您甚至可以将其设置为新的默认shell,这将为您在将来省去许多类似的麻烦。这实际上并不困难,您可以在我以前写的一篇关于在macOS上升级Bash的文章中找到相关说明。


在继续之前,请确保您现在确实在使用Bash 4.1或更新版本($bash --version)。


Bash的完成脚本依赖于bash-completion项目,因此必须首先安装它。


你可以在Homebrew中安装bash-completion:

brew install bash-completion@2

@2代表bash-completion v2。kubectl完成脚本需要bash-completion v2,而bash-completion至少需要Bash 4.1。这就是为什么您不能在低于4.1的Bash版本上使用kubectl完成脚本的原因。


brew install命令的输出包括一个“警告”部分,说明如何将以下行添加到~/.bash_profile文件:

export BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"


为了完成bash-completion的安装,您必须这样做。但是,我建议将这些行添加到您的~/.bashrc,而不是~/.bash_profile。这确保了bash-completion 也可以在子shell中使用


重新加载shell后,可以使用以下命令测试bash-completion是否正确安装:


$ type _init_completion


如果输出的是shell函数的代码,那么就万事俱备了。


现在,您必须进行设置,以便在所有shell会话中获取kubectl完成脚本。


一种方法是将以下行添加到~/.bashrc文件 :(



长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储



另一种可能是将kubectl自动完成脚本添加到目录 /usr/local/etc/bash_completion


$ kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl


假如你是通过brew 安装的bash_completion的话,上面的命令才会生效!


如果您还使用Homebrew安装了kubectl,则甚至不需要执行上述步骤,因为自动完成脚本应该已经放在/usr/local/etc/bash_completion.d目录中。在这种情况下,安装bash-completion之后kubectl 应该就可以实现命令自动补全。


最后,所有这些方法都是等效的。


在重新加载shell后,kubectl命令自动完成应该可以工作了!


Zsh



Zsh的完成脚本没有任何依赖项。所以,你所要做的就是设置一下。

您可以通过将以下行添加到~/.zshrc中 来实现这一点:

长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


如果在重新加载shell后遇到command not found: compdef错误,则必须启用内置的compdef,可以在~/.zshrc中的开头添加以下内容:

".zshrc
autoload -Uz compinit
compinit


02

快速查看resource spec


在创建YAML资源定义时,需要知道这些资源的字段及其含义。可以查找此信息的一个位置是API reference, 其中包含f

然而,每次需要查找东西时都切换到浏览器是很乏味的。因此,kubectl提供了kubectl explain命令,该命令可以打印出终端中所有资源的资源规范。


kubectl explain的用法如下:


$ kubectl explain resource[.field]...

该命令输出请求的资源或字段的规范。kubectl explain 所显示的信息与API引用中的信息相同。


这里你可以看到 kubectl explain:


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储


默认情况下,kubectl explain 只显示单一级别的字段。你可以使用--recursive 标志来显示整个字段树:


$ kubectl explain deployment.spec --recursive


如果你不确定kubectl explain可以使用哪些resource name,你可以用以下命令显示所有资源名:

$ kubectl api-resources

这个命令以复数形式显示资源名(例如,部署而不是部署)。它还会显示具有短名称的资源的短名称(例如deploy)。不要担心这些差异。所有这些名称变体对于kubectl都是等效的。也就是说,您可以使用任何kubectl解释。


例如,下面所有的命令都是等价的:

$ kubectl explain deployments.spec
# or
$ kubectl explain deployment.spec
# or
$ kubectl explain deploy.spec



03

自定义列输出

 

kubectl get 命令(用于读取资源)的默认输出格式如下:

$ kubectl get pods
NAME                      READY  STATUS    RESTARTS  AGE
engine-544b6b6467-22qr6  1/1    Running  0          78d
engine-544b6b6467-lw5t8  1/1    Running  0          78d
engine-544b6b6467-tvgmg  1/1    Running  0          78d
web-ui-6db964458-8pdw4    1/1    Running  0          78d


这是一种很好的人类可读格式,但它只包含有限数量的信息。可以看到,每个资源只显示了一些字段(与完整的资源定义相比)。


这就是使用custom columns output format地方。它允许您自由地定义列和要在其中显示的数据。您可以选择将资源的任何字段显示为输出中的单独列

-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]...


必须将每个输出列定义为<header>:<jsonpath>对:

  • <header>是列的名称,您可以选择任何您想要的。

  • <jsonpath>是一个选择资源字段的表达式(下面将详细说明)。


让我们看一个简单的例子:


$ kubectl get pods -o custom-columns='NAME:metadata.name'
NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4


在这里,输出由一个列组成,其中显示所有pod的名称。


选择Pod名称的表达式是 metadata.name。这样做的原因是Pod的名称是在Pod资源的元数据字段的名称字段中定义的(您可以在API引用中或使用kubectl explain Pod .metadata.name查找)。


现在,假设您想要在输出中添加一个额外的列,例如,显示运行每个Pod的节点。要做到这一点,你只需要在自定义列选项中添加一个适当的列规范:

$ kubectl get pods \
  -o custom-columns='NAME:metadata.name,NODE:spec.nodeName'
NAME                      NODE
engine-544b6b6467-22qr6  ip-10-0-80-67.ec2.internal
engine-544b6b6467-lw5t8  ip-10-0-36-80.ec2.internal
engine-544b6b6467-tvgmg  ip-10-0-118-34.ec2.internal
web-ui-6db964458-8pdw4    ip-10-0-118-34.ec2.internal


选择节点名的表达式是spec.nodeName。这是因为Pod被调度到的节点保存在Pod的spec.nodeName字段中(参见kubectl解释Pod .spec.nodeName)。

注意,Kubernetes资源字段是区分大小写的。


您可以通过这种方式将资源的任何字段设置为输出列。只需浏览资源规范,并使用您喜欢的任何字段进行尝试!


但首先,让我们仔细看看这些字段选择表达式。




JSONPath表达式



选择资源字段的表达式基于

JSONPath(https://goessner.net/articles/JsonPath/index.html


JSONPath是一种从JSON文档中提取数据的语言(它类似于XML的XPath)。选择单个字段只是JSONPath最基本的用法。它有很多特性,比如列表选择器、过滤器等等。


但是,使用kubectl explain,只支持JSONPath功能的一个子集。下面总结了这些受支持的功能和示例用法:

$ # Select all elements of a list
kubectl get pods -o custom-columns='DATA:spec.containers[*].image'

# Select a specific element of a list
kubectl get pods -o custom-columns='DATA:spec.containers[0].image'

# Select those elements of a list that match a filter expression
kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'

# Select all fields under a specific location, regardless of their name
kubectl get pods -o custom-columns='DATA:metadata.*'

# Select all fields with a specific name, regardless of their location
kubectl get pods -o custom-columns='DATA:..image'


特别重要的是[]操作符。Kubernetes资源的许多字段都是列表,这个操作符允许您选择这些列表中的项目。它通常与通配符[*]一起使用,以选择列表中的所有项。


下面你会发现一些使用这种符号的例子。




示例应用程序



使用自定义列输出格式的可能性是无限的,因为您可以在输出中显示资源的任何字段或字段组合。这里有一些示例应用程序,但您可以自行探索并找到对您有用的应用程序!

提示:如果您经常使用这些命令中的一个,您可以为它创建一个shell alias。



显示Pods的容器图像


$ kubectl get pods \
  -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
NAME                      IMAGES
engine-544b6b6467-22qr6    rabbitmq:3.7.8-management,nginx
engine-544b6b6467-lw5t8    rabbitmq:3.7.8-management,nginx
engine-544b6b6467-tvgmg    rabbitmq:3.7.8-management,nginx
web-ui-6db964458-8pdw4    wordpress



该命令显示每个Pod的所有容器映像的名称

记住一个Pod可能包含多个容器。在这种情况下,单个Pod的容器 image 以逗号分隔的列表显示在同一列中。


长治网络安全等级保护,长治等保,长治网安备案,网站制作,网站建站,网站运维,Linux系统运维,Windows系统运维,服务器运维,环境部署,环境搭建,私有云存储

显示节点的可用分区


kubectl get nodes \
  -o custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain\.beta\.kubernetes\.io/zone'
NAME                          ZONE
ip-10-0-118-34.ec2.internal  us-east-1b
ip-10-0-36-80.ec2.internal    us-east-1a
ip-10-0-80-67.ec2.internal    us-east-1b


如果您的Kubernetes集群部署在公共云基础设施(如AWS、Azure或GCP)上,则此命令非常有用。显示每个节点所在的可用分区。

可用性区域是一个云概念,表示地理区域内的复制点。

每个节点的可用分区通过特殊的failure-domain.beta.kubernetes.io/zone标签。如果集群运行在公有云基础设施上,则自动创建该标签,其值设置为节点的可用分区名称。


标签不是Kubernetes资源规范的一部分,因此您无法在 API reference 中找到上述标签。但是,如果您将节点输出为YAML或JSON,您可以看到它(以及所有其他标签):


$ kubectl get nodes -o yaml
# or
kubectl get nodes -o json


除了探索资源规范之外,这通常是发现更多关于 resource specifications.的好方法。


4.

在集群和命名空间之间随意切换



kubectl必须向Kubernetes API发出请求时,它会读取系统上所谓的kubecconfig 文件,以获得访问所需的所有连接参数,并向API服务器发出请求。

默认的kubeconfig文件是~/.kube/config。这个文件通常由一些命令自动创建或更新(例如,aws eks update-kubeconfig或gcloud容器集群get-credentials,如果你使用managed Kubernetes服务)。


当您使用多个集群时,您可以在kubeconfig文件中配置多个集群的连接参数。这意味着,您需要一种方法来告诉kubectl您希望它连接到这些集群中的哪一个。


在集群中,您可以设置多个命名空间(命名空间是物理集群中的“虚拟”集群)。Kubectl还确定kubecconfig文件中的请求使用哪个命名空间。因此,您需要一种方法来告诉kubectl您希望它使用这些命名空间中的一个。


本节将解释这是如何工作的,以及如何轻松地完成它。


注意,您还可以通过在kubeconfig环境变量中列出多个kubeconfig文件。在这种情况下,所有这些文件将在执行时合并到一个有效的配置中。您还可以为每个kubectl命令使用——kubecconfig选项