k8s全栈监控

简介: 简介 整体概括 本文章主要介绍如何全面监控k8s 使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等 使用prometheus-operator部署prometheus,存储监控数据 使用kube-state-metrics收集k8s集群内资源.

简介

整体概括

本文章主要介绍如何全面监控k8s

  • 使用metric-server收集数据给k8s集 群内使用,如kubectl,hpa,scheduler等
  • 使用prometheus-operator部署prometheus,存储监控数据
  • 使用kube-state-metrics收集k8s集群内资源对象数据
  • 使用node_exporter收集集群中各节点的数据
  • 使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据
  • 使用alertmanager实现监控报警
  • 使用grafana实现数据可视化

prometheus-operator简介

prometheus-operator是一个整合prometheus和operator的项目,prometheus是一个集数据收集存储,数据查询,数据图表显示于一身的开源监控组件。operator是由coreos开源一套在k8s上管理应用的软件,通过operator可以方便的实现部署,扩容,删除应用等功能。

prometheus-operator利用k8s的CustomResourceDefinitions功能实现了只需要像写原生kubectl支持的yaml文件一样,轻松收集应用数据,配置报警规则等,包含如下CRDs :

  • Prometheus 用于部署Prometheus 实例
  • ServiceMonitor 用于配置数据收集,创建之后会根据DNS自动发现并收集数据
  • PrometheusRule 用于配置Prometheus 规则,处理规整数据和配置报警规则
  • Alertmanager 用于部署报警实例

安装

环境说明

收集kube-controller-manager,kube-scheduler数据,需要配置组件监听0.0.0.0地址

二进制安装启动时添加如下参数 --address=0.0.0.0

如果使用kubeadm启动的集群,初始化时加入如下参数

controllerManagerExtraArgs:
 address: 0.0.0.0
schedulerExtraArgs:
 address: 0.0.0.0
复制代码

如果是已经启动之后的集群,可以使用如下命令修改

sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-controller-manager.yaml
sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-scheduler.yaml
复制代码

收集kubelet相关数据时需要配置kubelet使用如下认证方式。使用kubeadm默认情况下已经开启

--authentication-token-webhook=true
--authorization-mode=Webhook
复制代码

部署metric-server

# 下载
mkdir k8s-monitor && cd k8s-monitor
git clone https://github.com/kubernetes-incubator/metrics-server.git
cd metrics-server && git checkout v0.2.1 && cd ../

# 修改配置(当前版本有bug)
sed -ri 's@gcr.io/google_containers/metrics-server-amd64:(.*)@mirrorgooglecontainers/metrics-server-amd64:\1@g' metrics-server/deploy/1.8+/metrics-server-deployment.yaml
sed -ri 's@--source=kubernetes.summary_api:.*@--source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true\&kubeletPort=10250\&insecure=true@' metrics-server/deploy/1.8+/metrics-server-deployment.yaml

# 部署
kubectl create -f metrics-server/deploy/1.8+/

# 查看状态
kubectl get pods -n kube-system

# 测试获取数据 # 由于采集数据间隔为1分钟 # 等待数分钟后查看数据
NODE=$(kubectl get nodes | grep 'Ready' | head -1 | awk '{print $1}')
METRIC_SERVER_POD=$(kubectl get pods -n kube-system | grep 'metrics-server' | awk '{print $1}')
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/$NODE

kubectl top node $NODE
kubectl top pod $METRIC_SERVER_POD -n kube-system
复制代码

下载相关部署文件

git clone https://github.com/mgxian/k8s-monitor.git
cd k8s-monitor
复制代码

部署prometheus-operator

# 创建 namespace
kubectl apply -f monitoring-namespace.yaml

# 部署
kubectl apply -f prometheus-operator.yaml

# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
kubectl get crd
复制代码

部署k8s组件服务

# 部署
kubectl apply -f kube-k8s-service.yaml

# 查看
kubectl get svc -n kube-system
复制代码

部署node_exporter

# 部署
kubectl apply -f node_exporter.yaml

# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
复制代码

部署kube-state-metrics

# 部署
kubectl apply -f kube-state-metrics.yaml

# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
复制代码

部署prometheus

# 部署
kubectl apply -f prometheus.yaml

# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
复制代码

配置数据收集

# 部署
kubectl apply -f kube-servicemonitor.yaml

# 查看
kubectl get servicemonitors -n monitoring
复制代码

查看prometheus中的数据

# 查看 nodeport
kubectl get svc -n monitoring | grep prometheus-k8s

# 获取访问链接 # 11.11.11.111 为其中一个node ip
NODE_IP='11.11.11.112'
PROMETHEUS_NODEPORT=$(kubectl get svc -n monitoring | grep prometheus-k8s | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
echo "http://$NODE_IP:$PROMETHEUS_NODEPORT/" 复制代码

prometheus主页

生成图表 container_network_receive_bytes_total{namespace="monitoring", name=~".prometheus."}

查看收集数据的端点

查看数据收集服务发现

部署grafana

# 部署
kubectl apply -f grafana.yaml

# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring

# 查看 nodeport
kubectl get svc -n monitoring | grep grafana

# 获取访问链接 # 11.11.11.111 为其中一个node ip
NODE_IP='11.11.11.112'
GRAFANA_NODEPORT=$(kubectl get svc -n monitoring | grep grafana | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
echo "http://$NODE_IP:$GRAFANA_NODEPORT/" 复制代码

部署alertmanager

# 部署
kubectl apply -f alertmanager.yaml

# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring

# 查看 nodeport
kubectl get svc -n monitoring | grep alertmanager-main

# 获取访问链接 # 11.11.11.111 为其中一个node ip
NODE_IP='11.11.11.112'
ALERTMANAGER_MAIN_NODEPORT=$(kubectl get svc -n monitoring | grep alertmanager-main | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
echo "http://$NODE_IP:$ALERTMANAGER_MAIN_NODEPORT/" 复制代码

查看图表

集群状态

集群状态以命名空间视角

POD状态

参考文档

本文转自掘金- k8s全栈监控
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
2426 10
|
云安全 存储 弹性计算
云上太空舱:在可信的环境中,让数据安全流通
最难的是,安全与利用结合得刚刚好
1316 0
云上太空舱:在可信的环境中,让数据安全流通
|
Kubernetes 监控 容器
阿里云容器Kubernetes监控(二) - 使用Grafana展现Pod监控数据
简介 在kubernetes的监控方案中,Heapster+Influxdb+Grafana的组合相比prometheus等开源方案而言更为简单直接。而且Heapster在kubernetes中承担的责任远不止监控数据的采集,还包括控制台的监控接口、HPA的POD弹性伸缩等都依赖于Heapster的功能。
6670 0
|
Kubernetes Cloud Native API
带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介
带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介
带你读《云原生应用开发:Operator原理与实践》——1.2.1 Operator 简介
|
资源调度 Kubernetes Cloud Native
从零开始入门 K8s | Kubernetes 调度和资源管理
本文简单介绍了一下调度的高级策略,在集群资源紧张的时候也能合理调度资源。
从零开始入门 K8s | Kubernetes 调度和资源管理
|
运维 Kubernetes Go
"解锁K8s二开新姿势!client-go:你不可不知的Go语言神器,让Kubernetes集群管理如虎添翼,秒变运维大神!"
【8月更文挑战第14天】随着云原生技术的发展,Kubernetes (K8s) 成为容器编排的首选。client-go作为K8s的官方Go语言客户端库,通过封装RESTful API,使开发者能便捷地管理集群资源,如Pods和服务。本文介绍client-go基本概念、使用方法及自定义操作。涵盖ClientSet、DynamicClient等客户端实现,以及lister、informer等组件,通过示例展示如何列出集群中的所有Pods。client-go的强大功能助力高效开发和运维。
1422 1
|
SQL 运维 监控
云平台-多租户技术设计
云平台-多租户技术设计
云平台-多租户技术设计
|
Prometheus Kubernetes 网络协议
k8s学习笔记之CoreDNS
k8s学习笔记之CoreDNS
1246 3
|
JSON Kubernetes Cloud Native
Open Policy Agent(OPA) 【1】介绍(1)
Open Policy Agent(OPA) 【1】介绍(1)
Open Policy Agent(OPA) 【1】介绍(1)
|
应用服务中间件 测试技术 nginx
金丝雀发布(灰度发布)介绍 及 声明式管理方法简介
金丝雀发布(灰度发布)介绍 及 声明式管理方法简介