helm打包工具
Helm 介绍
Helm
是Kubernetes
的包管理器,可以帮我们简化kubernetes
的操作,一键部署应用。- 官网地址:https://helm.sh/zh/
Helm
广场:https://artifacthub.io/
一、前言
在 k8s 中,我们很多时候需要部署很多个应用,特别是微服务的项目,如果每个服务部署都需要使用kubectl apply
依次执行,这将是一件很痛苦的事。
这个时候,如果一键部署所有应用,使用 Helm (https://helm.sh)是一个很不错的选择,它具备如下的能力:
- 简化部署 :Helm允许使用单个命令轻松部署和管理应用程序,从而简化了整个部署过程;
- 高度可配置:Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置;
- 版本控制 :Helm允许管理应用程序的多个版本,从而轻松实现版本控制和回滚;
- 模板化:Helm Charts使用YAML模板来定义Kubernetes对象的配置,从而简化了配置过程,并提高了可重复性和可扩展性;
- 应用程序库:Helm具有应用程序库的概念,可以轻松地共享和重用Helm Charts,从而简化了多个应用程序的部署和管理;
- 插件系统:Helm拥有一个强大的插件系统,允许您扩展和定制Helm的功能,以满足特定的需求和要求。
Helm本质就是一个k8s的包管理器。
二、Helm工作流程
以下是Helm的工作流程(注意:这里使用的是Helm的v3版本,该版本没有了tiller
而是用更加简单和灵活的架构,直接通过kubeconfig
连接apiserver
,简化安全模块,降低了用户的使用壁垒):
如上图所示,Helm的工作流程总结如下:
- 开发者首先创建并编辑chart的配置;
- 接着打包并发布至Helm的仓库(Repository);
- 当管理员使用helm命令安装时,相关的依赖会从仓库下载;
- 接着helm会根据下载的配置部署资源至k8s。
三、Helm概念
在使用Helm的过程中,需要理解如下的几个核心的概念:
概念 | 描述 |
---|---|
Chart | 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义,类似Homebrew中的formula、APT的dpkg或者Yum的rpm文件 |
Repository | 存储Helm Charts的地方 |
Release | Chart在k8s上运行的Chart的一个实例,例如,如果一个MySQL Chart想在服务器上运行两个数据库,可以将这个Chart安装两次,并在每次安装中生成自己的Release以及Release名称 |
Value | Helm Chart的参数,用于配置Kubernetes对象 |
Template | 使用Go模板语言生成Kubernetes对象的定义文件 |
Namespace | Kubernetes中用于隔离资源的逻辑分区 |
四、Helm的使用
下面简单讲下Helm的使用。
4.1 安装Helm
首先需要在本地机器或Kubernetes集群上安装Helm。可以从Helm官方网站下载适合自己平台的二进制文件,或使用包管理器安装Helm,安装教程参考 https://helm.sh 。
4.2 创建Chart
使用helm create命令创建一个新的Chart,Chart目录包含描述应用程序的文件和目录,包括Chart.yaml、values.yaml、templates目录等;
4.3 配置Chart
使用编辑器编辑Chart配置文件,包括Chart.yaml和values.yaml。
Chart.yaml
包含Chart
的元数据和依赖项
apiVersion: chart API 版本 (必需) #必须有
name: chart名称 (必需) # 必须有
version: 语义化2 版本(必需) # 必须有
kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
description: 一句话对这个项目的描述(可选)
type: chart类型 (可选)
keywords:
- 关于项目的一组关键字(可选)
home: 项目home页面的URL (可选)
sources:
- 项目源码的URL列表(可选)
dependencies: # chart 必要条件列表 (可选)
- name: chart名称 (nginx)
version: chart版本 ("1.2.3")
repository: (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
condition: (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
tags: # (可选)
- 用于一次启用/禁用 一组chart的tag
import-values: # (可选)
- ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
maintainers: # (可选) # 可能用到
- name: 维护者名字 (每个维护者都需要)
email: 维护者邮箱 (每个维护者可选)
url: 维护者URL (每个维护者可选)
icon: 用做icon的SVG或PNG图片URL (可选)
appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
deprecated: 不被推荐的chart (可选,布尔值)
annotations:
example: 按名称输入的批注列表 (可选).
4.4 打包Chart
使用helm package命令将Chart打包为一个tarball文件,例如在wordpress目录中使用helm package命令将Chart打包为一个tarball文件,这将生成一个名为wordpress-0.1.0.tgz
的tarball
文件:
helm package wordpress/
4.5 发布Chart
将打包好的Chart发布到一个Helm Repository中。可以使用 helm repo add 命令添加一个Repository,然后使用helm push命令将Chart推送到Repository中,例如:
helm repo add myrepo https://example.com/chartshelm push wordpress-0.1.0.tgz myrepo
4.6 安装Release
使用helm install命令安装Chart的Release,可以通过命令行选项或指定values.yaml文件来配置Release,例如:
helm install mywordpress myrepo/wordpress
这将在Kubernetes
集群中创建一个名为mywordpress
的Release
,包含WordPress
应用程序和MySQL
数据库。
4.7 管理Release
使用helm ls命令查看当前运行的Release列表,例如:
## 升级 `mywordpress` 的`WordPress`应用程序镜像版本为`5.7.3-php8.0-fpm-alpine`。
helm upgrade mywordpress myrepo/wordpress --set image.tag=5.7.3-php8.0-fpm-alpine
## 可以使用`helm rollback`命令回滚到先前版本
helm rollback mywordpress 1
4.8 更新Chart
在应用程序更新时,可以更新Chart配置文件和模板,并使用helm package命令重新打包Chart。然后可以使用helm upgrade命令升级已安装的Release,可以按照以下步骤更新Chart:
- 在本地编辑Chart配置或添加新的依赖项;
- 使用helm package命令打包新的Chart版本;
- 使用helm push命令将新的Chart版本推送到Repository中;
- 使用helm repo update命令更新本地或远程的Helm Repository;
- 使用helm upgrade命令升级现有Release到新的Chart版本。
例如,可以使用以下命令更新WordPress的Chart版本:
## 这将升级mywordpress的Chart版本到0.2.0,其中包括新的配置和依赖项。
helm upgrade mywordpress myrepo/wordpress --version 0.2.0
## 如果需要删除一个Release,可以使用helm uninstall命令。
helm uninstall mywordpress
## 如果需要删除与Release相关的PersistentVolumeClaim,可以使用helm uninstall命令的--delete-data选项,例如:
helm uninstall mywordpress --delete-data
五、Helm的执行安装顺序
Helm按照以下顺序安装资源:
- Namespace
- NetworkPolicy
- ResourceQuota
- LimitRange
- PodSecurityPolicy
- PodDisruptionBudget
- ServiceAccount
- Secret
- SecretList
- ConfigMap
- StorageClass
- PersistentVolume
- PersistentVolumeClaim
- CustomResourceDefinition
- ClusterRole
- ClusterRoleList
- ClusterRoleBinding
- ClusterRoleBindingList
- Role
- RoleList
- RoleBinding
- RoleBindingList
- Service
- DaemonSet
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- HorizontalPodAutoscaler
- StatefulSet
- Job
- CronJob
- Ingress
- APIService
Helm 客户端不会等到所有资源都运行才退出,可以使用 helm status 来追踪 release 的状态,或是重新读取配置信息:
helm status mynginx
## NAME: mynginx
## LAST DEPLOYED: Fri Oct 29 14:27:32 2021
## NAMESPACE: default
## STATUS: deployed
## REVISION: 1
## TEST SUITE: None
Helm 安装
## Helm V3
## 在 <https://github.com/helm/helm/releases> 找到对应系统的二进制包下载,比如下载v3.0.0-beta.3 的 linux amd64 版:
wget https://get.helm.sh/helm-v3.11.1-linux-amd64.tar.gz
## 查看 helm 版本
helm version
## Helm V2
# curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
Helm 仓库
## 查看当前仓库
helm repo list
## 增加仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add bitnami https://charts.bitnami.com/bitnami
## 跳过ssl证书认证
helm repo add --insecure-skip-tls-verify --username='admin' --password=12345 devops https://docker.devops.tr/chartrepo/bedrock
## 指定ca.crt证书
helm repo add --ca-file ca.crt --username=admin --password=123456 library https://docker.devops.kk/chartrepo/library
Helm 查找
## 查询 bitnami 下的 charts
helm search repo bitnami
## 搜索 harbor 应用
helm search repo harbor
Helm 部署
## 下载远程仓库jenkins应用到本地
helm pull bitnami/harbor
## 部署 bitnami/harbor 应用
helm install --name harbor bitnami/harbor --namespace=harbor --create-namespace
## 查看应用状态
helm status harbor
## 列出已部署的应用
helm list
## 删除应用版本
helm uninstall harbor
## 列出已删除的应用版本
helm ls --deleted
## 列出历史版本
helm history harbor
## 回退上一个版本
helm rollback harbor 1
Helm 应用
helm repo add devops https://docker.devops.kk --username admin --password Harbor12345
## 创建一个名为mychart的chart
helm create mychart
## 打包chart
helm package mychart/
## 上传chart
helm registry login docker.devops.kk --insecure --username admin --password Harbor12345 --ca-file ca.crt
helm push blog-docs-0.2.0.tgz oci://docker.devops.kk/chartrepo/bedrock --ca-file ca.crt