编辑
2025-11-04
云计算-Kubernetes
00
请注意,本文编写于 201 天前,最后修改于 45 天前,其中某些信息可能已经过时。

目录

官方文档(除chart安装参数部分,其他建议跳过)
提前安装Helm
下载Kruise1.8.0改
配置helm源
集群准备
安装开始
查看明细
测试yaml
结果展示

OpenKruise 是阿里云开源的 Kubernetes 增强组件,提供原地升级、Sidecar 容器管理、高级发布策略等原生 Kubernetes 不具备的能力。本文基于 K8s 1.30.1 版本,详细介绍 OpenKruise 1.8.0 的完整安装与验证流程。

核心内容包括:

  1. 环境准备:提前安装 Helm 并配置国内源,下载 OpenKruise 离线镜像包(a1e4d262ffb0.tar)及 Helm Chart 包(kruise-1.8.0.tgz

  2. 安装部署:通过 docker load 导入镜像,使用 helm install 命令完成 Kruise 组件安装

  3. 部署验证:使用 helm listhelm statuskubectl get pod 等命令确认组件运行状态

  4. 功能测试:提供完整的 StatefulSet 测试 YAML,展示 OpenKruise 核心特性:

    • apps.kruise.io/v1beta1 API 版本扩展
    • 原地升级策略(podUpdatePolicy: InPlaceIfPossible
    • 就绪门控(readinessGates 中的 InPlaceUpdateReady
    • 分区更新(partition 控制更新范围)

本文适用于需要在 Kubernetes 集群中引入高级工作负载管理能力的运维和开发人员。

官方文档(除chart安装参数部分,其他建议跳过)

https://openkruise.io/zh/docs/installation

提前安装Helm

安装Helm配置国内源

下载Kruise1.8.0改

下载后上传到主节点

下载镜像文件

下载Helm文件

配置helm源

shell
helm repo add openkruise https://openkruise.github.io/charts/ helm repo update

集群准备

image.png

安装开始

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

image.png

测试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 # 更新策略:滚动更新

结果展示

image.png


image.png

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Odboy

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC 4.0 BY-SA 许可协议。转载请注明出处!