helm3的基础使用

helm3的资源与调试

概述

美国时间 2019 年 11 月 13 日,Helm 团队宣布 Helm 3 第一个稳定版本发布。
Helm 3 以 Helm 2 的核心功能为基础,对 Chart repo、发行版管理、安全性和 library Charts 进行了改进。
相比 Helm 2,Helm 3 最明显的变化是 Tiller 的删除,它新增丰富功能,某些功能已被弃用或重构,与 Helm 2 不再兼容。此外,Helm 3 还引入了一些新的实验功能,包括 OCI 支持。
Helm Go SDK 已重构为通用,目标是共享和重用 Go 社区开源代码。

什么是 Helm

Helm 为团队提供了在 Kubernetes 内部创建、安装和管理应用程序时需要协作的工具,有点类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。
有了 Helm,开发者可以:

  • 查找要安装和使用的预打包软件(Chart)
  • 轻松创建和托管自己的软件包
  • 将软件包安装到任何 K8s 集群中
  • 查询集群以查看已安装和正在运行的程序包
  • 更新、删除、回滚或查看已安装软件包的历史记录
  • ……

Helm 组件及相关术语

helm

Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

Chart

Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

Repoistory

Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

Release

使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。

安装 Helm3

二进制安装

$ wget https://get.helm.sh/helm-v3.1.2-linux-amd64.tar.gz

$ tar -zxvf helm-v3.1.2-linux-amd64.tar.gz$ cd linux-amd64

$ mv helm /usr/local/bin/$ helm --help

脚本安装

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

$ chmod 700 get_helm.sh$ ./get_helm.sh

命令补全

# 在~/.bashrc追加
source <(helm completion bash)

其他安装详情

快速开始

添加常用仓库

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
$ helm repo update              # Make sure we get the latest list of charts

微软也提供了stable仓库的镜像:

列出stable仓库可以安装的charts

helm search repo stable

安装stable仓库的一个mysql的chart

$ helm install stable/mysql --generate-name

查看详情

$ helm show all stable/mysql

查看chart怎么写的

$ helm pull stable/mysql
$ ls mysql-1.6.3.tgz$ tar -zxvf mysql-1.6.3.tgz
$ tree mysqlmysql

查看用helm安装的release

$ helm ls
NAME             VERSION   UPDATED                   STATUS    CHART
smiling-penguin  1         Wed Sep 28 12:59:46 2016  DEPLOYED  mysql-0.1.0

卸载release

$ helm uninstall smiling-penguin

查看status

$ helm status smiling-penguin
Status: UNINSTALLED

Chart 的使用

下面我们通过一个完整的示例来学习如何使用 Helm 创建、打包、分发、安装、升级及回退Kubernetes应用。

创建一个名为 mychart 的 Chart

官网的例子

$ helm create mychart

该命令在当前目录创建了一个 mychart 目录,该目录结构如下所示:

$ tree mychart/mychart/

介绍:

Templates 目录下 YAML 文件模板(go template语法)填充的值默认都是在 values.yaml 里定义的,比如在 deployment.yaml 中定义的容器镜像:

image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
$ cat mychart/values.yaml|grep repository  
repository: nginx

以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。

编写应用的介绍信息

打开 mychart/Chart.yaml:

编写应用具体部署信息
编辑 mychart/values.yaml,它默认会在 Kubernetes 部署一个 Nginx。下面是 mychart 应用的 values.yaml 文件的内容:

检查依赖和模板配置是否正确

$ helm lint mychart/
==> Linting mychart/[INFO] 
Chart.yaml: icon is recommended1 chart(s) 
linted, 0 chart(s) failed

如果文件格式错误,可以根据提示进行修改。

将应用打包

$ helm package mychart
Successfully packaged chart and saved it to: /root/mychart-0.1.0.tgz

mychart 目录会被打包为一个 mychart-0.1.0.tgz 格式的压缩包,该压缩包会被放到当前目录下。
如果你想看到更详细的输出,可以加上 --debug 参数来查看打包的输出。

离线部署

注意: ~/.kube/config不存在的情况下要用 helm --kubeconfig 指定配置文件

# 方式一
$ helm install demo-test ./mychart
# 可根据不同的配置来install,默认是values.yaml
# helm install demo-test ./mychart -f ./mychart/values-prod.yaml
# 方式二
$ helm install demo-test ./mychart-0.1.0.tgz
$ helm list
# 升级 
$ helm upgrade demo-test ./mychart-0.2.0.tgz
$ helm uninstall demo-test

将应用发布到 Repository

harbor1.6+ 支持存储 helm charts,这里使用 helm 安装 harbor
这里为了简化测试操作,我关闭了数据卷的挂载并使用的是 NodePort 方式进行访问。

$ helm repo add goharbor https://helm.goharbor.io
$ helm repo update
# 查看harbor chart的各个版本
$ helm search repo harbor -l
# --version选择chart的版本
$ helm install harbor goharbor/harbor --set persistence.enabled=false --set expose.type=nodePort --set expose.tls.enabled=false --set externalURL=http://10.13.84.187:30002

参数说明:

  • persistence.enabled=false 关闭存储,为了方便操作,真实使用时需要挂在存储
  • expose.type=nodePort 使用 NodePort 访问
  • expose.tls.enabled=false 关闭tls
  • externalURL=http://10.13.84.187:30002 设置登录 harbor 的外部链接,ip是某个node的ip

harbor 装好之后,我们访问 http://10.13.84.187:30002 进行登录 harbor, harbor 的默认账号密码是 admin/Harbor12345
新建一个项目 chart_repo
新建一个用户test,密码Test1234,加入到项目的成员里面,并赋予权限
安装使用 helm-push 插件

helm plugin install https://github.com/chartmuseum/helm-push

超时没装成功,直接下载:

$ mkdir ~/.local/share/helm/plugins/helm-push
$ wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz$ tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push$ helm push --help

添加repo

# helm repo add --ca-file  --cert-file  --key-file      --username  --password   http://10.13.84.187:30002/chartrepo/chart_repo
$ helm repo add myrepo http://10.13.84.187:30002/chartrepo/chart_repo

push

$ helm push mychart/ myrepo -u test -p Test1234Pushing mychart-0.1.0.tgz to myrepo...Done.

查找chart

$ helm repo update
$ helm search repo mychart
NAME              CHART VERSION    APP VERSION    DESCRIPTION                
myrepo/mychart    0.1.0            1.16.0          A Helm chart for Kubernetes

部署应用

注意: ~/.kube/config不存在的情况下要用 helm --kubeconfig 指定配置文件

# helm install --ca-file  --cert-file  --key-file      --username= --password= --version 0.2.0 /mychart
# 在部署前使用 --dry-run 参数验证 Chart 的配置
$ helm install demo-test  --dry-run --debug myrepo/mychart
# 没问题就install
$ helm install demo-test  myrepo/mychart

测试:

export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=demo-test" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:80

访问nginx

curl http://127.0.0.1:8080

使用下面的命令列出的所有已部署的 Release 以及其对应的 Chart。

$ helm list
NAME                      NAMESPACE    REVISION    UPDATED                                    STATUS      CHART                      APP VERSION
demo-test                 default      1           2020-04-21 11:06:27.672714497 +0800 CST    deployed    mychart-0.1.0              1.16.0  

从上面 helm list 输出的结果中我们可以看到有一个 REVISION(更改历史)字段,该字段用于表示某一个 Release 被更新的次数,我们可以用该特性对已部署的 Release 进行回滚。
查看状态

$ helm status demo-test 
NAME: demo-testLAST 
DEPLOYED: Tue Apr 21 11:06:27 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:1. Get the application URL by running these commands:  
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=demo-test" -o jsonpath="{.items[0].metadata.name}")  
echo "Visit http://127.0.0.1:8080 to use your application"  
kubectl --namespace default port-forward $POD_NAME 8080:80

升级应用

修改 mychart/Chart.yaml 文件

apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
type: application
# 改了下面两行
version: 0.2.0
appVersion: 1.17.0

上传chart

$ helm push mychart/ myrepo -u test -p Test1234
Pushing mychart-0.2.0.tgz to myrepo...Done.
$ helm repo udpate
$ helm search repo mychart -l
NAME              CHART VERSION    APP VERSION    DESCRIPTION                
myrepo/mychart    0.2.0            1.17.0          A Helm chart for Kubernetes
myrepo/mychart    0.1.0            1.16.0          A Helm chart for Kubernetes
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容