k8s-yaml配置文件

解读 kubernetes 中的 yaml 文件

    文章中用到了部分课程的表述,非原创,属于半原创 

今天这篇文章将会介绍如何读懂以下这个 yaml 文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

像这样的一个 YAML 文件,对应到 Kubernetes 中,就是一个 API Object(API 对象)。当你为这个对象的各个字段填好值并提交给 Kubernetes 之后,Kubernetes 就会负责创建出这些对象所定义的容器或者其他类型的 API 资源。可以看到,这个 YAML 文件中的 Kind 字段,指定了这个 API 对象的类型(Type),是一个 Deployment。

Kubernetes使用一种 API 对象(Deployment)管理另一种 API 对象(Pod)的方法,在 Kubernetes 中,叫作“控制器”模式(controller pattern)。在我们的例子中,Deployment 扮演的正是 Pod 的控制器的角色。后面的文章会介绍到,如下面这张图可以直观地看到 “控制器”模式

1297993-20210524232247614-200112308.png

一个 Kubernetes 的 API 对象的定义,大多可以分为 Metadata 和 Spec 两个部分。

  • Metadata : 存放的是这个对象的元数据,对所有 API 对象来说,这一部分的字段和格式基本上是一样的
  • Spec : 属于这个对象独有的定义,用来描述它所要表达的功能,例如 : 副本的数量,创建的模板又是怎么样的

Metadata

你可能还注意到,这样的每一个 API 对象都有一个叫作 Metadata 的字段,这个字段就是 API 对象的“标识”,即元数据,它也是我们从 Kubernetes 里找到这个对象的主要依据。这其中最主要使用到的字段是 Labels。

顾名思义,Labels 就是一组 key-value 格式的标签。而像 Deployment 这样的控制器对象,就可以通过这个 Labels 字段从 Kubernetes 中过滤出它所关心的被控制对象。

比如,在上面这个 YAML 文件中,Deployment 会把所有正在运行的、携带app: nginx标签的 Pod 识别为被管理的对象,并确保这些 Pod 的总数严格等于两个。

而这个过滤规则的定义,是在 Deployment 的“spec.selector.matchLabels”字段。我们一般称之为:Label Selector。

Annotations

另外,在 Metadata 中,还有一个与 Labels 格式、层级完全相同的字段叫 Annotations,它专门用来携带 key-value 格式的内部信息。所谓内部信息,指的是对这些信息感兴趣的,是 Kubernetes 组件本身,而不是用户。所以大多数 Annotations,都是在 Kubernetes 运行过程中,被自动加在这个 API 对象上。

spec

template则是模板的意思,则是为了表示我将创建的 pod 长什么样子呢, 可以看到上面的例子用到的镜像是 nginx:1.7.9,指定的端口是 80端口

参考资料

  • 《深入剖析Kubernetes》课程-lession12
posted @ 2021-06-02 22:12  float123  阅读(273)  评论(0编辑  收藏  举报