企业运维实战-k8s学习笔记17.k8s集群+Prometheus监控部署、基于prometheus实现k8s集群的hpa动态伸缩
一、Prometheus简介
Prometheus 是由 SoundCloud 开源监控告警解决方案,与Kubernetes同属CNCF,也是仅次于k8s的第二大开源项目。Prometheus 提供了通用的数据模型和便捷的数据采集、存储和查询接口,同时基于Go实现也大大降低了服务端的运维成本,目前已支持Kubernetes、Etcd、Consul等多种服务发现机制。 Prometheus工作图: 
其大概的工作流程是: Prometheus Server直接从HTTP接口或者Push Gateway拉取指标(Metric)数据。 Prometheus Server在本地存储所有采集的指标(Metric)数据,并在这些数据上运行规则,从现有数据中聚合和记录新的时间序列,或者生成告警。 Alertmanager根据配置文件,对接收到的告警进行处理,发出报警。 在Grafana或其他API客户端中,可视化收集的数据。
相比较于zabbix,zabbix监控服务,Prometheus监控应用。
二、Prometheus+k8s部署
1.k8s集群部署Prometheus
拉取chart到本地  解压后进入工作目录  修改主value.yaml文件和各个子服务value.yaml的镜像路径到私有harbor仓库,打开ingress服务并添加hosts. 
创建namespace,并指定namespace安装  
成功后查看节点启动情况 
测试,网页访问,访问前需要添加解析!!  

准备镜像 
2.设定Prometheus监控应用nginx
首先使用helm图形化界面安装nginx  修改YAML文件  
点击DEPLOY,等待pod成功拉起  可以看到一个pod中有两个容器,其中一个是服务本身,另一个:9113端口是对prometheus监控开放的agent。  此时的nginx还无法被prometheus发现,原因是未添加对应的标签release=prometheus-operator
查看并添加标签给nginx
kubectl -n prometheus-operator get servicemonitors.monitoring.coreos.com --show-labels

kubectl -n prometheus-operator label servicemonitors.monitoring.coreos.com nginx release=prometheus-operator
kubectl -n prometheus-operator get servicemonitors.monitoring.coreos.com nginx --show-labels

此时在prometheus.westos.org下的status中的Service Discovery可以看到被发现的nginx服务  看到发现的服务后,点击Graph 添加Graph 
kubectl -n prometheus-operator get pod

3.基于prometheus实现k8s集群的hpa动态伸缩
添加prometheus-adapter插件
helm search repo prometheus-adapter
helm pull apphub/prometheus-adapter
tar zxf prometheus-adapter-2.1.1.tgz
cd prometheus-adapter/
ls

修改镜像位置
vim values.yaml
 已经ingress解析地址 
安装
helm install prometheus-adapter . -n prometheus-operator

等待节点成功Running后可查看监控信息
kubectl get pod -n prometheus-operator

kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1
查看nginx服务详细信息
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/nginx-7dc5d5976-llz88/nginx_http_requests
 
使用hpa测试监控
vim hpa-nginx.yaml
cat hpa-nginx.yaml

kubectl apply -f hpa-nginx.yaml
kubectl get hpa
 使用hey访问nginx,给予压力  
持续查看hpa状况,可以看到集群根据压力大小进行动态添加副本,实现动态伸缩。
kubectl get hpa hpa-example -w

三、虚拟机部署prometheus监控
准备安装包 解压安装包
tar zxf go1.8.3.linux-amd64.tar.gz -C /usr/local/
tar zxf prometheus-2.3.2.linux-amd64.tar.gz -C /usr/local/
 添加go到环境变量中
vim .bash_profile
source .bash_profile

查看go版本,验证环境变量添加是否成功
go version
进入prometheus解压目录,创建软连接
cd /usr/local/prometheus-2.3.2.linux-amd64/
ln -s /usr/local/prometheus-2.3.2.linux-amd64/ /usr/local/Prometheus
修改配置文件
vim prometheus.yml

脚本运行,显示ready
./prometheus &
 网页访问172.25.9.3:9090,可以查看监控prometheus web管理界面 
|