K8s1.30.1安装OpenKruise1.8.0
官方文档(除chart安装参数部分,其他建议跳过)
提前安装Helm
下载Kruise1.8.0改
下载后上传到主节点
配置helm源
shell
helm repo add openkruise https://openkruise.github.io/charts/
helm repo update集群准备

安装开始
shell
docker load -i a1e4d262ffb0.tar
helm install kruise kruise-1.8.0.tgz查看明细
shell
helm list
helm status kruise --show-resources
kubectl get pod -A
测试yaml
yaml
apiVersion: v1 # K8s API 版本(核心组 v1)
kind: Namespace # 资源类型:命名空间
metadata:
name: cutejava # 命名空间名称
labels:
appName: cutejava # 该命名空间的应用名称标签,用于选择器/统计
env: production # 环境标签:生产环境
---
apiVersion: apps.kruise.io/v1beta1 # 使用 OpenKruise 的 StatefulSet 扩展 API 版本
kind: StatefulSet # 资源类型:有状态副本集(由 Kruise 扩展)
metadata:
name: cutejava-production-sts # StatefulSet 名称
namespace: cutejava # 资源所属命名空间
spec:
podManagementPolicy: Parallel # Pod 管理策略:并行创建/删除(非默认 OrderedReady)
replicas: 5 # 期望副本数
selector:
matchLabels:
appName: cutejava # 用于匹配 Pod 的标签键 appName
env: production # 用于匹配 Pod 的标签键 env
serviceName: cutejava-production-headless # 用作 StatefulSet Headless Service 名称,为 Pod 提供稳定网络标识。DNS/主机名:pod-specific-string.serviceName.default.svc.cluster.local
template:
metadata:
labels:
appName: cutejava # Pod 标签:应用名称
env: production # Pod 标签:环境
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: appName # 反亲和匹配键:appName
operator: In # 选择器操作符:包含
values:
- cutejava # 反亲和匹配值:cutejava
topologyKey: failure-domain.beta.kubernetes.io/zone # 拓扑域:按可用区打散
weight: 50 # 亲和权重:50(越大越优先)
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: appName # 反亲和匹配键:appName
operator: In # 选择器操作符:包含
values:
- cutejava # 反亲和匹配值:cutejava
topologyKey: kubernetes.io/hostname # 拓扑域:按节点主机名打散
weight: 50 # 亲和权重:50
containers:
- image: registry.cn-shanghai.aliyuncs.com/odboy/ops:springboot-jdk11 # 容器镜像(含仓库/命名空间/标签)
imagePullPolicy: IfNotPresent # 镜像拉取策略:本地不存在时再拉取
name: cutejava-production-biz # 容器名称
readinessProbe: # 就绪探针:用于流量接入前健康检查
failureThreshold: 3 # 连续失败次数阈值(达到则判定不就绪)
httpGet:
path: /healthCheck/readiness # HTTP 探活路径
port: 8000 # 探活端口
scheme: HTTP # 协议:HTTP
initialDelaySeconds: 30 # 容器启动后初始延迟秒数
periodSeconds: 10 # 探测周期(秒)
successThreshold: 1 # 连续成功次数阈值
timeoutSeconds: 1 # 单次探测超时时间(秒)
resources: # 资源配额与请求
limits:
cpu: 1 # CPU 上限:1 核(注意:等价于 1 = 1000m)
memory: 1024Mi # 内存上限:1 GiB
requests:
cpu: 1 # CPU 请求:1 核
memory: 1Gi # 内存请求:1 GiB
terminationMessagePath: /dev/termination-log # 终止消息写入路径
terminationMessagePolicy: File # 终止消息策略:从文件读取
volumeMounts:
- mountPath: /home/admin/cutejava/logs # 容器内挂载路径(日志目录)
name: cutejava-volume # 关联卷名称
subPath: logs # 在卷中的子路径,仅挂载该子目录
dnsPolicy: ClusterFirst # DNS 策略:优先集群内部解析
readinessGates:
- conditionType: InPlaceUpdateReady # 额外就绪门:Kruise 原地升级就绪条件
restartPolicy: Always # 重启策略:总是重启(对 Pod 模板生效)
terminationGracePeriodSeconds: 30 # 优雅终止等待时间(秒)
volumes:
- emptyDir:
sizeLimit: 10Gi # emptyDir 卷大小上限
name: cutejava-volume # 卷名称,与 volumeMounts 对应
updateStrategy:
rollingUpdate:
inPlaceUpdateStrategy:
gracePeriodSeconds: 5 # 原地升级优雅等待时长(秒)
maxUnavailable: 1 # 滚动更新期间允许不可用的 Pod 数量
minReadySeconds: 0 # 新 Pod 就绪后最小就绪保持时间(秒)
partition: 5 # 分区更新:从索引 >= 5 的 Pod 开始更新(0~replicas-1)
podUpdatePolicy: InPlaceIfPossible # 优先原地更新,无法原地时再重建
type: RollingUpdate # 更新策略:滚动更新结果展示


