1.概述
微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,作为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。Helm通过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用部署和管理的复杂性。
2.作用
Helm 为团队提供了在 Kubernetes 内部创建、安装和管理应用程序时需要协作的工具。
查找要安装和使用的预打包软件(Chart)
轻松创建和托管自己的软件包
将软件包安装到任何 K8s 集群中
查询集群以查看已安装和正在运行的程序包
更新、删除、回滚或查看已安装软件包的历史记录
3.基本概念
-HELM
Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
-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 使用 Chart 包部署的一个应用实例。
5.部署
安装helm(二进制安装)
[root@master ~]# wget https://get.helm.sh/helm-v3.4.0-rc.1-linux-amd64.tar.gz
[root@master ~]# tar xf helm-v3.4.0-rc.1-linux-amd64.tar.gz
[root@master ~]# mv linux-amd64/helm /usr/local/bin/
验证
[root@master ~]# helm help
The Kubernetes package manager
Common actions for Helm:
- helm search: search for charts
- helm pull: download a chart to your local directory to view
- helm install: upload the chart to Kubernetes
-添加常用仓库
先移除原先的仓库
[root@master ~]# helm repo remove stable
添加新的仓库地址
[root@master ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
更新仓库
[root@master ~]# helm repo update
查看在存储库中可用的所有 Helm charts
[root@master ~]# helm search repo
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/acs-engine-autoscaler 2.1.3 2.1.1 Scales worker nodes within agent pools
aliyun/aerospike 0.1.7 v3.14.1.2 A Helm chart for Aerospike in Kubernetes
aliyun/anchore-engine 0.1.3 0.1.6 Anchore container analysis and policy evaluatio...
aliyun/artifactory 7.0.3 5.8.4 Universal Repository Manager supporting all maj...
列出stable仓库可以安装的charts
[root@master ~]# helm search repo state
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/kube-state-metrics 0.5.3 1.1.0 Install kube-state-metrics to generate and expo...
stable/kube-state-metrics 0.5.3 1.1.0 Install kube-state-metrics to generate and expo...
aliyun/keel 0.2.1 0.4.2 Open source, tool for automating Kubernetes dep...
stable/keel 0.2.1 0.4.2 Open source, tool for automating Kubernetes dep...
6.部署helm ui界面
下载代码:
[root@master ~]# git clone https://github.com/rongfengliang/monocular-docker-compose.git
构建镜像:
[root@master monocular-docker-compose]# docker-compose build
PS. 如果接下报错,登录docker,并添加镜像加速器
报错内容:
Pulling api (bitnami/monocular-api:latest)...
ERROR: pull access denied for bitnami/monocular-api, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
解决方案:
[root@master ~]# tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://fovgvvbo.mirror.aliyuncs.com"]}EOF
[root@master monocular-docker-compose]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: 17343051369
Password:
启动:
[root@master monocular-docker-compose]# docker-compose up -d
查看:
[root@master monocular-docker-compose]# docker-compose ps
Name Command State Ports
monoculardockercompose_api_1 monocular Up 0.0.0.0:8081->8081/tcp
monoculardockercompose_mongodb_1 /app-entrypoint.sh /run.sh Up 0.0.0.0:27017->27017/tcp
monoculardockercompose_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
monoculardockercompose_ui_1 /usr/local/openresty/bin/o ... Up 443/tcp, 0.0.0.0:80->80/tcp
7.helm仓库
换成国内阿里镜像仓库
[root@master pro]# helm repo add ali-stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@master pro]# helm repo add ali-incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
[root@master pro]# helm repo add stable http://mirror.azure.cn/kubernetes/charts
[root@master pro]# helm repo add apphub https://apphub.aliyuncs.com/
[root@master pro]# helm repo update
1.下载prometheus的包
[root@master pro]# helm pull stable/prometheus-operator
[root@master pro]# tar xf prometheus-operator-9.3.2.tgz
2.安装prometheus
[root@master prometheus-operator-9.3.2]# helm install pro .
3.检验运行状态
[root@master ~]# kubectl get svc | grep pro
pro-grafana NodePort 10.96.180.192 <none> 80:30009/TCP 65m
pro-kube-state-metrics ClusterIP 10.110.208.205 <none> 8080/TCP 65m
pro-prometheus-node-exporter ClusterIP 10.109.238.134 <none> 9100/TCP 65m
pro-prometheus-operator-alertmanager ClusterIP 10.103.199.173 <none> 9093/TCP 65m
pro-prometheus-operator-operator ClusterIP 10.99.246.46 <none> 8080/TCP,443/TCP 65m
pro-prometheus-operator-prometheus ClusterIP 10.99.196.146 <none> 9090/TCP 65m
prometheus-operated ClusterIP None <none> 9090/TCP 65m
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
alertmanager-pro-prometheus-operator-alertmanager-0 2/2 Running 0 64m
pro-grafana-696966b875-spvsd 2/2 Running 0 24m
pro-kube-state-metrics-b994549d8-w54m9 1/1 Running 0 64m
pro-prometheus-node-exporter-d9p6m 1/1 Running 0 64m
pro-prometheus-node-exporter-dsblh 1/1 Running 0 64m
pro-prometheus-node-exporter-wvtmz 1/1 Running 0 64m
pro-prometheus-operator-operator-554f578c86-9xxcv 2/2 Running 0 64m
prometheus-pro-prometheus-operator-prometheus-0 3/3 Running 1 64m
注意:
默认情况下,安装好的prometheus所使用的暴露外网的方式是ClusterIP
修改在kubernetes的web界面找到对应的pod,找到对应的sevices,修改为NodePort
5.获取用户名和密码登录
[root@master ~]# kubectl get secrets | grep grafana
pro-grafana Opaque 3 88m
pro-grafana-test-token-cgj7p kubernetes.io/service-account-token 3 88m
pro-grafana-token-cw6r9 kubernetes.io/service-account-token 3 88m
[root@master ~]# kubectl get secrets pro-grafana -o yaml | head -5
apiVersion: v1
data:
admin-password: cHJvbS1vcGVyYXRvcg==
admin-user: YWRtaW4=
ldap-toml: ""
[root@master ~]# echo -n "YWRtaW4=" | base64 -d
admin
[root@master ~]# echo -n "cHJvbS1vcGVyYXRvcg==" | base64 -d
prom-operator