您现在已经了解了部署 Kubernetes 集群的几种可能方法。现在是学习如何使用集群的时候了。要与 Kubernetes 交互,您可以使用名为 kubectl 的命令行工具,发音为 kube-control、kube-C-T-L 或 kube-cuddle。

如下图所示,该工具与 Kubernetes API 服务器通信,该服务器是 Kubernetes 控制平面的一部分。然后,控制平面会根据您通过 API 所做的更改触发其他组件执行任何需要执行的操作。
image.png

设置 kubectl - Kubernetes 命令行客户端

Kubectl 是一个可执行文件,您必须将其下载到您的计算机并放入您的路径中。它从名为 kubeconfig 的配置文件中加载其配置。要使用 kubectl,您必须安装它并准备 kubeconfig 文件,以便 kubectl 知道要与哪个集群通信。

为 kubectl 设置一个短别名

你会经常使用 kubectl。每次都必须输入完整的命令是不必要的耗时,但您可以通过为其设置别名和tab补全 来加快速度。
大多数 Kubernetes 用户使用 k 作为 kubectl 的别名。如果您还没有使用过别名,这里是在 Linux 和 macOS 中定义它的方法。将以下行添加到您的 ~/.bashrc 或等效文件中:

  1. alias k=kubectl

为 kubectl 配置 tab 补全

即使使用像 k 这样的短别名,您仍然需要输入很多内容。幸运的是,kubectl 命令还可以输出 bash 和 zsh shell 的 shell 完成代码。它不仅可以完成命令名称,还可以完成对象名称。例如,稍后您将学习如何通过执行以下命令来查看特定集群节点的详细信息:

  1. source <(kubectl completion zsh) # 在 zsh 中设置当前 shell 的自动补全
  2. echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc # 在您的 zsh shell 中永久的添加自动补全

配置 kubectl 以使用特定的 Kubernetes 集群

kubeconfig 配置文件位于 ~/.kube/config。如果您使用 Docker Desktop、Minikube 或 GKE 部署集群,则会为您创建该文件。如果您已获得对现有集群的访问权限,则您应该已收到该文件。其他工具(例如 kind)可能已将文件写入不同的位置。除了将文件移动到默认位置之外,您还可以通过设置 KUBECONFIG 环境变量将 kubectl 指向它,如下所示:

  1. $ export KUBECONFIG=/path/to/custom/kubeconfig

要了解有关如何管理 kubectl 的配置和从头开始创建配置文件的更多信息,请参阅附录 A。

使用 kubectl

假设您已经安装并配置了 kubectl,您现在可以使用它与您的集群通信。

验证集群是否启动并且 kubectl 可以与之通信

要验证您的集群是否正常工作,请使用以下清单中显示的 kubectl cluster-info 命令。

  1. $ kubectl cluster-info
  2. Kubernetes control plane is running at https://127.0.0.1:62323
  3. CoreDNS is running at https://127.0.0.1:62323/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  4. To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

这表明 API 服务器处于活动状态并正在响应请求。输出列出了集群中运行的各种 Kubernetes 集群服务的 URL。上面的例子表明,除了 API 服务器之外,在集群内提供域名服务的 KubeDNS 服务是另一个运行在集群中的服务。

列出集群节点

现在使用 kubectl 命令列出集群中的所有节点。以下清单显示了在对具有三个节点的 GKE 集群执行 kubectl 时生成的输出。

  1. $ kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. kind-control-plane Ready control-plane,master 7h14m v1.21.1
  4. kind-worker Ready <none> 7h14m v1.21.1
  5. kind-worker2 Ready <none> 7h14m v1.21.1

Kubernetes 中的所有内容都由一个对象表示,并且可以通过 RESTful API 进行检索和操作。 kubectl get 命令从 API 中检索指定类型的对象列表。您将一直使用此命令,但它仅显示有关列出的对象的摘要信息。

检索对象的其他详细信息

要查看有关对象的更多详细信息,请使用 kubectl describe 命令,该命令显示更多信息:

  1. $ kubectl describe node gke-kubia-85f6-node-0rrx

我省略了 describe 命令的实际输出,因为它很宽,在本书中完全不可读。如果您自己运行该命令,您将看到它显示节点的状态、有关其 CPU 和内存使用情况的信息、系统信息、节点上运行的容器等等。

如果在不指定资源名称的情况下运行 kubectl describe 命令,将打印所有节点的信息。

当仅存在一个特定类型的对象时,执行 describe 命令而不指定对象名称很有用。您不必键入或复制/粘贴对象名称。

通过 Web 仪表板与 Kubernetes 交互

如果您更喜欢使用图形 Web 用户界面,您会很高兴听到 Kubernetes 还带有一个不错的 Web 仪表板。但是请注意,仪表板的功能可能明显落后于 kubectl,后者是与 Kubernetes 交互的主要工具。

尽管如此,仪表板在上下文中显示了不同的资源,并且可以作为了解 Kubernetes 中的主要资源类型以及它们之间的关系的良好开端。仪表板还提供了修改已部署对象的可能性,并为每个操作显示等效的 kubectl 命令 - 大多数初学者都会喜欢这个功能。
image.png
尽管您不会使用本书中的仪表板,但您始终可以在通过 kubectl 创建集群后打开它以快速查看部署在集群中的对象的图形视图。