15. helm包管理器

helm包管理器

  • 一、helm包管理器介绍、安装
    • 1、helm包管理器
    • 2、核心概念
      • 2.1 chart
      • 2.2 repository
      • 2.3 release
    • 3、helm安装
      • 3.1 安装helm
      • 3.2 添加helm国内仓库
  • 二、使用helm安装MySQL 8.0
    • 1、搜索mysql8.0 chart包
    • 2、下载mysql8.0 chart包
    • 3、按需定制values.yaml
      • 3.1 values.yaml文件定制参考
    • 4、部署MySQL
    • 5、客户端连接MySQL测试
  • 三、自定义nginx chart
    • 1、创建chart流程
    • 2、创建nginx chart
      • 1.1 chart目录结构说明
    • 3、删除template目录下所有文件,写入自己的部署文件
    • 4、生成deployment.yaml文件
    • 5、生成service.yaml文件
    • 6、生成configmap.yaml文件
    • 7、生成pv/pvc.yaml文件
    • 8、在values.yaml文件中写入所需的变量
    • 9、测试部署自定义test-nginx chart
    • 10、将自定义chart打包
  • 四、helm常用命令参考
    • 1、仓库类
    • 2、 chart、release类

一、helm包管理器介绍、安装

1、helm包管理器

针对Kubernetes的Helm包管理器。
用于在Kubernetes集群中轻松部署、升级和管理应用程序。

2、核心概念

2.1 chart

Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。

2.2 repository

Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

2.3 release

Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。

3、helm安装

3.1 安装helm

[root@k8s-master ~]# wget https://get.helm.sh/helm-v3.13.3-linux-amd64.tar.gz
[root@k8s-master ~]# tar xf helm-v3.13.3-linux-amd64.tar.gz 
[root@k8s-master ~]# cd linux-amd64/
[root@k8s-master ~]# cp helm /usr/local/bin/

[root@k8s-master ~]# helm list
NAME 	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART      	APP VERSION

3.2 添加helm国内仓库

[root@k8s-master ~]# helm repo add stable http://mirror.azure.cn/kubernetes/charts
[root@k8s-master ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

[root@k8s-master ~]# 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 "stable" chart repository
Update Complete. ⎈Happy Helming![root@k8s-master ~]# helm repo list
NAME  	URL                                                   
stable	http://mirror.azure.cn/kubernetes/charts              
aliyun	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@k8s-master ~]# 

二、使用helm安装MySQL 8.0

1、搜索mysql8.0 chart包

[root@k8s-master ~]# helm search repo mysql
NAME                            	CHART VERSION	APP VERSION	DESCRIPTION                                       
aliyun/mysql                    	0.3.5        	           	Fast, reliable, scalable, and easy to use open-...
stable/mysql                    	1.6.9        	5.7.30     	DEPRECATED - Fast, reliable, scalable, and easy...
stable/mysqldump                	2.6.2        	2.4.1      	DEPRECATED! - A Helm chart to help backup MySQL...
stable/prometheus-mysql-exporter	0.7.1        	v0.11.0    	DEPRECATED A Helm chart for prometheus mysql ex...
aliyun/percona                  	0.3.0        	           	free, fully compatible, enhanced, open source d...
aliyun/percona-xtradb-cluster   	0.0.2        	5.7.19     	free, fully compatible, enhanced, open source d...
stable/percona                  	1.2.3        	5.7.26     	DEPRECATED - free, fully compatible, enhanced, ...
stable/percona-xtradb-cluster   	1.0.8        	5.7.19     	DEPRECATED - free, fully compatible, enhanced, ...
stable/phpmyadmin               	4.3.5        	5.0.1      	DEPRECATED phpMyAdmin is an mysql administratio...
aliyun/gcloud-sqlproxy          	0.2.3        	           	Google Cloud SQL Proxy                            
aliyun/mariadb                  	2.1.6        	10.1.31    	Fast, reliable, scalable, and easy to use open-...
stable/gcloud-sqlproxy          	0.6.1        	1.11       	DEPRECATED Google Cloud SQL Proxy                 
stable/mariadb                  	7.3.14       	10.3.22    	DEPRECATED Fast, reliable, scalable, and easy t...

2、下载mysql8.0 chart包

[root@k8s-master ~]# helm fetch stable/mysql
[root@k8s-master ~]# tar xf mysql-1.6.9.tgz 

3、按需定制values.yaml

解压缩mysql-1.6.9.tgz,切换到解压目录,里面包含values.yam文件,可根据情况按需定制

3.1 values.yaml文件定制参考

  • mysql镜像标记
image: "mysql"
imageTag: "8.0"
  • 在k8s集群的工作节点上提前准备busybox镜像

  • 禁用testFramework

testFramework:
  enabled: false
  image: "bats/bats"
  tag: "1.2.1"
  imagePullPolicy: IfNotPresent
  securityContext: {}
  • 定义MySQL root用户密码, 注意引号
mysqlRootPassword: "WWW.1.com"
  • 持久化定义
persistence:
  enabled: true
  accessMode: ReadWriteOnce
  size: 8Gi
  annotations: {}
  • 手动关联后端NFS,创建pv
apiVersion: v1
kind: PersistentVolume
metadata:
 name: mysql
spec:
 capacity:
   storage: 10Gi
 accessModes:
 - ReadWriteOnce
 persistentVolumeReclaimPolicy: Recycle
 nfs:
   path: /data4
   server: 192.168.140.13
  • 调整资源限制
resources:
  requests:
    memory: 1024Mi
    cpu: 1000m
  • 自定义MySQL配置文件
configurationFiles:
  mysql.cnf: |-
    [mysqld]
    skip-name-resolve
    server_id=100
    log_bin=master
  • 定义MySQL服务类型、端口
service:
  annotations: {}
  ## Specify a service type
  ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types
  type: NodePort
  port: 3306
  nodePort: 32000
  # loadBalancerIP:

4、部署MySQL

[root@k8s-master mysql]# helm install --name-template mysql -f values.yaml .
[root@k8s-master mysql]# kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/mysql-64476bd7d5-7ctn7   1/1     Running   0          3m15s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          7d
service/mysql        NodePort    10.96.111.106   <none>        3306:32000/TCP   3m15s

5、客户端连接MySQL测试

在这里插入图片描述

三、自定义nginx chart

1、创建chart流程

1、创建一个chart包。
2、将部署服务用到的yaml文件全部放到templates目录中,然后将yaml中可能每次都需要变动的地方修改为变量。
3、将每次都需要变动的地方写到values.yaml中,让模板文件去引用,即可完成部署。

2、创建nginx chart

[root@k8s-master k8s]# helm create nginxTestChart
Creating nginxTestChart
[root@k8s-master k8s]# tree nginxTestChart
nginxTestChart
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 10 files

1.1 chart目录结构说明

  • Chart.yaml
    用于描述这个chart的基本信息,包括名字、描述信息、版本信息等。

  • values.yaml
    用于存储templates目录中模板文件中用到的变量信息,也就是说template中的模板文件引用的是values.yaml中的变量。

  • templates
    用于存放部署使用的yaml文件模板,这里面的yaml都是通过各种判断、流程控制、引用变量去调用values中设置的变量信息,最后完成部署。

  • NOTES.txt
    用于接收chart的帮助信息,helm install部署完成后展示给用户,也可以时候helm status列出信息。

  • _helpers.tpl
    防止模板助手的地方,可以在整个chart中重复使用。

3、删除template目录下所有文件,写入自己的部署文件

[root@k8s-master k8s]# cd nginxTestChart/
[root@k8s-master nginxTestChart]# rm -rf templates/*

4、生成deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: {{ .Values.appname }}			// 调用values.yaml文件中的appname变量
  name: test-nginx
spec:
  replicas: {{ .Values.replicas }}		// 调用values.yaml文件中的replicas变量
  selector:
    matchLabels:
      app: {{ .Values.appname }}			// 调用values.yaml文件中的appname变量使用为标签
  template:
    metadata:
      labels:
        app: {{ .Values.appname }}
    spec:
      containers:
      - image: "{{ .Values.image }}:{{ .Values.imageTag }}"    // 分别调用values.yaml文件中的image和imageTage变量作为镜像名
        name: {{ .Values.appname }}				
        ports:
        - name: web
          containerPort: 80
          protocol: TCP
        volumeMounts:
        - name: code
          mountPath: /web
        - name: config
          mountPath: /etc/nginx/conf.d/
      volumes:  
        - name: config
          configMap:
            name: {{ .Values.appname }}-cm			
        - name : code
          persistentVolumeClaim:
            claimName: {{ .Values.appname }}-pvc
            readOnly: false        

5、生成service.yaml文件

apiVersion: v1
kind: Service
metadata:
    name: {{ .Values.appname }}-svc
spec:
    ports:
    - port: 80
      nodePort: 30008
    selector:
       app: {{ .Values.appname }}
    type: NodePort

6、生成configmap.yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Values.appname }}-cm
data:
    nginx.conf: |
         server {
             listen 80;
             server_name localhost;
             location / {
               root /web;
               index index.html;
             }
         }

7、生成pv/pvc.yaml文件

apiVersion: v1
kind:  PersistentVolume
metadata:
  name: {{ .Values.appname }}-pv
  labels:
    pv: {{ .Values.appname }}-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: {{ .Values.nfsPath }}						// 调用values.yaml文件中的nfsPath变量获取nfs存储目录 
    server: {{ .Values.nfsServer }}			  // 调用values.yaml文件中的nfsServer变量获取nfs服务器地址
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: {{ .Values.appname }}-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      pv: {{ .Values.appname }}-pv

8、在values.yaml文件中写入所需的变量

appname: test-nginx
replicas: 2
image: nginx
imageTag: 1.16
nfsPath: /data5
nfsServer: 192.168.140.13

9、测试部署自定义test-nginx chart

[root@k8s-master nginxTestChart]# helm install test-nginx ./
NAME: test-nginx
LAST DEPLOYED: Fri Jan 17 16:14:35 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@k8s-master nginxTestChart]# kubectl get pod
NAME                          READY   STATUS             RESTARTS   AGE
test-nginx-5f8c745b8f-8vg8r   1/1     Running            0          2s
test-nginx-5f8c745b8f-szdmk   1/1     Running            0          2s

[root@k8s-master nginxTestChart]# kubectl get svc
NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes       ClusterIP   10.96.0.1      <none>        443/TCP        7d5h
test-nginx-svc   NodePort    10.96.69.222   <none>        80:30008/TCP   6s

在这里插入图片描述

10、将自定义chart打包

[root@k8s-master opt]# ls
cni  containerd  k8s  nginxTestChart

[root@k8s-master opt]# helm package nginxTestChart/
Successfully packaged chart and saved it to: /opt/nginxTestChart-0.1.0.tgz

[root@k8s-master opt]# ls
cni  containerd  k8s  nginxTestChart  nginxTestChart-0.1.0.tgz
[root@k8s-master opt]# 

四、helm常用命令参考

1、仓库类

  • 添加创建
[root@k8s-master mysql]# helm repo add <仓库地址>
  • 查看仓库
[root@k8s-master mysql]# helm repo list
  • 删除仓库
[root@k8s-master mysql]# helm repo remove <仓库名称>
  • 更新仓库
[root@k8s-master mysql]# helm repo update

2、 chart、release类

  • 搜索chart
[root@k8s-master mysql]# helm search repo <chart name>
  • 下载chart
[root@k8s-master mysql]# helm fetch <chart name>
  • 查看chart信息
[root@k8s-master mysql]# helm show chart aliyun/redis
  • 查看chart values数据定义
[root@k8s-master mysql]# helm show values aliyun/redis
  • 部署chart
[root@k8s-master mysql]# helm install --name-template mysql -f values.yaml . 
  • 查看release
[root@k8s-master mysql]# helm list
NAME 	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART      	APP VERSION
mysql	default  	1       	2025-01-17 11:50:38.793792919 +0800 CST	deployed	mysql-1.6.9	5.7.30     
  • 删除release
[root@k8s-master mysql]# helm uninstall <release>
  • 更新release
[root@k8s-master mysql]# helm upgrade <release name> <chart name>
  • 回滚release
[root@k8s-master mysql]# helm rollback <release name> <revision number>
  • 查看release历史版本
[root@k8s-master mysql]# helm history <release name>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/956367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

庄小焱——2024年博文总结与展望

摘要 大家好&#xff0c;我是庄小焱。岁末回首&#xff0c;2024 年是我在个人成长、博客创作以及生活平衡方面收获颇丰的一年。这一年的经历如同璀璨星辰&#xff0c;照亮了我前行的道路&#xff0c;也为未来的发展奠定了坚实基础。 1. 个人成长与突破 在 2024 年&#xff0c…

OSCP - Proving Grounds - BullyBox

主要知识点 如果发现有域名&#xff0c;则可以加入/etc/hosts后重新执行nmap,nikto等扫描dirsearch的时候可以使用完整一些的字典文件&#xff0c;避免漏掉信息.git dump 具体步骤 执行nmap 扫描&#xff0c;发现 80和22端口开放,访问后发现被重定向到 bullybox.local Star…

Linux中的基本指令(一)

一、Linux中指令的存在意义 Linux中&#xff0c;通过输入指令来让操作系统执行&#xff0c;以此达到控制操作系统的目的&#xff0c;类似于Windows中的双击&#xff0c;右键新建文件&#xff0c;新建文件夹等 1.补&#xff1a;关于屏幕的几个操作指令 ①清屏指令 clear 回…

C/C++内存管理(超详解)

目录 1.C/C内存分布 2.C语言动态内存管理 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 3.C动态内存管理 3.1new/delete操作内置类型 3.2new/delete操作自定义类型 3.3operator new与operator delete函数 3.4定位new表达式(placement-new) 1.C/C内存分布 内存中是如…

【React】静态组件动态组件

目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件&#xff1a; 组件第一次渲染完毕后&#xff0c;无法基于内部的某些操作让组件更新「无法实现自更新」&#xff1b;但是&#xff0c;如果调用它的父组…

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一&#xff1a;使用 float 普通盒子实现横向布局 方法二&#xff1a;使用 display: inline-block 内联块级元素实现横向布局 方法三&#xff1a;使用弹性盒子 flexbox&#xff0…

Python实现过年烟花效果及打包成可执行文件

博客&#xff1a;Python实现过年烟花效果及打包成可执行文件 在这篇博客中&#xff0c;我们将详细讲解如何使用Python和Pygame库实现一个过年烟花效果的程序&#xff0c;并介绍如何将Python脚本打包成Windows上可以直接执行的exe文件。我们将从代码的各个模块入手&#xff0c;…

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵

本博文内容导读&#x1f4d5;&#x1f389;&#x1f525; ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上&#xff0c;提供了强大的灵活性&#xff0c;能适应不同的应用需求。 ESP32中断主…

SpringBoot2 + Flowable(UI)

文章目录 引言I 技术栈软件架构基于 Vue.js 和 Element UI 的后台管理系统工程结构II 依赖rest,logic,conf 的依赖工作流flowable jar包flowable-ui所需jar包III 配置jdbc 配置 nullCatalogMeansCurrent = true引言 I 技术栈 软件架构 前端基于vue 、element-ui框架分模块设…

.Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现

前言 最近使用最新版的Serilog记录日志时&#xff0c;发现以前有些关于Serilog的Nuget弃用了&#xff0c;最关键的是有些配置写法也改变&#xff0c;于是就整理了一下最新版的Serilog配置方式(appsetting.json)的使用 说明&#xff1a;我是用的.Net6&#xff0c;最新长期支持…

sprnigboot集成Memcached

安装Memcached 下载地址 32位系统 1.2.5版本&#xff1a;http://static.jyshare.com/download/memcached-1.2.5-win32-bin.zip 32位系统 1.2.6版本&#xff1a;http://static.jyshare.com/download/memcached-1.2.6-win32-bin.zip 32位系统 1.4.4版本&#xff1a;http://stati…

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景&#xff1a;当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景&#xff1a;有一天&#xff0c;你在王国里担任“首席审判官”。你面前站着一位嫌疑人&#xff0c;有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的&#xff0c;还是他是被冤枉的&…

3dmax LOGO的符号、意义和历史,渲染100邀请码1a12

Autodesk 3ds Max 是一款 3D 建模、动画和渲染软件&#xff0c;由 Autodesk, Inc. 于 1996 年开发&#xff0c;其功能是能够创建复杂的数字场景和视觉效果&#xff0c;被专业建筑师、设计师和视频游戏创作者广泛使用&#xff0c;提供了七种语言的 Windows 版本&#xff0c;没有…

线段树优化dp,abc389F - Rated Range

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 F - Rated Range 二、解题报告 1、思路分析 考虑定义 f(i, j) 为 初始分…

青少年CTF练习平台 EasyMD5解题思路

题目 EasyMD5 PHP弱类型/弱等于的判断 翻译 上传之后网页提示&#xff1a;Not a PDF! angry!!! get out from my page 修改文件后缀为pdf 再次上传&#xff0c;答案出来了 s878926199a s155964671a 成功获取flag

Amazon MSK 开启 Public 访问 SASL 配置的方法

1. 开启 MSK Public 1.1 配置 MSK 参数 进入 MSK 控制台页面&#xff0c;点击左侧菜单 Cluster configuration。选择已有配置&#xff0c;或者创建新配置。在配置中添加参数 allow.everyone.if.no.acl.foundfalse修改集群配置&#xff0c;选择到新添加的配置。 1.2 开启 Pu…

SW - 钣金零件保存成DWG时,需要将折弯线去掉

文章目录 SW - 钣金零件保存成DWG时&#xff0c;需要将折弯线去掉概述笔记备注END SW - 钣金零件保存成DWG时&#xff0c;需要将折弯线去掉 概述 如果做需要弯折的切割件&#xff0c;最好做成钣金零件。 最近做了几个小钣金(将钣金展开&#xff0c;建立新草图&#xff0c;在2…

深度学习 Pytorch 基本优化思想与最小二乘法

在正式开始进行神经网络建模之前&#xff0c;我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function&#xff0c;但如果想更深入理解神经网络&#xff0c;对深度学习的…

Ceph与RAID在存储中的协同工作过程

本文将结合架构图&#xff0c;详细讲解Ceph与RAID如何在存储环境中相互配合&#xff0c;共同提供高效且可靠的存储服务。 架构概述 从上图中可以看到&#xff0c;Ceph的架构主要分为四个层次&#xff1a; 客户端和服务接口层&#xff1a;这一层包括客户端访问存储应用的接口…

PyTest自学-认识PyTest

1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么&#xff1f; PyTest是一个自动化测试框架&#xff0c;支持单元测试和功能测试&#xff0c;有丰富的插件&#xff0c;如&#xff0c;pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…