Kubectl:Kubernetes 的命令行手册(二)
原文:
zh.annas-archive.org/md5/86462224726319C40F052928B569BEB0
译者:飞龙
第九章:介绍 Helm 用于 Kubernetes
在上一章中,我们学习了如何安装和使用 Kustomize。在本章中,让我们了解 Helm(helm.sh
)。
Helm 是事实上的 Kubernetes 包管理器,也是在 Kubernetes 上安装任何复杂应用程序的最佳和最简单的方法之一。
Helm 不是kubectl
的一部分,也没有kubectl
插件,但它在 Kubernetes 领域中扮演着重要角色,是一个必须了解的工具。
在本章中,我们将学习 Helm v3,特别是如何安装应用程序、升级和回滚应用程序发布、创建和检查 Helm 图表,并使用插件扩展 Helm。
注意
我们将使用 Helm v3,因为它是写作时的最新版本。
在本章中,我们将涵盖以下主要主题:
-
Helm 简介
-
使用 Helm 图表安装应用程序
-
升级 Helm 发布
-
回滚到先前的 Helm 发布
-
使用 Helm 的模板命令
-
创建 Helm 图表
-
使用 Helm 的检查功能
-
使用插件扩展 Helm
Helm 简介
Helm 是一个 Kubernetes 包管理器,允许开发人员和用户轻松打包、配置、共享和部署 Kubernetes 应用程序到 Kubernetes 集群上。
您可以将 Helm 视为 Homebrew/APT/Yum 包管理器,但用于 Kubernetes。
Helm v3 基于仅客户端架构。它与 Kubernetes API 的连接方式与kubectl
相同,使用包含 Kubernetes 集群连接设置的kubeconfig
文件。因此,在kubectl
可用的地方,Helm CLI 也可以使用,使用相同的kubectl
功能和权限。
为了更好地理解 Helm,您应该熟悉以下概念:
-
Helm CLI:与 Kubernetes API 交互并执行各种功能的命令行工具,如安装、升级和删除 Helm 发布。
-
图表:这是描述 Kubernetes 资源的模板文件集合。
-
图表模板化:图表中使用的 Helm 图表模板语言。
-
存储库:Helm 存储库是存储和共享打包图表的位置。
-
发布:部署到 Kubernetes 集群的图表的特定实例。
让我们在接下来的章节中详细了解每一个。
Helm CLI
Helm CLI 可以使用以下命令在不同操作系统上安装:
- 在 macOS 上的安装如下进行:
$ brew install helm
- 在 Windows 上安装使用以下命令进行:
$ choco install kubernetes-helm
- 在 Linux 上安装如下进行:
$ https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
您可以使用helm –h
获取所有可用的 Helm CLI 命令。让我们列出最常用的命令以及它们的描述:
-
helm repo add
: 将 Helm 图表仓库添加到本地缓存列表,之后我们可以引用它从仓库中拉取图表。 -
helm repo update
: 获取有关图表仓库的最新信息;该信息存储在本地。 -
helm search repo
: 在给定的仓库中搜索图表。 -
helm pull
: 从图表仓库下载给定的图表。 -
helm upgrade -i
: 如果没有发布,则安装它,否则升级发布。 -
helm ls
: 列出当前命名空间中的发布。如果提供了-A
标志,它将列出所有命名空间。 -
helm history
: 打印给定发布的历史修订版本。 -
helm rollback
: 将发布回滚到先前的修订版本。 -
helm template
: 在本地渲染图表模板并显示输出。 -
helm create
: 创建一个图表。 -
helm lint
: 对图表进行检查。 -
helm plugin
: 安装、列出、更新和卸载 Helm 插件。
让我们在接下来的章节中更详细地学习每一个。
Helm 图表
图表是 Helm 的一个包。它是一组描述 Kubernetes 资源的模板文件。它使用模板创建 Kubernetes 清单。
Helm 图表结构示例如下:
图 9.1 – 图表文件夹布局
让我们详细讨论一些前述内容:
-
Chart.yaml
: 包含有关图表元数据的文件。 -
charts
: 子图表存储的文件夹。 -
templates
: 存储模板文件的文件夹。 -
values.yaml
: 一个 YAML 格式的文件,其中包含图表模板使用的配置数值。这些数值可以是资源、副本计数,或者是镜像仓库和标签等。
提示
要更改数值,建议使用override-values.yaml
文件,您只需输入要更改的数值。不建议更改随图表提供的默认values.yaml
文件,因为您可能会丢失对文件新版本中更改的跟踪。
现在我们已经学习了 Helm 图表结构的一些基础知识,让我们深入了解图表模板。
图表模板
Helm 最强大的功能是图表模板化。Helm 模板语言基于 Go 语言包text/template
的语法。使用模板语法的值可以用来定制 Kubernetes 资源清单。在安装图表之前,Helm 通过注入指定的值来渲染图表的模板,然后进行图表安装。
值是从默认的values.yaml
文件中读取的,该文件与图表一起提供,或者是用户提供的文件,例如命名为override-values.yaml
。这两个文件的值将被合并,然后应用于图表。
让我们看一下以下图表模板示例:
图 9.2 – 图表模板示例
Helm 模板的上述代码片段是一个 Kubernetes 服务资源,允许我们设置服务类型和端口。如果默认值不符合您的要求,您可以通过提供新的值使用自定义的override-values.yaml
文件来更改默认值。
其他值,如name
、labels
和selector
,都是从_helpers.tpl
文件中注入的,这是模板部分的默认位置:
图 9.3 – _helpers.tpl 的部分示例
上述代码片段是一个_helpers.tpl
文件的一部分,定义了要注入到图表模板中的标签和选择器。
仓库
仓库是存储和共享打包图表的位置。它可以是任何能够提供文件的 Web 服务器。仓库中的图表以压缩的.tgz
格式存储。
发布
发布是部署到 Kubernetes 集群的图表的特定实例。可以使用相同的发布名称多次安装一个 Helm 图表,每次都会创建一个新的发布版本。
特定发布的发布信息存储在与发布本身相同的命名空间中。
您可以使用相同的发布名称但不同的命名空间无限次安装相同的 Helm 图表。
现在我们已经学习了 Helm 的一些基础知识,让我们深入了解使用图表安装应用程序。
使用 Helm 图表安装应用程序
有许多 Helm 图表仓库,逐个设置它们太麻烦了。
相反,我们将使用chartcenter.io
作为我们的中央 Helm 图表存储库,该存储库拥有 300 多个 Helm 存储库,并且可以成为我们安装所有图表的单一真相来源。它还有一个很好的 UI,您可以在其中搜索图表并获取非常详细的信息:
图 9.4 – ChartCenter UI
上述截图显示了 ChartCenter 的 UI。
将 ChartCenter 设置为中央 Helm 存储库也非常容易,如下所示:
$ helm repo add center**https://repo.chartcenter.io
"center" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "center" chart repository
Update Complete. Happy Helming!
上述命令添加了center
图表存储库,并使用其内容更新了 Helm 本地缓存。
现在我们可以尝试通过运行$ helm search repo center/bitnami/postgresql -l | head -n 5
命令来搜索postgresql
图表:
图 9.5 – 搜索 PostgreSQL 图表
在上述截图中,我们可以看到 Bitnami PostgreSQL 图表的最新五个版本。
在安装 PostgreSQL 图表之前,我们应该设置一个密码,因为设置自己的密码而不是使用 Helm 图表生成的密码是一个好习惯。
通过阅读chartcenter.io/bitnami/postgresql
上的图表README
,我们可以找到需要使用的值名称:
图 9.6 – PostgreSQL 图表密码
上述截图向我们展示了values.yaml
文件中postgresqlPassword
变量需要设置 PostgreSQL 图表的密码。
首先,让我们创建一个password-values.yaml
文件来存储 PostgreSQL 密码:
$ echo "postgresqlPassword: SomeVerySecurePassword" > password-values.yaml
然后使用以下命令进行安装:
$ helm upgrade –i postgresql center/bitnami/postgresql --version=9.2.1 -f password-values.yaml
上述命令的输出显示在以下截图中:
图 9.7 – Helm 安装 PostgreSQL 图表
上述命令将 PostgreSQL 图表安装到当前命名空间,并命名为postgresql
。
提示
上述helm upgrade
命令具有一个–i
标志(长名称为--install
),允许我们在第一次安装和随后的升级中使用相同的命令。
使用以下命令检查使用该图表安装了什么:
$ kubectl get all
上述命令的输出显示在以下截图中:
图 9.8 - 列出所有已安装的资源
在前面的截图中,我们可以看到postgresql
pod,两个与postgresql
相关的服务,以及statefulset
。查看service/postgresql
,我们可以看到postgresql
可以被其他 Kubernetes 应用访问,端口为postgresql:5432
。
让我们通过运行以下命令检查所有秘钥是否正确创建:
$ kubectl get secret
上述命令的输出如下截图所示:
图 9.9 - 列出所有已安装的秘钥
在前面的截图中,我们看到了postgresql
秘钥,其中存储了 PostgreSQL 密码,以及sh.helm.release.v1.postgresql.v1
,其中存储了 Helm 发布信息。
现在,让我们通过运行以下命令检查当前命名空间中的 Helm 发布:
$ helm ls
上述命令的输出如下截图所示:
图 9.10 - 列出 Helm 发布
在前面的截图中,我们看到了一个成功部署的postgresql
Helm 发布,其中我们列出了以下内容:
-
STATUS
:显示发布状态为deployed
-
CHART
:显示图表名称和版本为postgresql-9.2.1
-
APP VERSION
:显示 PostgreSQL 版本;在这种情况下为11.9.0
这很容易安装 - 我们只需要提供密码,然后,我们就有了一个完全安装好的 PostgreSQL 实例,甚至它的密码也存储在秘钥中。
升级 Helm 发布
在前一节中,我们安装了 PostgreSQL,现在让我们尝试升级它。我们需要知道如何做这个,因为它将不时地需要升级。
对于升级,我们将使用最新可用的 PostgreSQL 图表版本,即9.3.2
。
让我们通过以下命令获取并运行升级:
$ helm upgrade –i postgresql center/bitnami/postgresql --version=9.3.2 -f password-values.yaml
上述命令的输出如下截图所示:
图 9.11 - 列出 Helm 发布
我们运行了上述的helm upgrade
命令,将postgresql
图表版本更改为9.3.2
,但我们看到 PostgreSQL 版本仍然与之前相同,即11.9.0
,这意味着图表本身接收了一些更改,但应用程序版本保持不变。
运行helm ls
显示REVISION 2
,这意味着 PostgreSQL 图表的第二次发布。
让我们通过运行以下命令再次检查秘钥:
$ kubectl get secrets
上述命令的输出显示在以下截图中:
图 9.12 - 列出 Helm 发布
从前面的截图中,我们可以看到一个新的秘钥,sh.helm.release.v1.postgresql.v2
,这是存储了 PostgreSQL 升级发布的地方。
看到 Helm 如何跟踪所有发布并允许使用单个helm upgrade
命令轻松进行应用程序升级是件好事。
注意
Helm 发布包含图表中的所有 Kubernetes 模板,这使得跟踪它们(从发布的角度)作为一个单一单元变得更加容易。
让我们学习如何进行发布回滚。我们这样做是因为,有时发布可能出现问题,需要回滚。
回滚到先前的 Helm 发布
在本节中,让我们看看如何使用helm rollback
命令回滚到先前的版本。
helm rollback
命令是 Helm 独有的,它允许我们回滚整个应用程序,因此您不必担心需要特别回滚哪些 Kubernetes 资源。
当处理真实应用程序的发布 ID 时,数据库模式也会发生变化,因此要回滚前端应用程序,您还必须回滚数据库模式更改。这意味着事情并不总是像在这里看起来的那样简单,但使用 Helm 仍然简化了应用程序发布回滚过程的某些部分。
要运行helm rollback
命令,我们首先需要知道要回滚到的发布修订版本,我们可以使用以下命令找到它:
$ helm history postgresql
上述命令的输出显示在以下截图中:
图 9.13 - 列出 Helm 发布修订版本
在前面的helm history postgresql
命令中,我们得到了一个发布修订版本的列表。
因此,我们要将postgresql
回滚到修订版本1
:
$ helm rollback postgresql 1
上述命令的输出显示在以下截图中:
图 9.14 - Helm 回滚发布
在前面的截图中,我们看到使用helm rollback postgresql 1
命令进行了回滚,现在我们看到了三个修订版本,即使进行回滚,也会创建一个新的发布。
正如您所看到的,回滚到先前的发布非常容易。
使用 Helm 的模板命令
使用 Helm 的helm template
命令,您可以检查图表的完全渲染的 Kubernetes 资源模板的输出。这是一个非常方便的命令,特别是在开发新图表、对图表进行更改、调试等情况下,用于检查模板的输出。
因此,让我们通过运行以下命令来检查它:
$ helm template postgresql center/bitnami/postgresql --version=9.3.2 -f password-values.yaml
前面的命令将在屏幕上打印所有模板。当然,您也可以将其输出到文件中。
由于输出非常长,我们不打印所有内容,而只打印部分 Kubernetes 清单:
---
# Source: postgresql/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: postgresql
...
---
# Source: postgresql/templates/svc-headless.yaml
apiVersion: v1
kind: Service
metadata:
name: postgresql-headless
...
---
# Source: postgresql/templates/svc.yaml
apiVersion: v1
kind: Service
metadata:
name: postgresql
...
---
# Source: postgresql/templates/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgresql-postgresql
...
前面的输出显示了所有属于postgresql
图表的资源。资源使用---
分隔。
helm template
是一个强大的命令,用于检查图表的模板并打印输出,以便您阅读。helm template
不连接到 Kubernetes 集群,它只填充模板的值并打印输出。
您也可以通过向helm upgrade
命令添加--dry-run --debug
标志来实现相同的效果。使用这种方式,Helm 将根据 Kubernetes 集群验证模板。
完整命令的示例如下:
$ helm template postgresql center/bitnami/postgresql --version=9.3.2 -f password-values.yaml --dry-run --debug
我们已经学会了一些在安装或升级 Helm 发布之前使用的方便的 Helm 命令。
使用helm template
的另一个强大用例是将模板渲染到文件中,然后进行比较。这对比较图表版本或自定义参数对最终输出的影响非常有用。
创建 Helm 图表
我们已经学会了许多有关 Helm 的技巧!现在让我们学习如何创建 Helm 图表。
helm create
命令为您创建了一个示例图表,因此您可以将其用作基础,并使用所需的 Kubernetes 资源、值等进行更新。它创建了一个完全可用的nginx
图表,因此我们将以该名称命名图表。
现在让我们通过运行以下命令来检查创建图表有多容易:
$ helm create nginx
前面命令的输出显示在以下屏幕截图中:
图 9.15 – helm create 命令
在前面的屏幕截图中,我们运行了helm create nginx
命令,其中nginx
是我们的图表名称。该名称也用于创建一个新的文件夹,其中将存储图表内容。文件夹结构使用tree nginx
命令显示。
正如您在截图中所看到的,deployment.yaml
文件、水平 Pod 自动缩放器(HPA)、ingress
、service
和serviceaccount
资源模板都已创建,这些资源提供了一个良好的起点。
上述命令还创建了test-connection.yaml
文件,因此我们可以对安装的nginx
图表运行helm test
进行测试。
现在让我们通过运行以下命令来安装图表:
$ helm install nginx nginx
上述命令的输出显示在以下截图中:
图 9.16 - 安装 nginx 图表
在上述截图中,我们运行了helm install nginx nginx
。该命令使用以下基本语法:
helm install <RELEASE NAME> <CHART NAME>
在这里,<CHART NAME>
是本地文件夹,因此请注意您可以使用相同的命令从远程 Helm 存储库和本地文件夹安装图表。
我们使用的下一个命令如下:
kubectl get all -l "app.kubernetes.io/name=nginx"
该命令帮助我们展示了图表默认部署的资源。
正如我们之前提到的helm test
命令,让我们来看看该命令的功能:
$ helm test nginx
上述命令的输出显示在以下截图中:
图 9.17 - 测试 nginx 图表
上述的helm test nginx
命令针对名为nginx
的 Helm 发布运行测试。kubectl get pods
命令的输出显示了用于运行图表测试的nginx-test-connection
pod,然后被停止。
接下来,让我们检查test-connection.yaml
文件的内容:
$ cat nginx/templates/tests/test-connection.yaml
上述命令的输出显示在以下截图中:
图 9.18 - test-connection.yaml 内容
在上面的截图中,您可以看到一个简单的 pod 模板,该模板针对nginx
服务资源运行curl
命令。
当实际的 Kubernetes 资源被创建时,模板代码的args: ['{{ include "nginx.fullname" . }}:{{ .Values.service.port }}']
行会被转换为nginx:80
。
简单易行,对吧?正如我们所看到的,helm create
命令创建了一个带有示例资源模板的工作图表,甚至包括测试模板。
使用 Helm 的 linting 功能
到目前为止,我们已经学会了如何创建 Helm 图表。然而,我们还需要知道如何检查图表是否存在可能的问题和错误。为此,我们可以使用helm lint <CHART NAME>
命令,它将通过运行一系列测试来验证图表的完整性。
让我们lint
我们创建的nginx
图表:
$ helm lint nginx
上一个命令的输出如下截图所示:
图 9.19 - 对 nginx 图表进行 lint
正如你在上面的截图中所看到的,我们的图表没有问题,可以安全地安装。[INFO]
消息只是警告说图表的图标丢失了,可以安全地忽略。
如果你想在chartcenter.io
中托管你的图表并在其 UI 中显示,那么强烈建议你这样做。
使用插件扩展 Helm
Helm 也可以通过插件进行扩展。插件对于扩展 Helm CLI 中没有的功能非常有用,因为 Helm 可能没有你需要的一切。
目前还没有中央 Helm 插件存储库,你可以在那里看到所有可用插件的列表,也没有 Helm 插件管理器。
由于大多数插件都存储在 GitHub 存储库中,并且建议使用 GitHub 主题helm-plugin
来标记插件,你可以在那里轻松搜索可用的插件:
图 9.20 - 在 GitHub 上搜索 Helm 插件
在上面的截图中使用了github.com/search?q=helm-plugin
来在 GitHub 上搜索 Helm 插件。
让我们看看安装 Helm 插件有多容易:
$ helm plugin list
上一个命令的输出如下截图所示:
图 9.21 - 安装 Helm 插件 helm-diff
在上一个命令helm plugin list
中,我们检查了已安装的插件,然后我们使用helm plugin
install github.com/databus23/helm-diff
来安装helm-diff
插件。之前的插件安装输出被截断了,因为安装的插件打印了大量信息。
让我们来检查插件列表:
$ helm plugin list
上一个命令的输出如下截图所示:
图 9.22 - Helm 插件列表
我们看到diff
插件已安装,这基本上是一个新的 Helm 命令:helm diff
。
我们不打算检查helm diff
的工作原理,但它非常方便,因为您可以检查已安装和新图表版本之间的差异。
让我们再安装一个:
$ helm plugin install https://github.com/instrumenta/helm-kubeval
上述命令的输出如下截图所示:
图 9.23 - helm 插件安装 helm-kubeval
上述命令helm plugin install
github.com/instrumenta/helm-kubeval
安装了kubeval
插件,该插件验证 Helm 图表与 Kubernetes 模式的匹配情况。
让我们验证之前使用helm create
创建的nginx
图表:
$ helm kubeval nginx
上述命令的输出如下截图所示:
图 9.24 - 使用 kubeval 插件验证 nginx 图表
上述helm kubeval nginx
命令验证了nginx
图表 - 正如我们所看到的,一切都是绿色的,所以没有问题。该插件是helm lint
命令的很好补充,两者结合起来可以为您提供良好的工具来检查图表。
现在,我们知道如何使用 Helm 来扩展额外的功能,因为一个工具不能包含所有功能。编写插件也很容易,当然您可以在自己的时间里学习。
总结
在本章中,我们学习了如何使用 Helm 来安装、升级、回滚发布、检查图表模板的输出、创建图表、对图表进行 lint 检查,并使用插件扩展 Helm。
Helm 是一个强大的工具,您可以使用它部署简单和复杂的 Kubernetes 应用程序。它将帮助您部署真实世界的应用程序,特别是因为有许多不同的图表可以从许多 Helm 仓库中使用。
在本书的最后一章中,我们将学习kubectl
的最佳实践和 Docker 用户的kubectl
命令。
第十章:kubectl 最佳实践和 Docker 命令
在上一章中,我们学习了 Helm,这是一个 Kubernetes 包管理器。在本书的最后一章中,我们将学习一些kubectl
的最佳实践。
在本章中,我们将学习如何使用 shell 别名缩短kubectl
命令,以及使用kubectl
命令的其他方便技巧。
我们还将检查一些 Docker 中的等效命令,特别是对于熟悉 Docker 命令并想了解kubectl
中类似命令的新 Kubernetes 用户来说,这些命令非常有用。
在本章中,我们将涵盖以下主要主题:
-
使用 shell 别名来执行 kubectl 命令
-
kubectl 中的类似 Docker 命令
使用 shell 别名来执行 kubectl 命令
每次输入kubectl
命令都很无聊且耗时。您可以在Bash
和Zsh
shell 中使用kubectl
命令完成,当然会有帮助,但仍然不如使用别名快速。
让我们概述一些方便的kubectl
命令的列表,并将它们与别名一起使用,您可以将它们放在zsh_aliases
或bash_aliases
文件中,具体取决于您使用的 shell:
-
k
代表kubectl
- 这是不言而喻的。 -
kg
代表kubectl get
- 这对于获取 pod、部署、有状态集、服务、节点和其他详细信息非常有用,如下例命令所示:
$ kg nodes
上述命令的输出如下截图所示:
图 10.1 - kg 节点输出
上述截图显示了通过运行$ kg nodes
命令在集群中列出的可用 Kubernetes 节点的列表。
-
kd
代表kubectl describe
- 这对于描述 pod、部署、有状态集、服务、节点等非常有用。 -
kga
代表kubectl get all
- 这显示了当前设置的命名空间中的 pod、部署、有状态集、服务和资源的列表。您还可以提供-n
标志来指定命名空间,或者-A
来显示所有命名空间中的资源:
$ kga
上述命令的输出如下截图所示:
图 10.2 - kga 输出
上述截图显示了kga
别名的输出,显示了当前命名空间中找到的资源。
-
krga
代表kubectl really get all
—这会显示当前设置的命名空间中所有资源的列表,包括 secrets、events 等。您也可以提供-n
标志来指定命名空间,或者-A
来显示所有命名空间中的所有资源。 -
kp
代表kubectl get pods -o wide
—这会显示当前命名空间中 pods 的列表。-o wide
标志会显示给定 pod 的分配 IP 和它所在的节点:
$ k get pods
$ kp
上述命令的输出显示在以下截图中:
图 10.3 – kgak get pods 输出
上述截图显示了 k get pods
和 kp
的输出。
-
kap
代表kubectl get pods -A -o wide
—这是一个类似于kp
的别名,但会显示所有命名空间中的 pods。 -
ka
代表kubectl apply -f
—您可以使用这个命令来创建/更新一个部署:
$ ka nginx.yaml
kei
代表kubectl exec -it
—这会执行进入运行中 pod 的 shell:
$ kei nginx-fcb5d6b64-x4kwg – bash
上述命令的输出显示在以下截图中:
图 10.4 – kei 输出
上述截图显示了 kei nginx-fcb5d6b64-x4kwg bash – bash
的输出。
ke
代表kubectl exec
—这会在运行的 pod 中执行一个命令:
$ ke nginx-fcb5d6b64-x4kwg -- ls -alh
上述命令的输出显示在以下截图中:
图 10.5 – ke 输出
上述截图显示了 ke nginx-fcb5d6b64-x4kwg bash – ls -alh
的输出。
ktn
代表watch kubectl top nodes
—使用这个命令来观察节点的资源消耗:
$ ktn
上述命令的输出显示在以下截图中:
图 10.6 – ktn 输出
上述截图显示了 ktn
的输出,列出了节点及其相应的资源使用情况。
ktp
代表watch kubectl top pods
—使用这个命令来观察 pod 的资源消耗:
$ ktp
上述命令的输出显示在以下截图中:
图 10.7 – ktp 输出
上述截图显示了 ktp
的输出,列出了 pods 及其资源使用情况。
kpf
代表kubectl port-forward
—使用这个命令进行端口转发,以便我们可以从localhost
访问 pod:
$ kpf nginx-fcb5d6b64-x4kwg 8080
上述命令的输出显示在以下截图中:
图 10.8 – kpf 输出
上述截图显示了设置端口转发到端口8080
的kpf
的输出。
kl
代表kubectl logs
- 这显示了一个 pod 或 deployment 的日志:
$ kl deploy/nginx --tail 10
上述命令的输出显示在以下截图中:
图 10.9 - kl 输出
上述截图显示了kl
的输出,显示了nginx
部署的日志。
另外,您还可以将以下内容添加到您的列表中:
-
d
:docker
-
kz
:kustomize
-
h
:helm
以下是.zsh_aliases
的示例片段:
$ cat .zsh_aliases
# aliases
alias a="atom ."
alias c="code ."
alias d="docker"
alias h="helm"
alias k="kubectl"
alias ke="kubectl exec -it"
alias kc="kubectl create -f"
alias ka="kubectl apply -f"
alias kd="kubectl describe"
alias kl="kubectl logs"
alias kg="kubectl get"
alias kp="kubectl get pods -o wide"
alias kap="kubectl get pods --all-namespaces -o wide"
alias ktn="watch kubectl top nodes"
alias ktp="watch kubectl top pods"
alias ktc="watch kubectl top pods --containers"
alias kpf="kubectl port-forward"
alias kcx="kubectx"
alias kns="kubectl-ns"
使用别名将帮助您更高效地输入几个字母而不是几个单词。此外,并非所有命令都容易记住,因此使用别名也将有助于克服这一点。
在 kubectl 中类似的 Docker 命令
以下是最有用的 Docker 命令列表,以及它们在 kubectl 中的等价物。
获取信息使用以下命令完成:
-
docker info
-
kubectl cluster-info
获取版本信息使用以下命令完成:
-
docker version
-
kubectl version
运行一个容器并暴露其端口使用以下命令完成:
-
docker run -d --restart=always --name nginx -p 80:80 nginx
-
kubectl create deployment --image=nginx nginx
-
kubectl expose deployment nginx --port=80 --name=nginx
获取容器日志使用以下命令完成:
-
docker logs --f <container name>
-
kubectl logs --f <pod name>
进入运行中的容器/ pod shell 使用以下命令完成:
-
docker exec –it <container name> /bin/bash
-
kubectl exec –it <pod name>
获取容器/ pod 列表使用以下命令完成:
-
docker ps –a
-
kubectl get pods
停止和删除容器/ pod 使用以下命令完成:
-
docker stop <container name> && docker rm <container name>
-
kubectl delete deployment <deployment name>
-
kubectl delete pod <pod name>
我们现在已经学会了 Docker 用户最有用的 kubectl 命令,这应该加快您学习 kubectl 的速度,并且将成为您日常工作中有用的命令。
摘要
在本章的最后,我们通过查看如何使用别名来运行各种 kubectl 命令,然后看到了 kubectl 中 Docker 命令的一些等价物,学习了一些 kubectl 的最佳实践。
使用别名缩短了输入所需的时间,当然,别名比一些长命令更容易记住。
在整本书中,我们学到了很多有用的信息,比如如何安装 kubectl
;获取有关集群和节点的信息;安装、更新和调试应用程序;使用 kubectl
插件;还学习了 Kustomize 和 Helm。
我希望这本书能帮助你掌握 Kubernetes、kubectl
和 Helm。