yaml学习
yaml基础元素
| apiVersion | 指定api版本标签 |
| kind | 定义资源的类型/角色;资源类型可以是Deployment、Job、Ingress、Service等 |
| metadata | 定义资源的元数据信息 |
| -name | 资源名称 |
| -labels | 资源标签 |
| -namespace | 资源命名空间 |
| spec | 定义资源需要的参数属性 |
| -containers | 容器属性 |
| -env | 环境变量 |
| -name | 变量名称 |
| -value | 变量值 |
| -image | 镜像地址 |
| -imagePullPolicy | 镜像拉取策略 |
| -lifecycle | 生命周期管理 |
| -livenessProbe | 健康检查设置 |
| -name | 容器名称 |
| -ports | 容器端口列表 |
| -name | 端口名称 |
| -containerPort | 容器开放对外的端口 |
| -protocol | 端口协议 |
yaml例子详解
通过下面这个测试yaml文件,理清yaml各对象中属性的含义
apiVersion: apps/v1 # 必选,指定Kubernetes API版本,apps/v1是StatefulSet的稳定版本
kind: StatefulSet # 必选,指定创建的资源类型为StatefulSet(有状态应用控制器)
metadata: # 必选,资源的元数据信息(描述资源的属性)
annotations: # 可选,自定义注解(键值对),用于附加额外信息(如工具配置)
sidecar.istio.io/inject: 'true' # 示例:指示Istio服务网格是否注入sidecar代理(此处为启用)
labels: # 可选,自定义标签(键值对),用于标识和筛选资源
app: wooring-test # 标签:应用名称为wooring-test
k8s.kuboard.cn/name: wooring-test # 标签:Kuboard管理工具的资源名称标识
name: wooring-test-test # 必选,资源的唯一名称(在命名空间内唯一)
namespace: wooring-test # 可选,资源所属的命名空间(默认是default,此处指定为wooring-test)
resourceVersion: '522274827' # 由K8s自动生成,资源的版本号,每次更新会递增(用于冲突检测)
spec: # 必选,资源的规格定义(描述资源的期望状态)
podManagementPolicy: OrderedReady # StatefulSet管理Pod的策略:OrderedReady表示按顺序创建/更新Pod(前一个就绪后再处理下一个);可选Parallel(并行处理)
replicas: 1 # 必选,期望的Pod副本数量(此处为1个)
revisionHistoryLimit: 10 # 可选,保留的历史版本数量(用于回滚),超过10个旧版本会被清理
selector: # 必选,标签选择器,用于匹配要管理的Pod(需与template.metadata.labels对应)
matchLabels: # 匹配的标签键值对
app: wooring-test # 匹配标签app=wooring-test的Pod
env: prod # 匹配标签env=prod的Pod
serviceName: '' # 可选,指定关联的Headless Service名称(StatefulSet为Pod提供稳定网络标识时需配置,此处为空表示暂不关联)
template: # 必选,Pod模板,定义StatefulSet创建的Pod的规格
metadata: # 必选,Pod的元数据(同上面的metadata结构,描述Pod的属性)
annotations: # 可选,Pod级别的自定义注解
kubectl.kubernetes.io/restartedAt: '2024-10-28T14:37:30+08:00' # 示例:记录kubectl重启Pod的时间
sidecar.istio.io/inject: 'false' # 示例:Pod级别的Istio sidecar注入配置(此处为禁用,覆盖metadata.annotations的全局配置)
creationTimestamp: null # 由K8s自动生成,Pod创建时间(模板中无需手动设置,为null)
labels: # 必选,Pod的标签(需被上面的selector.matchLabels匹配)
app: cpaas-forwarder # 标签:Pod所属应用为cpaas-forwarder
env: prod # 标签:环境为生产环境(prod)
spec: # 必选,Pod的规格定义(描述Pod的运行状态)
containers: # 必选,容器列表(Pod中至少有一个容器)
- env: # 可选,容器的环境变量列表(键值对或引用外部配置)
- name: TZ # 环境变量名:时区
value: Asia/Shanghai # 取值:亚洲/上海时区
- name: PROFILES_ACTIVE # 环境变量名:激活的配置文件
value: dev # 取值:开发环境(dev)配置
- name: NACOS_SERVER # 环境变量名:Nacos服务地址
valueFrom: # 从外部资源获取值(而非硬编码)
configMapKeyRef: # 引用ConfigMap中的键
key: NACOS_SERVER # 引用ConfigMap中键为NACOS_SERVER的值
name: cpaas-nacos # 引用的ConfigMap名称为cpaas-nacos
- name: NACOS_GROUP # 环境变量名:Nacos配置分组
value: DEFAULT_GROUP # 取值:默认分组
- name: JAVA_TOOL_OPTIONS # 环境变量名:Java工具参数
value: >- # 取值:Java虚拟机参数(内存、日志、代理等配置)
-Xmx2g -Xms2g -javaagent:/wooring.cn/agent/test.jar
-XX:+HeapDumpOnOutOfMemoryError -XX:MaxMetaspaceSize=256m
-XX:+UseG1GC -verbose:gc -XX:+PrintGCDetails
-XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime
-XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m
-Xloggc:./logs/gc.%p.log
image: 'wooring.cn/test/test:v1.7.3.2-b7831669c6a' # 必选,容器使用的镜像地址(仓库+镜像名+标签)
imagePullPolicy: Always # 镜像拉取策略:Always表示每次启动Pod都拉取最新镜像;可选IfNotPresent(本地有则不拉)、Never(只使用本地镜像)
lifecycle: # 可选,容器的生命周期钩子(在特定阶段执行命令)
postStart: # 容器启动后执行的操作
exec: # 执行命令
command:
- /bin/sh
- '-c'
- 'export INDEX=${HOSTNAME##*-}' # 示例:从Pod主机名中提取索引(StatefulSet的Pod主机名格式为{name}-{序号})
livenessProbe: # 可选,存活探针(检测容器是否运行正常,失败会重启容器)
failureThreshold: 5 # 探测失败5次后判定为容器不健康
httpGet: # 通过HTTP请求检测健康状态
path: /actuator/health # 检测的URL路径(示例:Spring Boot的健康检查端点)
port: 8090 # 检测的容器端口
scheme: HTTP # 协议(HTTP/HTTPS)
initialDelaySeconds: 60 # 容器启动后,首次探测的延迟时间(60秒后开始检测)
periodSeconds: 60 # 探测间隔时间(每60秒检测一次)
successThreshold: 1 # 连续1次探测成功即判定为健康
timeoutSeconds: 30 # 探测超时时间(30秒内无响应则判定失败)
name: cpaas-forwarder # 必选,容器的名称(在Pod内唯一)
ports: # 可选,容器需要暴露的端口列表
- containerPort: 8098 # 容器内的端口号
name: rpc-port # 端口名称(用于标识,如服务发现)
protocol: TCP # 端口协议(TCP/UDP)
- containerPort: 8090
name: health-port # 标识为健康检查端口
protocol: TCP
resources: # 可选,容器的资源限制与请求(控制资源分配)
limits: # 资源上限(容器最多能使用的资源)
cpu: '3' # CPU限制为3核
memory: 3096Mi # 内存限制为3096MiB(约3GB)
requests: # 资源请求(容器启动时至少需要的资源,调度时参考)
cpu: 100m # 请求100毫核(0.1核)CPU
memory: 3096Mi # 请求3096MiB内存
startupProbe: # 可选,启动探针(检测容器是否启动完成,失败会重启容器)
failureThreshold: 12 # 最多允许12次探测失败(超过则判定启动失败)
httpGet: # 通过HTTP请求检测启动状态
path: /actuator/health # 检测路径(同存活探针,可自定义)
port: 8090 # 检测端口
scheme: HTTP
initialDelaySeconds: 30 # 容器启动30秒后开始首次探测
periodSeconds: 10 # 每10秒探测一次
successThreshold: 1 # 1次成功即判定启动完成
timeoutSeconds: 10 # 超时时间10秒
terminationMessagePath: /dev/termination-log # 容器终止时输出日志的路径(默认值)
terminationMessagePolicy: File # 终止日志的获取策略:File表示从上述路径读取;可选FallbackToLogsOnError(日志中获取)
volumeMounts: # 可选,容器的存储卷挂载配置(将外部存储挂载到容器内)
- mountPath: /home/cpaas/logs # 容器内的挂载路径(日志存储目录)
name: cpaas-forwarder-log # 引用的存储卷名称(需与spec.volumes中的名称对应)
- mountPath: /etc/localtime # 挂载主机的时区配置文件
name: date-config # 引用的存储卷名称
volumes: # 可选,Pod的存储卷列表(供容器挂载使用)
- name: cpaas-forwarder-log # 存储卷名称(与volumeMounts.name对应)
persistentVolumeClaim: # 引用PersistentVolumeClaim(持久化存储声明)
claimName: cpaas-forwarder-log # 引用的PVC名称(需提前创建)
- name: date-config # 存储卷名称
hostPath: # 挂载主机的文件/目录
path: /etc/localtime # 主机上的时区配置文件路径
type: File # 挂载类型为文件