Kubernetes是一个开源的容器编排框架,它为咱们提供了一种简单的部署、扩展和监控的方法。本文将讨论Kubernetes的内置监控功能,如Kubernetes dashboard、cAdvisor等。为便于更好地理解,文内还提供了演示。node
介 绍json
Kubernetes是一个开源的容器编排框架,它为咱们提供了一种简单的部署、扩展和监控的方法。在本文中,咱们将讨论Kubernetes的内置监控功能。为了便于读者更好地理解,本文包含了一些演示。api
Kubernetes架构概述浏览器
在基础架构级别,Kubernetes集群是一组各自发挥特定功能的物理机或虚拟机。充当主要角色的物理机或虚拟机负责整个操做,并协调在全部node上运行的容器管理。缓存
Master组件管理pod的生命周期:服务器
Node组件是Kubernetes中由master管理的worker机器。每一个node都包含运行pod所需的必要组件:网络
从逻辑角度看,一个Kubernetes部署,是由在集群中各自发挥做用的各个组件组成:架构
监控Kubernetes并发
若咱们想要预测问题并发现开发或部署中潜在的瓶颈,那么对应用程序进行监控是必不可少的。负载均衡
为了帮助监控集群和构成部署的许多活动组件,Kubernetes提供了一些内置的监控功能:
在本文中,咱们将重点介绍前两个内置工具。在本系列文章的下一篇中,咱们将介绍其余的监控工具。
Kubernetes中有许多指标须要监控。正如咱们会以两种不一样的方式(基础架构和逻辑)描述架构那样,咱们也能够将监控分为两个主要组件:监控集群自己以及集群上运行的工做负载监控。
集群监控
全部集群都应监控底层服务器组件,由于服务器层的问题每每都会出如今工做负载中。监控node资源时要注意的一些指标包括CPU、磁盘和网络带宽。了解这些指标可让咱们知道是否须要对集群进行扩容或缩容(若是企业使用的是云提供商,对运行成本很看重,那么这一点更尤为重要)。
工做负载监控
咱们还须要考虑与部署及其pod相关的指标。其中重要的一点,是将deployment中当下运行的pod数量与指望的数量进行对比。此外,咱们还应当注意健康检查、容器指标以及最终的应用指标。
前期准备
在如下部分中,咱们将以demo的形式逐一介绍列出的内置监控功能,为此咱们须要作的前期准备有:
启动Rancher实例
第一步,启动Rancher实例。Rancher有一份很是直观的入门指南可供参考:https://rancher.com/quick-start/
使用Rancher部署GKE集群
按照操做指南,使用Rancher设置和配置Kubernetes集群:
https://rancher.com/docs/ranc...
注意:请确保已启用Kubernetes Dashboard,咱们这里使用的Kubernetes 版本为v.1.10。
图1 使用Rancher建立Kubernetes集群
Kubernetes Dashboard
Kubernetes dashboard是基于Web的Kubernetes用户界面,咱们可使用它来对应用程序进行故障排除并管理集群资源。
而Rancher,能帮助用户一键安装dashboard。dashboard的主要用途包括:
要访问dashboard,咱们须要在咱们的计算机和Kubernetes API服务器之间代理请求。输入如下代码便可使用kubectl启动代理服务器:
代理服务器将在后台启动,输出相似于下文的内容:
如今,要查看dashboard,请经过浏览器访问如下地址:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
而后,咱们须要在登陆页面输入相应的凭据:
图2 Dashboard登陆
下面咱们未来了解如何使用服务账户机制,建立具备管理员权限的用户。咱们将使用两个YAML文件。
一个YAML文件用于建立服务账户:
另外一个YAML文件将为咱们的用户建立ClusterRoleBinding:
应用两个YAML文件,来建立其定义的对象:
建立用户并设置了正确的权限后,咱们须要找到令牌才能登陆:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
在Kubernetes dashboard凭据提示中选择“Token(令牌)”,而后在字段中输入你在上面检索的值以进行身份验证。
Kubernetes Dashboard包含几个主要视图:
在没有任何工做负载运行的状况下,dashboard页面将为空,由于此时在Kubernetes上不会部署任何内容。若是要浏览 dashboard提供的全部视图,最佳选择是部署使用不一样工做负载类型的应用程序(StatefulSet、部署、副本集等)。这篇如何在Kubernetes上部署Redis的文章就是一个很好的示例,它展现了部署一个Redis集群(具备卷声明和configMaps的有状态集)和一个测试应用程序(一个Kubernetes部署)时,dashboard会如何显示相关信息。
配置完工做负载后,咱们能够关闭一个node,而后检查不一样的选项卡,以查看一些更新:
图3 Stateful Set的dashboard页面
图4 Pod的dashboard页面
cAdvisor
cAdvisor是一个集成到kubelet二进制文件中的开源代理,主要用于监控资源使用状况并分析容器的性能。cAdvisor会收集关于在给定node上运行的全部容器的CPU、内存、文件和网络使用状况的统计信息(cAdvisor不在pod层运行)。除核心指标外,cAdvisor还会监控事件。用户可使用诸如kubectl top之类的命令直接访问指标,也可使用调度程序执行调度层的指标(例如使用autoscaling)。
须要注意的是,cAdvisor不会长期存储某些指标,所以若是须要使用该功能,则应寻找专用的监控工具。
从Kubernetes版本1.10起,cAdvisor的UI已经差很少被弃用了,Kubernetes 1.12版本以后cAdvisor的UI会被完全删除。Rancher可让你选择用于集群的Kubernetes版本。在为此演示设置基础架构时,咱们将集群配置为使用版本1.10,所以咱们仍然能够访问cAdvisor UI。
要访问cAdvisor UI,咱们须要在咱们的计算机和Kubernetes API服务器之间进行代理。输入如下命令启动代理服务器的本地实例:
接下来,找到node的名称:
你能够经过如下地址在浏览器中查看UI,将node名称替换为你在命令行中找到的标识符:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5:4194/proxy/containers/
图5 初始cAdvisor UI
图6 cAdvisor UI概述和流程
为了确认kubelet正在监听端口4194,你能够登陆到node查看更多信息:
咱们能够确认,在咱们的Kubernetes版本中,kubelet进程经过该端口提供cAdvisor Web UI:
若是你运行的Kubernetes版本为1.12或更高,由于cAdvisorUI已被删除,所以kubelet不会再监听4194端口了。你可使用上面的命令进行确认。不过,因为cAdvisor是kubelet二进制文件的一部分,所以相关指标仍然存在。
kubelet二进制文件使用Prometheus展现格式公开了全部runtime和cAdvisor指标:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5/proxy/metrics/cadvisor
图7 cAdvisor指标端点
在一大堆输出中,你能够重点查找和关注的指标有:
CPU:
内存:
磁盘:
网络:
一些其余有用的指标:
例如,要查看cAdvisor MachineInfo(),咱们能够访问:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5:10255/proxy/spec/
图8 cAdvisor规范端点
pod端点为node上运行的pod提供与kubectl get pods -o json相同的输出:
http://localhost:8001/api/v1/nodes/gke-c-plnf4-default-pool-5eb56043-23p5:10255/proxy/pods/
图9 cAdvisor pod端点
一样,也能够经过访问如下连接来获取日志:
http://localhost:8001/logs/kube-apiserver.log
结 语
监控的重要性不言而喻,它让咱们能充分了解到应用程序的情况。Kubernetes有不少内置工具可供用户们选择,让你们更好地对基础架构层(node)和逻辑层(pod)有充分的了解。
在本文中,咱们重点关注了专为用户提供监控和指标的工具。在本系列文章的下一篇中,咱们将继续分享那些关注工做负载扩缩容和生命周期管理的监控工具,敬请期待。