使用 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.yaml
、service.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
文件即可轻松实现参数化配置。