docker、k8s、helm、ctr命令及配置详解

Administrator 2 阅读 KubernetesDocker

docker命令详解

docker run [选项] 镜像	# 创建并启动容器

	-it					# 交互式终端(-i 保持输入打开,-t 分配伪终端)

	-d					# 后台运行容器(守护态)

	-p 主机端口:容器端口	# 端口映射(如 -p 8080:80)

	-v 主机路径:容器路径	# 挂载数据卷(如 -v /data:/app)

	--name 容器名		# 指定容器名称

	--network 网络名		# 加入指定网络

	--rm				# 容器退出后自动删除(默认情况仅停止容器但不删除)

	--restart=always	    # 设置容器在docker启动时自启

	-h					# 指定容器中的主机名

	--add-host			# 在容器的hosts文件中追加解析

	--dns				# 指定容器所使用的DNS服务器

	-e, --env			# 运行容器时,覆盖ENV声明的变量

	

docker start <容器ID/名称>	 # 启动容器

docker stop <容器ID/名称>		 # 停止容器

docker restart <容器ID/名称>	 # 重启容器

docker rm <容器ID/名称>		 # 删除容器(-f 强制删除运行中容器)

	-f					     # 强制删除运行中容器

	-v					     # 同时删除volume匿名卷

docker ps [选项]			     # 查看运行中容器(-a 查看所有容器)

	-a					# 显示所有容器(包括停止的)

	-q					# 只显示容器ID

	-l					# 显示最近创建的容器

	-n 数字				# 显示最近n个创建的容器

	--no-trunc			# 显示完整信息,不进行截取显示

docker logs [选项] <容器ID/名称>		# 查看容器日志(-f 实时跟踪)

	-f					# 实时跟踪日志输出

	-t					# 显示时间戳

	--tail 数字			# 只显示最后n行日志

docker exec [选项] <容器ID/名称> <命令>	# 进入容器执行命令

	-it					# 交互式执行(常用:docker exec -it 容器 bash)

	-d					# 后台执行命令

docker attach			# 连接的是容器的主进程,退出方式不当可能导致容器停止。

docker inspect <容器ID/名称>		# 查看容器详细信息

	docker inspect -f ' {{ .NetworkSettings.IPAddress }} ' 容器ID

镜像管理

docker pull [选项] <镜像名:标签>			# 拉取镜像

	--platform 平台		# 指定架构(如 --platform linux/amd64)

docker build [选项] <镜像名:标签> <Dockerfile路径>	# 构建镜像

	-t 镜像名:标签		# 指定镜像名称和标签

	--no-cache			# 不使用缓存构建

	-f Dockerfile文件名	# 指定Dockerfile文件(默认 ./Dockerfile)

	--build-arg 变量=值	# 覆盖Dockerfile中ARG定义的变量,ENV定义的变量无法修改

	<Dockerfile路径>		# 指定上下文的路径(如使用哪个目录的默认Dockerfile文件)

docker history			# 查看镜像的每层

docker image ls			# 查看本地镜像(管理命令)

	-a 					# 显示所有

	-q					# 只显示容器ID

	-f					# 过滤状态

docker images			# 查看本地镜像(普通命令)

docker image rm			# 删除镜像(管理命令)

docker rmi [选项] <镜像ID/名称>	# 删除镜像(普通命令)

	-f					# 强制删除(即使被容器引用)

docker tag <源镜像> <新镜像名:标签>		# 为镜像打标签

docker push <镜像名:标签>				# 推送镜像到仓库

docker save -o						# 将镜像保存成文件

docker load -i						# 将文件还原成镜像

网络管理


docker network ls					# 查看网络

docker network create [选项] <网络名>	# 创建网络

	--driver 驱动		# 指定网络驱动(如 bridge/overlay,默认 bridge)

	--subnet 子网		# 配置子网(如 --subnet 192.168.0.0/16)

docker network rm <网络名>				# 删除网络

docker network connect <网络名> <容器名>	# 连接容器到网络

数据卷管理

docker volume ls						# 查看卷

docker volume create [选项] <卷名>		# 创建卷

	--driver 驱动		# 指定卷驱动(默认 local)

	--opt 键=值			# 驱动特定选项(如 --opt type=none --opt device=/data)

docker volume rm <卷名>				# 删除卷

docker volume inspect <卷名>			# 查看卷详情

系统管理

docker info				# 查看Docker系统信息

docker stats [选项]		# 查看容器资源使用情况

	--no-stream			# 只显示一次统计信息,不实时更新

	--format 格式		# 自定义输出格式(如 "--format {{.Name}}: {{.CPUPerc}}")

docker system prune	[选项]		# 清理无用的容器、镜像、网络(-a 清理更多)

	-a					# 清理所有未使用的镜像(不仅是悬空镜像)

	--volumes			# 同时清理未使用的数据卷

	-f					# 强制清理,不提示确认

	

docker run --rm 镜像名 软件名 --version

curl 常用选项和参数速查表

一、基础请求方法

-X, --request <方法> 指定HTTP方法(GET/POST/PUT/DELETE等),默认GET

# 示例: curl -X POST https://api.example.com/data

-d, --data <数据> 发送POST数据(键值对),自动设为application/x-www-form-urlencoded

# 示例: curl -d "name=John&age=30" https://api.example.com/user

--data-raw <数据> 发送原始字符串(不解析特殊字符)

# 示例: curl --data-raw "name=John&Doe" https://api.example.com/user

二、请求头与认证

-H, --header <头部> 添加请求头,可多次使用

# 示例: curl -H "Content-Type: application/json" -H "Authorization: Bearer token" https://api.example.com/data

-u, --user <用户:密码> HTTP基础认证

# 示例: curl -u "admin:123456" https://api.example.com/admin

-b, --cookie <cookie> 发送Cookie数据

# 示例: curl -b "sessionId=abc123; user=John" https://api.example.com/profile

-c, --cookie-jar <文件> 保存服务器返回的Cookie到文件

# 示例: curl -c cookies.txt https://api.example.com/login

三、文件传输与下载

-O, --remote-name 保存文件,文件名与远程一致

# 示例: curl -O https://example.com/file.zip

-o, --output <文件名> 指定本地保存文件名

# 示例: curl -o local_file.txt https://example.com/remote_file.txt

-L, --location 自动跟随重定向(301/302)

# 示例: curl -L -O https://short.url/redirect

-C -, --continue-at - 断点续传

# 示例: curl -C - -O https://example.com/large_file.iso

四、调试与信息展示

-v, --verbose 显示详细请求/响应过程(调试用)

# 示例: curl -v https://example.com

-i, --include 显示响应头+响应体

# 示例: curl -i https://example.com

-I, --head 只请求头部信息(类似HEAD方法)

# 示例: curl -I https://example.com

五、其他实用选项

-k, --insecure 忽略SSL证书验证(测试用)

# 示例: curl -k https://self-signed.example.com

-s, --silent 静默模式(不显示进度/错误)

# 示例: curl -s https://api.example.com/data | jq

-x, --proxy <代理> 通过代理服务器请求

# 示例: curl -x http://proxy:8080 https://example.com

kubernetes命令详解

集群基本信息查看

kubectl cluster-info                # 查看集群基本信息(API服务器地址等)

kubectl get nodes                   # 列出所有节点及其状态

kubectl describe node <node-name>   # 查看指定节点的详细信息(资源、标签等)

kubectl describe pods <pod-name>

工作负载资源管理(Pod/Deployment等)

kubectl get pods                    # 列出当前命名空间的所有Pod

kubectl get pods -n <namespace>     # 列出指定命名空间的Pod

kubectl get pods -o wide            # 显示Pod的IP、所在节点等详细信息

kubectl get pods -A				  # 列出所有命名空间中请求的对象

kubectl describe pod <pod-name>     # 查看指定Pod的详细信息(事件、容器配置等)

kubectl logs <pod-name>             # 查看指定Pod的日志

kubectl logs -f <pod-name>          # 实时跟踪指定Pod的日志

kubectl exec -it <pod-name> -- bash # 进入指定Pod的容器交互终端

kubectl get deployments             # 列出当前命名空间的所有Deployment

kubectl get deploy <deploy-name>    # 查看指定Deployment的状态

kubectl create deployment <name> --image=<image> # 创建基础Deployment

kubectl apply -f <yaml-file>        # 通过YAML文件创建/更新资源(推荐)

kubectl delete deployment <name>    # 删除指定Deployment

kubectl get statefulsets            # 列出StatefulSet(有状态应用)

kubectl get daemonsets              # 列出DaemonSet(每个节点运行一个副本)

kubectl get jobs                    # 列出一次性任务Job

kubectl get cronjobs                # 列出定时任务CronJob

服务与网络管理

kubectl get services                # 列出当前命名空间的所有Service(服务发现)

kubectl get svc <svc-name>          # 查看指定Service的详细信息(IP、端口映射等)

kubectl get ingress                 # 列出Ingress(HTTP/HTTPS路由规则)

kubectl get networkpolicy           # 列出网络策略(控制Pod间通信)

kubectl port-forward pod/<pod-name> 8080:80 # 将Pod的80端口转发到本地8080端口

配置与存储管理

kubectl get configmaps              # 列出ConfigMap(非敏感配置)

kubectl get secrets                 # 列出Secret(敏感信息,如密码、证书)

kubectl get persistentvolumes       # 列出集群级存储PV

kubectl get persistentvolumeclaims  # 列出Pod的存储请求PVC

命名空间与权限管理

kubectl get namespaces              # 列出所有命名空间

kubectl create namespace <name>     # 创建新命名空间

kubectl get roles                   # 列出命名空间内的角色(权限)

kubectl get clusterroles            # 列出集群级角色

资源更新与操作

kubectl set image deployment/<deploy-name> <container-name>=<new-image> # 更新Deployment的镜像

kubectl rollout status deployment/<deploy-name>		# 查看Deployment更新状态

kubectl rollout undo deployment/<deploy-name>		# 回滚Deployment到上一版本

kubectl scale deployment/<deploy-name> --replicas=3 # 调整Deployment的副本数

# 其他常用命令

kubectl api-resources               # 列出集群支持的所有资源类型(kind)

kubectl explain <resource>          # 查看指定资源的YAML配置说明(如kubectl explain pod)

kubectl delete pod <pod-name> --force	# 强制删除卡住的Pod

kubectl top pods						# 查看Pod的CPU和内存使用情况

# 不常用命令

kubectl taint nodes <节点名> <key>=<value>:<effect>	# 设置污点

- kubectl taint nodes worker-01 gpu=yes:NoSchedule

kubectl cordon <node-name>				# 自动给节点打污点(标记为:调度已禁用)

kubectl uncordon <node-name>			# 恢复节点,继续调度

kubectl drain worker-01 				# 

	--ignore-daemonsets # 忽略DaemonSet





ctr

ctr 是 containerd 的命令行工具,用于管理容器、镜像等资源,以下是常用命令及功能

# 镜像管理

ctr images pull <镜像地址>				# 拉取镜像(需指定完整地址,如 docker.io/library/nginx:latest)

ctr images push <镜像地址>				# 推送镜像到仓库

ctr images ls							# 列出所有镜像(可加 -q 只显示ID)

ctr images ls -f "name~nginx"			    # 过滤显示名称包含nginx的镜像

ctr images rm <镜像ID/名称>				# 删除指定镜像

ctr images inspect <镜像ID/名称>			# 查看镜像详细信息(配置、层等)

ctr images export <文件> <镜像>			# 导出镜像为tar包

ctr images import <tar包>				    # 从tar包导入镜像

# 容器管理(容器是静态定义,需通过task启动)

ctr containers create <镜像> <容器名>	    # 创建容器(基于镜像,仅定义不启动)

ctr containers ls						# 列出所有容器

ctr containers ls -q					# 只显示容器ID

ctr containers inspect <容器名/ID>		# 查看容器详细配置

ctr containers rm <容器名/ID>			# 删除指定容器

ctr containers update <容器名> --cpu 2	# 更新容器资源限制(如CPU)

# 任务管理(task是容器的运行实例,关联容器生命周期)

ctr tasks start -d <容器名/ID>		# 启动容器为后台任务(-d 表示 detached 模式)

ctr tasks ls							# 列出所有运行的任务

ctr tasks attach <任务ID/容器名>		# 附加到任务(查看输出,类似docker attach)

ctr tasks logs <任务ID/容器名>			# 查看任务日志

ctr tasks kill <任务ID/容器名>			# 终止任务(类似 docker kill)

ctr tasks rm <任务ID/容器名>				# 删除已停止的任务

# 命名空间管理(containerd用命名空间隔离资源,默认default)

ctr namespaces ls						# 列出所有命名空间

ctr namespaces create <命名空间>			# 创建命名空间

ctr namespaces rm <命名空间>				# 删除命名空间

ctr -n <命名空间> images ls		        # 操作指定命名空间的资源(如查看k8s.io命名空间的镜像)

# 快照管理(查看镜像层对应的快照)

ctr snapshots ls						    # 列出所有快照

ctr snapshots inspect <快照ID>			# 查看快照详细信息

ctr snapshots rm <快照ID> 				# 删除快照(需先删除依赖的容器)

# 其他常用命令

ctr version								# 查看containerd和ctr版本

ctr info								# 查看containerd系统信息(运行时、存储等)

ctr plugins ls						    # 列出containerd加载的插件(如存储、网络插件)

ctr -n k8s.io 							# 对 k8s命名空间进行操作

kubeadm 是用于初始化、管理 Kubernetes 集群的工具,以下是常用命令及功能

# 集群初始化(控制平面)

kubeadm init \

  --pod-network-cidr=10.244.0.0/16 \  # 指定Pod网络CIDR(需与网络插件匹配,如flannel默认此网段)

  --kubernetes-version=v1.28.0       # 指定K8s版本(可选,默认最新稳定版)

  # 初始化控制平面节点,生成加入集群的命令(包含token和hash)

  # 节点加入集群(工作节点/控制平面节点)

kubeadm join 192.168.1.100:6443 \    # 控制平面API服务器地址:端口

  --token abcdef.0123456789abcdef \  # 集群加入token(通过kubeadm token create生成)

  --discovery-token-ca-cert-hash sha256:xxxxxx  # CA证书哈希(init输出中获取)

  # 工作节点加入集群;若加--control-plane则作为控制平面节点加入(需额外参数)

# 重置节点配置(清理集群相关资源)

kubeadm reset

# 清理节点上的K8s配置(证书、kubelet配置等),用于重新初始化或退出集群

# 集群升级相关

kubeadm upgrade plan                # 检查可升级的K8s版本及升级计划

kubeadm upgrade apply v1.28.1       # 执行升级(控制平面节点)

kubeadm upgrade node                # 升级工作节点(需先升级控制平面)

# Token管理(节点加入集群时使用)

kubeadm token create                # 生成新的集群加入token

kubeadm token list                  # 列出所有有效的token

kubeadm token delete <token>        # 删除指定token

# 证书管理

kubeadm certs check-expiration      # 检查集群证书过期时间

kubeadm certs renew all             # 更新所有证书(默认续期1年)

kubeadm certs renew apiserver       # 单独更新API服务器证书

# 配置管理

kubeadm config print init-defaults  # 打印默认的初始化配置(可保存为yaml修改后使用)

kubeadm config images pull          # 预拉取集群所需的镜像(避免init时下载超时)

# 查看版本信息

kubeadm version                     # 显示kubeadm及K8s版本信息

# 检查集群健康状态(控制平面节点)

kubeadm alpha certs check-expiration  # 早期版本证书检查(新版用kubeadm certs)

kubeadm reset pre-flight checks      # 检查重置节点前的环境依赖

Helm 是 Kubernetes 的包管理工具,用于管理 Charts(预打包的 Kubernetes 资源集合)

# 基础信息

helm version                          	# 查看 Helm 客户端和服务端(Tiller)版本

helm help                              	# 查看 Helm 帮助信息

helm <command> --help                  	# 查看某个命令的详细帮助

# 仓库管理

helm repo add <仓库名> <仓库URL>        	# 添加 Chart 仓库(如 helm repo add stable https://charts.helm.sh/stable)

helm repo update                       	# 更新仓库索引,获取最新 Chart 列表

helm repo list                         	# 列出已添加的仓库

helm repo remove <仓库名>               	# 删除指定仓库

helm repo index <目录>                  	# 基于目录生成仓库索引文件

# Chart 搜索与获取

helm search repo <关键词>               	# 从仓库搜索 Chart

helm search hub <关键词>                	# 从 Helm Hub 搜索 Chart

helm pull <仓库名>/<chart名> --version <版本> --untar  # 拉取 Chart 到本地(--untar 自动解压)

helm create <chart名>                  	# 创建一个新的 Chart 模板

helm lint <chart目录>                  	# 检查 Chart 语法和配置是否正确

# Chart 打包与推送(Helm 3)

helm package <chart目录>                	# 将 Chart 打包成 .tgz 文件

helm push <chart.tgz> <仓库名>          	# 推送 Chart 到远程仓库(需仓库支持 OCI 或 ChartMuseum)

# 安装 Release

helm install <release名> <chart路径/仓库名/chart名> --namespace <命名空间> --create-namespace  # 安装 Chart 到集群

helm install <release名> <chart> --values <yaml文件>  	# 用指定 values 文件覆盖默认配置

helm install <release名> <chart> --set key=value      	# 临时设置配置项

# 升级 Release

helm upgrade <release名> <chart>                  	# 升级 Release 到新 Chart 或配置

helm upgrade <release名> <chart> --values <yaml>  	# 升级并使用新配置

helm upgrade <release名> <chart> --reuse-values   	# 升级时复用之前的 values 配置

# 回滚 Release

helm rollback <release名> <版本号>                	# 回滚到指定版本

helm rollback <release名> <版本号> --dry-run      	# 模拟回滚,不实际执行

# 卸载 Release

helm uninstall <release名>                        	# 卸载 Release(删除相关资源)

helm uninstall <release名> --keep-history         	# 卸载但保留历史记录,便于回滚

# 查看 Release 状态

helm list                                      	# 列出当前命名空间的所有 Release

helm list -A                                   	# 列出所有命名空间的 Release

helm list -A | grep <关键词>                    	# 过滤查看

helm status <release名>                         	# 查看指定 Release 的状态和资源信息

helm history <release名>                        	# 查看 Release 的历史版本

helm get values <release名>                   		# 查看 Release 的 values 配置

helm get manifest <release名>                  	# 查看 Release 生成的 Kubernetes 资源清单

# 其他功能

helm template <chart>                           	# 渲染 Chart 模板,不实际部署

helm diff upgrade <release名> <chart>           	# 对比升级前后的差异(需安装 helm-diff 插件)

helm plugin list                                	# 列出已安装插件

helm plugin install <插件URL>                   	# 安装插件

helm plugin uninstall <插件名>                   	# 卸载插件

Docker 加速器

cat > /etc/docker/daemon.json << EOF

{

"registry-mirrors": [

"https://u3a2se85.mirror.aliyuncs.com",

"https://docker.m.daocloud.io",

"https://ccr.ccs.tencentyun.com"

]

}

EOF

常用镜像

nginx:1.22.1

registry.cn-beijing.aliyuncs.com/xxhf/nginx:1.22.1

alpine:3.18

registry.cn-beijing.aliyuncs.com/xxhf/alpine:3.18

Busybox

registry.cn-beijing.aliyuncs.com/xxhf/busybox:latest

ccr.ccs.tencentyun.com/chijinjing/busybox:latest

Rockylinux:9

ccr.ccs.tencentyun.com/chijinjing/rockylinux:9

mysql:8.0

registry.cn-beijing.aliyuncs.com/xxhf/mysql:8.0

ccr.ccs.tencentyun.com/chijinjing/mysql:8.0

wordPress:php7.4

registry.cn-beijing.aliyuncs.com/xxhf/wordpress:php7.4

ccr.ccs.tencentyun.com/chijinjing/wordpress:php7.4

stress

registry.cn-beijing.aliyuncs.com/xxhf/stress:latest

python:3.7-alpine

registry.cn-beijing.aliyuncs.com/xxhf/python:3.7-alpine

ccr.ccs.tencentyun.com/chijinjing/python:3.7-alpine

golang:1.20

registry.cn-beijing.aliyuncs.com/xxhf/golang:1.20

ccr.ccs.tencentyun.com/chijinjing/golang:1.20

iojs:onbuild

registry.cn-beijing.aliyuncs.com/xxhf/iojs:onbuild

ccr.ccs.tencentyun.com/chijinjing/iojs:onbuild

配置文件

docker-compose 解释

version: '3.8' 		# 可选,指定Compose语法版本(3.8为较新稳定版)

# 全局配置:定义可被多个服务共享的数据卷

volumes: 			# 命名卷:会被Docker管理(默认存储在/var/lib/docker/volumes/)

  mysql_data: 			# 卷名称,服务中通过${卷名}引用

    driver: local 			# 驱动类型(默认local,还可支持nfs、glusterfs等)

    driver_opts: 			# 驱动选项(如本地卷的权限设置)

      o: bind

      device: /data/mysql 		# 绑定到宿主机的路径(类似-v的宿主机路径)

  # 匿名卷:无需命名,服务中直接使用,会自动生成随机名称

# 全局配置:定义容器间通信的网络

networks:

  frontend: 			# 网络名称

    driver: bridge 			# 网络驱动(默认bridge,还可支持overlay、host等)

    ipam: 					# IP地址管理配置

      driver: default

      config:

        - subnet: 172.20.0.0/16 	# 自定义子网

  backend:

    external: true 			# 引用宿主机已存在的网络(不会自动创建)

# 核心配置:定义服务(容器)

services:

  # 服务1:WordPress应用

  wordpress:

    image: wordpress:php8.1 # 基于的镜像(优先于build)

    build: 					# 若需构建镜像,替代image(二选一或同时存在)

      context: ./wordpress 		# Dockerfile所在目录

      dockerfile: Dockerfile 	# 自定义Dockerfile名称

      args: 					# 构建时的参数(Dockerfile中用ARG接收)

        - PHP_VERSION=8.1

    container_name: wordpress  # 自定义容器名称(默认:项目名_服务名_序号)

    restart: always 	# 重启策略(always/on-failure/unless-stopped/no)

    ports: 				# 端口映射(宿主机:容器)

      - "80:80" 			# 短格式:[宿主机端口]:[容器端口]

      - target: 443 		# 长格式:更详细的配置

        published: 443

        protocol: TCP

        mode: host 				# 映射模式(host/bridge)

    volumes: 			# 数据卷挂载

      - /data/wordpress/wp-content:/var/www/html/wp-content # 绑定挂载(宿主机:容器)

      - mysql_data:/var/lib/mysql # 命名卷挂载(使用全局定义的卷)

      - ./local-config.php:/var/www/html/config.php:ro  # 只读挂载(ro)

    environment: 			# 环境变量(键值对或列表)

      WORDPRESS_DB_HOST: db_wordpress:3306

      - WORDPRESS_DB_USER=wordpress_rw # 列表格式

      - WORDPRESS_DB_PASSWORD=123456

    env_file: 				# 从文件加载环境变量(替代environment的硬编码)

      - ./.env 					# 相对路径的环境变量文件

    depends_on: 			# 启动依赖(确保db_wordpress先启动)

      - db_wordpress 			# 依赖的服务名

    networks: 				# 加入的网络(引用全局定义的网络)

      - frontend

      - backend

    healthcheck: 			# 健康检查配置

      test: ["CMD", "curl", "-f", "http://localhost"]  # 检查命令

      interval: 30s 			# 检查间隔

      timeout: 5s 				# 超时时间

      retries: 3 				# 重试次数

      start_period: 60s 		# 启动后等待多久开始首次检查

    command: ["apache2ctl", "-D", "FOREGROUND"]  # 覆盖容器默认启动命令

    entrypoint: ./custom-entrypoint.sh  # 覆盖容器默认入口点

    working_dir: /var/www/html 	# 容器内的工作目录

    user: www-data 				# 容器内执行命令的用户

    deploy: 					# 用于Swarm集群的部署配置(单机模式忽略)

      replicas: 3 					# 副本数

      resources:

        limits:

          cpus: '0.5'

          memory: 512M

  # 服务2:MySQL数据库

  db_wordpress:

    image: mariadb:10.6

    container_name: db_wordpress

    restart: unless-stopped

    volumes:

      - mysql_data:/var/lib/mysql

    environment:

      MYSQL_ROOT_PASSWORD: 123456

      MYSQL_DATABASE: db_wordpress

    networks:

      - backend

    healthcheck:

      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p123456"]

      interval: 30s

      timeout: 5s

      retries: 3

docker-nginx.yaml

version: '3.8'  # 使用较新的Compose语法版本,支持更多功能

# 定义外部依赖:网络和数据卷

networks:

  # 前端网络:供Nginx与其他前端服务通信(如静态资源服务器)

  frontend-network:

    driver: bridge  # 默认桥接网络,适合单机环境

    name: nginx-frontend  # 自定义网络名称,便于外部容器加入

  # 后端网络:供Nginx与后端API服务通信

  backend-network:

    driver: bridge

    name: nginx-backend

    internal: false  # 允许外部访问(若为true则仅内部容器可见)

volumes:

  # 持久化Nginx缓存数据(如proxy_cache)

  nginx-cache:

    driver: local

    driver_opts:

      type: none

      device: ./data/nginx/cache  # 宿主机缓存目录

      o: bind

  # 持久化Nginx日志

  nginx-logs:

    driver: local

    driver_opts:

      type: none

      device: ./data/nginx/logs  # 宿主机日志目录

      o: bind

# 敏感配置:使用secrets存储SSL私钥等敏感信息

secrets:

  # SSL私钥(权限需设为600,避免泄露)

  ssl_private_key:

    file: ./secrets/nginx.key

  # 基础认证密码文件(用于保护特定路径)

  htpasswd:

    file: ./secrets/.htpasswd

# 非敏感配置:使用configs存储Nginx配置文件

configs:

  # Nginx主配置文件

  nginx_main_config:

    file: ./config/nginx.conf

  # 虚拟主机配置(按站点分离)

  nginx_vhost_default:

    file: ./config/conf.d/default.conf

  nginx_vhost_api:

    file: ./config/conf.d/api-proxy.conf

  # SSL配置片段(可复用)

  nginx_ssl_params:

    file: ./config/conf.d/ssl-params.conf

services:

  nginx:

    # 使用官方Alpine镜像(体积小,适合生产环境)

    image: nginx:alpine

    container_name: nginx-proxy  # 自定义容器名称,便于管理

    # 容器重启策略:除非手动停止,否则总是重启(适合生产环境)

    restart: unless-stopped

    # 端口映射:暴露HTTP(80)和HTTPS(443)端口

    ports:

      - target: 80

        published: 80

        protocol: TCP

        mode: host  # 直接绑定宿主机端口,减少转发开销

      - target: 443

        published: 443

        protocol: TCP

        mode: host

    # 环境变量:可在Nginx配置中通过变量引用(需配合envsubst)

    environment:

      - TZ=Asia/Shanghai  # 时区设置

      - NGINX_WORKER_PROCESSES=auto  # 工作进程数(可被配置文件覆盖)

    # 挂载非敏感配置文件(通过configs机制)

    configs:

      - source: nginx_main_config

        target: /etc/nginx/nginx.conf

        mode: 0644  # 配置文件权限:所有者读写,其他只读

      - source: nginx_vhost_default

        target: /etc/nginx/conf.d/default.conf

        mode: 0644

      - source: nginx_vhost_api

        target: /etc/nginx/conf.d/api-proxy.conf

        mode: 0644

      - source: nginx_ssl_params

        target: /etc/nginx/conf.d/ssl-params.conf

        mode: 0644

    # 挂载敏感信息(通过secrets机制,权限更严格)

    secrets:

      - source: ssl_private_key

        target: /etc/nginx/ssl/nginx.key

        mode: 0400  # 私钥权限:仅所有者可读(安全最佳实践)

      - source: htpasswd

        target: /etc/nginx/conf.d/.htpasswd

        mode: 0400

    # 挂载数据卷(持久化数据)

    volumes:

      - nginx-cache:/var/cache/nginx  # 缓存目录

      - nginx-logs:/var/log/nginx     # 日志目录

      - ./data/nginx/html:/usr/share/nginx/html:ro  # 静态文件目录(只读)

      - ./data/nginx/ssl/certs:/etc/nginx/ssl/certs:ro  # SSL证书公钥(非敏感)

    # 加入网络:同时连接前端和后端网络,实现反向代理

    networks:

      - frontend-network

      - backend-network

    # 健康检查:监控Nginx服务状态

    healthcheck:

      test: ["CMD-SHELL", "wget -q --spider http://localhost/health || exit 1"]

      interval: 30s        # 检查间隔

      timeout: 5s          # 超时时间

      retries: 3           # 重试次数

      start_period: 60s    # 启动后延迟检查(等待服务就绪)

    # 资源限制:防止Nginx过度占用系统资源

    deploy:

      resources:

        limits:

          cpus: '1'        # 最多使用1个CPU核心

          memory: 512M     # 最多使用512MB内存

        reservations:

          cpus: '0.5'      # 至少预留0.5个CPU核心

          memory: 256M     # 至少预留256MB内存

    # 容器启动前的准备命令(如修改文件权限)

    entrypoint: ["/bin/sh", "-c"]

    command:

      - |

        # 确保缓存目录权限正确

        chown -R nginx:nginx /var/cache/nginx

        # 启动Nginx(前台运行,确保容器不退出)

        nginx -g 'daemon off;'

k8s 的 yaml

Kubernetes API对象的四大核心属性及主要项

apiVersion: # 1. API版本,指定对象遵循的Kubernetes API版本

主要项示例:

- v1 # 核心组资源(如Pod、Service、ConfigMap)

- apps/v1 # 应用组资源(如Deployment、StatefulSet、DaemonSet)

- networking.k8s.io/v1 # 网络组资源(如Ingress、NetworkPolicy)

- batch/v1 # 批处理组资源(如Job、CronJob)

kind: # 2. 资源类型,指定API对象的类型(大驼峰命名)

# 主要项示例:

- Pod # 最小部署单元

- Deployment # 无状态应用控制器

- StatefulSet # 有状态应用控制器

- Service # 服务发现与负载均衡

- Ingress # HTTP/HTTPS路由规则

- ConfigMap # 非敏感配置存储

- Secret # 敏感信息存储

metadata: # 3. 元数据,描述对象的基本信息(用于标识和管理)

# 主要项示例:

name: my-app # 对象名称(在命名空间内唯一)

namespace: default # 所属命名空间(默认default,用于资源隔离)

labels: # 标签(键值对,用于选择器匹配)

app: my-app

env: prod

annotations: # 注解(键值对,用于存储附加信息,不用于选择)

description: "This is a production app"

version: "v1.0.0"

uid: 123e4567-e89b-12d3-a456-426614174000 # 唯一标识符(系统自动生成)

creationTimestamp: "2023-10-01T08:00:00Z" # 创建时间(系统自动生成)

spec: # 4. 期望状态,定义对象的目标状态(不同资源结构不同)

# 主要项示例(以Pod为例):

containers: # 容器列表

- name: app-container # 容器名称

image: nginx:alpine # 容器镜像

ports: # 暴露端口

- containerPort: 80

resources: # 资源限制

limits:

cpu: "1"

memory: "1Gi"

restartPolicy: Always # 重启策略(Always/OnFailure/Never)

nodeSelector: # 节点选择器(指定Pod运行在哪些节点)

disk: ssd

k8s的Wordpress-mariadb-pod.yaml

# 1. 持久化存储配置

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-pv

spec:

  capacity:

    storage: 10Gi

  accessModes:

    - ReadWriteOnce

  hostPath:

    path: /data/mysql  # 对应宿主机路径

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mysql-pvc

spec:

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage: 10Gi

---

# 2. MariaDB数据库配置(使用MYSQL_环境变量保持兼容)

apiVersion: apps/v1

kind: Deployment

metadata:

  name: mariadb

spec:

  replicas: 1

  selector:

    matchLabels:

      app: mariadb

  template:

    metadata:

      labels:

        app: mariadb

    spec:

      containers:

      - name: mariadb

        image: mariadb:10.6

        # 保留MYSQL_前缀环境变量,兼容MySQL

        env:

        - name: MYSQL_ROOT_PASSWORD  # 保持与MySQL一致的变量名

          value: "123456"

        - name: MYSQL_DATABASE

          value: "db_wordpress"

        volumeMounts:

        - name: mysql-data

          mountPath: /var/lib/mysql

        livenessProbe:

          exec:

            command: ["mysqladmin", "ping", "-h", "localhost", "-uroot", "-p123456"]

          interval: 30s

          timeout: 5s

          retries: 3

      volumes:

      - name: mysql-data

        persistentVolumeClaim:

          claimName: mysql-pvc

---

apiVersion: v1

kind: Service

metadata:

  name: mariadb-service

spec:

  selector:

    app: mariadb

  ports:

  - port: 3306

    targetPort: 3306

  clusterIP: None  # 无头服务,类似Docker的服务发现

---

# 3. WordPress应用配置(连接信息保持不变)

apiVersion: apps/v1

kind: Deployment

metadata:

  name: wordpress

spec:

  replicas: 1

  selector:

    matchLabels:

      app: wordpress

  template:

    metadata:

      labels:

        app: wordpress

    spec:

      containers:

      - name: wordpress

        image: wordpress:php8.1

        ports:

        - containerPort: 80

        env:

        - name: WORDPRESS_DB_HOST

          value: "mariadb-service:3306"  # 对应Docker的服务名访问

        - name: WORDPRESS_DB_USER

          value: "wordpress_rw"

        - name: WORDPRESS_DB_PASSWORD

          value: "123456"

        volumeMounts:

        - name: wp-content

          mountPath: /var/www/html/wp-content

        - name: local-config

          mountPath: /var/www/html/config.php

          readOnly: true

        livenessProbe:

          exec:

            command: ["curl", "-f", "http://localhost"]

          interval: 30s

          timeout: 5s

          retries: 3

      volumes:

      - name: wp-content

        hostPath:

          path: /data/wordpress/wp-content

      - name: local-config

        hostPath:

          path: ./local-config.php

---

apiVersion: v1

kind: Service

metadata:

  name: wordpress-service

spec:

  selector:

    app: wordpress

  ports:

  - port: 80

    targetPort: 80

    nodePort: 30080  # 对应宿主机端口映射

  type: NodePort  # 暴露到宿主机,类似Docker的-p





job

apiVersion: batch/v1                      # API版本,batch/v1为稳定版CronJob接口

kind: CronJob                             # 资源类型:定时任务

metadata:

  name: periodic-task-cronjob             # CronJob唯一名称

  labels:

    app: cron-job                         # 用于筛选的自定义标签

spec:

  schedule: "*/5 * * * *"                 # 定时规则(Cron表达式):每5分钟执行一次

  concurrencyPolicy: Allow                # 并发策略:允许前次任务未完成时启动新任务

  startingDeadlineSeconds: 120            # 任务启动超时时间:120秒内未启动视为失败

  successfulJobsHistoryLimit: 3           # 保留成功任务历史记录数量:3个

  failedJobsHistoryLimit: 1               # 保留失败任务历史记录数量:1个

  jobTemplate:                            # 嵌套Job配置,定义每次定时任务的执行内容

    spec:

      completions: 2                      # 每次任务需成功运行2个Pod才算完成

      parallelism: 1                      # 每次最多同时运行1个Pod(控制并发压力)

      activeDeadlineSeconds: 180          # 单个Job超时时间:180秒(3分钟)

      backoffLimit: 2                     # 失败重试次数:最多重试2次

      template:                           # Pod模板:定义任务容器配置

        spec:

          containers:

          - name: periodic-task                # 容器名称

            image: python:3.9-slim             # 基础镜像:轻量Python环境

            command: ["python", "-c"]          # 容器启动命令

            args: [                  # 执行的Python脚本:打印时间、任务ID并模拟耗时

              "import os, time, datetime; 

               now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S');

               print(f'[{now}] 定时任务执行 - 任务ID: {os.environ.get(\"POD_NAME\")}');

               time.sleep(10); 

               print(f'[{now}] 定时任务完成')"

            ]

            env:                               # 环境变量配置

            - name: POD_NAME

              valueFrom:

                fieldRef:

                  fieldPath: metadata.name     # 注入Pod名称作为任务ID

            resources:                         # 资源限制配置

              requests:                        # 最小资源需求(调度依据)

                cpu: "50m"                     # 50毫核(1核=1000m)

                memory: "32Mi"                 # 32兆内存

              limits:                          # 最大资源限制(超限时可能被终止)

                cpu: "100m"

                memory: "64Mi"

            volumeMounts:                      # 容器内挂载配置

            - name: cron-temp                  # 卷名称(与下方volumes对应)

              mountPath: /tmp/cron             # 容器内挂载路径

          volumes:                             # 卷定义

          - name: cron-temp

            emptyDir: {}                       # 临时存储(随Pod生命周期存在)

          restartPolicy: OnFailure             # 重启策略:仅容器失败时重启

          nodeSelector:            # 节点选择:仅在带"workload=cron"标签的节点运行

            workload: cron





ConfigMap.yaml

apiVersion: v1                   # API版本,ConfigMap属于核心v1组

kind: ConfigMap                  # 资源类型,声明为ConfigMap

metadata:

  name: app-config               # ConfigMap的名称(在命名空间内唯一)

  namespace: default             # 所属命名空间(默认default,可自定义)

  labels:                        # 标签,用于筛选和关联相关资源

    app: my-app

    environment: production

data:

  # 1. 简单键值对配置(常用于作为环境变量注入Pod)

  app_mode: "production"         # 应用运行模式(生产/测试)

  log_level: "info"              # 日志输出级别(debug/info/warn/error)

  max_connections: "100"         # 最大连接数限制(注意:值始终为字符串类型)

  timeout_seconds: "30"          # 超时时间(秒)

  # 2. 完整配置文件内容(可挂载为Pod内的文件)

  app.conf: |                    # | 符号表示保留换行符的多行字符串

    # 应用主配置文件

    server:

      port: 8080                 # 服务监听端口

      worker_count: 4            # 工作进程数量

      idle_timeout: 60s          # 连接空闲超时时间

    database:

      host: db-service           # 数据库服务名(K8s内部服务发现)

      port: 3306                 # 数据库端口

      connection_pool: 20        # 连接池大小

  # 3. 短配置项(可作为独立文件挂载)

  cache_ttl: "3600s"             # 缓存过期时间(秒)

  enable_feature_x: "true"       # 功能开关(字符串形式的布尔值)

immutable: false                 # 是否不可变(true=创建后禁止修改,增强安全性)





Secret.yaml

apiVersion: v1                   # API版本,Secret属于核心v1组

kind: Secret                     # 资源类型,声明为Secret

metadata:

  name: app-secrets              # Secret的名称(在命名空间内唯一)

  namespace: default             # 所属命名空间

  labels:

    app: my-app

type: Opaque                     # 类型:通用密钥(适用于键值对,其他类型如tls/ssh-auth)

data:                            # 敏感数据(必须是Base64编码后的字符串)

  # 编码方法:echo -n "明文" | base64 (禁止直接填写明文!)

  db_password: "MTIzNDU2"        # 明文:123456(示例密码,生产环境需用强密码)

  api_token: "dGhpc2lzbXlzZWNyZXR0b2tlbg=="  # 明文:thisismysecrettoken

  

  # 存储证书类文件(如TLS证书、私钥)

  tls.crt: |                     # 多行Base64编码的证书内容

    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCRENDQVpPZ0F3SUJBZ0lKQU5CZ2txaGtpRzl3MEJBUUVG

    QUFPQ0FROEFNSUlCQ2dLQ0FRRUF3eE1hV0ErT...  # 省略部分内容

  tls.key: |                     # 多行Base64编码的私钥内容

    LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dn

    U2pBZ0JHQ0NBU0l3RFFZSktvWklodmNOQVFFTE...  # 省略部分内容

stringData:                      # 可选:直接填写明文(K8s会自动Base64编码)

  # 注意:仅用于临时测试,生产环境禁止使用!且键不能与data字段重复

  temp_credential: "temporary-access-key"  # 临时凭证(自动编码为Base64)





基础版 Deployment(无状态 Nginx 应用)

# 示例1:基础版 Deployment(无状态 Nginx 应用)

apiVersion: apps/v1               # API版本(Deployment属于apps/v1组,K8s 1.9+推荐)

kind: Deployment                  # 资源类型:Deployment(无状态应用控制器)

metadata:

  name: nginx-deploy              # Deployment名称(命名空间内唯一)

  namespace: default              # 所属命名空间(默认default,可自定义)

  labels:                         # Deployment自身的标签(用于筛选/管理)

    app: nginx

    tier: frontend

spec:

  replicas: 2                     # 期望的Pod副本数(实现负载均衡和高可用)

  selector:                       # 标签选择器:匹配要管理的Pod(必须与Pod模板labels一致)

    matchLabels:

      app: nginx

      tier: frontend

  template:                       # Pod模板:定义每个Pod的配置(核心部分)

    metadata:

      labels:                     # Pod的标签(需与spec.selector.matchLabels完全匹配)

        app: nginx

        tier: frontend

    spec:

      containers:                 # 容器列表(一个Pod可包含多个容器,此处为单容器)

      - name: nginx-container     # 容器名称(Pod内唯一)

        image: nginx:1.25-alpine  # 容器镜像(指定版本,避免使用latest,确保环境一致)

        ports:                    # 容器端口声明(仅用于文档说明,不实际暴露端口)

        - containerPort: 80       # 容器内监听的端口(Nginx默认80端口)

          protocol: TCP           # 协议(TCP/UDP,默认TCP)

        volumeMounts:             # 容器内的卷挂载(可选,此处挂载配置文件)

        - name: nginx-conf        # 卷名称(需与spec.volumes.name对应)

          mountPath: /etc/nginx/conf.d/  # 容器内的挂载路径

          readOnly: true          # 只读挂载(避免配置文件被容器意外修改)

      volumes:                    # Pod的卷配置(供容器挂载使用)

      - name: nginx-conf          # 卷名称(与volumeMounts.name对应)

        configMap:                # 卷类型:引用ConfigMap(存储Nginx配置)

          name: nginx-config      # 引用的ConfigMap名称(需提前创建)





生产级 Deployment(带健康检查/资源限制)

# 示例2:生产级 Deployment(带健康检查/资源限制)

apiVersion: apps/v1

kind: Deployment

metadata:

  name: wordpress-deploy

  namespace: app-prod            # 生产环境命名空间(区分环境)

  labels:

    app: wordpress

    env: production

  annotations:                   # 注解:存储附加信息(如部署说明、监控配置)

    deployment.kubernetes.io/revision: "1"  # 部署版本(自动更新)

    description: "Production WordPress deployment with health checks"

spec:

  replicas: 3                    # 3个副本(高可用,避免单点故障)

  selector:

    matchLabels:

      app: wordpress

      env: production

  strategy:                      # 部署策略(滚动更新配置)

    type: RollingUpdate          # 滚动更新(默认,平滑替换旧Pod)

    rollingUpdate:

      maxSurge: 1                # 最大超出副本数(更新时最多多1个Pod)

      maxUnavailable: 0          # 最大不可用副本数(更新时不允许Pod不可用,确保服务连续)

  minReadySeconds: 10            # 新Pod就绪后,等待10秒再继续更新(确认Pod稳定)

  template:

    metadata:

      labels:

        app: wordpress

        env: production

    spec:

      containers:

      - name: wordpress

        image: wordpress:php8.1-fpm-alpine  # 精简镜像(减少攻击面)

        imagePullPolicy: IfNotPresent       # 镜像拉取策略:本地有则不拉取(节省资源)

        ports:

        - containerPort: 9000               # PHP-FPM默认端口

        env:                                # 环境变量(引用Secret/ConfigMap)

        - name: WORDPRESS_DB_HOST           # 数据库地址(引用Secret)

          valueFrom:

            secretKeyRef:

              name: mysql-secrets           # 引用的Secret名称

              key: db_host                  # Secret中的键

        - name: WORDPRESS_DB_USER           # 数据库用户(引用ConfigMap)

          valueFrom:

            configMapKeyRef:

              name: wordpress-config        # 引用的ConfigMap名称

              key: db_user

        resources:                          # 资源限制(避免资源抢占)

          requests:                         # 最小资源需求(调度时参考)

            cpu: "100m"                     # 100毫核(0.1CPU)

            memory: "128Mi"                 # 128MB内存

          limits:                           # 最大资源限制(超出会被限流/杀死)

            cpu: "500m"                     # 最大500毫核

            memory: "512Mi"                 # 最大512MB内存

        livenessProbe:                      # 存活探针(检测容器是否存活,失败则重启)

          exec:                             # 执行命令检查(PHP-FPM进程是否存在)

            command: ["pgrep", "php-fpm"]

          initialDelaySeconds: 30           # 容器启动30秒后再开始检查(避免启动中误判)

          periodSeconds: 10                 # 每10秒检查一次

          timeoutSeconds: 5                 # 检查超时时间(5秒没响应算失败)

          failureThreshold: 3               # 连续3次失败则判定容器死亡,触发重启

        readinessProbe:                     # 就绪探针(检测容器是否可用,失败则移除服务转发)

          tcpSocket:                        # 端口检查(PHP-FPM端口是否通)

            port: 9000

          initialDelaySeconds: 20

          periodSeconds: 5

        volumeMounts:

        - name: wp-data                     # 挂载WordPress数据卷

          mountPath: /var/www/html

          subPath: html                     # 子路径(避免覆盖卷内其他目录)

        - name: php-conf                    # 挂载PHP配置

          mountPath: /usr/local/etc/php/conf.d/custom.ini

          subPath: custom.ini               # 单个文件挂载(避免覆盖整个目录)

          readOnly: true

      volumes:

      - name: wp-data                       # 数据卷:使用PVC(持久化存储)

        persistentVolumeClaim:

          claimName: wp-pvc                 # 引用的PVC名称(需提前创建)

      - name: php-conf                      # 配置卷:引用ConfigMap

        configMap:

          name: php-config

          items:                            # 只挂载指定文件(避免冗余)

          - key: custom.ini

            path: custom.ini

      imagePullSecrets:                     # 私有镜像仓库拉取凭证(可选)

      - name: registry-cred                 # 引用存储仓库凭证的Secret名称

Namespec (命名空间)





命名空间用于在集群中创建逻辑隔离,将资源划分到不同的虚拟集群中。

apiVersion: v1                  # API 版本,命名空间资源使用 v1 版本

kind: Namespace                 # 资源类型,此处指定为 Namespace

metadata:                       # 元数据部分,包含资源的基本信息

  name: my-app-namespace        # 命名空间的名称,在集群中必须唯一

  labels:                       # 标签,用于对资源进行分类和筛选

    environment: production     # 环境标签,标识此命名空间用于生产环境

    project: my-app             # 项目标签,标识此命名空间属于哪个项目

  annotations:                  # 注解,用于存储资源的额外说明信息

    # 描述信息,通常用于说明命名空间的用途

    description: "Namespace for my application components including frontend, backend and database"

ConfigMap(配置映射)





ConfigMap 用于存储非敏感的配置信息,供 Pod 中的容器使用。

apiVersion: v1                  # API 版本,ConfigMap 资源使用 v1 版本

kind: ConfigMap                 # 资源类型,此处指定为 ConfigMap

metadata:                       # 元数据部分,包含资源的基本信息

  name: app-config              # ConfigMap 的名称,在命名空间内唯一

  namespace: my-app-namespace   # 所属命名空间,指定此资源属于哪个命名空间

  labels:                       # 标签,用于对资源进行分类和筛选

    app: my-app                 # 应用标签,标识此配置属于哪个应用

data:                           # 配置数据部分,存储键值对形式的配置信息

  # 键值对形式的简单配置项

  app.environment: "production" # 应用运行环境配置,此处为生产环境

  log.level: "info"             # 日志级别配置,此处为 info 级别

  

  # 完整配置文件内容,使用 | 保留换行符

  app.properties: |             # 应用主配置文件内容

    server.port=8080            # 应用服务端口

    database.host=db-service    # 数据库服务地址(对应Service名称)

    database.port=5432          # 数据库服务端口

    cache.enabled=true          # 是否启用缓存

    timeout.seconds=30          # 超时设置,单位为秒

Secret(密钥)





Secret 用于存储敏感信息,如密码、令牌或密钥,与 ConfigMap 类似但用于敏感数据。

apiVersion: v1                  # API 版本,Secret 资源使用 v1 版本

kind: Secret                    # 资源类型,此处指定为 Secret

metadata:                       # 元数据部分,包含资源的基本信息

  name: app-secrets             # Secret 的名称,在命名空间内唯一

  namespace: my-app-namespace   # 所属命名空间,指定此资源属于哪个命名空间

  labels:                       # 标签,用于对资源进行分类和筛选

    app: my-app                 # 应用标签,标识此密钥属于哪个应用

type: Opaque                    # Secret 类型,Opaque 表示存储任意字符串

data:                           # 数据部分,所有值必须是 base64 编码的字符串

  # 注意:实际使用时需要将明文转换为 base64 编码

  db.username: YWRtaW4=         # 数据库用户名,base64 编码的 "admin"

  db.password: cGFzc3dvcmQxMjM= # 数据库密码,base64 编码的 "password123"

stringData:                     # 字符串数据,会自动被编码为 base64

  # 无需手动进行base64编码,Kubernetes会自动处理

  api.token: "my-super-secret-token"  # API 访问令牌,敏感信息

  ssh.private-key: |            # SSH私钥,多行文本

    -----BEGIN RSA PRIVATE KEY-----

    MIIEpAIBAAKCAQEAv6...

    -----END RSA PRIVATE KEY-----



Pod(容器组)
Pod 是 Kubernetes 最小的部署单元,包含一个或多个容器。

apiVersion: v1                  # API 版本,Pod 资源使用 v1 版本

kind: Pod                       # 资源类型,此处指定为 Pod

metadata:                       # 元数据部分,包含资源的基本信息

  name: my-app-pod              # Pod 的名称,在命名空间内必须唯一

  namespace: my-app-namespace   # 所属命名空间,指定此资源属于哪个命名空间

  labels:                       # 标签,用于对资源进行分类和筛选

    app: my-app                 # 应用标签,标识此Pod属于哪个应用

    tier: frontend              # 层级标签,表示这是前端服务

spec:                           # 规格部分,定义 Pod 的运行规格和行为

  containers:                   # 容器列表,一个Pod可以包含多个容器

  - name: app-container         # 容器名称,在Pod内必须唯一

    image: my-app-image:1.0.0   # 容器使用的镜像及版本标签

    imagePullPolicy: IfNotPresent  # 镜像拉取策略:本地不存在时拉取

    ports:                      # 容器端口配置,声明容器监听的端口

    - containerPort: 8080       # 容器内应用实际监听的端口号

      name: http                # 端口名称,便于识别和引用

      protocol: TCP             # 协议类型,TCP或UDP

    resources:                  # 资源需求和限制配置

      requests:                 # 资源请求,调度时用于节点选择

        cpu: "100m"             # CPU 请求,100m 即 0.1 核

        memory: "128Mi"         # 内存请求,128兆字节

      limits:                   # 资源限制,防止容器过度使用资源

        cpu: "500m"             # CPU 上限,0.5核

        memory: "256Mi"         # 内存上限,256兆字节

    env:                        # 环境变量配置,注入到容器中

    - name: APP_ENV             # 环境变量名称

      valueFrom:                # 从其他资源获取环境变量值

        configMapKeyRef:        # 从 ConfigMap 获取值

          name: app-config      # 引用的 ConfigMap 名称

          key: app.environment # 引用的 ConfigMap 中的键

    - name: DB_USERNAME         # 数据库用户名环境变量

      valueFrom:

        secretKeyRef:           # 从 Secret 获取值

          name: app-secrets     # 引用的 Secret 名称

          key: db.username      # 引用的 Secret 中的键

    volumeMounts:               # 卷挂载配置,将卷挂载到容器内路径

    - name: config-volume       # 卷名称,需与下面的 volumes 配置对应

      mountPath: /app/config    # 容器内的挂载路径

      readOnly: true            # 只读权限,防止容器修改配置

    livenessProbe:              # 存活探针,用于检测容器是否正常运行

      httpGet:                  # 使用 HTTP 请求进行健康检查

        path: /health           # 健康检查的HTTP路径

        port: 8080              # 健康检查的端口

      initialDelaySeconds: 30   # 容器启动后延迟多久开始第一次检查

      periodSeconds: 10         # 检查间隔时间,单位秒

    readinessProbe:             # 就绪探针,检查容器是否可以接收请求

      httpGet:

        path: /ready            # 就绪检查的HTTP路径

        port: 8080              # 就绪检查的端口

      initialDelaySeconds: 5    # 启动后延迟5秒开始检查

      periodSeconds: 5          # 检查间隔时间,单位秒

  volumes:                      # 卷定义,供容器挂载使用

  - name: config-volume         # 卷名称,与上面的 volumeMounts 对应

    configMap:                  # 使用 ConfigMap 作为卷的数据源

      name: app-config          # 引用的 ConfigMap 名称

  restartPolicy: Always         # 重启策略:总是重启容器



Deployment(部署)
Deployment 用于管理 Pod 和 ReplicaSet,提供声明式更新能力。

apiVersion: apps/v1             # API 版本,Deployment 资源使用 apps/v1 版本

kind: Deployment                # 资源类型,此处指定为 Deployment

metadata:                       # 元数据部分,包含资源的基本信息

  name: my-app-deployment       # Deployment 的名称,在命名空间内必须唯一

  namespace: my-app-namespace   # 所属命名空间,指定此资源属于哪个命名空间

  labels:                       # 标签,用于对资源进行分类和筛选

    app: my-app                 # 应用标签,标识此Deployment属于哪个应用

spec:                           # 规格部分,定义 Deployment 的运行规格

  replicas: 3                   # 期望的 Pod 副本数,指定运行多少个相同的Pod

  selector:                     # 选择器,用于确定 Deployment 管理哪些 Pod

    matchLabels:                # 通过标签匹配 Pod

      app: my-app               # 匹配具有 app=my-app 标签的 Pod

      tier: frontend            # 匹配具有 tier=frontend 标签的 Pod

  strategy:                     # 更新策略,定义如何更新Pod

    type: RollingUpdate         # 滚动更新策略:逐步替换旧Pod

    rollingUpdate:              # 滚动更新的具体配置

      maxSurge: 1               # 最多可以超出期望副本数的数量

      maxUnavailable: 1         # 更新过程中最多不可用的副本数

  minReadySeconds: 5            # 新创建的 Pod 至少运行多久才被视为可用

  template:                     # Pod 模板,用于创建新的 Pod

    metadata:                   # Pod 的元数据

      labels:                   # Pod 的标签,需与上面的 selector 匹配

        app: my-app

        tier: frontend

    spec:                       # Pod 的规格

      containers:

      - name: app-container     # 容器名称,在Pod内必须唯一

        image: my-app-image:1.0.0  # 容器使用的镜像及版本标签

        imagePullPolicy: IfNotPresent  # 镜像拉取策略:本地不存在时拉取

        ports:                  # 容器端口配置

        - containerPort: 8080   # 容器内应用实际监听的端口号

          name: http            # 端口名称

          protocol: TCP         # 协议类型

        resources:              # 资源需求和限制配置

          requests:             # 资源请求

            cpu: "100m"         # CPU 请求,100m 即 0.1 核

            memory: "128Mi"     # 内存请求

          limits:               # 资源限制

            cpu: "500m"         # CPU 上限

            memory: "256Mi"     # 内存上限

        env:                    # 环境变量配置

        - name: APP_ENV         # 环境变量名称

          valueFrom:            # 从其他资源获取值

            configMapKeyRef:    # 从 ConfigMap 获取

              name: app-config  # 引用的 ConfigMap 名称

              key: app.environment # 引用的键

        - name: DB_USERNAME     # 数据库用户名环境变量

          valueFrom:

            secretKeyRef:       # 从 Secret 获取

              name: app-secrets # 引用的 Secret 名称

              key: db.username  # 引用的键

        volumeMounts:           # 卷挂载配置

        - name: config-volume   # 卷名称,与下面的 volumes 对应

          mountPath: /app/config  # 容器内的挂载路径

          readOnly: true        # 只读权限

        livenessProbe:          # 存活探针

          httpGet:              # 使用 HTTP 请求检查

            path: /health       # 健康检查路径

            port: 8080          # 健康检查端口

          initialDelaySeconds: 30  # 启动后延迟检查时间

          periodSeconds: 10     # 检查间隔时间

        readinessProbe:         # 就绪探针

          httpGet:

            path: /ready        # 就绪检查路径

            port: 8080          # 就绪检查端口

          initialDelaySeconds: 5  # 启动后延迟检查时间

          periodSeconds: 5      # 检查间隔时间

      volumes:                  # 卷定义

      - name: config-volume     # 卷名称,与上面的 volumeMounts 对应

        configMap:              # 使用 ConfigMap 作为卷

          name: app-config      # 引用的 ConfigMap 名称


Service(服务)
Service 为 Pod 提供稳定的网络访问点,即使 Pod 发生变化也能保持访问的一致性。

apiVersion: v1                  # API 版本,Service 资源使用 v1 版本

kind: Service                   # 资源类型,此处指定为 Service

metadata:                       # 元数据部分,包含资源的基本信息

  name: my-app-service          # Service 的名称,在命名空间内必须唯一

  namespace: my-app-namespace   # 所属命名空间,指定此资源属于哪个命名空间

  labels:                       # 标签,用于对资源进行分类和筛选

    app: my-app                 # 应用标签,标识此Service属于哪个应用

spec:                           # 规格部分,定义 Service 的运行规格

  selector:                     # 选择器,用于匹配要暴露的 Pod

    app: my-app                 # 匹配具有此标签的 Pod

    tier: frontend              # 匹配具有此标签的 Pod

  ports:                        # 端口配置,定义服务的端口映射

  - name: http                  # 端口名称,便于识别

    port: 80                    # Service 暴露的端口,集群内可访问

    targetPort: 8080            # 目标 Pod 上的端口,与容器监听端口一致

    protocol: TCP               # 协议类型,TCP或UDP

  type: ClusterIP               # Service 类型:仅集群内部可访问



Ingress(入口)
Ingress 管理外部访问到集群服务的规则,通常用于 HTTP/HTTPS 流量路由。

apiVersion: networking.k8s.io/v1  # API 版本,Ingress 使用 networking.k8s.io/v1

kind: Ingress                     # 资源类型,此处指定为 Ingress

metadata:                         # 元数据部分,包含资源的基本信息

  name: my-app-ingress            # Ingress 名称,在命名空间内必须唯一

  namespace: my-app-namespace     # 所属命名空间,指定此资源属于哪个命名空间

  labels:                         # 标签,用于对资源进行分类和筛选

    app: my-app                   # 应用标签,标识此Ingress属于哪个应用

  annotations:                    # 注解,用于配置 Ingress Controller

    nginx.ingress.kubernetes.io/rewrite-target: /  # 重写目标路径

    nginx.ingress.kubernetes.io/ssl-redirect: "true"  # 强制HTTPS重定向

spec:                             # 规格部分,定义 Ingress 的规则

  ingressClassName: nginx         # Ingress 类,指定使用的控制器类型

  rules:                          # 路由规则列表

  - host: example.com             # 主机名,匹配此域名的请求

    http:                         # HTTP 规则配置

      paths:                      # 路径规则列表

      - path: /                   # 匹配的URL路径

        pathType: Prefix          # 路径匹配类型:前缀匹配

        backend:                  # 后端服务配置

          service:                # 服务配置

            name: my-app-service  # 关联的 Service 名称

            port:                 # 服务端口配置

              number: 80          # 端口号,与Service中定义的port一致

  - host: api.example.com         # 另一个主机名的路由规则

    http:

      paths:

      - path: /api                # 匹配以/api开头的路径

        pathType: Prefix

        backend:

          service:

            name: my-app-service

            port:

              number: 80

  tls:                            # TLS 配置,用于HTTPS

  - hosts:                        # 适用的主机名列表

    - example.com

    - api.example.com

    secretName: app-tls-secret    # 存储TLS证书和私钥的Secret名称



Job(任务)
Job 用于管理一次性任务,确保指定数量的 Pod 成功完成任务后终止。

apiVersion: batch/v1            # API 版本,Job 使用 batch/v1 版本

kind: Job                        # 资源类型,此处指定为 Job

metadata:                        # 元数据部分,包含资源的基本信息

  name: data-processing-job      # Job 名称,在命名空间内必须唯一

  namespace: my-app-namespace    # 所属命名空间,指定此资源属于哪个命名空间

  labels:                        # 标签,用于对资源进行分类和筛选

    app: data-processor          # 应用标签,标识此Job属于哪个应用

    type: batch                  # 类型标签,表示这是批处理任务

spec:                            # 规格部分,定义 Job 的运行规格

  completions: 1                 # 需要成功完成的 Pod 数量

  parallelism: 1                 # 并行运行的 Pod 数量

  backoffLimit: 4                # 重试次数上限,超过则视为任务失败

  activeDeadlineSeconds: 3600    # 任务超时时间(秒),超过则终止所有相关Pod

  template:                      # Pod 模板,定义要运行的Pod

    metadata:

      labels:

        app: data-processor

        type: batch

    spec:

      containers:

      - name: data-processor     # 容器名称

        image: data-processor:1.0 # 处理数据的镜像

        command: ["/app/process", "--input", "data.csv", "--output", "result.csv"]  # 执行命令

        resources:

          requests:

            cpu: "200m"          # CPU 请求,200m 即 0.2 核

            memory: "256Mi"      # 内存请求,256兆字节

          limits:

            cpu: "500m"          # CPU 上限,0.5核

            memory: "512Mi"      # 内存上限,512兆字节

        volumeMounts:

        - name: data-volume      # 挂载数据卷的名称

          mountPath: /data       # 容器内的挂载路径

      volumes:

      - name: data-volume        # 卷名称,与上面的 volumeMounts 对应

        persistentVolumeClaim:

          claimName: data-pvc    # 引用PVC获取存储

      restartPolicy: Never       # 重启策略:不重启(失败后Job重建新Pod)



CronJob(定时任务)
CronJob 基于时间调度创建 Job,类似 Linux 的 crontab,用于周期性执行任务。

apiVersion: batch/v1            # API 版本,CronJob 使用 batch/v1 版本

kind: CronJob                    # 资源类型,此处指定为 CronJob

metadata:                        # 元数据部分,包含资源的基本信息

  name: backup-cronjob           # CronJob 名称,在命名空间内必须唯一

  namespace: my-app-namespace    # 所属命名空间,指定此资源属于哪个命名空间

  labels:                        # 标签,用于对资源进行分类和筛选

    app: backup-service          # 应用标签,标识此CronJob属于哪个应用

    type: scheduled              # 类型标签,表示这是定时任务

spec:                            # 规格部分,定义 CronJob 的运行规格

  schedule: "0 3 * * *"          # 调度时间,UTC时区,格式与crontab相同,此处表示每天凌晨3点

  timeZone: "UTC"                # 时区设置,默认为UTC

  concurrencyPolicy: Forbid      # 并发策略:禁止并发运行

  startingDeadlineSeconds: 180   # 启动截止时间,超过则视为本次执行失败

  suspend: false                 # 是否暂停任务,true表示暂停所有后续执行

  successfulJobsHistoryLimit: 3  # 保留成功任务历史记录的数量

  failedJobsHistoryLimit: 1      # 保留失败任务历史记录的数量

  jobTemplate:                   # Job 模板,定义要创建的 Job

    spec:

      completions: 1             # 需要成功完成的Pod数量

      parallelism: 1             # 并行运行的Pod数量

      backoffLimit: 2            # 重试次数上限

      template:

        spec:

          containers:

          - name: backup-container  # 容器名称

            image: backup-tool:2.1  # 备份工具镜像

            command: ["/scripts/backup.sh", "--target", "db"]  # 备份命令

            env:

            - name: BACKUP_DIR      # 备份目录环境变量

              value: "/backups"     # 备份目录值

            volumeMounts:

            - name: backup-storage  # 卷名称

              mountPath: /backups   # 容器内挂载路径

          volumes:

          - name: backup-storage    # 卷名称,与上面的 volumeMounts 对应

            persistentVolumeClaim:

              claimName: backup-pvc # 引用的PVC名称

          restartPolicy: OnFailure  # 重启策略:失败时重启容器



DaemonSet(守护进程集)
DaemonSet 确保所有(或指定)节点上都运行一个相同的 Pod 副本,常用于日志收集、监控代理等。

apiVersion: apps/v1             # API 版本,DaemonSet 使用 apps/v1 版本

kind: DaemonSet                  # 资源类型,此处指定为 DaemonSet

metadata:                        # 元数据部分,包含资源的基本信息

  name: log-collector-daemonset  # DaemonSet 名称,在命名空间内必须唯一

  namespace: my-app-namespace    # 所属命名空间,指定此资源属于哪个命名空间

  labels:                        # 标签,用于对资源进行分类和筛选

    app: log-collector           # 应用标签,标识此DaemonSet属于哪个应用

    component: monitoring        # 组件标签,表示这是监控组件

spec:                            # 规格部分,定义 DaemonSet 的运行规格

  selector:                      # 选择器,匹配要管理的 Pod

    matchLabels:

      app: log-collector

  updateStrategy:                # 更新策略,定义如何更新DaemonSet

    type: RollingUpdate          # 滚动更新

    rollingUpdate:

      maxUnavailable: 1          # 更新过程中最多不可用的Pod数量

  template:                      # Pod 模板,定义要在每个节点上运行的Pod

    metadata:

      labels:

        app: log-collector

        component: monitoring

    spec:

      hostNetwork: false         # 是否使用主机网络命名空间

      hostPID: false             # 是否共享主机的PID命名空间

      tolerations:               # 容忍度,允许在有污点的节点上运行

      - key: node-role.kubernetes.io/master

        effect: NoSchedule       # 容忍主节点的NoSchedule污点

      containers:

      - name: log-collector      # 容器名称

        image: log-collector:1.5.2  # 日志收集器镜像

        resources:

          requests:

            cpu: "50m"           # CPU 请求,50m 即 0.05 核

            memory: "64Mi"       # 内存请求,64兆字节

          limits:

            cpu: "100m"          # CPU 上限,0.1核

            memory: "128Mi"      # 内存上限,128兆字节

        volumeMounts:

        - name: varlog           # 卷名称,挂载主机日志目录

          mountPath: /var/log    # 容器内挂载路径

          readOnly: true         # 只读模式,防止修改主机日志

        - name: podlogs          # 卷名称,挂载Pod日志目录

          mountPath: /var/log/pods  # 容器内挂载路径

          readOnly: true         # 只读模式

      volumes:

      - name: varlog             # 卷名称,与上面的 volumeMounts 对应

        hostPath:                # 主机路径卷,访问节点文件系统

          path: /var/log         # 主机上的路径

      - name: podlogs            # 卷名称,与上面的 volumeMounts 对应

        hostPath:                # 主机路径卷

          path: /var/log/pods    # 主机上的路径


PersistentVolume(持久卷)
PersistentVolume (PV) 是集群级别的存储资源,由管理员配置,与 Namespace 无关。

apiVersion: v1                  # API 版本,PV 使用 v1 版本

kind: PersistentVolume           # 资源类型,此处指定为 PersistentVolume

metadata:                        # 元数据部分,包含资源的基本信息

  name: app-data-pv              # PV 名称,在集群中必须唯一

  labels:                        # 标签,用于对资源进行分类和筛选

    type: local                  # 类型标签,表示本地存储

    storage: ssd                 # 存储类型标签,标识为SSD存储

spec:                            # 规格部分,定义 PV 的存储规格

  capacity:                      # 存储容量配置

    storage: 10Gi                # 10GB 存储空间

  accessModes:                   # 访问模式,定义PV可以被如何访问

  - ReadWriteOnce                # 只能被单个节点以读写方式挂载

  # ReadWriteOnceMany			 # 读写多次,可以被多个Pod挂载使用,进行读写操作

  # ReadOnlyMany				 # 只读

  persistentVolumeReclaimPolicy: Retain  # 回收策略:保留数据(手动处理)

  storageClassName: standard     # 存储类名称,用于匹配PVC

  local:                         # 本地存储配置,支持local、hoatPath、nfs、iscsi

    path: /data/k8s/pv1          # 节点上的本地路径

  nodeAffinity:                  # 节点亲和性,指定哪些节点可以使用此PV

    required:

      nodeSelectorTerms:

      - matchExpressions:

        - key: kubernetes.io/hostname  # 匹配节点主机名

          operator: In                 # 操作符:在列表中

          values:

          - worker-node-1              # 允许在worker-node-1上使用

          - worker-node-2              # 允许在worker-node-2上使用



PersistentVolumeClaim(持久卷声明)
persistentVolumeClaim (PVC) 是用户对存储资源的请求,用于获取 PV 提供的存储。

apiVersion: v1                  # API 版本,PVC 使用 v1 版本

kind: PersistentVolumeClaim      # 资源类型,此处指定为 PersistentVolumeClaim

metadata:                        # 元数据部分,包含资源的基本信息

  name: app-data-pvc             # PVC 名称,在命名空间内必须唯一

  namespace: my-app-namespace    # 所属命名空间,指定此资源属于哪个命名空间

  labels:                        # 标签,用于对资源进行分类和筛选

    app: my-app                  # 应用标签,标识此PVC属于哪个应用

spec:                            # 规格部分,定义 PVC 的存储请求

  accessModes:                   # 访问模式,需与PV匹配才能绑定

  - ReadWriteOnce                # 与PV的访问模式一致

  resources:                     # 资源请求配置

    requests:

      storage: 5Gi               # 请求5GB存储空间(不能超过PV的容量)

  storageClassName: standard     # 存储类,需与PV的storageClassName匹配

  selector:                      # 选择器,用于匹配特定的PV

    matchLabels:

      storage: ssd               # 匹配具有此标签的PV

  # 当storageClassName为""时,会绑定到没有存储类的PV

  # 当设置storageClassName,会绑定到相同存储类的PV


StatefulSet(有状态集)
StatefulSet 用于管理有状态应用,为 Pod 提供稳定的名称、网络标识和持久存储。

apiVersion: apps/v1             # API版本,StatefulSet使用apps/v1

kind: StatefulSet                # 资源类型:StatefulSet(有状态应用管理)

metadata:                        # 元数据,包含资源标识信息

  name: database-statefulset     # 名称,命名空间内唯一

  namespace: my-app-namespace    # 所属命名空间,实现资源隔离

  labels:                        # 标签,用于分类和关联

    app: database                # 应用标签:数据库

    tier: backend                # 层级标签:后端服务

spec:                            # 规格,定义期望运行状态

  serviceName: "db-service"      # 关联的Headless Service,提供固定网络标识

  replicas: 3                    # 期望副本数:3个(适合主从/集群)

  selector:                      # 选择器,确定管理的Pod范围

    matchLabels:                 # 通过标签匹配Pod

      app: database              # 匹配app=database的Pod

  updateStrategy:                # 更新策略配置

    type: RollingUpdate          # 更新类型:滚动更新(平滑替换)

    rollingUpdate:               # 滚动更新参数

      partition: 0               # 分区阈值:0表示更新所有副本

  template:                      # Pod模板,定义Pod创建标准

    metadata:                    # Pod的元数据

      labels:                    # Pod标签(需与selector匹配)

        app: database            # 匹配StatefulSet选择器的标签

        tier: backend            # 层级标签:后端服务

    spec:                        # Pod规格,定义容器运行规则

      containers:                # 容器列表

      - name: database           # 容器名称,Pod内唯一

        image: postgres:14       # 使用的镜像:PostgreSQL 14

        ports:                   # 容器端口配置

        - containerPort: 5432    # 容器监听端口(PostgreSQL默认)

          name: db-port          # 端口名称,便于引用

          protocol: TCP          # 协议类型:TCP

        env:                     # 环境变量配置

        - name: POSTGRES_DB      # 环境变量名:数据库名称

          valueFrom:             # 从其他资源取值

            configMapKeyRef:     # 引用ConfigMap(非敏感配置)

              name: db-config    # 目标ConfigMap名称

              key: db.name       # 目标键

        - name: POSTGRES_USER    # 环境变量名:数据库用户名

          valueFrom:             # 从其他资源取值

            secretKeyRef:        # 引用Secret(敏感配置)

              name: db-secrets   # 目标Secret名称

              key: username      # 目标键

        - name: POSTGRES_PASSWORD  # 环境变量名:数据库密码

          valueFrom:             # 从其他资源取值

            secretKeyRef:        # 引用Secret

              name: db-secrets   # 目标Secret名称

              key: password      # 目标键

        volumeMounts:            # 卷挂载配置

        - name: data-volume      # 卷名称(与PVC模板对应)

          mountPath: /var/lib/postgresql/data  # 容器内挂载路径(数据存储目录)

          subPath: postgres      # 子路径,避免覆盖容器默认文件

        livenessProbe:           # 存活探针(检测容器是否正常运行)

          exec:                  # 探针类型:执行命令检查

            command: ["pg_isready", "-U", "postgres"]  # 检查命令

          initialDelaySeconds: 30  # 启动后延迟检查时间(秒)

          periodSeconds: 10     # 检查间隔时间(秒)

        readinessProbe:          # 就绪探针(检测是否可接收请求)

          exec:                  # 探针类型:执行命令检查

            command: ["pg_isready", "-U", "postgres"]  # 检查命令

          initialDelaySeconds: 5  # 启动后延迟检查时间(秒)

          periodSeconds: 5      # 检查间隔时间(秒)

      affinity:                  # 亲和性配置(控制Pod调度)

        podAntiAffinity:         # Pod反亲和性(避免同应用共节点)

          preferredDuringSchedulingIgnoredDuringExecution:  # 优先调度策略

          - weight: 100          # 调度权重(0-100,越高优先级越高)

            podAffinityTerm:     # 反亲和性匹配条件

              labelSelector:     # 筛选需规避的Pod标签

                matchExpressions:  # 标签匹配规则

                - key: app       # 匹配的标签键

                  operator: In   # 匹配操作符:在列表中

                  values: [database]  # 规避app=database的Pod

              topologyKey: "kubernetes.io/hostname"  # 按节点主机名区分

  volumeClaimTemplates:          # PVC模板,为每个Pod创建独立存储

  - metadata:

      name: data-volume          # PVC名称(与volumeMounts对应)

    spec:

      accessModes: [ "ReadWriteOnce" ]  # 访问模式:单节点读写

      storageClassName: "standard"      # 存储类,匹配集群存储

      resources:                 # 声明资源需求的总配置项

        requests:                # 声明最小需要的存储资源量

          storage: 10Gi          # 每个Pod请求10GB存储

  podManagementPolicy: OrderedReady  # Pod管理策略:有序创建/更新(默认)

  # podManagementPolicy: Parallel  # 可选:并行创建/更新所有Pod