Kubernetes k8s集群之包管理器Helm方式

 更新时间:2024年08月17日 09:55:37   作者:-山海皆可平  
这篇文章主要介绍了Kubernetes k8s集群之包管理器Helm方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedHat、CentOS

的 yum。Helm 则是 Kubernetes上 的包管理器,方便我们更好的管理应用

一.Helm概述

1.Helm的简介

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

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

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

Helm的官网地址:https://helm.sh/

2.Helm的三个重要概念

在Helm中 有三个重要的概念,分别为:Chart 、Repository 和 Release

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

还有一个在Helm3版本中就被移除的概念

Tiller: Helm 2.x版本中,Helm采用Client/Server的设计,Tiller就是Helm的Server部分,需要具备集群管理员权限才能安装到K8s集群中运行。

Tiller与Helm client进行交互,接收client的请求,再与K8s API Server通信,根据传递的Charts来生成Release。而在最新的Helm 3.x中,据说是为了安全性考虑移除了Tiller。

Helm在k8s集群运用中,总的来讲其作用过程:Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。

你可以在 Helm 的 chart repositories 中寻找新的 chart

3.Helm2与Helm3的的区别

helm2的部署方式与使用

Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。

用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。

Helm3的部署与使用

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

二.Helm 部署

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 version
 
 
//命令补全
source <(helm completion bash)

2.使用 helm 安装 Chart

//添加常用的 chart 仓库,
helm repo add bitnami https://charts.bitnami.com/bitnami
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
 
//查看 charts 列表        
helm repo list
 
//更新 charts 列表
helm repo update          
 
//查看 stable 仓库可用的 charts 列表
helm search repo stable
 
//删除 incubator 仓库
helm repo remove incubator
 
helm search repo <仓库名称>                #查看仓库中可用的chart包列表
helm search repo <软件名>                  #在仓库列表查询中可用的chart包
helm search repo <chart包> -l              #查看仓库中指定的chart包所有可用的历史版本列表,<chart包>格式为<仓库名称/软件包>
helm show chart <chart包>                  #查看chart包的基本信息
chart包安装、卸载:
helm install -n <命名空间> <实例名称> <chart包> [--version <chart版本>]    #通过chart包安装实例,默认安装最新版本
helm ls -n <命名空间>                                                      #查看helm安装的实例
helm list -n <命名空间>                                                   
helm status -n <命名空间> <实例名称>                                       #查看实例的状态
helm uninstall -n <命名空间> <实例名称>                                    #卸载实例

3.Helm 自定义模板

chart包的管理:
helm pull <chart包>                   #从仓库下载chart包
helm create <chart包>                 #自建chart包
helm lint <chart包目录>               #检查chart包中的文件语法格式
helm package <chart包目录>            #将chart包目录打包成tar格式压缩包
vim Chart.yaml
vim values.yaml
修改此文件中的配置
 
helm lint myapp/   #检查chart包中的文件语法格式
helm package myapp/  #将chart包目录打包成tar格式压缩包
 
helm install -n xy101 myapp-1 myapp-1.0.0.tgz  #部署
升级:修改配置文件后重新生成chart包
helm upgrade -n <命名空间> <实例名称> <chart包>                            #升级实例
helm history -n <命名空间> <实例名称>                                      #查看实例的历史版本列表
helm rollback -n <命名空间> <实例名称> <REVISION>                          #回滚实例到指定的chart历史版本

4.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
hostname: 192.168.80.13
harbor_admin_password: Harbor12345     #admin用户初始密码
data_volume: /data                     #数据存储路径,自动创建
chart:
  absolute_url: enabled                #在chart中启用绝对url
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor          #日志路径
 
#安装带有 Clair service 和 chart 仓库服务的 Harbor
./install.sh --with-clair --with-chartmuseum
 
//安装 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 -p ~/.local/share/helm/plugins/helm-push
tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push
#登录 Harbor WEB UI 界面,创建一个新项目
浏览器访问:http://192.168.80.101 ,默认的管理员用户名和密码是 admin/Harbor12345
点击 “+新建项目” 按钮
填写项目名称为 “chart_repo”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目
 
#添加仓库
helm repo add harbor http://192.168.80.13/chartrepo/chart_repo --username=admin --password=Harbor12345
#注:这里的 repo 的地址是<Harbor URL>/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称,则默认使用 library 这个项目。
 
helm repo ls
 
#推送 chart 到 harbor 中
cd /opt/helm
helm push nginx harbor
 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Java将Excel中的数字转换为文本或将文本型数字转换为数字

    使用Java将Excel中的数字转换为文本或将文本型数字转换为数字

    在 Excel 中,数字有时会以文本的形式存储,这可能会影响数据的计算、排序和处理,无论是将数字转换为文本,还是将文本型数字转换为数字,这两种操作在处理 Excel 数据时都非常常见且重要,本文将介绍如何使用 Java 完成这两个任务,需要的朋友可以参考下
    2025-12-12
  • 详解spring cloud feign踩坑记录

    详解spring cloud feign踩坑记录

    这篇文章主要介绍了spring cloud feign踩坑记录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 一文读懂 Java 中的 ==、equals () 与 hashCode ()原理与避坑指南

    一文读懂 Java 中的 ==、equals () 与 ha

    在 Java 开发中,==、equals() 和 hashCode() 是处理对象比较和哈希计算的核心元素,理解它们之间的区别与联系对编写高质量代码至关重要,本文给大家介绍Java 中的 ==、equals()与hashCode()原理,感兴趣的朋友一起看看吧
    2025-09-09
  • IDEA搭建Maven模块化项目的实现

    IDEA搭建Maven模块化项目的实现

    本文主要介绍了IDEA搭建Maven模块化项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SpringBoot使用Tika进行文档解析的完整指南

    SpringBoot使用Tika进行文档解析的完整指南

    Tika是一款Apache开源的,跨平台,支持多品种文本类型的内容检测和提取工具,本文主要为大家介绍了SpringBoot使用Tika进行文档解析的完整步骤,希望对大家有所帮助
    2025-07-07
  • 如何通过Java实现加密、解密Word文档

    如何通过Java实现加密、解密Word文档

    这篇文章主要介绍了如何通过Java实现加密、解密Word文档,对一些重要文档,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件。下面介绍了一种比较简单的方法给Word文件加密以及如何给已加密的Word文件解除密码保护,需要的朋友可以参考下
    2019-07-07
  • java莫名其妙的挂掉问题及解决方案

    java莫名其妙的挂掉问题及解决方案

    文章介绍了Java服务死掉并被OOMKiller杀死的情况,通过查看系统日志和Cron任务,怀疑存在恶意软件,任务名称和参数看起来随机,并且执行用户为root,具有高度可疑性,作者建议检查并移除可疑任务
    2026-02-02
  • Java使用IO流实现音频的剪切和拼接

    Java使用IO流实现音频的剪切和拼接

    这篇文章主要为大家详细介绍了Java使用IO流实现音频的剪切和拼接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 以Java代码为例讲解设计模式中的简单工厂模式

    以Java代码为例讲解设计模式中的简单工厂模式

    简单来说,工厂模式就是按照需求来返回一个类型的对象,使用工厂模式的意义就是,如果对象的实例化与代码依赖太大的话,不方便进行扩展和维护,使用工厂的目的就是使对象的实例化与主程序代码就行解耦.来具体看一下:
    2016-05-05
  • Java 使用Calendar计算时间的示例代码

    Java 使用Calendar计算时间的示例代码

    这篇文章主要介绍了Java 使用Calendar计算时间的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论