helm安装和使用🎈
helm安装和使用??
原文链接:https://zlxian.com/index.php/archives/280/
Helm安装使用
Helm
这个东西其实早有耳闻,但是一直没有用在生产环境,而且现在对这货评价也是褒贬不一,对于单体服务,部署一套测试环境我相信还是非常快的,但是对于微服务架构的应用,要部署一套新的环境,就有点折磨人了,微服务越多、你就会越绝望的。每个微服务都得维护一套yaml文件,而且每个环境下的配置文件也不太一样,部署一套新的环境成本是真的很高。如果我们能使用类似与yum
的工具来安装我们应用的话是不是就很爽歪歪了啊?Helm
就相当于Kubernetes
环境下的yum
包管理工具。
用途
作为kubernetes的一个包管理工具,helm
具有以下功能:
- 创建新的chart
- chart打包成tgz格式
- 上传chart到chart仓库或从仓库中下载chart
- 在Kubernetes集群中安装或卸载chart
- 管理用
Helm
安装的chart的发布周期
重要概念
Helm 有三个重要概念:
- chart: 包含了创建
Kubernetes
的一个应用实例的必要信息 - config: 包含了应用发布配置信息
- release:是一个chart及其配置的一个运行实例
Helm组件
Hekm有以下两个组成部分:
Helm Client
是用户命令行工具,其主要负责如下:
- 本地chart开发
- 仓库管理
- 与Tiller server交互
- 发送预安装的chart
- 查询release信息
- 要求升级或卸载已存在的release
Tiller Server
是一个部署在Kubernetes
集群内部的server,其与Helm client、Kubernetes API server进行交互,Tiller server主要负责如下:
- 监听来自 Helm client的请求
- 通过chart及其配置构建一次发布
- 安装chart 到
Kubernetes
j集群,并跟踪随后的发布 - 通过与
Kubernetes
交互升级或卸载chart - 简单的说,client管理charts,而server管理发布release
安装
我们可以在Helm Realese页面下载二进制文件,这里下载的最新版本,解压后将可执行文件拷贝到/usr/local/bin/
下即可,这样Helm
客户端就在这台机器上安装完成了.
另外一个值得注意的问题是RBAC
,我们的 kubernetes 集群是1.18.5版本的,默认开启了RBAC
访问控制,所以我们需要为Tiller
创建一个ServiceAccount
,让他拥有执行的权限,详细内容可以查看 Helm 文档中的Role-based Access Control。 创建rbac.yaml
文件:
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
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
创建:
kubectl create -f rbac-config.yaml
serviceaccount "tiller" created
clusterrolebinding.rbac.authorization.k8s.io "tiller" created
[root@master01 linux-amd64]# helm version
version.BuildInfo{Version:"v3.3.0-rc.1", GitCommit:"5c2dfaad847df2ac8f289d278186d048f446c70c", GitTreeState:"dirty", GoVersion:"go1.14.4"}
[root@master01 ~]# helm create hello-helm
Creating hello-helm
[root@master01 ~]# tree hello-helm
hello-helm
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
3 directories, 10 files
我们通过查看templates
目录下面的deployment.yaml
文件可以看出默认创建的 Chart 是一个 nginx 服务,具体的每个文件是干什么用的,我们可以前往 Helm 官方文档进行查看,后面会和大家详细讲解的。比如这里我们来安装 1.7.9 这个版本的 nginx,则我们更改 value.yaml 文件下面的 image tag 即可,将默认的 stable 更改为 1.7.9,为了测试方便,我们把 Service 的类型也改成 NodePort
...
image:
repository: nginx
tag: 1.7.9
pullPolicy: IfNotPresent
nameOverride: ""
fullnameOverride: ""
service:
type: NodePort
port: 80
...
[root@master01 ~]# helm install test ./hello-helm
[root@master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.254.0.1 443/TCP 8d
test-hello-helm NodePort 10.254.204.176 80:20569/TCP 19s
[root@master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-hello-helm-5d7dcc7cf4-djpth 1/1 Running 0 23s
查看release
:
[root@master01 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
test default 1 2020-07-19 22:42:03.214854819 +0800 CST deployed hello-helm-0.1.0 1.16.0
打包chart
:
[root@master01 ~]# helm package hello-helm
Successfully packaged chart and saved it to: /root/hello-helm-0.1.0.tgz
然后我们就可以将打包的tgz
文件分发到任意的服务器上,通过helm fetch
就可以获取到该 Chart 了。
删除release
:
[root@master01 ~]# helm delete test
release "test" uninstalled
然后我们看到kubernetes
集群上的该 nginx 服务也已经被删除了。
kubectl get pods -l app=hello-helm
No resources found.