首页 > 其他分享 >13.1.资源清单的管理工具-helm

13.1.资源清单的管理工具-helm

时间:2024-06-19 23:28:30浏览次数:24  
标签:paas chart 管理工具 yaml easy helm root 13.1

目录

一、helm的介绍

1.helm的价值概述

2.helm的关键名词

二、安装部署helm

1.解压安装包并设置全局命令

2.添加命令补全

三、使用helm部署服务管理

1.使用helm创建chart

1.1创建工作目录

 1.2.helm创建chart

2.响应式创建名称空间

3.安装chart到名称空间

4.使用helm命令查看名称空间下的资源

5.修改服务的版本

5.1.修改values.yaml中的tag标签版本

5.2再次安装chart到名称空间

6.卸载chart

四、认识helm的文件组成

1,流程梳理

2,查看目录解释说明

五、自定义chart服务的部署

 六、helm对业务的升级和回滚

1.业务升级

1.1.查看现有chart

1.2.修改变量文件(values.yaml)

1.3.基于values.yaml文件升级业务

2.业务回滚

2.1.查看历史版本

2.2.回滚到指定版本

七、补充:chart.yaml文件

八、helm的共有仓库和私有仓库

1,主流的chart仓库

2,添加仓库的方式

2.1.查看现有仓库的信息

2.2.添加共有仓库

2.3.更新仓库信息

2.4.再次查看仓库信息

3,搜索想要的chart

4,拉取仓库的chart

5,解压第三方的chart压缩包和使用

九、私有的helm仓库(了解)


一、helm的介绍

1.helm的价值概述

如下图所示,在一个企业中,可能存在多个不同的应用业务,每个业务可能包含多至十几、甚至几十个资源清单,那么对于“运维”和“研发”人员来讲,这么多的资源清单,通过人力去区分辨别,即便有“名称空间namespace”和不同“路径目录”来进行区分,也是非常吃力的;

所以,我们就需要借助k8s资源清单的管理工具,进行以业务为单位的资源清单管理,通过一些手段,来实现业务的升级、回滚等等操作在一个文件上(通过helm的values.yaml文件),一个文件就能够管理一套业务体系,进而压缩、减轻了运维压力实现高效管理业务的目的;

2.helm的关键名词

chart:应用描述,在helm中,一个chart代表一个业务的资源清单相关文件的合集;

release:基于chart的部署实体,一个chart被helm运行后,会生成一个release实体,这个release实体会在k8s集群中创建对应的资源对象;

二、安装部署helm

下载地址:Helm | Installing Helm

百度网盘链接:https://pan.baidu.com/s/1RmT3YLhxPngDFgECQ1Kyqw 
提取码:6a64 

1.解压安装包并设置全局命令

# 解压
[root@k8s1 data]# tar -xvf helm-v3.12.3-linux-amd64.tar.gz

# 设置全局命令
mv linux-amd64/helm /usr/local/bin/

2.添加命令补全

[root@k8s1 data]# helm completion bash > /etc/bash_completion.d/helm

三、使用helm部署服务管理

1.使用helm创建chart

1.1创建工作目录

[root@k8s1 data]# mkdir -p /data/helm/oslee/chart
[root@k8s1 chart]# cd /data/helm/oslee/chart

 1.2.helm创建chart

# 创建
[root@k8s1 chart]# helm create oslee01
Creating oslee01

# 查看
[root@k8s1 chart]# ll oslee01/
总用量 8
drwxr-xr-x 2 root root    6 5月   6 08:34 charts
-rw-r--r-- 1 root root 1143 5月   6 08:34 Chart.yaml
drwxr-xr-x 3 root root  162 5月   6 08:34 templates
-rw-r--r-- 1 root root 1874 5月   6 08:34 values.yaml

2.响应式创建名称空间

[root@k8s1 chart]# kubectl create ns helm-oslee01
namespace/helm-oslee01 created

3.安装chart到名称空间

【helm  install   自定义名称   chart名称   名称空间】

[root@k8s1 chart]# helm install oslee oslee01 -n helm-oslee01
NAME: oslee
LAST DEPLOYED: Mon May  6 08:38:23 2024
NAMESPACE: helm-oslee01
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace helm-oslee01 -l "app.kubernetes.io/name=oslee01,app.kubernetes.io/instance=oslee" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace helm-oslee01 $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace helm-oslee01 port-forward $POD_NAME 8080:$CONTAINER_PORT

# 查看pod
[root@k8s1 chart]# kubectl get pods -o wide -n helm-oslee01
NAME                             READY   STATUS    RESTARTS   AGE   IP           NODE   NOMINATED NODE   READINESS GATES
oslee-oslee01-6cc5f96486-j5dvw   1/1     Running   0

# 访问pod
[root@k8s1 chart]# curl -I 10.100.1.7
HTTP/1.1 200 OK

4.使用helm命令查看名称空间下的资源

[root@k8s1 chart]# helm list -n helm-oslee01
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
oslee   helm-oslee01    1               2024-05-06 08:38:23.83927724 -0400 EDT  deployed        oslee01-0.1.0   1.16.0

至此,部署服务就结束了;

我们继续深入下去,我们不知为何,就部署了一个nginx1.16的版本服务,我们接下来,改变一下nginx的版本,我们将nginx的版本修改为1.20.1;

5.修改服务的版本

5.1.修改values.yaml中的tag标签版本

[root@k8s1 chart]# vi oslee01/values.yaml

5.2再次安装chart到名称空间

这次名称叫oslee02

[root@k8s1 chart]# helm install oslee02 oslee01 -n helm-oslee01

我们修改了values.yaml的tag,再次安装得到的pod旧村nginx的1.16版本变成了1.20版本; 

6.卸载chart

[root@k8s1 chart]# helm list -n helm-oslee01
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
oslee   helm-oslee01    1               2024-05-06 08:38:23.83927724 -0400 EDT  deployed        oslee01-0.1.0   1.16.0     
oslee02 helm-oslee01    1               2024-05-06 08:49:17.194473592 -0400 EDT deployed        oslee01-0.1.0   1.16.0 
[root@k8s1 chart]#  helm uninstall oslee02 -n helm-oslee01
release "oslee02" uninstalled

再次查看

[root@k8s1 chart]# helm list -n helm-oslee01
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
oslee   helm-oslee01    1               2024-05-06 08:38:23.83927724 -0400 EDT  deployed        oslee01-0.1.0   1.16.0   

四、认识helm的文件组成

1,流程梳理

2,查看目录解释说明

  • Chart.yaml:这是每个 Helm Chart 的元数据文件,包含 Chart 的名称、版本、描述、主页、依赖关系等信息。它是描述 Chart 的基本信息和版本控制的核心文件。

  • values.yaml:此文件包含了 Chart 的默认配置值。用户可以通过 Helm 命令行参数或提供自定义的 values.yaml 文件来覆盖这些默认值,以实现定制化部署。

  • templates/:这个目录包含了一系列的 YAML 文件模板,它们会被 Helm 用来生成最终部署到 Kubernetes 的资源配置文件。这些模板可以引用 values.yaml 中的值,支持条件语句、循环等高级特性,使得配置更加灵活。

    • 例如:deployment.yamlservice.yamlconfigmap.yaml 等,分别定义了 Deployment、Service、ConfigMap 等 Kubernetes 资源。
    • NOTES.txt:安装chart成功后的提示信息;

五、自定义chart服务的部署

easy-paas-admin/
├── Chart.yaml
├── templates
│   ├── configmap.yaml
│   ├── deployment.yaml
│   └── service.yaml
└── values.yaml

# Chart.yaml

apiVersion: v2
name: easy-paas-admin
description: A Helm chart for Kubernetes
type: application
version: 1.0.1
# values.yaml

easyPaasAdmin:
  namespace: "easy-paas"
  replicaCount: 2
  image:
    repository: "registry.cn-hangzhou.aliyuncs.com/oslee-dockerhub/easy-paas-admin"
    tag: "latest"
  matchLabels:
    value: "easy-paas-admin"
  ports:
    containerPort: 8001
    servicePort: 8001
    nodePort: 30081
  volumeMounts:
    mountPath: "/data/admin/config/"
  configData:
    config.yaml: |
      server:
        "name": "easy-paas-admin"
        "port": ":8001"
        "version": "1.0.1"
      mysql:
        "driver": "mysql"
        "host": "192.168.11.10"
        "port": "3306"
        "database": "easy_gateway"
        "username": "root"
        "password": "root"
        "charset": "utf8mb4"
      redis:
        "username": "default"
        "address": "192.168.11.10:6379"
        "password": "123456"
      cluster:
        "cluster_ip": "127.0.0.1"
        "cluster_port": "8080"
        "cluster_ssl_port": "4433"
# configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.easyPaasAdmin.namespace }}
data:
{{- toYaml .Values.easyPaasAdmin.configData | nindent 2 }}
# deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.easyPaasAdmin.namespace }}
spec:
  replicas: {{ .Values.easyPaasAdmin.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.easyPaasAdmin.matchLabels.value }}
  template:
    metadata:
      labels:
        app: {{ .Values.easyPaasAdmin.matchLabels.value }}
      namespace: {{ .Values.easyPaasAdmin.namespace }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: {{ .Values.easyPaasAdmin.image.repository }}:{{ .Values.easyPaasAdmin.image.tag }}
          ports:
            - containerPort: {{ .Values.easyPaasAdmin.ports.containerPort }}
          volumeMounts:
            - name: config-volume
              mountPath: {{ .Values.easyPaasAdmin.volumeMounts.mountPath }}
              readOnly: true
            - name: host-timezone
              mountPath: /etc/localtime
              readOnly: true
      volumes:
        - name: config-volume
          configMap:
            name: {{ .Chart.Name }}
        - name: host-timezone
          hostPath:
            path: /etc/localtime
# service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ .Chart.Name }}
  namespace: {{ .Values.easyPaasAdmin.namespace }}
spec:
  type: NodePort # 或 NodePort, ClusterIP 根据需求
  selector:
    app: {{ .Values.easyPaasAdmin.matchLabels.value }}
  ports:
    - protocol: TCP
      port: {{ .Values.easyPaasAdmin.ports.servicePort }}
      targetPort: {{ .Values.easyPaasAdmin.ports.containerPort }}
      nodePort: {{ .Values.easyPaasAdmin.ports.nodePort }}
# 执行指令

kubectl create ns easy-paas
helm install easy-paas-admin ./easy-paas-admin -n easy-paas


# 其他指令
# helm list -n easy-paas
# helm uninstall easy-paas-admin -n easy-paas
# helm upgrade easy-paas-admin ./easy-paas-admin -n easy-paas
# helm history easy-paas-admin
# helm rollback easy-paas-admin 1 -n easy-paas

 六、helm对业务的升级和回滚

1.业务升级

1.1.查看现有chart

helm list -n easy-paas

1.2.修改变量文件(values.yaml)

easyPaasAdmin:
  namespace: "easy-paas"
  # 副本数改为3
  replicaCount: 3
  image:
    repository: "registry.cn-hangzhou.aliyuncs.com/oslee-dockerhub/easy-paas-admin"
    tag: "latest"
  matchLabels:
    value: "easy-paas-admin"
  ports:
    containerPort: 8001
    servicePort: 8001
    nodePort: 30081
  volumeMounts:
    mountPath: "/data/admin/config/"
  configData:
    config.yaml: |
      server:
        "name": "easy-paas-admin"
        "port": ":8001"
        # 软件版本改为1.0.2
        "version": "1.0.2"
      mysql:
        "driver": "mysql"
        "host": "192.168.11.10"
        "port": "3306"
        "database": "easy_gateway"
        "username": "root"
        "password": "root"
        "charset": "utf8mb4"
      redis:
        "username": "default"
        "address": "192.168.11.10:6379"
        "password": "123456"
      cluster:
        "cluster_ip": "127.0.0.1"
        "cluster_port": "8080"
        "cluster_ssl_port": "4433"

1.3.基于values.yaml文件升级业务

helm upgrade easy-paas-admin ./easy-paas-admin -n easy-paas

2.业务回滚

2.1.查看历史版本

helm history easy-paas-admin -n easy-paas

2.2.回滚到指定版本

helm rollback easy-paas-admin 1 -n easy-paas

七、补充:chart.yaml文件

可以通过配置chart.yaml这个文件,来控制显示helm list的元数据信息

八、helm的共有仓库和私有仓库

我们知道,docker拉取镜像是有共有仓库阿里云、华为云、清华源..和私有仓库harbor....

同理,helm也有这个机制;

1,主流的chart仓库

互联网公开的chart仓库,可以直接使用他们制作好的包;

1,微软仓库:Index of /kubernetes/charts/

2,阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

2,添加仓库的方式

2.1.查看现有仓库的信息

默认情况下是没有任何仓库地址的

[root@k8s1 helm]# helm repo list
Error: no repositories to show

2.2.添加共有仓库

# 添加微软云的helm仓库
[root@k8s1 helm]# helm repo add azure http://mirror.azure.cn/kubernetes/charts/ 
"azure" has been added to your repositories

# 添加阿里云的helm仓库
[root@k8s1 helm]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories

2.3.更新仓库信息

[root@k8s1 helm]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "aliyun" chart repository
...Successfully got an update from the "azure" chart repository
Update Complete. ⎈Happy Helming!⎈

2.4.再次查看仓库信息

[root@k8s1 helm]# helm repo list
NAME    URL                                                   
azure   http://mirror.azure.cn/kubernetes/charts/             
aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

3,搜索想要的chart

helm search repo elasticsearch

4,拉取仓库的chart

helm pull aliyun/elasticsearch-exporter

5,解压第三方的chart压缩包和使用

# 解压
tar xf elasticsearch-exporter-0.1.2.tgz

# 使用
helm install es elasticsearch-exporter

注意:你安装chart的时候,可能失败,因为chart中的k8s对应api-server版本可能不一样,所以对应的资源清单的一级字段也不一样,导致安装失败;发现这个问题,就去看看资源清单的api版本是否与目前你使用的k8s的api版本相同,否则就需要修改资源清单的api版本了。

九、私有的helm仓库(了解)

提示:chartmuseum项目还不错哟~
推荐阅读:
    https://github.com/helm/chartmuseum
    https://hub.docker.com/r/chartmuseum/chartmuseum

标签:paas,chart,管理工具,yaml,easy,helm,root,13.1
From: https://blog.csdn.net/qq_22321199/article/details/138506074

相关文章

  • Windows 10 磁盘管理使用教程 Windows 10 磁盘管理工具的基本步骤和常见操作;高级的 Wi
    Windows10磁盘管理初级使用教程大纲:1. 打开磁盘管理工具方法:右键点击“此电脑”或者“计算机”图标,选择“管理”,然后在左侧面板中找到并点击“磁盘管理”。2. 磁盘基本信息查看查看已安装的物理硬盘和分区的基本信息:硬盘列表分区列表可用空间和已用空间3. 创......
  • 项目管理软件大对比:2024年10款最佳项目管理工具
    一、禅道项目管理软件1.禅道禅道(ZenTao)是一款开源的项目管理软件,专门为敏捷开发和团队协作而设计。它提供了全面的项目管理功能,包括需求管理、任务管理、缺陷跟踪、测试管理、文档管理等,旨在帮助团队高效地进行项目规划、执行和交付。禅道目前可以提供全生命周期的项目管理解决......
  • 2024年项目管理软件有哪些?推荐这16款好用的项目管理工具
    对于任何优秀的项目团队而言,一款好用的项目管理工具是跟踪、管理项目流程的必备神器。如今对于企业项目团队而言,网上有无数的项目管理工具解决方案可供使用,因此找出最适合自己团队的项目管理工具非常困难。项目经理想要更好地规划、管理和控制项目,但需要找到最合适的工具。好用的......
  • 前端菜鸡流水账日记 -- git管理工具(多版本)
    哈喽哇,我又又又来了,其实之前就挺想进行一篇关于git管理工具的分享的,但是一直都没有来的及,直到今天,在学习的时候,,一个朋友新发现了一个vscode中的小插件,所以我就决定一起来分享出来吧,包括我自己也在使用的哦,超级推荐~Sourcetree:是一个这样的软件,真的使用起来超级简单智能,下载完......
  • VSCode使用svn代码管理工具,初次检出失败
    打开vscode,若要使用SVN需要下载相应的插件。 2.安装之后,需要对SVN插件进行配置,配置本地SVN的命令行执行文件地址。点击左下角齿轮,选择“设置Settings”。"svn.path":"C:/ProgramFiles/TortoiseSVN/bin/svn.exe"3.如图所示。设置完毕后重启VSCODE。4.按ctrl+shift......
  • 6、docker-docker的图形化web界面管理工具-portainer--docker镜像原理
    图形化界面管理工具-portainer-可以提供后台面板供我们操作1、下载启动portainer·#-v挂载-v/var/run/docker.sock:/var/run/docker.sock 表示将主机上的Docker守护进程的Unix套接字文件映射到容器内部,这样Portainer就可以通过DockerAPI与Docker守护进程交互了。......
  • 在Linux中,有哪些常用的网络管理工具?
    在Linux中,网络管理工具非常多样,它们可以帮助系统管理员监控、配置和故障排除网络。以下是一些常用的网络管理工具:ifconfig(或ip):ifconfig(在较新的系统中被ip命令取代)用于显示和配置网络接口。例如,ipaddrshow可以显示所有网络接口的状态。ip:ip命令是一个多功能的......
  • 【工具推荐】MobaXterm远程终端管理工具史上最全攻略,涉及下载、安装、字体等配置、解
    【强烈推荐】MobaXterm远程终端管理工具史上最全攻略,涉及下载、安装、字体等配置、解决中文乱码、Telnet/ssh/Serial使用教程、高级功能使用技巧等。MobaXterm是一个增强型的Windows终端。其为Windows桌面提供所有重要的远程网络终端工具(如SSH、X11、RDP、VNC、FTP、S......
  • 强大的网页数据库管理工具Adminer
    老苏折腾过的项目,数据库主要是MySQL,其次是MongoDB、PostgreSQL和SQLite,最近还用到了Elasticsearch,但是数据库管理软件phpMyAdmin只能管理MySQL,老苏一直在找一个全能的数据库管理器,似乎Adminer可以满足要求。什么是Adminer?Adminer(原phpMinAdmin)是一个用PHP编......
  • 全面评估:满足信创等国产化诉求的6大项目管理工具
    满足国产化诉求的6款项目管理系统:PingCode、Worktile、Teambition、禅道、华为云DevCloud、Tapd。国产项目管理软件以其定制化高、适应本土市场的优势,正成为越来越多企业的选择。本文将探讨几款优秀的国产项目管理工具,帮助您找到提升团队效率的最佳解决方案。一、国产化的具......