目录
一、Chart 基本介绍
1.1 什么是 Chart
1.2 Chart ⽬录结构
1.3 Chart.yaml ⽂件
二、创建不可配置 Chart
2.1 创建 Chart
2.2 安装 Chart
三、创建可配置的 Chart
3.1 修改 chart
3.2 安装 Chart
一、Chart 基本介绍
1.1 什么是 Chart
Helm 部署的应⽤都是以 "chart" 包的形式存在的。每个 "chart" 包含了应⽤所有所需要的清单⽂件(诸如 Deployment、Service、Ingress、ConfigMap 等)。这些清单⽂件被保存为模板⽂件。当我们部署应⽤时,这些模板⽂件会被转化为 Kubernetes 资源清单⽂件。
1.2 Chart ⽬录结构
Helm Chart 的⽬录结构是预先定义好的。⽽每个 Chart 都应该⾄少包含 Chart.yaml ⽂件和 templates ⽬录。
[root@k8s-master1 ~]# helm create app
[root@k8s-master1 ~]# tree app
app
├── charts # 其他 Chart 的依赖,存储于此⽬录下。
├── Chart.yaml # 包含了关于这个 Chart 的基本信息,⽐如chart名称、chart版本、描述等。
├── templates # 这个⽬录包含了⼀系列的模板⽂件,当与 values ⽂件结合时,将⽣成有效的 Kubernetes 清单⽂件
│ ├── deployment.yaml
│ ├── _helpers.tpl # 公共模板⽂件,⽤于定义 chart 中重复使⽤的模板函数和变量,以便 charts 在其他模板⽂件中使⽤,减少重复的代码并提⾼代码的可维护性。
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt # 安装 chart 应⽤后⾃动返回对应的 chart 使⽤信息(需要⾃⾏定制)
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 为模板提供对应的配置信息
1.3 Chart.yaml ⽂件
对于 chart 包来说 Chart.yaml 这个⽂件是必须的,它包含下⾯的这些字段:
apiVersion: v2 # chart API 版本 (必须)
name: app # chart 包名称
version: 0.1.1 # chart 包的版本,最终 chart 的包名称为 app-0.1.1.tgz
appVersion: 5.7.30 # 应⽤的版本,例如:该 chart 中使⽤的 nginx,那么 nginx 是 1.18镜像,那么这⾥就可以写 1.18,便于区分应⽤的版本
description: Web Server # chart的描述信息
home: # 当前项⽬的 URL (可选) 例如:https://www.mysql.com/
icon: # 当前 chart 的图标 URL (可选) 例如:https://www.mysql.com/common/logos/logo-mysql-170x115.png
keywords: # 当前 chart 的关键字集合 (可选) 例如:mysql、database、sql
sources: # 当前项⽬源码 URL (可选) 例如:https://github.com/docker-library/mysql
deprecated: true # chart 是否已被弃⽤ (可选)
dependencies: # 该 chart 依赖的其他 chart 列表(可选),如果定义了 chart 的依赖,可以执⾏ helm dependency update 更新并获取对应的 chart包
- name: # 依赖的 chart 的名称,例如:nginx
version: # 依赖的 chart 的版本,例如:15.1.2
repository: # 依赖的 chart 所在的仓库地址:例如:https://charts.bitnami.com/bitnami
maintainers: # 维护者信息(可选)
- name: sky
wechat: sk6
email:
二、创建不可配置 Chart
2.1 创建 Chart
1、创建 chart ⽬录结构
[root@k8s-master1 ~]# mkdir -p /helm/nginx/templates
2、编写 Chart.yaml ⽂件
[root@k8s-master1 ~]# cd /helm/nginx/
[root@k8s-master1 /helm/nginx]# vim Chart.yaml
apiVersion: v2
name: nginx-app
version: 1.0.0
appVersion: "1.20"
description: A Helm Chart Nginx
3、在 templates ⽬标中新建⼀个 deployment.yaml 清单⽂件
[root@k8s-master1 /helm/nginx]# vim templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy-helm
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
4、在 templates ⽬标中新建⼀个 service.yaml 清单⽂件
[root@k8s-master1 /helm/nginx]# vim templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc-helm
spec:
selector:
app: web
ports:
- port: 80
targetPort: 80
2.2 安装 Chart
1、部署编写的 chart 应⽤
指定 nginx 目录
[root@k8s-master1 /helm]# pwd
/helm
[root@k8s-master1 /helm]# helm install nginx-01 ./nginx/
2、检查 chart 应⽤是否部署成功
[root@k8s-master1 /helm]# helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql-02 default 3 2024-01-09 15:39:00.15500261 +0800 CST deployed mysql-1.6.9 5.7.30
mysql-1704769258 default 2 2024-01-09 11:10:02.471047838 +0800 CST deployed mysql-1.6.9 5.7.30
nginx-01 default 1 2024-01-10 14:47:35.85594287 +0800 CST deployed nginx-app-1.0.0 1.20
[root@k8s-master1 /helm]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox 1/1 Running 52 (41m ago) 2d4h 10.244.169.130 k8s-node2 <none> <none>
mysql-02-7d858fbb95-pfkv9 1/1 Running 0 23h 10.244.36.68 k8s-node1 <none> <none>
mysql-1704769258-b9db9dcd9-wl8c5 1/1 Running 0 27h 10.244.169.132 k8s-node2 <none> <none>
nfs-provisioner-564c9cfbf6-j8dwn 1/1 Running 0 28h 10.244.36.65 k8s-node1 <none> <none>
nginx-deploy-helm-7576995bbf-rzhk8 1/1 Running 0 87s 10.244.169.133 k8s-node2 <none> <none>
3、测试是否能正常访问到对应的应⽤
[root@k8s-master1 /helm]# curl 10.244.169.133
三、创建可配置的 Chart
3.1 修改 chart
1、为之前的 chart 添加 values.yaml ⽂件,然后定义对应的属性。
[root@k8s-master1 /helm]# vim nginx/values.yaml
replicas: 2
labels: web
image:
name: nginx
tags: "1.20"
pullpolicy: {}
container_port: 80
2、修改 deployment.yaml 清单⽂件,然后引⽤ values 的配置
[root@k8s-master1 /helm]# vim nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy-helm
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ .Values.labels }}
template:
metadata:
labels:
app: {{ .Values.labels }}
spec:
containers:
- name: nginx
image: {{ .Values.image.name }}:{{ .Values.image.tags }}
imagePullPolicy: {{ .Values.image.pullpolicy | default "IfNotPresent" }} # 如果value 文件中 image.pullpolicy 为空或者没有设置,则默认给定⼀个 IfNotPresent
ports:
- containerPort: {{ .Values.container_port }}
3、通过 helm template 命令,将模板和配置⽂件结合起来渲染成真正的部署清单
此命令主要用于测试你写的文件是否错误,并不是真正的部署应用。
[root@k8s-master1 /helm]# helm template ./nginx
3.2 安装 Chart
[root@k8s-master1 /helm]# helm install nginx-02 ./nginx/
上一篇文章:【Helm 及 Chart 快速入门】02、Helm 基本使用-CSDN博客