该页解释了 Kubernetes API 中的 Kubernetes 对象,以及如何以 .yaml 格式表示它们。

  • 了解 Kubernetes 对象
  • 下一步怎么做

了解 Kubernetes 对象

Kubernetes 对象是 Kubernetes 系统中的持久实体。Kubernetes 使用这些实体展示集群状态。具体来说,它们可以描述:

  • 哪些容器化应用正在运行(以及在哪些节点上);
  • 这些应用可用的资源;
  • 有关这些应用的行为的策略,例如重新启动策略、升级和容错。

Kubernetes 对象是 “意图记录” - 创建对象后,Kubernetes 系统将不断工作以确保该对象存在。通过创建对象,可以有效地告诉 Kubernetes 系统集群的工作负荷是什么样的;这是集群的理想状态。

要使用 Kubernetes 对象 - 无论是创建、修改还是删除它们 - 这都需要使用 Kubernetes API。例如,当使用 kubectl 命令行界面时,CLI 会进行必要的 Kubernetes API 调用。除此之外,还可以使用客户端库(敬请期待~~)之一在程序中直接使用 Kubernetes API。

对象规格与状态

几乎每个 Kubernetes 对象都包含两个嵌套的对象字段,这些字段控制对象的配置:对象 spec 及对象 status。对于具有 spec 的对象,必须在创建对象时进行设置,并提供所需资源的特征描述:所需状态。

status 描述了对象的当前状态,由 Kubernetes 及其组件提供及更新。Kubernetes 舵面连续不断地主动管理每个对象的实际状态,以匹配提供的所需状态。

例如:在 Kubernetes 中,Deployment 是一个对象,可以表示在集群上运行的应用。创建部署时,可以将部署规格设置为指定要运行该应用的三个副本。Kubernetes 系统读取部署 spec 设置为指定要运行该用的三个副本。Kubernetes 系统读取部署规格并启动所需应用的三个实例 - 更新状态以符合规格。如果这些实例中的任何一个实例失败(状态变更),Kubernetes 系统将通过进行更正响应规格和状态之间的差异,在这种情况下,将启动替换实例。

有关对象规格、状态及元数据的更多信息,请参见 Kubernetes API 规约

描述 Kubernetes 对象

在 Kubernetes 中创建对象时,必须提供描述其所需状态的对象规格以及有关该对象的一些基本信息(例如名称)。当使用 Kubernetes API 创建对象(直接或通过 kubectl)时,该 API 请求必须在请求正文中包含该信息作为 JSON。通常,会在 .yaml 文件中将信息提供给 kubectl。发出 API 请求时,kubectl 会将信息转换为 JSON。

这是一个示例 .yaml 文件,其中显示了 Kubernetes 部署的必要字段及对象规格:

application/deployment.yaml 

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

使用 .yaml 文件创建部署的一种方法是使用上述方法,是在 kubectl 命令行界面中使用 kubectl apply 命令,并将 .yaml 文件作为参数传递。这是一个例子:

kubectl apply -f https://k8s.io/examples/application/deployment.yaml --record

输出类似于以下内容:

deployment.apps/nginx-deployment created

必要的字段

在要创建 Kubernetes 对象的 .yaml 文件中,需要为以下字段设置值:

  • apiVersion - 用来创建该对象的 Kubernetes API 版本;
  • kind - 要创建哪种对象
  • metadata - 有助于唯一标识对象的数据,包括 name 字符串、UID 及可选的 namespace
  • spec - 对象的期望状态。

每个 Kubernetes 对象的对象 spec 的精确格式都不同,并且包含特定于该对象的嵌套字段。Kubernetes API 参考能帮忙找到可以使用 Kubernetes 创建的所有对象的规格格式。例如,可以在 PodSpec v1 核心中找到 Pod 的 spec 格式,而可以在 DeploymentSpec v1 应用中找到 Deployment 的 spec 格式。

下一步怎么做

  • Kubernetes API 概述(敬请期待~~)介绍了更多 API 概念;
  • 了解最重要的基本 Kubernetes 对象,例如 Pod(敬请期待~~);
  • 了解 Kubernetes 中的控制器(敬请期待~~)。