helm初始化自定义应用

使用 Helm 初始化一个应用(即创建一个 Helm Chart),可以通过 Helm 提供的 helm create 命令生成一个基础的 Helm Chart 目录结构。下面是具体步骤:

1. 安装 Helm

首先确保你的环境中已经安装了 Helm。如果还没有安装,可以按照 Helm 官方文档进行安装:

2. 初始化 Helm Chart

运行以下命令来创建一个新的 Helm Chart:

helm create myapp

这将会在当前目录下生成一个名为 myapp 的目录,里面包含了一些预生成的模板文件和默认配置。

3. Helm Chart 目录结构

helm create 命令生成的目录结构如下:

myapp/
├── Chart.yaml            # Chart 的元数据
├── values.yaml           # 配置值的默认文件
├── charts/               # 依赖的子 Chart
├── templates/            # 用于存放 Kubernetes 资源文件模板
│   ├── deployment.yaml   # Deployment 资源模板
│   ├── service.yaml      # Service 资源模板
│   └── _helpers.tpl      # 模板辅助文件
└── .helmignore           # 忽略文件

4. 修改 Chart.yaml

Chart.yaml 文件是 Helm Chart 的元数据文件,通常需要根据项目情况进行修改:

apiVersion: v2
name: myapp              # Chart 的名字
description: A Helm chart for Kubernetes

type: application
version: 0.1.0           # 当前 Chart 版本
appVersion: "1.0"        # 应用程序的版本号

5. 修改 values.yaml

values.yaml 文件包含了模板使用的默认配置,你可以根据实际应用的需求修改里面的参数。

例如:

replicaCount: 2

image:
  repository: nginx
  tag: "1.16"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

6. 自定义模板文件

templates/ 目录下存放的是 Kubernetes 资源模板文件,Helm 会根据这些模板生成 Kubernetes 资源文件并部署。

你可以编辑或添加自己的 Kubernetes 资源模板文件,如 deployment.yamlservice.yaml 等。例如,deployment.yaml 默认模板文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "myapp.fullname" . }}
  labels:
    {{- include "myapp.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "myapp.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "myapp.selectorLabels" . | nindent 8 }}
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        ports:
        - containerPort: {{ .Values.service.port }}

你可以根据应用的需求自定义这些模板文件。

7. 安装应用

当你完成 Helm Chart 的配置后,可以使用以下命令来安装应用:

helm install myapp ./myapp

这个命令会在 Kubernetes 集群中部署应用。

8. 更新应用

如果你修改了 Helm Chart 或 values.yaml 中的参数,想要更新部署,可以使用以下命令:

helm upgrade myapp ./myapp

9. 卸载应用

如果不再需要应用,可以使用以下命令卸载它:

helm uninstall myapp

使用 Helm 可以在多环境部署(开发、测试、生产环境)时,通过修改 values.yaml 文件来进行参数化配置 给个例子

下面是一个 Helm 部署应用的例子,展示了如何使用 values.yaml 文件进行参数化配置,特别是在多环境(开发、测试、生产)部署时。

1. Helm Chart 结构

假设你有一个简单的应用 myapp,目录结构如下:

myapp/
├── Chart.yaml
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
└── values.yaml

2. deployment.yaml 模板文件

templates/deployment.yaml 中,你可以使用 values.yaml 文件中的值来参数化 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Chart.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Chart.Name }}
  template:
    metadata:
      labels:
        app: {{ .Chart.Name }}
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        ports:
        - containerPort: {{ .Values.service.port }}
        resources:
          requests:
            memory: {{ .Values.resources.requests.memory }}
            cpu: {{ .Values.resources.requests.cpu }}
          limits:
            memory: {{ .Values.resources.limits.memory }}
            cpu: {{ .Values.resources.limits.cpu }}

3. values.yaml 文件

values.yaml 是 Helm 的默认配置文件,里面定义了默认的参数值:

replicaCount: 3

image:
  repository: myapp
  tag: "latest"

service:
  type: ClusterIP
  port: 80

resources:
  requests:
    memory: "128Mi"
    cpu: "100m"
  limits:
    memory: "256Mi"
    cpu: "200m"

4. 多环境 values.yaml 文件

为不同环境创建不同的 values.yaml 文件。例如,为开发环境创建 values-dev.yaml,为生产环境创建 values-prod.yaml

values-dev.yaml(开发环境)

replicaCount: 1

image:
  repository: myapp
  tag: "dev"

service:
  type: NodePort
  port: 30001

resources:
  requests:
    memory: "64Mi"
    cpu: "50m"
  limits:
    memory: "128Mi"
    cpu: "100m"

values-prod.yaml(生产环境)

replicaCount: 5

image:
  repository: myapp
  tag: "stable"

service:
  type: ClusterIP
  port: 80

resources:
  requests:
    memory: "512Mi"
    cpu: "250m"
  limits:
    memory: "1Gi"
    cpu: "500m"

5. Helm 安装和部署

在开发环境和生产环境下,使用不同的 values.yaml 文件进行部署:

部署到开发环境:

helm install myapp ./myapp -f values-dev.yaml

部署到生产环境:

helm install myapp ./myapp -f values-prod.yaml

6. 说明

  • replicaCount: 开发环境下使用 1 个副本,生产环境下使用 5 个副本。
  • image.tag: 开发环境下使用 dev 版本镜像,生产环境使用 stable 版本镜像。
  • service.port: 开发环境下使用 NodePort,生产环境使用 ClusterIP
  • resources: 开发环境下分配的 CPU 和内存较少,生产环境则分配较多的资源。

通过这种方式,你可以方便地在不同环境下使用相同的 Helm Chart,只需切换 values.yaml 文件即可轻松实现参数化配置。

posted @ 2024-09-25 09:50  jasmine456  阅读(39)  评论(0编辑  收藏  举报