Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

  • K8S

    • kubectl常用命令
    • Kubernetes核心概念详解:Namespace、Pod、Deployment、PV和PVC
    • Kubernetes之yaml文件详解
    • k8s部署MySQL
    • Kubernetes (k8s) 相关名词详解
    • PV、PVC、StorageClass的区别和联系
  • Systemd

  • Nginx

  • Supervisord

  • OpenLdap

  • OpenVPN

  • GitLab

  • Sshd

  • WebDev

  • Docker

  • Prometheus

  • Rclone

  • Iptables

  • Firewalld

  • Linux笔记
  • K8S
Carry の Blog
2022-03-29

Kubernetes之yaml文件详解

Kubernetes的YAML文件是用于定义Kubernetes对象(如Pod、Service、Deployment等)的一种格式化文件。这些文件通常由开发人员和运维人员使用,并通过kubectl工具进行部署和管理。

以下是一个基本的Kubernetes YAML文件的示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
    - name: my-container
      image: nginx:latest

1
2
3
4
5
6
7
8
9
10
11

Kubernetes YAML文件的主要结构由以下几个部分组成:

  • apiVersion:用于指定该对象的Kubernetes API版本。该版本必须与所使用的Kubernetes版本兼容。

  • kind:用于指定该对象的类型。常见的类型有Pod、Service、Deployment、ConfigMap、Secret等。

  • metadata:用于指定该对象的元数据,包括名称、标签、注释等信息。

  • spec:用于指定该对象的规范,包括容器、服务端口、存储卷等配置信息。

在一个Kubernetes YAML文件中,可以定义多个Kubernetes对象,每个对象之间用 --- 分隔开来。例如:


apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
    - name: my-container
      image: nginx:latest

---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - name: http
      port: 80
      targetPort: 80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

在上面的示例中,定义了一个Pod和一个Service对象。

Kubernetes YAML文件的定义格式是相对灵活的,开发人员和运维人员可以根据需要灵活定义和组织它们。在定义时,可以使用一些基本的Kubernetes YAML文件的语法和结构元素,例如注释、缩进、序列和映射等。

总的来说,Kubernetes YAML文件是定义Kubernetes对象的一种简单但强大的方式。熟练掌握Kubernetes YAML文件的语法和结构可以更好地帮助开发人员和运维人员管理和部署Kubernetes对象。

除了上述基本结构外,Kubernetes YAML文件还支持许多其他功能和特性。下面列举了一些常用的Kubernetes YAML文件的功能和技巧:

  • 注释:使用 # 符号来添加注释。注释可以添加在任何位置,以提高代码的可读性。
apiVersion: v1
kind: Pod
metadata:
  name: my-pod  # 定义Pod名称
spec:
  containers:
    - name: my-container  # 定义容器名称
      image: nginx:latest  # 定义容器镜像

1
2
3
4
5
6
7
8
9
  • 多行字符串:使用 | 符号来定义多行字符串。这在定义大块的配置文件时非常有用。
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  my-conf.yaml: |
    key1: value1
    key2: value2
    key3: value3

1
2
3
4
5
6
7
8
9
10
  • 环境变量:可以通过 env 属性来定义容器的环境变量。
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx:latest
      env:
        - name: ENV_VAR1
          value: "value1"
        - name: ENV_VAR2
          value: "value2"
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 存储卷:可以使用 volumes 属性来定义Pod中的存储卷。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx:latest
      volumeMounts:
        - name: my-volume
          mountPath: /data
  volumes:
    - name: my-volume
      configMap:
        name: my-config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • 配置文件:可以使用 configMap 和 secret 属性来定义Pod中的配置文件。
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx:latest
      volumeMounts:
        - name: my-config
          mountPath: /etc/my-app
      env:
        - name: ENV_VAR1
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: env-var1
        - name: ENV_VAR2
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: env-var2
  volumes:
    - name: my-config
      configMap:
        name: my-config
    - name: my-secret
      secret:
        name: my-secret

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  • 部署:可以使用 Deployment 对象来定义Pod的部署和升级策略。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: nginx:latest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
上次更新: 4/24/2025

← Kubernetes核心概念详解:Namespace、Pod、Deployment、PV和PVC k8s部署MySQL→

最近更新
01
tidb fast ddl
04-04
02
TiDB配置文件调优 原创
04-03
03
如何移除TiDB中的表分区 原创
04-03
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式