【Helm 及 Chart 快速入门】03、Chart 基本介绍

发布时间:2024年01月10日

目录

一、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博客?

文章来源:https://blog.csdn.net/weixin_46560589/article/details/135483008
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。