Prometheus 作为现在最火的云原生监控工具,它的优秀表现是毋庸置疑的。但是在我们使用过程中,随着时间的推移,存储在 Prometheus 中的监控指标数据越来越多,查询的频率也在不断的增加,当我们用 Grafana 添加更多的 Dashboard 的时候,可能慢慢地会体验到 Grafana 已经无法按时渲染图表,并且偶尔还会出现超时的情况,特别是当我们在长时间汇总大量的指标数据的时候,Prometheus 查询超时的情况可能更多了,这时就需要一种能够类似于后台批处理的机制在后台完成这些复杂运算的计算,对于使用者而言只需要查询这些运算结果即可。Prometheus 提供一种记录规则(Recording Rule) 来支持这种后台计算的方式,可以实现对复杂查询的 PromQL 语句的性能优化,提高查询效率。
继续阅读 →标签: #Kubernetes
前面我们主要介绍了 Prometheus 下如何进行白盒监控,我们监控主机的资源用量、容器的运行状态、数据库中间件的运行数据、自动发现 Kubernetes 集群中的资源等等,这些都是支持业务和服务的基础设施,通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化。而从完整的监控逻辑的角度,除了大量的应用白盒监控以外,还应该添加适当的 Blackbox(黑盒)
监控,黑盒监控即以用户的身份测试服务的外部可见性,常见的黑盒监控包括HTTP 探针
、TCP 探针
等用于检测站点或者服务的可访问性,以及访问效率等。
黑盒监控相较于白盒监控最大的不同在于黑盒监控是以故障为导向当故障发生时,黑盒监控能快速发现故障,而白盒监控则侧重于主动发现或者预测潜在的问题。一个完善的监控目标是要能够从白盒的角度发现潜在问题,能够在黑盒的角度快速发现已经发生的问题。
Blackbox Exporter 是 Prometheus 社区提供的官方黑盒监控解决方案,其允许用户通过:HTTP
、HTTPS
、DNS
、TCP
以及 ICMP
的方式对网络进行探测。
本文翻译自 A visual guide on troubleshooting Kubernetes deployments。
下面示意图可以帮助你调试 Kubernetes Deployment(你可以在此处【下载它的 PDF 版本】),另外在微信群里面也看到有朋友分享了一个对应的中文版(你可以在此处【下载它的中文版本】):
当你希望在 Kubernetes 中部署应用程序时,你通常会定义三个组件:
- Deployment – 用于创建你的应用程序的 Pod 副本的清单;
- Service – 一个内部负载均衡器,用于将流量路由到内部的 Pod 上;
- Ingress – 描述流量如何从集群外部流入到集群内部的服务上。
下面的示意图可以来简单说明:
继续阅读 →由于 nginx 的优秀性能表现,所以很多企业在 Kubernetes 中选择 Ingress Controller 的时候依然会选择基于 nginx 的 ingress-nginx,前面文章中我们更多的是介绍更加云原生配置更加灵活的 Traefik,特别是 Traefik 2.0 版本新增中间件概念以后,在配置上就更加方便了,各种需求都可以通过中间件来实现,对于 ingress-nginx
来说配置就稍微麻烦一点,一些复杂的需求需要通过 Ingress
的 annotation
来实现,比如我们现在需要实现一个 url rewrite 的功能,简单来说就是我们之前的应用在 todo.qikqiak.com
下面,现在我们需要通过 todo.qikqiak.com/app/
来进行访问。
前段时间阿里云和微软云联合发布了 Open Application Model(OAM)
,简单来说就是利用一个规范对应用程序进行建模以区分开发和运维人员的职责。开发人员负责描述微服务或组件的功能,以及如何配置它;运维负责配置其中一个或多个微服务的运行时环境;基础设施工程师负责建立和维护应用程序运行的基础设施。其中 Rudr 是针对 Kubernetes 上面的 OAM
的参考实现。
Rudr
的应用程序有三个元素:Components(组件)、Configuration(配置)、Traits(特征):
- 组件定义一个或多个面向操作系统的容器镜像以及硬件需求,如
CPU
、内存和存储等 - 配置处理运行时的参数,比如环境变量
- 特征声明运行时的属性,比如 Volume、Ingress、伸缩等等。
我们在使用 Kubernetes 过程中,偶尔会遇到如下所示的一段配置:
securityContext:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
实际上这是配置对应的容器的 Capabilities
,在我们使用 docker run
的时候可以通过 --cap-add
和 --cap-drop
命令来给容器添加 Linux Capabilities
。对于大部分同学可能又要疑问 Linux Capabilities
是什么呢?
Rook 是一个开源的云原生存储编排工具,提供平台、框架和对各种存储解决方案的支持,以和云原生环境进行本地集成。
Rook 将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 底层使用云原生容器管理、调度和编排平台提供的能力来提供这些功能。
Rook 利用扩展功能将其深度集成到云原生环境中,并为调度、生命周期管理、资源管理、安全性、监控等提供了无缝的体验。有关 Rook 当前支持的存储解决方案的状态的更多详细信息,可以参考 Rook 仓库 的项目介绍。不过目前 Rook 已经很好地提供了对 Ceph 的支持,本文简单为大家介绍如何使用 Rook 来快速搭建 Ceph 集群。
继续阅读 →在 Kubernetes 中通过 Ingress 来暴露服务到集群外部,这个已经是一个很普遍的方式了,而真正扮演请求转发的角色是背后的 Ingress Controller,比如我们经常使用的 traefik、ingress-nginx 等就是一个 Ingress Controller。本文我们将通过 golang 来实现一个简单的自定义的 Ingress Controller,可以加深我们对 Ingress 的理解。
继续阅读 →前面的文章中我们已经使用 Traefik2.0 实现了 暴露 Redis(TCP) 服务 以及 自动化 HTTPS 得功能,在 Traefik2.0 发布的特性 中我们了解到除了这些基础功能之外,还支持一些其他的特性,本文就将来实现灰度发布的高级功能。
继续阅读 →