Kubernetes Helm的应用

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

浏览器访问测试
Kubernetes Helm的应用
获取用户名以及密码

[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

浏览器输入用户名以及密码登录测试
Kubernetes Helm的应用
查询监控
Kubernetes Helm的应用
监控的Pod
Kubernetes Helm的应用

上一篇:Rook定制化和管理Ceph集群


下一篇:程序猿的学习笔记3-C语言篇1