helm

明白了,我可以帮你整合成 一份完整文档,同时包含两种方案:

  1. 单服务 Redis Helm Chart(基础 + 生产级示例)

  2. 多服务 Redis + MongoDB Helm Chart(生产级示例)

文档结构清晰,从基础概念 → 目录结构 → 模板示例 → values 配置 → 安装升级 → 高级特性,全套覆盖。

下面我给出完整示例文档:


Helm Chart 完整指南(Redis / Redis+MongoDB)


1️⃣ Helm 基础概念

概念说明
Helm Kubernetes 的包管理器,类似 aptyum
Chart Helm 包,一个完整的应用模板,包含 YAML 模板和默认配置
Release Chart 部署后的实例,每个 Release 可以有不同配置
values.yaml 默认配置文件,可被用户自定义覆盖
templates/ 存放 Kubernetes YAML 模板的目录
helpers.tpl 可定义可重用模板函数

2️⃣ 单服务 Redis Helm Chart

2.1 目录结构

redis-helm/
├── Chart.yaml
├── values.yaml
├── templates/
│   ├── _helpers.tpl
│   ├── secret.yaml
│   ├── configmap.yaml
│   ├── statefulset.yaml
│   └── service.yaml
└── README.md

2.2 Chart.yaml

apiVersion: v2
name: redis
description: A Helm chart for Redis
type: application
version: 0.1.0
appVersion: "7.0"

2.3 values.yaml(基础 + 生产级示例)

enabled: true
replicaCount: 2
image:
  repository: redis
  tag: 7.0
  pullPolicy: IfNotPresent

usePassword: true
password: "" # 空则 Helm 自动生成随机密码

service:
  type: ClusterIP
  port: 6379

persistence:
  enabled: true
  storageClass: "standard"
  size: 8Gi

resources:
  requests:
    memory: 256Mi
    cpu: 250m
  limits:
    memory: 512Mi
    cpu: 500m

自动生成密码可以使用模板函数 randAlphaNum


2.4 _helpers.tpl(示例)

{{- define "redis.fullname" -}}
{{ .Release.Name }}-redis
{{- end -}}

{{- define "redis.password" -}}
{{- if .Values.password }}
{{ .Values.password }}
{{- else }}
{{ randAlphaNum 16 | quote }}
{{- end }}
{{- end -}}

2.5 secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: {{ include "redis.fullname" . }}-secret
type: Opaque
stringData:
  redis-password: {{ include "redis.password" . }}

2.6 configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "redis.fullname" . }}-config
data:
  redis.conf: |
    bind 0.0.0.0
    protected-mode yes
    {{- if .Values.usePassword }}
    requirepass {{ include "redis.password" . }}
    {{- end }}
    maxmemory 256mb
    maxmemory-policy allkeys-lru

2.7 service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ include "redis.fullname" . }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: 6379
      name: redis
  selector:
    app.kubernetes.io/name: redis
    app.kubernetes.io/instance: {{ .Release.Name }}

2.8 statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: {{ include "redis.fullname" . }}
spec:
  serviceName: {{ include "redis.fullname" . }}
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: redis
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: redis
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: redis
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          command: ["redis-server", "/etc/redis/redis.conf"]
          ports:
            - containerPort: 6379
              name: redis
          volumeMounts:
            - name: redis-config
              mountPath: /etc/redis
            - name: redis-data
              mountPath: /data
          resources:
            requests:
              memory: {{ .Values.resources.requests.memory }}
              cpu: {{ .Values.resources.requests.cpu }}
            limits:
              memory: {{ .Values.resources.limits.memory }}
              cpu: {{ .Values.resources.limits.cpu }}
      volumes:
        - name: redis-config
          configMap:
            name: {{ include "redis.fullname" . }}-config
  volumeClaimTemplates:
    - metadata:
        name: redis-data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: {{ .Values.persistence.storageClass }}
        resources:
          requests:
            storage: {{ .Values.persistence.size }}

2.9 安装 / 升级 / 卸载

helm install my-redis ./redis-helm
helm upgrade my-redis ./redis-helm --set replicaCount=3
helm uninstall my-redis

3️⃣ 多服务 Redis + MongoDB Helm Chart

3.1 目录结构

multi-services-helm/
├── Chart.yaml
├── values.yaml
├── templates/
│   ├── _helpers.tpl
│   ├── redis/
│   │   ├── secret.yaml
│   │   ├── configmap.yaml
│   │   ├── statefulset.yaml
│   │   └── service.yaml
│   └── mongo/
│       ├── secret.yaml
│       ├── configmap.yaml
│       ├── statefulset.yaml
│       └── service.yaml
└── README.md

3.2 values.yaml

redis:
  enabled: true
  replicaCount: 2
  image:
    repository: redis
    tag: 7.0
  password: "" # 空则生成随机密码
  persistence:
    enabled: true
    size: 8Gi
    storageClass: "standard"
  service:
    type: ClusterIP
    port: 6379

mongo:
  enabled: true
  replicaCount: 3
  image:
    repository: mongo
    tag: 6.0
  rootPassword: "" # 空则生成随机密码
  persistence:
    enabled: true
    size: 10Gi
    storageClass: "standard"
  service:
    type: ClusterIP
    port: 27017

3.3 _helpers.tpl

{{- define "multi.fullname" -}}
{{ .Release.Name }}
{{- end -}}

{{- define "redis.password" -}}
{{- if .Values.redis.password }}
{{ .Values.redis.password }}
{{- else }}
{{ randAlphaNum 16 | quote }}
{{- end }}
{{- end -}}

{{- define "mongo.rootPassword" -}}
{{- if .Values.mongo.rootPassword }}
{{ .Values.mongo.rootPassword }}
{{- else }}
{{ randAlphaNum 16 | quote }}
{{- end }}
{{- end -}}

3.4 Redis 和 Mongo 模板(略,可参考单服务结构)

  • secret.yaml / configmap.yaml / statefulset.yaml / service.yaml

  • 使用 {{- if .Values.redis.enabled }} / {{- if .Values.mongo.enabled }} 控制是否部署

  • PVC 持久化、随机密码、Service 类型都可通过 values 配置


3.5 安装示例

helm install multi ./multi-services-helm
kubectl get pods
kubectl get svc

Redis 和 MongoDB 会同时启动,可通过 enabled: false 控制某个服务不部署。


3.6 高级特性

  1. 自动随机密码(安全性增强)

  2. Redis 主从 / Mongo 副本集支持

  3. PVC 持久化

  4. Service 类型可配置 ClusterIP / LoadBalancer / NodePort

  5. 可扩展至 MySQL、Postgres 等其他服务

  6. CI/CD 集成,GitOps 流水线部署


✅ 这份文档把 单服务 Redis多服务 Redis+MongoDB 两种方案整合在一起,并且覆盖基础、生产级配置、模板示例、安装升级卸载以及高级扩展。


如果你需要,我可以帮你直接 写出完整生产级 Multi-Service Helm Chart 模板文件,带:

  • Redis 主从 + MongoDB 副本集

  • 自动随机密码

  • PVC 持久化

  • Service 类型可配置

  • 开箱即用

这样你只需复制模板和 values,就能直接部署。

你希望我直接生成吗?

posted on 2026-02-05 20:09  吃草的青蛙  阅读(0)  评论(0)    收藏  举报

导航