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

目录

官方文档(除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 许可协议。转载请注明出处!