Kubectl 和 Helm 基础命令入门

去杂货店逛一逛,购买您开始使用这些 Kubernetes 工具所需的命令。
142 位读者喜欢这篇文章。
A graduate degree could springboard you into an open source job

Opensource.com

最近,我丈夫告诉我他即将参加一个工作面试,在面试中他需要运行一些基本的计算机命令。他对面试感到焦虑,但他学习和记住事物的最佳方式一直是将他不了解的事物等同于他非常熟悉的事物。由于我们的谈话发生在我逛完杂货店,试图决定那天晚上做什么饭之后,这启发了我写一篇关于 kubectl 和 Helm 命令的文章,将它们比作一次普通的杂货店之旅。

Helm 是一个用于管理 Kubernetes 中应用程序的工具。您可以轻松地使用您的应用程序信息部署 Chart,从而使它们在几分钟内在您的 Kubernetes 环境中启动并预配置完成。当您学习新事物时,查看 Chart 示例以了解它们是如何使用的总是有帮助的,因此如果您有时间,请查看这些稳定的 Chart

Kubectl 是一个与 Kubernetes 环境交互的命令行工具,允许您配置和管理您的集群。它确实需要一些配置才能在环境中使用,因此请查看文档,了解您需要做什么。

我将在示例中使用命名空间,您可以在我的文章 Kubernetes 命名空间入门 中了解更多信息。

既然我们已经解决了这个问题,让我们开始购买基本的 kubectl 和 Helm 命令吧!

Helm list

您去商店之前做的第一件事是什么?好吧,如果您有条理,您会列一个清单。同样,这是我要解释的第一个基本 Helm 命令。

在 Helm 部署的应用程序中,list 提供有关应用程序当前版本的详细信息。在本示例中,我部署了一个应用程序——Jenkins CI/CD 应用程序。运行基本的 list 命令总是会调出默认命名空间。由于我在默认命名空间中没有部署任何内容,因此不会显示任何内容

$ helm list
NAME    NAMESPACE    REVISION    UPDATED    STATUS    CHART    APP VERSION

但是,如果我使用额外的标志运行命令,我的应用程序和信息就会出现

$ helm list --all-namespaces
NAME  	 NAMESPACE  REVISION  UPDATED                   STATUS      CHART           APP  VERSION
jenkins  jenkins 	1         2020-01-18 16:18:07 EST   deployed    jenkins-1.9.4   lts

最后,我可以指示 list 命令仅检查我想要从中获取信息的命名空间

$ helm list --namespace jenkins
NAME  	 NAMESPACE  REVISION  UPDATED                   STATUS 	  CHART          APP VERSION
jenkins    jenkins 	1  	       2020-01-18 16:18:07 EST  deployed  jenkins-1.9.4  lts 	

现在我有了清单,并且知道清单上有什么,我可以去用 get 命令获取我的物品了!我将从 Kubernetes 集群开始;我可以从中获取什么?

Kubectl get

kubectl get 命令提供有关 Kubernetes 中许多事物的的信息,包括 Pod、节点和命名空间。同样,如果没有命名空间标志,您将始终进入默认命名空间。首先,我将获取集群中的命名空间,以查看正在运行的内容

$ kubectl get namespaces
NAME          	 STATUS   AGE
default       	 Active   53m
jenkins       	 Active   44m
kube-node-lease  Active   53m
kube-public   	 Active   53m
kube-system   	 Active   53m

现在我已经有了在我的环境中运行的命名空间,我将获取节点并查看有多少节点正在运行

$ kubectl get nodes
NAME   	   STATUS   ROLES	AGE   VERSION
minikube   Ready    master  55m   v1.16.2

我有一个节点正在运行,主要是因为我的 Minikube 运行在一个小型服务器上。要获取在一个节点上运行的 Pod

$ kubectl get pods
No resources found in default namespace.

哎呀,它是空的。我将使用以下命令获取 Jenkins 命名空间中的内容

$ kubectl get pods --namespace jenkins
NAME                   	  READY  STATUS	  RESTARTS  AGE
jenkins-7fc688c874-mh7gv  1/1 	 Running  0         40m

好消息!有一个 Pod,它没有重启,并且已经运行了 40 分钟。好吧,既然我知道 Pod 已经启动,我想看看我可以从 Helm 获取什么。

Helm get

Helm get 有点复杂,因为这个 get 命令需要的不仅仅是应用程序名称,您可以从应用程序请求多种内容。我将首先获取用于创建应用程序的值,然后我将展示 get all 操作的片段,该操作提供与应用程序相关的所有数据。

$ helm get values jenkins -n jenkins
USER-SUPPLIED VALUES:
null

由于我做了一个非常小的仅稳定版本的安装,因此配置没有更改。如果我运行 all 命令,我将从 Chart 中获取所有内容

$ helm get all jenkins -n jenkins

output from helm get all command

这将产生大量数据,所以我总是建议保留 Helm Chart 的副本,这样您就可以查看 Chart 中的模板。我还创建了自己的值,以查看我拥有什么。

现在我已经在购物车中装满了所有好东西,我将检查描述它们内容的标签。这些示例仅与 kubectl 相关,它们描述了我通过 Helm 部署的内容。

Kubectl describe

就像我使用 get 命令一样,它可以描述 Kubernetes 中的几乎所有内容,我将我的示例限制为命名空间、Pod 和节点。因为我知道我正在处理每个中的一个,所以这将很容易。

$ kubectl describe ns jenkins
Name:     	jenkins
Labels:   	<none>
Annotations:  <none>
Status:   	Active
No resource quota.
No resource limits.

我可以看到我的命名空间的名称,以及它是活动的并且没有资源或配额限制。

describe pods 命令会产生大量信息,所以我将提供输出的一小段片段。如果您在不使用 Pod 名称的情况下运行该命令,它将返回命名空间中所有 Pod 的信息,这可能会让人感到应接不暇。因此,请确保您始终在此命令中包含 Pod 名称。例如

$ kubectl describe pods jenkins-7fc688c874-mh7gv --namespace jenkins

output of kubectl-describe-pods

这提供了(在许多其他内容中)容器的状态、容器的管理方式、标签以及 Pod 中使用的镜像。此缩写输出中不包含的数据包括资源请求和限制,以及在 Helm values 文件中应用的任何条件、init 容器和存储卷信息。如果您的应用程序由于资源不足、运行配置预脚本的配置的 init 容器或不应以纯文本 YAML 文件形式存在的生成的隐藏密码而崩溃,则此数据非常有用。

最后,我将使用 describe node,它(当然)描述了节点。由于此示例只有一个名为 Minikube 的节点,因此我将使用它;如果您的环境中有多个节点,则必须包含感兴趣的节点名称。

与 Pod 一样,node 命令会产生大量数据,因此我将仅包含输出的片段。

$ kubectl describe node minikube

output of kubectl describe node

请注意,describe node 是更重要的基本命令之一。如此图所示,该命令返回指示节点何时耗尽资源的统计信息,此数据非常适合在您需要扩展时提醒您(如果您在环境中没有自动扩展)。此输出片段中未包含的其他内容包括所有资源的请求和限制的百分比,以及资源的期限和分配(例如,对于我的应用程序)。

结账

有了这些命令,我就完成了购物,并获得了我想要的一切。希望这些基本命令也能在您日常使用 Kubernetes 的过程中为您提供帮助。

我强烈建议您经常使用命令行,并学习帮助部分中提供的简写标志,您可以通过运行以下命令访问帮助部分

$ helm --help

$ kubectl -h

花生酱和果冻

有些东西就像花生酱和果冻一样搭配。Helm 和 kubectl 有点像那样。

我经常在我的环境中使用这些工具。因为它们在很多地方都有许多相似之处,所以在使用一个工具后,我通常需要跟进另一个工具。例如,我可以执行 Helm 部署,并使用 kubectl 观察其失败。一起尝试它们,看看它们能为您做什么。

接下来阅读什么
User profile image.
科技游民,从事我能找到的任何工作。IT 领域孤岛预防、与所有团队共享信息的重要性的倡导者。相信教育所有人以及开源开发。热爱所有科技事物。专注于 K8s、混沌以及我能找到的任何新事物和闪亮事物!Mastodon ID

评论已关闭。

© . All rights reserved.