最近,我丈夫告诉我即将举行的工作面试,他必须在计算机上运行一些基本命令。他对面试很着急,但他学习和记住事物的最好方法一直是将他不知道的事物等同于他非常熟悉的事物。因为我们的谈话发生在我在杂货店闲逛试图决定那天晚上做什么菜之后,这启发了我写关于 kubectl 和 Helm 命令的文章,把它们等同于去杂货店的普通旅行。

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

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

更多关于 Kubernetes

  • 什么是 Kubernetes?

  • 电子书:Kubernetes 的存储模式

  • 试驾 OpenShift 上手

  • 电子书:Kubernetes 入门

  • 企业级Kubernetes简介

  • 如何通俗地解释 Kubernetes

  • 电子书:在您的 Raspberry Pi 家庭实验室上运行 Kubernetes

  • Kubernetes 备忘单

  • 电子书:面向 SRE 和系统管理员的 Kubernetes 指南

  • Kubernetes 最新文章

我将在示例中使用命名空间,您可以在我的文章_ Kubernetes 初学者的命名空间 _中了解。

现在我们已经解决了,让我们开始购买基本的 kubectl 和 Helm 命令吧!

头盔列表

你去商店之前做的第一件事是什么?好吧,如果您有条理,您可以制作一个列表。同样,这是我将解释的第一个基本 Helm 命令。

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

$ 舵列表

名称 命名空间 修订版 更新 状态 图表 应用程序版本

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

$ helm list --all-namespaces

名称 命名空间 修订版 更新 状态 图表 应用程序版本

jenkins jenkins 1 2020-01-18 16:18:07 EST 部署了 jenkins-1.9.4 lts

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

$ helm list --namespace jenkins

名称 命名空间 修订 已更新 状态 图表 应用程序版本

jenkins jenkins 1 2020-01-18 16:18:07 EST 部署了 jenkins-1.9.4 lts

现在我有了一个清单并且知道上面有什么,我可以用 get 命令去获取我的项目了!我将从 Kubernetes 集群开始;我能从中得到什么?

kubectl 获取

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

$ kubectl 获取命名空间

姓名 状态 年龄

默认 活动 53m

詹金斯 活跃 44m

kube-node-lease 活跃 53m

kube-public 活动 53m

kube-system 活动 53m

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

$ kubectl 获取节点

姓名 状态 角色 年龄 版本

minikube 准备好了 master 55m v1.16.2

我有一个节点启动并运行,主要是因为我的 Minikube 在一台小型服务器上运行。要让 pod 在我的一个节点上运行:

$ kubectl 获取 pod

在默认命名空间中找不到资源。

糟糕,它是空的。我将通过以下方式获得我的 Jenkins 命名空间中的内容:

$ kubectl 获取 pods --namespace jenkins

姓名 就绪 状态 重新开始 年龄

jenkins-7fc688c874-mh7gv 1/1 跑步 0 0 40m

好消息!有一个pod,没有重启,已经运行了40分钟。好吧,既然我知道 pod 已经启动,我想看看我能从 Helm 那里得到什么。

头盔得到

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

$ helm 获取值 jenkins -n jenkins

用户提供的价值:

无效的

因为我做了一个非常简单的稳定版安装,所以配置没有改变。如果我运行 all 命令,我会从图表中获取所有内容:

$ helm get all jenkins -n jenkins

helm 的输出获取所有命令

这会产生大量数据,因此我始终建议您保留一份 Helm 图表的副本,以便您可以查看图表中的模板。我也创造自己的价值观,看看我有什么。

既然我的购物车里有我所有的好东西,我会检查描述里面有什么的标签。这些示例仅与 kubectl 相关,它们描述了我通过 Helm 部署的内容。

Kubectl 描述

正如我使用 get 命令所做的那样,该命令几乎可以描述 Kubernetes 中的任何内容,我将示例限制为命名空间、Pod 和节点。因为我知道我正在与每个人一起工作,所以这很容易。

$ kubectl 描述 ns jenkins

姓名: 詹金斯

标签: <无>

注释:<无>

状态: 活动

没有资源配额。

没有资源限制。

我可以看到我的命名空间的名称,并且它处于活动状态并且没有资源或引用限制。

describe pods 命令会产生大量信息,因此我将提供一小段输出。如果您在没有 pod 名称的情况下运行该命令,它将返回命名空间中所有 pod 的信息,这可能会让人不知所措。因此,请确保始终在此命令中包含 pod 名称。例如:

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

kubectl-describe-pods 的输出

这提供了(以及许多其他内容)容器的状态、容器的管理方式、标签和 pod 中使用的图像。不在此简短输出中的数据包括资源请求和限制以及 Helm 值文件中应用的任何条件、初始化容器和存储卷信息。如果您的应用程序由于资源不足、运行配置指令的已配置初始化容器或生成的隐藏密码不应出现在纯文本 YAML 文件中而崩溃,则此数据很有用。

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

与 pod 一样,node 命令会产生大量数据,因此我将仅包含输出的一小部分。

$ kubectl describe node minikube

kubectl 的输出描述节点

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

退房

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

我敦促您经常使用命令行并学习“帮助”部分中可用的速记标志,您可以通过运行以下命令来访问它们:

$ helm --help

$ kubectl -h

花生酱果冻

有些东西就像花生酱和果冻一样融合在一起。 Helm 和 kubectl 有点像。

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐