当前位置 : 首页 » 文章分类 :  开发  »  Helm

Helm

k8s 包管理工具 Helm 使用笔记

Helm 官网
https://helm.sh/

Helm Hub
https://hub.helm.sh/

helm / helm
https://github.com/helm/helm

helm / charts
https://github.com/helm/charts

Helm User Guide - Helm 用户指南
https://whmzsu.github.io/helm-doc-zh-cn/
https://github.com/whmzsu/helm-doc-zh-cn


Helm 简介

Helm 是一个 Kubernetes 应用的包管理工具,用来管理 chart —— 预先配置好的安装包资源,类似于 Ubuntu 中的 apt,CentOS 中的 yum,或者 Mac 中的 homebrew,nodejs 中的 npm,Python 中的 pip。
2020 年 4 月 30 日,Helm 从 CNCF 中毕业。

Helm chart 是用来封装 Kubernetes 原生应用程序的 YAML 文件,可以在你部署应用的时候自定义应用程序的一些 metadata,便与应用程序的分发。

Helm 和 chart 的主要作用是:

  • 应用程序封装
  • 版本管理
  • 依赖检查
  • 便于应用程序分发

使用Helm管理kubernetes应用
https://jimmysong.io/kubernetes-handbook/practice/helm.html

42 Helm安装使用
https://www.qikqiak.com/k8s-book/docs/42.Helm%E5%AE%89%E8%A3%85.html

Helm 中的一些基本概念

Chart

Helm 软件包,采用 TAR 格式。包括在 k8s 集群运行应用所需的所有资源,类似 yum 的 rpm 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

Repository

chart 包仓库,用于 chart 包分享,类似 Docker 的 repository。

Release

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。
chart 包在 k8s 集群中跑起来后就是一个 release 实例,同一个 chart 包可以在同一个集群上启动多个不同名的 release 实例。


Helm组成部分

Helm V2 及之前由客户端命令行工具 helm 和服务端 tiller 组成。

Helm客户端命令行工具

Helm Client 是用户命令行工具,其主要负责如下:

  • 本地 chart 开发
  • 仓库管理
  • 与 Tiller sever 交互
  • 发送预安装的 chart
  • 查询 release 信息
  • 要求升级或卸载已存在的 release

Helm服务端Tiller(Helm V2及之前)

Tiller Server 是一个部署在 Kubernetes 集群内部的 server,其与 Helm client, Kubernetes API server 进行交互。Tiller server 主要负责如下:

  • 监听来自 Helm client 的请求
  • 通过 chart 及其配置构建一次发布
  • 安装 chart 到Kubernetes集群,并跟踪随后的发布
  • 通过与Kubernetes交互升级或卸载 chart
  • 简单的说,client 管理 charts,而 server 管理发布 release

Helm V3开始不再需要Tiller组件

从 Helm V3 开始,去掉了部署在 k8s 集群中的 Tiller 组件,或者说相当于把 Tiller 组件从 k8s 集群中移到了 helm 客户端命令行工具中
所以,整个 Helm V3 的安装就只有客户端命令行工具,不再需要在 k8s 集群中安装 tiller 了,简单很多

Tillerless Helm v2
https://rimusz.net/tillerless-helm

Helm V2 到 v3的变更

移除了 Tiller 组件,Helm 的权限通过 kubeconfig 进行配置
改进了upgrade升级策略;
Helm2 中release的默认被安装到了Tiller所在的namespace,在Helm3中默认是Context中指定的名称空间;
Helm2 将数据信息存储在了Configmap上,Helm3中存储在了Secret上;
如果指定安装到新的namespace上,Helm3默认自动创建这个不存在的namespace;
local or stable repositories默认已经被移除;

详见下面的官方文档:
helm v2 到 helm v3 变更说明
https://helm.sh/docs/faq/#changes-since-helm-2


安装Helm v3.3.3

注意:
1、Helm V2 及之前,需要分别安装客户端命令行工具 helm 和服务端组件 tiller
2、Helm V3 及之后,只需安装一个客户端命令行工具 helm,不再需要在 k8s 集群中安装 tiller 了

安装Helm客户端命令行工具

从 Helm release 页面下载最新版 helm, 我这里是 Helm v3.3.3 Linux amd64,解压后将可执行文件拷贝到 /usr/local/bin 即可。
https://github.com/helm/helm/releases

$ wget https://get.helm.sh/helm-v3.3.3-linux-amd64.tar.gz
$ tar -xzvf helm-v3.3.3-linux-amd64.tar.gz
$ sudo mv linux-amd64/helm /usr/local/bin/
$ helm version
version.BuildInfo{Version:"v3.3.3", GitCommit:"55e3ca022e40fe200fbc855938995f40b2a68ce0", GitTreeState:"clean", GoVersion:"go1.14.9"}

Mac brew安装Helm客户端

brew install helm 直接 brew 安装 helm 即可。

安装目录及版本
/usr/local/Cellar/helm/3.2.4_1

Installing Helm
https://helm.sh/docs/intro/install/


安装Helm服务端tiller(Helm V2及之前)

注意:Helm V3 及之后,只需安装一个客户端命令行工具 helm,不再需要在 k8s 集群中安装 tiller 了

要安装 Helm 的服务端程序 tiller, 需要使用到 kubectl 工具,所以先确保 kubectl 工具能够正常的访问 k8s 集群的 apiserver。

1、给 tiller 创建账号并授权
从 Kubernetes 1.6 版本开始,API Server 启用了 RBAC 访问控制。
由于 Helm 的服务端 tiller 负责管理 k8s 集群资源,需要管理权限,而目前的 Tiller 部署时默认没有定义授权的 ServiceAccount,这会导致访问 API Server 时被拒绝。
因此,我们需要向安装在集群 kube-system 命令空间中的 tiller 组件添加必要的权限。

需要两步操作:
1、创建名称为 tiller 的 Service Account
2、给这个 Service Account 绑定角色
可以分别通过 kubectl 命令来操作,也可以写入一个 yaml 配置文件然后 kubectl apply 应用此配置文件。

我这里使用配置文件的形式
创建 helm-rbac.yaml 配置文件

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

kubectl apply -f helm-rbac.yaml 根据配置文件创建资源,这里使用 kubectl applykubectl create 都可以,apply 中发现资源不存在也会 create。

$ kubectl apply -f helm-rbac.yaml
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created

2、helm init部署tiller
执行 helm init --service-account tiller --skip-refresh 来部署 tiller
由于 Helm 默认会去 kubernetes-charts.storage.googleapis.com 拉取镜像,如果你当前执行的机器不能访问该域名的话可以使用国内镜像代替。
Helm 服务端正常安装完成后,Tiller 默认被部署在 kubernetes 集群的 kube-system 命名空间下。

5分钟教你在kubernetes集群上安装Helm,并部署应用
https://juejin.im/post/6844904087234805767


Helm命令

Helm 命令列表
https://helm.sh/docs/helm/

常用的几个命令在下面文档中有结合实例的介绍
Using Helm
https://helm.sh/docs/intro/using_helm/


https://helm.sh/docs/helm/helm_search/

helm search 用于搜索两种类型的资源
helm search hubHelmHub 在线搜索公开的 chart 包
helm search repo 从本地的repo仓库中搜索 chart 包,这些仓库是通过 helm repo add 命令添加的。和yum很像,先本地安装repo,再从repo中安装具体的应用。

$ helm search hub kubernetes-dashboard
URL                                                   CHART VERSION    APP VERSION    DESCRIPTION
https://hub.helm.sh/charts/banzaicloud-stable/k...    0.9.2            1.10.0         General-purpose web UI for Kubernetes clusters
https://hub.helm.sh/charts/k8s-dashboard/kubern...    2.7.1            2.0.4          General-purpose web UI for Kubernetes clusters
$ helm search repo kubernetes-dashboard
NAME                                  CHART VERSION    APP VERSION    DESCRIPTION
k8s-dashboard/kubernetes-dashboard    2.7.1            2.0.4          General-purpose web UI for Kubernetes clusters

helm install

https://helm.sh/docs/helm/helm_install/

安装 chart 包,chart 包安装后会成为一个 release 跑在 k8s 集群中。

例如 helm install happy-panda stable/mariadb 安装 mariadb 到 k8s 集群,安装后的 release 名是 happy-panda

helm list 列出所有release

https://helm.sh/docs/helm/helm_list/

# helm list

NAME                                               REVISION    UPDATED                     STATUS      CHART                                                           APP VERSION    NAMESPACE
asc-server                                         1           Tue Oct 13 22:05:11 2020    DEPLOYED    asc-0.1.0-125840831-1004                                        1.0            default
consul-alone                                       1           Mon Oct 12 10:59:16 2020    DEPLOYED    consul-3.8.1                                                    1.5.3          default
gpu-expoter                                        1           Mon Oct 12 14:07:30 2020    DEPLOYED    gpu-exporter-0.0.4-10638767-0609162318                          0.1            default
gw                                                 1           Mon Oct 12 19:28:15 2020    DEPLOYED    gwadmin-0.1.0-120548028-1599026685732                           1.0            default
harbor-postgresql                                  1           Sat Oct 10 18:14:29 2020    DEPLOYED    postgresql-2.4.0                                                10.6.0         default
harbor-redis                                       1           Sat Oct 10 18:14:54 2020    DEPLOYED    redis-4.2.10                                                    4.0.11         default
kafka-alone                                        1           Mon Oct 12 11:13:48 2020    DEPLOYED    kafka-0.18.0                                                    5.0.1          default
mongodb-alone                                      1           Mon Oct 12 11:04:12 2020    DEPLOYED    mongodb-3.8.1                                                   1.5.3          default
mysql-alone                                        1           Mon Oct 12 11:03:54 2020    DEPLOYED    mysql-1.3.1                                                     5.7.14         default
prometheus-operator                                1           Sat Oct 10 18:14:24 2020    DEPLOYED    prometheus-operator-0.1.20                                      0.25.0         default
public-storage                                     1           Mon Oct 12 14:16:29 2020    DEPLOYED    public-storage-0.1.0-92157065-1585270527995                     1.0            default
redis-alone                                        1           Mon Oct 12 11:04:25 2020    DEPLOYED    redis-3.7.11                                                    5.0.5          default
zookeeper                                          1           Mon Oct 12 11:10:06 2020    DEPLOYED    zookeeper-2.0.1                                                 3.5.5          default

helm status

https://helm.sh/docs/helm/helm_status/
查看 release 的状态


helm upgrade


helm rollback


helm uninstall

https://helm.sh/docs/helm/helm_uninstall/
卸载 release

helm 2.x 中是 helm del 命令删除服务


helm repo add

https://helm.sh/docs/helm/helm_repo_add/
添加仓库到本地,类似 yum 往本地添加yum源。

例如添加 https://kubernetes.github.io/ingress-nginx 仓库并命名为 ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

helm repo list

https://helm.sh/docs/helm/helm_repo_list/
查看已添加到本地的 helm 仓库
例如

$ helm repo list
NAME             URL
ingress-nginx    https://kubernetes.github.io/ingress-nginx
k8s-dashboard    https://kubernetes.github.io/dashboard

helm pull

https://helm.sh/docs/helm/helm_pull/
下载 chart 包并解压(可选)
--untar 设为 true 时下载 chart 包后会自动解压,会在当前目录下创建同名目录后解压到此目录中。

例如 helm pull k8s-dashboard/kubernetes-dashboard --untar=true 会在当前目录下创建 kubernetes-dashboard 目录并解压到此目录中。

helm version

查看 helm 版本

# helm version
Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}

上一篇 Expect脚本

下一篇 Java-Net

阅读
评论
2,316
阅读预计11分钟
创建日期 2020-09-20
修改日期 2020-09-22
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论