This commit is contained in:
mizow8 2017-10-12 13:34:34 +08:00
Родитель 0ca43e0ddb
Коммит 5872430688
1 изменённых файлов: 80 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,80 @@
# 在Azure平台上监控部署在Kubernetes集群中的微服务
<a href="https://portal.azure.cn/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fdevops-sample-solution-for-azure-china%2Fmaster-dev%2Fmonitoring%2Fk8s%2Fdeployment%2Fcontroller_template.json" target="_blank">
<img src="http://azuredeploy.net/deploybutton.png"/>
</a>
<a href="http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fdevops-sample-solution-for-azure-china%2Fmaster-dev%2Fmonitoring%2Fk8s%2Fdeployment%2Fcontroller_template.json" target="_blank">
<img src="http://armviz.io/visualizebutton.png"/>
</a>
运行ARM模板会在中国区Azure中部署一个规模为Standard_A1的Linux Ubuntu 16.04的虚拟机作为跳板机。跳板机用来访问和管理用户提供的Kubernetes集群安装监控使用的Helm Charts并为Kubernetes集群中服务部署Nginx入口服务。
我们提供两种监控方案:
* Heapster + Influxdb + Grafana 监控集群资源例如虚拟机节点的CPU和内存Pod的CPU和内存
* Beats + Logstash + Elasticsearch + Kibana (ELK) 监控容器和应用,例如容器中的日志和服务的心跳
## 前期准备
* 中国区Azure订阅
* 准备监控的Kubernetes集群
## A. 部署跳板机,安装监控环境
1. 点击上面的"Deply to Azure"部署到Azure链接
2. 输入以下参数
| 参数 | 描述 | 默认值 |
|---------------------------------|--------------------------------------------------------------------------|-----------------|
| vmDnsName | 跳板机DNS名称 | |
| vmAdminUsername | 跳板机管理员用户名 | azureuser |
| vmAdminPassword | 跳板机管理员密码 | |
| vmUbuntuOSVersion | 跳板机Ubuntu版本 | 16.04.0-LTS |
| vmSize | 跳板机规模 | Standard_A1 |
| k8sMasterNodeHostname | Kubernetes集群Master节点主机名 | |
| k8sMasterNodeUsername | Kubernetes集群Master节点用户名 | |
| k8sMasterNodeIdentityFileBase64 | Kubernetes集群Master节点私钥Base64编码 | |
| monitorClusterNamespace | Kubernetes集群中监控命名空间 | |
| azureCloudEnvironment | Azure环境'AzureCloud'(国际版)或'AzureChinaCloud'(中国版) | AzureChinaCloud |
| enableElkStack | 是否部署ELK方案 | enabled |
| enableHigStack | 是否部署Heapster-InfluxDB-Grafana方案 | enabled |
## B. 登陆到跳板机
1. 当部署执行成功后得到跳板机的公有IP地址和DNS
2. 用部署时提供的管理员用户名和密码通过SSH登陆到跳板机
3. 执行下面kubectl命令确认跳板机成功访问Kubernetes集群
```
Kubectl cluster-info
```
4. 打开浏览器访问http://< 跳板机公有IP或DNS >/ui, 输入部署时提供的管理员用户名和密码确认成功访问Kubernetes UI
## C. 检查监控环境
1. 在kubernetes UI中确认部署时提供的命名空间Namespace存在选择该命名空间
2. 在服务Service页面确认Grafana和Kibana两个服务正常运行并且有各自的公有IP地址
3. 通过Grafana的公有IP地址访问Granfa网站确认仪表板Dashboard列表中包含Cluster和Node两个仪表盘并且有实时数据显示
4. 通过Kibana的公有IP地址访问Kibana网站添加下面两个Index Pattern
* filebeat-*
* heartbeat-* (默认已添加)
在Discover页面确认上面两个Index Pattern的数据正常收集。在Dashboard页面确认包含Heartbeat HTTP monitoring仪表板
## D. 自定义监控数据
ELK方案中使用[Beats](https://www.elastic.co/products/beats)收集监控数据。在项目中我们使用[Filebeat](https://www.elastic.co/products/beats/filebeat)收集容器日志,[Heartbeat](https://www.elastic.co/products/beats/heartbeat)收集服务的心跳数据。
用户可以根据需求对Beats进行配置所有配置细节请参考Beats官方文档。以Heartbeat为例配置Heatbeat来监控Kubernetes集群中用户自己的服务
1. 通过SSH登陆到跳板机切换到root (sudo -i)
2. 在跳板机/tmp/install/msref目录下包含了下载的当前repo的全部文件
3. 在monitoring/k8s/helm-charts/configs/heartbeat-config目录下编辑 heartbeat.yml文件 (参考 [Heartbeat Configuration Options](https://www.elastic.co/guide/en/beats/heartbeat/current/heartbeat-configuration-details.html)
4. 返回monitoring/k8s/helm-charts目录执行以下命令更新heartbeat的部署
```
yes | cp -rf configs/heartbeat-config/heartbeat.yml heartbeat/config
helm upgrade -f configs/heartbeat.yaml heartbeat heartbeat/
```
## GitHub参考项目
### [elk-acs-kubernetes](https://github.com/Microsoft/elk-acs-kubernetes) (MIT License)
项目包含了在国际版Azure中部署ELK监控方案来监控通过Azure Container Service部署的Kubernetes集群。
### [charts](https://github.com/kubernetes/charts) (Apach-2.0 License)
项目包含了官方Kubernetes Helm Charts。关于如何安装和使用Helm请参考官方repo中的README.md文件。