Helm的概述
Yum是Linux系统中的包管理工具,那么Helm就是Kubernetes集群中的包管理工具了。
Helm为Kubernetes集群提供了软件部署、删除、升级、回滚应用等强大的功能。
在我们还没有使用Helm的时候,都是通过deployment、service来部署应用的,部署的步骤比较繁琐。使用Helm来部署应用,只需要将准备好的yaml文件进行打包,然后使用Helm来部署应用即可
通过Helm部署的应用,都是动态的,我们可以进行*的修改配置文件,供k8s集群调度使用
Helm三个重要的概念
chart
相当于一个软件包(如:mysql就是一个chart),主要包含对象配置的模板、参数定义、依赖关系、文档说明等release
是chart运行的实例,只有当chart运行了,就会自动生成一个release,当然,一个chart可以生成多个不同的release(相当于一个镜像可以生成多个不同的容器)repository
helm的软件仓库(和Yum源定义的仓库地址差不多)
Helm的两个组件
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的部署
安装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的构建
下载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
浏览器输入用户名以及密码登录测试
查询监控
监控的Pod