当前位置: 首页 > article >正文

kubernetes之Helm包管理器

目录

  • 一、Helm 概述
    • 1.1 Helm具备的能力
    • 1.2 Helm3 与 Helm2 的区别
  • 二、Helm 部署
    • 2.1 安装 helm
    • 2.2 使用 helm 安装 Chart
    • 2.3 Helm 自定义模板
      • 2.3.1 拉取 Chart
      • 2.3.2 创建自定义的 Chart
      • 2.3.3 修改 Chart
      • 2.3.4 打包 Chart
      • 2.3.5 升级 Chart
      • 2.3.6 回退 Chart
  • 三、Helm 仓库


一、Helm 概述

每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedHat、CentOS 的 yum。Helm 则是 Kubernetes上 的包管理器,方便我们更好的管理应用。

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。

Helm本质就是让K8s的应用管理(Deployment、Service等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成K8s资源清单文件(deployment.yaml、service.yaml)。 然后调用 Kubectl 自动执行 K8s 资源部署。

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。

Helm 有三个重要的概念:Chart 、Repository 和 Release

  • ChartHelm 的软件包,采用 TAR 格式。是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。 可以将 chart 想象成 apt、yum 中的软件安装包。
  • Release:是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。
  • Repository(仓库)Charts 仓库,用于集中存储和分发 Charts。Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

总结:Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

1.1 Helm具备的能力

  • 简化部署:Helm允许使用单个命令轻松部署和管理应用程序,从而简化了整个部署过程
  • 高度可配置:Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置
  • 版本控制:Helm允许管理应用程序的多个版本,从而轻松实现版本控制和回滚
  • 模板化:Helm Charts使用YAML模板来定义Kubernetes对象的配置,从而简化了配置过程,并提高了可重复性和可扩展性
  • 应用程序库:Helm具有应用程序库的概念,可以轻松地共享和重用Helm Charts,从而简化了多个应用程序的部署和管理;
  • 插件系统:Helm拥有一个强大的插件系统,允许您扩展和定制Helm的功能,以满足特定的需求和要求。

1.2 Helm3 与 Helm2 的区别

Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。
用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。

在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。

Helm 的官方网站 https://helm.sh/

要下载与您的集群版本兼容的Helm

在这里插入图片描述

二、Helm 部署

2.1 安装 helm

//上传helm-v3.6.0-linux-amd64.tar.gz
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version

//命令补全 
source <(helm completion bash)

在这里插入图片描述

2.2 使用 helm 安装 Chart

//添加常用的 chart 仓库,
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator
helm repo add kaiyuanshe http://mirror.kaiyuanshe.cn/kubernetes/charts
helm repo add dandydev https://dandydeveloper.github.io/charts
helm repo add traefik         https://helm.traefik.io/traefik
helm repo add rancher-stable  https://releases.rancher.com/server-charts/stable
helm repo add test            https://charts.kubesphere.io/test
helm repo add elastic         https://helm.elastic.co
//更新 charts 列表
helm repo update          
helm repo list

在这里插入图片描述

//查看 stable 仓库可用的 charts 列表
helm search repo stable

//删除 incubator 仓库
helm repo remove incubator

//查看 chart 信息
helm show chart stable/mysql     #查看指定 chart 的基本信息

helm show all stable/mysql		 #获取指定 chart 的所有信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//安装 chart
helm install my-redis test/redis [-n default]   #指定 release 的名字为 my-redis,-n 指定部署到 k8s 的 namespace

helm install test/redis --generate-name    #不指定 release 的名字时,需使用 –generate-name 随机生成一个名字

//查看所有 release
helm ls 
helm list

//查看指定的 release 状态
helm status my-redis               

//删除指定的 release
helm uninstall my-redis 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 Helm 自定义模板

charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

2.3.1 拉取 Chart

//拉取 chart
mkdir /opt/helm
cd /opt/helm

helm pull stable/mysql

ls
mysql-1.6.9.tgz

tar xf mysql-1.6.9.tgz

yum install -y tree

tree mysql

在这里插入图片描述

可以看到,一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。

Chart.yaml:软件包自描述文件。这个文件必须有 name 和 version(chart版本) 的定义。用于描述这个 Chart的基本信息,包括名字、描述信息以及版本等
templates:目录里面存放所有yaml模板文件。deployment.yaml、service.yaml、ingress.yaml等
deployment.yaml:创建 deployment 的资源清单文件
service.yaml:为 deployment 创建 service 的资源清单文件
ingress.yaml: 创建 ingress 对象的资源清单文件
values.yaml :用于存储 templates 目录中模板文件中用到变量的值
NOTES.txt:用于介绍Chart帮助信息, helm install 部署后展示给用户。例如:如何使用这个Chart、列出 include 默认设置等
_helpers.tpl:放置模板的地方,可以在整个chart中重复使用

2.3.2 创建自定义的 Chart

//创建自定义的 chart
helm create nginx

tree nginx

在这里插入图片描述

cat /opt/helm/nginx/templates/deployment.yaml

在 templates 目录下 yaml 文件模板中的变量(go template语法)的值默认是在 nginx/values.yaml 中定义的,只需要修改 nginx/values.yaml 的内容,也就完成了 templates 目录下 yaml 文件的配置。
比如在 deployment.yaml 中定义的容器镜像:

image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
cat /opt/helm/nginx/values.yaml | grep repository

以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。

2.3.3 修改 Chart

//修改 chart
vim /opt/helm/nginx/Chart.yaml
apiVersion: v2
name: nginx                     #chart名字
description: A Helm chart for Kubernetes
type: application               #chart类型,application或library
version: 0.1.0                  #chart版本
appVersion: 1.16.0              #application部署版本
vim /opt/helm/nginx/values.yaml
replicaCount: 3
image:
  repository: soscscs/myapp  #设置镜像仓库
  pullPolicy: IfNotPresent
  tag: v1                 #设置镜像标签
......
 service:
  type: ClusterIP
  port: 8080
  targetport: 80
......

在这里插入图片描述

在这里插入图片描述

vim /opt/helm/nginx/templates/service.yaml
...
targetPort: {{ .Values.service.targetport }}
...

在这里插入图片描述

vim /opt/helm/nginx/Chart.yaml

在这里插入图片描述

2.3.4 打包 Chart

//打包 chart
helm lint nginx        #检查依赖和模版配置是否正确

helm package nginx     #打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz

//部署 chart
helm install nginx-demo1 ./nginx-0.1.0.tgz -n test01
或
helm install nginx-demo2 ./nginx -n test01 

helm ls -n test01
kubectl get all -n test01

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.5 升级 Chart

//升级Chart
vim values.yaml
......
image:
  repository: soscscs/myapp
  pullPolicy: IfNotPresent
  tag: v2
......  
service:
  type: NodePort
  port: 8080
  targetport: 80

ingress:
  enabled: true
  className: nginx
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: www.nginx.com
      paths:
        - path: /
          pathType: Prefix
......  

在这里插入图片描述

kubectl get ingressclasses.networking.k8s.io 

在这里插入图片描述

在这里插入图片描述

vim Chart.yaml

在这里插入图片描述

//开始升级
cd ..
helm package nginx
helm upgrade nginx-demo1 ./nginx-0.2.0.tgz -n test01
helm ls -n test01
kubectl get all -n test01
kubectl get pod nginx-demo1-6d5dd7cbf6-5465f -n test01 -oyaml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

kubectl get ingress -n test01 
kubectl get svc -n ingress-nginx 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.3.6 回退 Chart

#根据 release 版本回滚
helm ls -n test01
helm history -n test01 nginx-demo1         #查看 release 版本历史

helm rollback -n test01 nginx-demo1 1      #回滚 release 到版本1

helm history -n test01 nginx-demo1         #nginx release 已经回滚到版本 1

在这里插入图片描述
在这里插入图片描述
通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。

在命令行使用 --set 指定参数来部署(install,upgrade)release
helm upgrade nginx nginx --set image.tag='1.15'
注:此参数值会覆盖掉在 values.yaml 中的值,如需了解其它的预定义变量参数,可查看 helm 官方文档。

三、Helm 仓库

helm 可以使用 harbor 作为本地仓库,将自定义的 chart 推送至 harbor 仓库。

//安装 harbor
#上传 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose

tar zxf harbor-offline-installer-v1.9.1.tgz
cd harbor/
vim harbor.yml

在这里插入图片描述
在这里插入图片描述

#安装带有 Clair service 和 chart 仓库服务的 Harbor
./install.sh --with-clair --with-chartmuseum

#docker-compose down && docker-compose up -d    重启harbor服务

在这里插入图片描述

浏览器输入本机IP访问harbor仓库,默认的管理员用户名和密码是 admin/Harbor12345

在这里插入图片描述

//在 master01节点 安装 push 插件
#在线安装
helm plugin install https://github.com/chartmuseum/helm-push

#离线安装
wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz

mkdir ~/.local/share/helm/plugins/helm-push
tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push

helm repo ls

在这里插入图片描述

点击 “+新建项目” 按钮
填写项目名称为 “chart_repo”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目

在这里插入图片描述
在这里插入图片描述

//添加仓库
helm repo add harbor http://192.168.154.14/chartrepo/chart_repo --username=admin --password=Harbor12345
注:这里的 repo 的地址是<Harbor URL>/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称, 则默认使用 library 这个项目。

//推送 chart 到 harbor 中
cd /opt/helm
helm push nginx harbor
helm push nginx-0.1.0.tgz harbor
helm push nginx-0.2.0.tgz harbor

查看 chart_repo 项目中的 Helm Charts,还有其下不同版本号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/news/357718.html

相关文章:

  • 基于springboot的画师约稿系统的设计与实现
  • mysql 的存储引擎各自的优缺点
  • 01_MVCC(多版本并发机制)
  • Leetcode 3327. Check if DFS Strings Are Palindromes
  • 2024.09.28校招 实习 内推 面经
  • Spring Boot优化大创项目风险评估流程
  • HarmonyOS 开发知识总结
  • Discuz | 起尔开发 传奇开服表游戏公益服发布论坛网站插件
  • 记一次 Flink mongoDB CDC 到Kafka遇到的问题
  • 2011年国赛高教杯数学建模A题城市表层土壤重金属污染分析解题全过程文档及程序
  • Spring Boot视频网站:构建可扩展的视频服务平台
  • 河源市社保卡照片要求及手机自拍拿数码相片回执的方法
  • select数据备份和恢复
  • 图论day61:最小生成树|最小生成树理论基础:prim算法、kruskal算法(思维导图版)、53.寻宝(卡码网 第七期模拟笔试)
  • 【elasticsearch】安装和启动
  • vmware中使用U盘安装win10系统
  • SpringBoot物流管理系统设计与实现
  • 【数据结构与算法】链表(下)
  • SpringDataRedis快速入门
  • JDK17下,使用SHA1算法报Certificates do not conform to algorithm constraints错误