在 Kubernetes (k8s) 中,YAML 文件被广泛用于定义和配置各种资源对象,如 Deployments、Services、Pods 等。YAML 是一种易于阅读和编写的非标记语言,特别适合用来表达层次化的配置数据。下面是一个典型的 Kubernetes YAML 文件的基本结构解析,以 Deployment 为例:

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

关键字段解释:

  • apiVersion: 指定使用的 Kubernetes API 版本。例如,apps/v1 表示应用资源的版本。

  • kind: 定义资源的类型。在这个例子中是 Deployment,意味着要创建一个 Deployment 资源。

  • metadata: 提供资源的元数据,如名称、标签等。这里的 name 定义了 Deployment 的名称,labels 为资源加上标签,便于使用标签选择器(label selectors)来定位资源。

  • spec: 描述资源的具体配置和期望状态。对于 Deployment:

    • replicas: 指定副本集中的期望 Pod 数量。

    • selector: 用于确定哪些 Pod 属于这个 Deployment。matchLabels 部分定义了标签匹配规则,确保 Deployment 控制的 Pod 与指定标签匹配。

    • template: 定义了新创建的 Pod 的模板。这是非常关键的一部分,因为它描述了每个 Pod 实例的具体配置。

      • metadata: Pod 的元数据,再次定义了 Pod 的标签,确保与 Deployment 的选择器匹配。

      • spec:

        • containers: 容器数组,描述了 Pod 中运行的容器。每个容器定义了其名称、镜像、端口等属性。
          • name: 容器名称。
          • image: 容器使用的镜像及其版本。
          • ports: 容器暴露的端口配置,containerPort 指定了容器内部监听的端口号。

YAML 文件编写时需要注意缩进,它用来表明层级关系。通常推荐使用两个空格作为一级缩进,保持一致性非常重要,因为 YAML 解析器依赖于缩进来理解结构。

此外,YAML 支持多种数据结构,包括 Maps(键值对)、Lists(列表)、Scalars(标量值),这些结构在 Kubernetes 配置中被广泛用来表达复杂的资源定义。

Logo

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

更多推荐