Yum是Linux系统中的包管理工具,那么Helm就是Kubernetes集群中的包管理工具了。
Helm为Kubernetes集群提供了软件部署、删除、升级、回滚应用等强大的功能。
在我们还没有使用Helm的时候,都是通过deployment、service来部署应用的,部署的步骤比较繁琐。使用Helm来部署应用,只需要将准备好的yaml文件进行打包,然后使用Helm来部署应用即可
通过Helm部署的应用,都是动态的,我们可以进行自由的修改配置文件,供k8s集群调度使用
chart
相当于一个软件包(如:mysql就是一个chart),主要包含对象配置的模板、参数定义、依赖关系、文档说明等
release
是chart运行的实例,只有当chart运行了,就会自动生成一个release,当然,一个chart可以生成多个不同的release(相当于一个镜像可以生成多个不同的容器)
repository
helm的软件仓库(和Yum源定义的仓库地址差不多)
Helm客户端
Helm客户端主要负责chart和release的创建和管理,和tiller服务端进行交互
Tiller服务端
tiller服务端运行在kubernetes集群中,负责接收并处理Helm客户端的请求,和kubernetes api 进行交互
注:
Helm 3.0 以下的版本,安装需要安装Helm客户端和tiller服务端
Helm 3.0 以上的版本,安装只需要安装Helm客户端即可,无须安装服务端,Helm直接和kubernetes api进行交互,(安装完成首先需要自行添加仓库地址,默认是没有的)
Helm下载地址:https://github.com/helm/helm/releases
主机 | IP地址 |
---|---|
master | 192.168.1.100 |
node1 | 192.168.1.200 |
node2 | 192.168.1.250 |
安装Helm
选择对应的版本来进行下载
[root@master ~]# wget https://get.helm.sh/helm-v3.0.3-linux-amd64.tar.gz
[root@master ~]# chmod a+x helm
[root@master ~]# cp helm /usr/local/bin/
[root@master ~]# helm version
version.BuildInfo{Version:"v3.0.3", GitCommit:"ac925eb7279f4a6955df663a0128044a8a6b7593", GitTreeState:"clean", GoVersion:"go1.13.6"}
添加仓库地址
配置国内Chart仓库
微软仓库(http://mirror.azure.cn/kubernetes/charts/)基本上官网有的chart这里都有。
阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
官方仓库(https://hub.kubeapps.com/charts/incubator)官方chart仓库
[root@master ~]# helm repo add t1 http://mirror.azure.cn/kubernetes/charts/
[root@master ~]# helm repo add t2 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@master ~]# helm repo add t3 https://apphub.aliyuncs.com
查看添加是否成功
[root@master ~]# helm repo list
NAME URL
t1 http://mirror.azure.cn/kubernetes/charts/
t2 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
t3 https://apphub.aliyuncs.com
Helm常用命令
helm version
查看helm的版本信息
helm repo list
列出当前helm仓库信息
helm repo add 名称 仓库地址
新增仓库
helm repo remove 仓库名称
删除指定仓库
helm search repo 仓库名称
查看指定仓库中的软件信息
helm repo update
更新仓库中的信息
helm pull 仓库名称/软件名称
从指定的仓库中下载指定的软件
helm install 名称 仓库名称/软件名称 or helm install 名称 解压后的软件包
安装指定的软件
helm delete chart的名称
删除chart(删除软件)
下载Prometheus 软件
[root@master ~]# helm search repo prometheus-operator
NAME CHART VERSION APP VERSION DESCRIPTION
t1/prometheus-operator 9.3.2 0.38.1 DEPRECATED Provides easy monitoring definitions...
t3/prometheus-operator 8.7.0 0.35.0 Provides easy monitoring definitions for Kubern...
下载操作
[root@master ~]# helm pull t1/prometheus-operator
[root@master ~]# ls
prometheus-operator-9.3.2.tgz
安装PrometheUS
先创建一个名称空间用于prometheus安装
[root@master ~]# kubectl create ns ceshi
namespace/ceshi created
[root@master ~]# tar -xf prometheus-operator-9.3.2.tgz
[root@master ~]# cd prometheus-operator/
[root@master ~]# helm install mon prometheus-operator -n ceshi
NAME: mon
LAST DEPLOYED: Thu Jan 7 12:04:45 2021
NAMESPACE: ceshi
STATUS: deployed
REVISION: 1
NOTES:
查看Pod的运行情况
[root@master ~]# kubectl get pods -n ceshi
NAME READY STATUS RESTARTS AGE
alertmanager-mon-prometheus-operator-alertmanager-0 2/2 Running 0 2m42s
mon-grafana-8d6fb588f-wswlr 2/2 Running 0 22m
mon-kube-state-metrics-556646779d-78cvx 1/1 Running 0 22m
mon-prometheus-node-exporter-cfcw6 1/1 Running 0 22m
mon-prometheus-node-exporter-nqlgx 1/1 Running 0 22m
mon-prometheus-node-exporter-xsksz 1/1 Running 0 22m
mon-prometheus-operator-operator-76595557dd-h7jbr 2/2 Running 0 22m
prometheus-mon-prometheus-operator-prometheus-0 3/3 Running 1 2m18s
查看service的运行情况
[root@master ~]# kubectl get svc -n ceshi
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 3m29s
mon-grafana ClusterIP 10.97.182.154 <none> 80/TCP 23m
mon-kube-state-metrics ClusterIP 10.98.166.210 <none> 8080/TCP 23m
mon-prometheus-node-exporter ClusterIP 10.108.162.95 <none> 9100/TCP 23m
mon-prometheus-operator-alertmanager ClusterIP 10.99.211.26 <none> 9093/TCP 23m
mon-prometheus-operator-operator ClusterIP 10.102.250.165 <none> 8080/TCP,443/TCP 23m
mon-prometheus-operator-prometheus ClusterIP 10.110.249.210 <none> 9090/TCP 23m
prometheus-operated ClusterIP None <none> 9090/TCP 3m4s
默认状态下mon-grafana没有开启对外访问的权限,我们需要将类型设置为NodePort
修改service的类型
[root@master ~]# kubectl edit svc -n ceshi mon-grafana
61 type: NodePort
[root@master ~]# kubectl get svc -n ceshi
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 5m47s
mon-grafana NodePort 10.97.182.154 <none> 80:32279/TCP 25m
mon-kube-state-metrics ClusterIP 10.98.166.210 <none> 8080/TCP 25m
mon-prometheus-node-exporter ClusterIP 10.108.162.95 <none> 9100/TCP 25m
mon-prometheus-operator-alertmanager ClusterIP 10.99.211.26 <none> 9093/TCP 25m
mon-prometheus-operator-operator ClusterIP 10.102.250.165 <none> 8080/TCP,443/TCP 25m
mon-prometheus-operator-prometheus ClusterIP 10.110.249.210 <none> 9090/TCP 25m
prometheus-operated ClusterIP None <none> 9090/TCP
对外暴露的端口为32279
[root@master ~]# kubectl get secret -n ceshi | grep mon-grafana
mon-grafana Opaque
[root@master ~]# kubectl get secret -n ceshi mon-grafana -o yaml
apiVersion: v1
data:
admin-password: cHJvbS1vcGVyYXRvcg==
admin-user: YWRtaW4=
解密操作:
[root@master ~]# echo -n "cHJvbS1vcGVyYXRvcg==" | base64 -d
prom-operator
[root@master ~]# echo -n "YWRtaW4=" | base64 -d
admin
用户名:admin 密码:prom-operator