k8s-Helm包管理器

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 Kubernetes API
【K8S系列】第十一讲:包管理神器-Helm
【K8S系列】第十一讲:包管理神器-Helm
257 0
|
3月前
|
存储 Kubernetes 关系型数据库
Helm 简介:Kubernetes 的包管理器
Helm 简介:Kubernetes 的包管理器
101 2
|
存储 Kubernetes Cloud Native
详解 kubernetes 包管理工具 Helm
当提到 Helm 时,我们常常会做这样的类比:Helm 之于 Kubernetes,就像 apt 之基于 debian 的系统,yum 或 rpm 之于基于 Red Hat 的系统一样。除了包管理之外,Helm 还内置了配置管理的许多内容。
850 0
详解 kubernetes 包管理工具 Helm
|
存储 Kubernetes NoSQL
kubernetes 学习之helm包管理器离线安装nfs-client-provisioner
kubernetes 学习之helm包管理器离线安装nfs-client-provisioner
874 0
|
运维 Kubernetes Ubuntu
Kubernetes 集群包管理器 Helm3 部署
Kuberbetes 能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而 Helm 就是解决这个问题的。
1007 1
Kubernetes 集群包管理器 Helm3 部署
|
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 集群中的服务定义。
1681 0
|
开发框架 Kubernetes 网络协议
ASP.NET Core on K8S深入学习(10)K8S包管理器Helm
本文介绍了K8S的包管理器Helm的基本概念与安装和使用,Helm能够帮助我们像使用apt或yum那样管理安装、部署、升级和删除容器化应用,最后演示了如何为我们的ASP.NET Core API应用开发自己的chart,并在团队中共享chart。
2001 0
|
Kubernetes Perl 容器
是时候使用Helm了:Helm, Kubernetes的包管理工具
目前我们的一个产品共有4套环境:dev环境、test环境、staging环境、production环境。 其中dev, test, staging环境在一个Kubernetes集群上以不同namespace部署,production环境部署在另一个Kubernetes集群上。
1332 0
|
13天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
14天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。