目录
[1. 基础结构](#1. 基础结构)
[2. 缩进和格式](#2. 缩进和格式)
[3. 命名规范](#3. 命名规范)
[4. 字段填写](#4. 字段填写)
[5. 数组和对象](#5. 数组和对象)
[6. 字段类型](#6. 字段类型)
[7. 注释](#7. 注释)
[8. 版本控制](#8. 版本控制)
[9. 环境和秘密管理](#9. 环境和秘密管理)
[10. 资源限制](#10. 资源限制)
[11. 健康检查和探针](#11. 健康检查和探针)
[12. 使用 ---](#12. 使用 ---)
1. 基础结构
- apiVersion : 定义使用的 API 版本,如
v1
,apps/v1
,batch/v1
。 - kind : 资源的类型,如
Pod
,Service
,Deployment
,ConfigMap
。 - metadata: 资源的元数据,包括名称、命名空间、标签等。
- spec: 描述资源的期望状态。具体字段取决于资源类型。
2. 缩进和格式
- 缩进: 使用两个空格进行缩进,避免使用制表符(Tab)。
- 格式 : 确保字段名称后跟
:
,字段值与字段名在同一行,多个项用-
分隔。
3. 命名规范
- 名称: 资源名称应具有描述性并且符合命名规范(小写字母、数字和连字符),避免使用特殊字符。
- 标签和注解 : 使用标签(
labels
)和注解(annotations
)来组织和标识资源。标签应符合key: value
格式,并且使用统一的命名约定。
4. 字段填写
-
metadata:
- name: 资源的名称,必须唯一。
- namespace : 资源所在的命名空间,省略时默认为
default
。 - labels: 适用于选择器,使用有意义的键值对。
- annotations: 用于存储附加信息。
-
spec:
- replicas : 对于
Deployment
、StatefulSet
等,指定副本数量。 - selector: 用于选择匹配特定标签的资源。
- template : 在
Deployment
、StatefulSet
中定义 Pod 模板。
- replicas : 对于
5. 数组和对象
- 数组 : 使用
-
表示数组项,确保数组项对齐。 - 对象: 对象内字段应按字母顺序排列,以提高可读性(可选)。
6. 字段类型
- 字符串 : 使用引号(
"
或'
)包围复杂的字符串或包含特殊字符的字符串。 - 数字: 直接写数字,不需要引号。
- 布尔值 : 使用
true
或false
,注意大小写。
7. 注释
- 注释 : 使用
#
进行注释,确保注释简洁且具有描述性。
8. 版本控制
- 版本管理 : 使用适当的
apiVersion
和资源类型版本,以确保兼容性和功能支持。
9. 环境和秘密管理
- ConfigMap: 用于存储配置信息。
- Secret: 用于存储敏感信息,使用 base64 编码来存储数据。
10. 资源限制
- 资源请求和限制 : 在
spec
中为容器设置资源请求(requests
)和限制(limits
),以便 Kubernetes 能够合理调度资源。
11. 健康检查和探针
- Liveness Probe: 用于检查容器是否仍然运行。
- Readiness Probe: 用于检查容器是否准备好接受流量。
12. 使用 ---
作用 : ---
是 YAML 的文档分隔符,用于分隔一个 YAML 文件中的多个文档或资源。
单文档文件 : 如果你的 YAML 文件只包含一个 Kubernetes 资源,则可以省略 ---
。这在大多数情况下是完全可以接受的。
自动处理 : Kubernetes 的命令行工具(如 kubectl
)可以处理没有 ---
的单一文档文件,而不会受到影响。
适用场景 : 当你需要在同一个文件中定义多个 Kubernetes 资源时,使用 ---
可以将这些资源分开,提高可读性和管理性。
使用 ---
示例:
TypeScript
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: container1
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
示例
TypeScript
# Deployment 配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:1.21
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 30
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /readiness
port: 80
initialDelaySeconds: 10
timeoutSeconds: 5
---
# Service 配置
apiVersion: v1
kind: Service
metadata:
name: my-service
labels:
app: my-app
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
---
# ConfigMap 配置
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
labels:
app: my-app
data:
key1: value1
key2: value2