kubernetes1.9之helm

£神魔★判官ぃ 2023-07-13 15:29 123阅读 0赞

helm简介

很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序。

我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。

对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。

对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。

除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。

Helm 组件及相关术语

Helm

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

Tiller

Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。

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 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用
Chart 包部署的一个应用实例。

Helm工作原理

在这里插入图片描述

Chart Install 过程:
  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller
  3. Tiller根据Chart和Values生成一个Release
  4. Tiller将Release发送给Kubernetes用于生成Release
Chart Update过程:
  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller
  3. Tiller生成Release并更新指定名称的Release的History
  4. Tiller将Release发送给Kubernetes用于更新Release
Chart Rollback过程:
  1. Helm将要回滚的Release的名称传递给Tiller
  2. Tiller根据Release的名称查找History
  3. Tiller从History中获取上一个Release
  4. Tiller将上一个Release发送给Kubernetes用于替换当前Release

helm部署

Helm 客户端安装
  1. wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.2-linux-amd64.tar.gz
  2. tar xf helm-v2.12.2-linux-amd64.tar.gz
  3. mv linux-amd64/helm /usr/bin/
Helm 服务端安装Tiller

rbac配置文件

  1. $ cat tiller-rbac.yaml
  2. apiVersion: v1
  3. kind: ServiceAccount
  4. metadata:
  5. name: tiller
  6. namespace: kube-system
  7. ---
  8. apiVersion: rbac.authorization.k8s.io/v1
  9. kind: ClusterRoleBinding
  10. metadata:
  11. name: tiller
  12. roleRef:
  13. apiGroup: rbac.authorization.k8s.io
  14. kind: ClusterRole
  15. name: cluster-admin
  16. subjects:
  17. - kind: ServiceAccount
  18. name: tiller
  19. namespace: kube-system
  20. $ kubectl apply -f tiller-rbac.yaml

由于 Helm 默认会去 storage.googleapis.com 拉取镜像,如果你当前执行的机器不能访问该域名的话可以使用以下命令来安装:

  1. $ helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/
  2. $ helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
  3. $ helm repo update
  4. # 创建服务端
  5. $ helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  6. # 这步没执行!创建TLS认证服务端,参考地址:https://github.com/gjmzj/kubeasz/blob/master/docs/guide/helm.md
  7. #$ helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 --tiller-tls-cert /etc/kubernetes/ssl/tiller001.pem --tiller-tls-key /etc/kubernetes/ssl/tiller001-key.pem --tls-ca-cert /etc/kubernetes/ssl/ca.pem --tiller-namespace kube-system --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

在 Kubernetes 中安装 Tiller 服务,因为官方的镜像因为某些原因无法拉取,使用-i指定自己的镜像,可选镜像:registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1(阿里云),该镜像的版本与helm客户端的版本相同,使用helm version可查看helm客户端版本。

如果在用helm init安装tiller server时一直部署不成功,检查deployment,根据描述解决问题。

检测tiller服务端

  1. $ kubectl get service -n kube-system | grep tiller
  2. tiller-deploy ClusterIP 10.254.125.10 <none> 44134/TCP 24m
  3. $ helm version --debug
  4. Client: &version.Version{ SemVer:"v2.12.2", GitCommit:"7d2b0c73d734f6586ed222a567c5d103fed435be", GitTreeState:"clean"}
  5. [debug] Created tunnel using local port: '25838'
  6. [debug] SERVER: "127.0.0.1:25838"
  7. $ helm version --host 10.254.125.10:44134
  8. Client: &version.Version{ SemVer:"v2.12.2", GitCommit:"7d2b0c73d734f6586ed222a567c5d103fed435be", GitTreeState:"clean"}
  9. Server: &version.Version{ SemVer:"v2.12.2", GitCommit:"7d2b0c73d734f6586ed222a567c5d103fed435be", GitTreeState:"clean"}
  10. $ export HELM_HOST=10.254.125.10:44134
  11. $ echo export HELM_HOST=10.254.125.10:44134 >>/etc/profile
  12. $ helm version
  13. Client: &version.Version{ SemVer:"v2.12.2", GitCommit:"7d2b0c73d734f6586ed222a567c5d103fed435be", GitTreeState:"clean"}
  14. Server: &version.Version{ SemVer:"v2.12.2", GitCommit:"7d2b0c73d734f6586ed222a567c5d103fed435be", GitTreeState:"clean"}

安装成功!!

使用helm

helm默认使用的charts源地址是https://kubernetes-charts.storage.googleapis.com,需要替换为阿里的helm源

  1. helm repo list
  2. NAME URL
  3. stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  4. local http://127.0.0.1:8879/charts
  5. # helm源已经变成国内的了,下面这两步是移除默认源的,不需要执行
  6. helm repo remove stable
  7. helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  8. helm repo update
  9. # 添加incubator源,这个源是开发版的安装包,用起来可能不稳定
  10. helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
  11. #列出charts仓库中所有可用的应用
  12. helm search
  13. helm search mysql
  14. helm inspect stable/mysql
  15. # 用helm安装软件包,-name:指定release名字
  16. helm install --name mysql1 stable/mysql
  17. helm list # 查看安装的软件包
  18. helm delete mysql1

helm常用命令

  1. release管理:
  2. install
  3. delete
  4. upgrade/rollback
  5. list
  6. history:查看release历史版本
  7. status:获取release状态信息
  8. chart管理:
  9. create:创建一个chart,生成基础chart示例性文件,供我们修改用
  10. fetch:下载仓库中的一个char到本地
  11. get
  12. inspect
  13. package
  14. verify
  15. # helm把安装包下载到当前用户的家目录下
  16. ll /root/.helm/cache/archive/
  17. # 修改chart里面的values.yaml实现定制,values.yaml文件中##是注释,#是可开启的参数
  18. helm install --name mysql1 -f /root/values.yaml stable/mysql
  19. metrics想要能被prometheus收集数据需要在metadata中将prometheus.io/scrape:设置为true
  20. metadata:
  21. annotations:
  22. prometheus.io/scrape: 'true'
  23. # 部署完应用包后,查看release提示信息
  24. helm status mysql1
  25. helm fetch stable/redis
  26. 查看chart官方手册,了解每个参数的含义https://docs.helm.sh/developing_charts/#charts
  27. # 用helm生成基础chart示例性文件,myapp是chart的名字
  28. helm create myapp
  29. # 做语法检查
  30. helm lint myapp
  31. ==> Linting myapp
  32. [INFO] Chart.yaml: icon is recommended
  33. 1 chart(s) linted, no failures
  34. # 打包
  35. helm package myapp/
  36. Successfully packaged chart and saved it to: /root/myapp-0.1.0.tgz
  37. # 启动8879仓库的服务
  38. helm serve
  39. # 查看local仓库里面是否有我们创建的chart包
  40. helm search myapp
  41. # 部署我们自定义的chart
  42. helm install --name myapp1 local/myapp
  43. # 删除我们部署的chart
  44. helm delete --purge myapp1

发表评论

表情:
评论列表 (有 0 条评论,123人围观)

还没有评论,来说两句吧...

相关阅读