Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 

Kubernetes 的 YAML 文件

 

YAML 是 Kubernetes 配置文件中使用的标准格式,以及许多其他多种配置 Kubernetes 的方式。YAML 广泛使用,很可能您已经熟悉它。否则,这并’不是一件很大的交易,因为 YAML 是一种非常简单的学习语言。每行 YAML 配置都是详细的,您应了解 YAML 格式作为您的 pod 学习流程的附带结果。

YAML 格式的 pod 配置文件为:

YAML 使用三种基本数据类型:

  1. 标量(字符串/数字):atom 数据项,如 pod-1 的字符串,端口号80。

  2. 映射(哈希/字典):键/值对可嵌套。apiVersion: v1 是一个映射。key apiVersion 的值为 v1。

  3. 序列(数组/列表):有序值集合,无键。列表项以-号指示。密钥容器的值是包括两个容器的列表。

在此示例中,您还会看到嵌套的 YAML 数据结构:

  • 映射映射:规格是地图的关键,您可以在其中定义 pod’规格。在此示例中,您仅定义要在盒中启动的容器的行为。该值是带有容器键的另一个映射。

  • 列表的映射。密钥容器的值为两个项目的列表:每个服务器和客户端容器都是一个映射,它描述了具有几个属性(如名称、图像和端口)的个别容器。

您还应了解有关 YAML 的其他特性:

  • 区分大小写

  • 相同级别中的元素共享相同的左缩进,缩进量无关紧要

  • 不允许使用制表符作为缩进

  • 空行无关紧要

  • 使用 # 注释线路

  • 使用一个单引号来转义任何字符的特殊含义

在深入了解有关 YAML 文件的更多详细信息’之前,请先完成盒创建:

有. 我们创建了第一个 Kubernetes 对象– ,该 pod 称为 pod-1。但容器在哪里?输出内容提供线索:已分配 IP 地址为10.47.255.237 的 pod pod-1 (名称),包含两个容器(就绪/2),已在 Kubernetes 辅助节点 cent333 中启动。盒中的两个容器均已启动(就绪 2/),并且已处于27s 状态,无需重新启动。下面’简要逐行评论 YAML 配置的用途: "

  • 第1行:这是对文本使用编号前的注释行,您可以将任何注释放入 YAML 文件中。(在这本书中,我们使用此第一行为 YAML 文件提供文件名。在从 YAML 文件创建对象时,此命令稍后将用于该文件名。)

  • 第2、3、4行:四个 YAML 映射是 pod 定义的主要组件:

    • ApiVersion: 有不同版本,例如 v2。这里特别是版本1。

    • 种类请记住,存在不同类型的 Kubernetes 对象,此处我们希望 Kubernetes 创建 pod 对象。稍后,您将在我们的其他对象示例中看到 ReplicationController 或服务的种类。

    • 元数据以识别创建的对象。除了要创建的对象名称之外,另一个重要的元数据是标签。您将在第3章中详细了解这一点。

    • 指标这将提供有关 pod 行为的规格。

  • 线路9-15:此处的 pod 规格仅限于两个容器。系统将下载映像,启动每个具有名称的容器,并分别公开指定端口。

下面’是盒’内运行的内容:

毫无疑问,pod-1 由 Kubernetes 群集分配并在所有容器之间共享的 IP 地址包含在 YAML 文件、服务器和客户端中声明的两个容器中,如Figure 1中所示:

Figure 1: 节点、盒和容器
节点、盒和容器

暂停容器

如果登录到 node cent333,’将看到在盒内运行的 Docker 容器:

第三个带有图像名称 k8s.gcr.io/pause 的容器是 Kubernetes 系统为每个 pod 创建的特殊容器。创建的暂停容器用于管理盒的网络资源,该 pod 由该 pod 的所有容器共享。

Figure 2显示了一个盒箱,其中包括几个用户容器和一个暂停容器。

Figure 2: 箱、用户容器和特殊暂停容器
箱、用户容器和特殊暂停容器

Pod 内通信

在 Kubernetes 主设备中,’从主设备登录到一个容器:

Note

如果您曾使用 Docker 玩,您将立即意识到这相当整洁。请记住,容器在一个节点上启动,因此如果您使用 Docker,则必须先登录到正确的远程节点,然后使用类似的 Docker exec 命令登录每个容器。Kubernetes 隐藏这些详细信息。它允许您从一个节点–到主设备,执行所有操作。

现在,检查容器中运行的进程:

服务器容器

客户端容器

此 ps 命令输出显示,每个容器都在运行自己的进程。但是,ss 和 ip 命令输出指示两个容器共享相同的网络环境,因此两者都可以看到彼此公开的端口。因此,盒中容器之间的通信只需使用 localhost 即可发生。让’我们通过使用卷曲命令启动 TCP 连接来测试这种情况。

假设从客户端容器,您希望从服务器容器获取网页。您只需使用 localhost IP 地址启动曲线:

您可以看到连接已建立,网页已成功下载。

现在,’让我们来监控 TCP 连接状态:已成功建立连接:

完全相同的连接可从服务器容器中看到:

Kubectl 工具

到目前为止’,您已看到由 kubectl 命令创建的对象。与 Docker 世界中的 docker 命令一样,此命令是 Kubernetes world 中的一个接口,用于与群集进行交谈,或者更准确地说是通过 Kubernetes API 的 Kubernetes 主设备。这’是一种多用途工具,可提供满足您需要处理 Kubernetes 的所有任务的选项。

作为一个快速示例,假设您已为 kubectl 启用了自动完成功能,则可以登录到 master 和 kubectl,然后键入两个 tab 键,以列出您当前环境中支持的所有选项:

Note

要设置 kubectl 命令的自动完成,请遵循完成选项的说明:

kubectl 完成-h

请放心,您’会在本书其余部分看到并了解其中的部分选项。