Files
kenaito-k8sfiles/statefulset/v20240713/statefulset.yaml
T

131 lines
5.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
appName: ${AppName}
resEnv: ${AppEnv}
resGroup: ${AppName}-${AppEnv}
name: devops-sts-${AppName}-${AppEnv}
namespace: ${AppName}
spec:
# Pod 的管理策略, OrderedReady(有序启动,默认值),Parallel(并发一起启动)
podManagementPolicy: Parallel
# 副本数量
replicas: ${Replicas}
# 表示要保留以允许回滚的旧ReplicaSet的数量。默认是10个。如果值为0,表示不保存旧版本
revisionHistoryLimit: ${RevisionHistoryLimit}
# 选择器用于标识将受StatefulSet控制的Pod
selector:
matchLabels:
appName: ${AppName}
resEnv: ${AppEnv}
resGroup: ${AppName}-${AppEnv}
# 用于创建一个Headless服务,这个服务将提供每个Pod的稳定网络标识符
serviceName: devops-hls-${AppName}-${AppEnv}
# 描述StatefulSet创建Pod的模板
template:
metadata:
# Pod标签,用于匹配选择器
labels:
appName: ${AppName}
resEnv: ${AppEnv}
resGroup: ${AppName}-${AppEnv}
spec:
affinity:
# Pod 亲和性,调度目标:Pod与指定Pod不在同一拓扑域
podAntiAffinity:
# 软策略
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
# In:label 的值在某个列表中
# NotIn:label 的值不在某个列表中
# Gt:label 的值大于某个值
# Lt:label 的值小于某个值
# Exists:某个 label 存在
# DoesNotExist:某个 label 不存在
matchExpressions:
- key: resGroup
operator: In
values:
- ${AppName}-${AppEnv}
topologyKey: failure-domain.beta.kubernetes.io/zone
weight: 50 # 如果有多个软策略选项的话,权重越大,优先级越高
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: resGroup
operator: In
values:
- ${AppName}-${AppEnv}
topologyKey: kubernetes.io/hostname
weight: 60 # 如果有多个软策略选项的话,权重越大,优先级越高
# Pod中的容器列表
containers:
- name: devops-pod-${AppName}-${AppEnv} # 容器名称
image: ${AppImage} #容器镜像
imagePullPolicy: IfNotPresent
# 容器生命周期
lifecycle:
# 容器停止前, 执行命令
preStop:
exec:
command:
- /bin/sh
- -c
- echo 'Hello World'
# 存活探针:指示容器是否正在运行。如果活动探针失败,则kubelet将杀死Container,并且Container将接受其重新启动策略。如果容器未提供活动性探针,则默认状态为Success
livenessProbe:
tcpSocket:
port: 22
initialDelaySeconds: 10
failureThreshold: 3
periodSeconds: 15
successThreshold: 1
timeoutSeconds: 5
# 就绪探针:指示容器是否准备好服务请求。如果就绪探针失败,则端点控制器将从与Pod匹配的所有服务的端点中删除Pod的IP地址。初始延迟之前的默认就绪状态为Failure。如果容器未提供就绪探测器,则默认状态为Success
readinessProbe:
httpGet:
path: /healthCheck # 无需鉴权的健康检查API接口
port: 8080 # 服务所在端口
scheme: HTTP
initialDelaySeconds: 20
failureThreshold: 3
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 1
# 资源配置
resources:
requests:
cpu: ${RequestCpu}
memory: ${RequestMemory}Gi
limits:
cpu: ${LimitCpu}
memory: ${LimitMemory}Gi
# 定义存储卷挂载的路径(写挂载到容器内的路径)
volumeMounts:
- name: devops-vol-${AppName}-${AppEnv} # 定义卷申请模板的名称(要匹配到它才能使用并挂载到容器内)
mountPath: /home/admin/logs # 应用日志所在的路径
subPath: biz-logs # 存储卷中的位置
dnsPolicy: ClusterFirst
readinessGates:
- conditionType: InPlaceUpdateReady
# Init容器失败时会使用RestartPolicy策略
restartPolicy: Always
terminationGracePeriodSeconds: 30
# 存储卷配置
volumes:
- name: devops-vol-${AppName}-${AppEnv} # 存储卷名称
# 当 Pod 因为某些原因被从节点上删除时,emptyDir 卷中的数据也会被永久删除
emptyDir:
sizeLimit: 10Gi
# 更新策略
updateStrategy:
# 自动滚动更新Pod,从序号大的开始,确保有序更新
type: RollingUpdate
rollingUpdate:
# 分段更新(灰度发布),假如一共有5个pod,由于起始序号为0,当partition值为3时,表示从编号为3的pod从前往后更新
partition: ${RollingUpdatePartition}
# 在进行更新时,允许的不可用 Pod 的最大数量。例如,可以将其设置为 50% 表示每次更新时只允许 50% 的 Pod 不可用
maxUnavailable: ${RollingUpdateMaxUnavailable}