k8s-Helm包管理器

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: k8s-Helm包管理器

什么是Helm

Kubernetes 包管理器

Helm 是查找、分享和使用软件构件 Kubernetes 的最优方式。

Helm 管理名为 chart 的 Kubernetes 包的工具。Helm 可以做以下的事情:

  • 从头开始创建新的 chart
  • 将 chart 打包成归档(tgz)文件
  • 与存储 chart 的仓库进行交互
  • 在现有的 Kubernetes 集群中安装和卸载 chart
  • 管理与 Helm 一起安装的 chart 的发布周期

对于Helm,有三个重要的概念:

  1. chart 创建Kubernetes应用程序所必需的一组信息。
  2. config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象。
  3. release 是一个与特定配置相结合的chart的运行实例。

helm架构

重要概念

  • chart

chart 创建 Kubernetes 应用程序所必需的一组信息

  • config

config 包含了可以合并到打包的 chart 中的配置信息,用于创建一个可发布的对象。

  • release

release 是一个与特定配置相结合的 chart 的运行实例。

组件

Helm 客户端

**Helm 客户端 是终端用户的命令行客户端。负责以下内容:

  • 本地 chart 开发
  • 管理仓库
  • 管理发布
  • 与 Helm 库建立接口
  • 发送安装的 chart
  • 发送升级或卸载现有发布的请求
Helm 库

**Helm 库 提供执行所有 Helm 操作的逻辑。与 Kubernetes API 服务交互并提供以下功能:

  • 结合 chart 和配置来构建版本
  • 将 chart 安装到 Kubernetes 中,并提供后续发布对象
  • 与 Kubernetes 交互升级和卸载 chart

独立的 Helm 库封装了 Helm 逻辑以便不同的客户端可以使用它。

安装heml

helm类似于一个包管理工具,主要是为了解决k8s资源编排文件过多难以维护的问题。

使用halm快速部署应用

  1. 搜索应用:helm search repo nginx
  2. 安装应用:helm install nginx_name nginx
  3. 查看已安装应用:helm list
  4. 查看应用状态:helm status nginx
#下载二进制文件
[root@k8s-master helm]# wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz
--2024-01-04 17:06:53--  https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz
正在解析主机 get.helm.sh (get.helm.sh)... 152.199.39.108, 2606:2800:247:1cb7:261b:1f9c:2074:3c
正在连接 get.helm.sh (get.helm.sh)|152.199.39.108|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:12924654 (12M) [application/x-tar]
正在保存至: “helm-v3.2.3-linux-amd64.tar.gz”

100%[====================================================================================================================>] 12,924,654  3.87MB/s 用时 3.2s   

2024-01-04 17:06:59 (3.87 MB/s) - 已保存 “helm-v3.2.3-linux-amd64.tar.gz” [12924654/12924654])

[root@k8s-master helm]# ls
helm-v3.2.3-linux-amd64.tar.gz
#解压
[root@k8s-master helm]# tar -zxvf helm-v3.2.3-linux-amd64.tar.gz
linux-amd64/
linux-amd64/README.md
linux-amd64/LICENSE
linux-amd64/helm
[root@k8s-master helm]# ls
helm-v3.2.3-linux-amd64.tar.gz  linux-amd64
[root@k8s-master helm]# cd linux-amd64/
[root@k8s-master linux-amd64]# ls
helm  LICENSE  README.md
[root@k8s-master linux-amd64]# cp helm /usr/local/bin/
[root@k8s-master linux-amd64]# cd ~
[root@k8s-master ~]# pwd
/root
# 输入版本号 安装成功
[root@k8s-master ~]# helm version
version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}

添加 helm 仓库

可以从helm仓库下载东西

# 安装 ingress-nginx
[root@k8s-master ~]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
#查看仓库列表
[root@k8s-master ~]# helm repo list
NAME          URL                                       
ingress-nginx https://kubernetes.github.io/ingress-nginx
# 搜索 ingress-nginx 这是配置好的软件的安装包
[root@k8s-master ~]# helm search repo ingress-nginx
NAME                        CHART VERSION APP VERSION DESCRIPTION                                       
ingress-nginx/ingress-nginx 4.9.0         1.9.5       Ingress controller for Kubernetes using NGINX a...

Helm 的常用命令

命令 描述
helm search 使用关键词搜索 chart
helm pull 拉取远程仓库中的 chart 到本地
helm create 在本地创建新的 chart。
helm dependency 管理 chart 的依赖。
helm install 安装 chart。
helm list 列出所有的 release。
helm lint 检查 chart 配置是否有误。
helm package 打包本地 chart。
helm repo 列出、增加、更新、删除 chart 仓库。
helm rollback 回滚 release 到历史版本。
helm uninstall 卸载 release。
helm upgrade 升级 release。

chart 详解

目录结构

mychart
├── Chart.yaml
├── charts # 该目录保存其他依赖的 chart(子 chart)
├── templates # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件
│   ├── NOTES.txt # 用户运行 helm install 时候的提示信息
│   ├── _helpers.tpl # 用于创建模板时的帮助类
│   ├── deployment.yaml # Kubernetes deployment 配置
│   ├── ingress.yaml # Kubernetes ingress 配置
│   ├── service.yaml # Kubernetes service 配置
│   ├── serviceaccount.yaml # Kubernetes serviceaccount 配置
│   └── tests
│       └── test-connection.yaml
└── values.yaml # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖

Redis chart 实践

创建StorageClass制备器,配置NFS动态制备

1、k8s 中提供了一套自动创建 PV 的机制,就是基于 StorageClass 进行的,通过 StorageClass 可以实现仅仅配置 PVC,然后交由 StorageClass 根据 PVC 的需求动态创建 PV。

2、每个 StorageClass 都有一个制备器(Provisioner),用来决定使用哪个卷插件制备 PV。

# 在master节点上安装nfs服务,(每个node节点上都安装下nfs,这样的目的是为了node节点可以驱动nfs设备)
[root@k8s-master01 ~]# yum install nfs-utils -y

# 准备共享目录
 [root@k8s-master01 ~]# mkdir /nfs_data/rw/ 
 [root@k8s-master01 ~]# mkdir /nfs_data/ro/

# 暴露服务
[root@k8s-master01 ~]# vim /etc/exports
/nfs_data/rw 192.168.18.0/24(rw,sync,no_subtree_check,no_root_squash)
/nfs_data/ro 192.168.18.0/24(ro,sync,no_subtree_check,no_root_squash)

# 启动nfs服务
[root@k8s-master01 ~]# systemctl restart nfs

修改 helm 源
# 查看默认仓库
helm repo list

# 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add aliyun https://apphub.aliyuncs.com/stable
helm repo add azure http://mirror.azure.cn/kubernetes/charts
搜索 redis chart
# 搜索 redis chart
helm search repo redis

# 查看安装说明
helm show readme bitnami/redis
修改配置
# 先将 chart 拉到本地
helm pull bitnami/redis

[root@k8s-master k8s]# ls
Affinity  helm  ingress  jobs  pic  pod-toleration.yaml  redis-18.7.1.tgz  tolera

# 解压后,修改 values.yaml 中的参数
[root@k8s-master k8s]# tar -xvf redis-18.7.1.tgz

#解压好了创建了一个redis的文件夹
[root@k8s-master k8s]# ls
Affinity  helm  ingress  jobs  pic  pod-toleration.yaml  redis  redis-18.7.1.tgz  tolera

[root@k8s-master k8s]# cd redis
[root@k8s-master redis]# ls
Chart.lock  charts  Chart.yaml  img  README.md  templates  values.schema.json  values.yaml

#修改yaml文件
[root@k8s-master redis]# vi values.yaml


# 修改 storageClass 为 nfs-storage
# 设置 redis 密码 password
# 修改集群架构 architecture,默认是主从(replication,3个节点),可以修改为 standalone 单机模式
# 修改实例存储大小 persistence.size 为需要的大小  1GB
# 修改 service.nodePorts.redis 向外暴露端口,范围 <30000-32767> 可以不修改

# 安装操作
# 创建命名空间
kubectl create namespace redis

# 安装
cd ../
helm install redis ./redis -n redis
helm install redis ./redis -n dev


安装

# 安装操作
# 创建命名空间
kubectl create namespace redis

# 安装
cd ../
helm install redis ./redis -n redis

查看安装情况
# 查看 helm 安装列表
helm list

# 查看 redis 命名空间下所有对象信息
[root@k8s-master k8s]# kubectl get all -n redis
NAME                   READY   STATUS    RESTARTS   AGE
pod/redis-master-0     0/1     Pending   0          4m39s
pod/redis-replicas-0   0/1     Pending   0          4m39s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None             <none>        6379/TCP   4m39s
service/redis-master     ClusterIP   10.111.20.39     <none>        6379/TCP   4m39s
service/redis-replicas   ClusterIP   10.110.145.172   <none>        6379/TCP   4m39s

NAME                              READY   AGE
statefulset.apps/redis-master     0/1     4m39s
statefulset.apps/redis-replicas   0/3     4m39s

[root@k8s-master k8s]# kubectl get pvc -n redis
NAME                          STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS          AGE
redis-data-redis-master-0     Pending                                      managed-nfs-storage   5m59s
redis-data-redis-replicas-0   Pending                                      managed-nfs-storage   5m59s

升级和回滚
#升级版本
[root@k8s-master01 redis]# helm upgrade redis ./ -n redis


# 查看历史
helm history redis
# 回退到上一版本
helm rollback redis
# 回退到指定版本
helm rollback redis 3
卸载redis
[root@k8s-master01 redis]# helm delete redis -n redis
kubectl delete pvc redis-data-redis-master-0 -n redis
kubectl delete pvc redis-data-redis-replicas-0 -n redis


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes API
【K8S系列】第十一讲:包管理神器-Helm
【K8S系列】第十一讲:包管理神器-Helm
476 0
|
存储 Kubernetes 关系型数据库
Helm 简介:Kubernetes 的包管理器
Helm 简介:Kubernetes 的包管理器
328 2
|
存储 Kubernetes Cloud Native
详解 kubernetes 包管理工具 Helm
当提到 Helm 时,我们常常会做这样的类比:Helm 之于 Kubernetes,就像 apt 之基于 debian 的系统,yum 或 rpm 之于基于 Red Hat 的系统一样。除了包管理之外,Helm 还内置了配置管理的许多内容。
957 0
详解 kubernetes 包管理工具 Helm
|
运维 Kubernetes Ubuntu
Kubernetes 集群包管理器 Helm3 部署
Kuberbetes 能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而 Helm 就是解决这个问题的。
1164 1
Kubernetes 集群包管理器 Helm3 部署
|
存储 Kubernetes NoSQL
kubernetes 学习之helm包管理器离线安装nfs-client-provisioner
kubernetes 学习之helm包管理器离线安装nfs-client-provisioner
1358 0
|
Kubernetes 容器 数据安全/隐私保护
【Kubernetes系列】第4篇 Kubernetes包管理工具-helm介绍
01 概述 Helm是kubernetes包管理工具,可以方便快捷的安装、管理、卸载kubernetes应用,类似于Linux操作系统中yum或apt-get软件的作用。其主要的设计目的: 创建新的chart包 将charts包文件打包压缩 同chart仓库进行集成,获取charts文件 安装及卸载charts到kubernetes集群 管理通过helm安装的charts应用 02 概念介绍 chart: 一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义。
1828 0
|
Kubernetes Perl 容器
是时候使用Helm了:Helm, Kubernetes的包管理工具
目前我们的一个产品共有4套环境:dev环境、test环境、staging环境、production环境。 其中dev, test, staging环境在一个Kubernetes集群上以不同namespace部署,production环境部署在另一个Kubernetes集群上。
1401 0
|
2月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
272 1
|
2月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
243 89
|
7月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
288 9