k8s资源监控和日志管理

  • k8s监控资源使用率
    • 查看集群资源状态
      • kubectl get cs显示scheduler Unhealthy,controller-manager Unhealthy
    • 监控集群资源利用率
      • 安装metric-server服务
        • metric-server服务工作原理:
        • 使用yaml资源清单部署metric-server服务
          • 修改资源清单--(必须执行)
          • 检查是否部署成功-(`必须执行`)
      • 使用kubectl top命令查看资源消耗
      • 资源占用排序-根据cpu
  • 管理k8s组件日志
    • k8s查看日志
      • 查看deployment日志
      • 查看service日志
      • 进入pod的容器内查看日志
    • 管理k8s组件日志
      • kubectl logs查看日志原理
    • 管理k8s应用日志
      • 收集k8s日志思路
      • 收集标准输出
      • 收集容器中日志文件
    • k8s查看节点状态失败
      • k8s部署prometheus监控

k8s监控资源使用率

查看集群资源状态

# 查看master组件状态
kubectl get cs# 查看node状态
kubectl get node# 查看Apiserver代理的url
kubectl cluster-info# 查看集群详细信息
## 调试和诊断集群信息
kubectl cluster-info dump# 查看资源的详情
kubectl describe 资源类型 资源名称## 查看node的详细信息
### 可以查看该node的cpu,内存分配情况
kubectl describe node master

# 查看资源信息
kubectl get 资源类型 资源名称# 查看资源的详细信息
kubectl get 资源类型 资源名称 -o wide # 查看基本信息,ip,所在node等
kubectl get 资源类型 资源名称 -o yaml # 以yaml格式输出详细信息

kubectl get cs显示scheduler Unhealthy,controller-manager Unhealthy

参考: https://blog.csdn.net/m0_47219942/article/details/115231303

解决办法:
/etc/kubernetes/manifests/kube-scheduler.yaml/etc/kubernetes/manifests/kube-controller-manager.yaml这两个配置文件中–port注释掉.

然后重启kubelet服务即可.

# 重启kubelet服务
systemctl restart kubelet

监控集群资源利用率

这个命令需要由metric-server服务提供数据,而这个服务默认没有安装,还需要手动部署下

metric-server项目地址: https://github.com/kubernetes-sigs/metrics-server

安装metric-server服务

安装了metric-server服务才能执行kubectl top命令.

metric-server服务工作原理:

  1. 用户发送 kubectl top 命令到 API Server。
  2. API Server 将请求转发给 Metric Server。
  3. Metric Server 监听 Kubernetes 中所有节点上的 Kubelet 的 cadvisor 指标接口。
  4. Kubelet 收集每个容器的资源使用率数据并将其发送到 cadvisor。
  5. cadvisor 将数据发送给 Kubelet,然后 Kubelet 将其汇报给 Metric Server。
  6. Metric Server 整理数据并将其返回给 API Server。
  7. API Server 再将数据返回给用户,用户就可以看到所有容器的资源利用率了。

kubectl top -> apiserver
–> metric-server(pod)
–> 所有节点kubelet(cadvisor指标接口)
–> 所有容器资源利用率

使用yaml资源清单部署metric-server服务

项目地址:https://github.com/kubernetes-sigs/metrics-server

安装 Kubernetes(k8s)指标服务器

# 下载yaml资源清单
wget https://ghproxy.com/https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
修改资源清单–(必须执行)

验证证书的部署方法: https://blog.csdn.net/zorsea/article/details/105037533

找到 container 下的 args 部分,添加以下行:

# 不验证证书
- --kubelet-insecure-tls

可选:修改yaml中镜像为阿里云的地址

# 修改资源清单中的containers
## 修改镜像地址
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.5.2## 忽略证书
- --kubelet-insecure-tls

spec 下,添加如下参数:
https://linux.cn/article-15714-1.html

# 非必需参数
hostNetwork: true

执行部署命令

# apply资源清单
kubectl apply -f components.yaml
检查是否部署成功-(必须执行)
# 如果状态为True并且能返回数据,说明Metrics Server服务工作正常## 检查metrics是否注册到apiservices,为True则注册成功
kubectl get apiservices |grep metrics

## 查看节点上有无metrics数据,--raw是原始json格式
## 模拟请求/apis/metrics.k8s.io/v1beta1/nodes接口,看是否返回数据
kubectl get --raw=/apis/metrics.k8s.io/v1beta1/nodes

使用kubectl top命令查看资源消耗

metric-server服务部署好之后,就可以正常使用kubectl top命令了

# 查看pod资源消耗
kubectl top po pod名 -n namespace名
kubectl top po

# 查看node资源消耗
kubectl top node node名 -n namespace名
kubectl top node

资源占用排序-根据cpu

# 根据cpu占有率排序查看所有pod
## -A 所有
## -l 指定匹配标签
kubectl top pod -A -l app=flannel --sort-by=cpu

管理k8s组件日志

k8s查看日志

# 查看pod日志
kubectl logs po pod名 -n namespace名称# 获取容器实例的 pod 日志(标准输出)
kubectl logs my-pod --previous


# 流式输出 Pod 的日志(标准输出)
kubectl logs po pod名 -n namespace名称 -f

# 获取含 name=myLabel 标签的 Pods 的日志(标准输出)
kubectl logs -l name=myLabel# 流式输出含 name=myLabel 标签的 Pod 的所有日志(标准输出)
kubectl logs -f -l name=myLabel --all-containers

查看deployment日志

# 查看deployment日志
kubectl logs deploy deploy名称 -n namespace名称
kubectl logs -f deploy/my-deployment -n namespace名称# 获取一个Deployment的Pod的日志(多容器例子)
kubectl logs deploy/my-deployment -c my-container
kubectl logs -f deploy/my-deployment -c my-container

查看service日志

# 查看service日志
kubectl logs svc svc名称 -n namespace名称
kubectl logs svc/服务名

进入pod的容器内查看日志

# 挂接到一个运行的容器中
kubectl attach my-pod -i# 进入pod的终端内查看日志
kubectl exec -ti pod名称 -- bash# 查看容器内主进程id
# 查看指定pid的输出
## 1 = stdout, 2 = stderr
tail  /proc/<pid>/fd/1

# 输出pod中容器的日志(stdout,pod中有多个容器的情况下使用)
# 获取 Pod 容器的日志(标准输出, 多容器场景)
kubectl logs my-pod -c 容器名# 流式输出 Pod 容器的日志(标准输出, 多容器场景)
kubectl -f logs my-pod -c 容器名

管理k8s组件日志

k8s系统的组件日志

# 查看你systemd守护进程管理的组件日志
## kubelet是systemd方式运行的
journalctl -u kubelet# 查看Pod部署的组件日志
## k8s的其他组件都是pod运行的
kubectl logs kube-proxy-xxx -n kube-system## 持续查看日志
kubectl logs -f kube-proxy-xxx -n kube-system# 从OS中查看日志
tail /var/log/messages# 持续查看OS日志
tail -f /var/log/messages

kubectl logs查看日志原理

kubectl logs (获取容器标准输出的日志) -----> apiserver -----> kubelet -----> docker(接管容器标准输出并写入文件中持久化保存) -----> 获取某个容器的日志

# 标准输出在宿主机的路径:
/var/lib/docker/containers/容器id/容器id-json.log# 想要查看该日志文件
## 先通过pod名称查询容器id
docker ps|grep pod名称## 进入该容器id的目录
cd /var/lib/docker/containers/容器id/## 查看该容器id的log
cat 容器id-json.log# 防止文件过大打开卡死,可以使用
less 容器id-json.log

管理k8s应用日志

k8s Cluster里面部署的应用程序日志

收集k8s日志思路

收集标准输出

针对标准输出
DaemonSet方式在每个Node上部署一个日志收集程序,采集/var/lib/docker/containers/目录下所有容器日志

收集容器中日志文件

针对容器中日志文件;
Pod中增加一个容器运行日志采集器,使用emtyDir共享日志目录,让日志采集器读取日志文件.

k8s查看节点状态失败

参考: https://www.cnblogs.com/dudu/p/12146344.html

需要安装Prometheus监控组件
才能使用kubectl get pods -n monitoring命令

k8s部署prometheus监控

官方网站 https://prometheus.io/
官方文档 https://prometheus.io/docs/introduction/overview/
https://github.com/prometheus-operator/kube-prometheus

# clone项目
git clone https://github.com/prometheus-operator/kube-prometheus.gitcd kube-prometheus# apply
kubectl apply --server-side -f manifests/setup

# apply
kubectl apply -f manifests/# 查看部署是否成功
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done

# 查看节点状态
kubectl get pods -n monitoring

k8s资源监控和日志管理相关推荐

  1. 第3章:Kubernetes监控与日志管理

    1.查看集群资源状况 集群整体状态: kubectl cluster-info 更多集群信息: kubectl cluster-info dump 查看资源信息 kubectl describe &l ...

  2. k8s部署EFK实现日志管理(mac desktop)

    网络上推荐了很多部署efk的方案,按照教程尝试很多教程,都无法使用.在学习了efk原理之后,自己搭建了一套可用的efk方案. efk方案架构这里就不详细介绍了,网上资料一大堆. 通过eck部署es和k ...

  3. 企业级容器技术 k8s 资源监控的部署和ui界面的部署

    metrics-server部署 软件地址https://github.com/kubernetes-sigs/metrics-server 下载比较慢可以通过国内的加速进行下载 码云https:// ...

  4. 客户资源信息管理后台/机构管理/信息管理/商机管理/产品管理/合同管理/日志管理/预约管理/任务清单/员工管理/资料库管理/统计分析/用户管理/售后日志/系统配置/crm客户管理系统/系统对接管理

    Axure作品介绍:客户资源信息管理后台/机构管理/信息管理/商机管理/产品管理/合同管理/日志管理/预约管理/任务清单/员工管理/资料库管理/统计分析/用户管理/售后日志/系统配置/crm客户管理系 ...

  5. 课时 12:可观测性-监控与日志(莫源)

    本文主要分为四个部分: 在 K8s 中监控和日志的背景信息: 在 K8s 中监控方案的演进,以及常见的监控方案的提供: 日志采集的一些细节以及常见的日志的开源系统: 课程总结,介绍一下阿里云容器服务上 ...

  6. Logging Operator - 优雅的云原生日志管理方案 (一)

    Logging Operator是BanzaiCloud下开源的一个云原生场景下的日志采集方案.之前小白转载过崔大佬介绍的一篇文章,不过由于之前一直认为在单个k8s集群下同时管理Fluent bit和 ...

  7. 5 个最值得注意的开源集中式日志管理工具

    集中式日志记录与安全性一样,是 IT 基础结构(包括 Web 应用程序和硬件设备)中核心资源监控和健全管理的一个基本方面.有能力的运维团队能够搭建一个日志监控和管理系统,来应对系统故障或应用程序的怪异 ...

  8. Kubernetes 集群日志管理 - 每天5分钟玩转 Docker 容器技术(180)

    Kubernetes 开发了一个 Elasticsearch 附加组件来实现集群的日志管理.这是一个 Elasticsearch.Fluentd 和 Kibana 的组合.Elasticsearch ...

  9. 日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

    高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要. 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要.考虑到容器短暂和不固定的生命周期,当我们需 ...

最新文章

  1. HDU 4467 分块
  2. python项目-马哥教育官网-专业Linux培训班,Python培训机构
  3. zend studio报错
  4. POJ 3150 循环矩阵的应用
  5. 关于Android Studio dependencies 缓存的问题
  6. 阿里大鱼短信介入demo分享
  7. 阿里巴巴制定了这 16 条
  8. Java基础---数据类型转换和运算符
  9. 关于tomcat的思考
  10. R语言中的数据处理包dplyr、tidyr笔记
  11. window wlan 相关服务
  12. 【CSDN浏览器助手9月新版本】免费插件让你享受VIP待遇!
  13. php 跨域 session,php session 跨域的解决办法
  14. 如何编写用户故事的验收标准
  15. asp.net开源资料——国内.NET论坛源代码
  16. [精简]托福核心词汇106
  17. 笔记本计算机风扇声音大怎么办,教你怎么从解决笔记本风扇狂转、噪音过大!-电脑风扇声音大怎么办...
  18. Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
  19. U盘装机大师安装GHOST WIN10系统
  20. 小鸟云服务器如何进行重装系统?

热门文章

  1. 计算直线与平面的交点
  2. debezium 之六 安装wal2json
  3. ubuntu 更换pip源
  4. 中央层面首次!数据可作为生产要素按贡献参与分配,专家解析
  5. php 数组 合并相同元素,php合并数组中相同元素的方法
  6. 发现一个超牛的大学生速成课、考研、考证网站
  7. 合肥工业大学 汇编语言程序设计 高分实验代码
  8. 转:1月9日上午,在考研现场政治科目答卷上,湖南科技大学应用心理学专业学生孙月潮留下了上千字的古体《长不恨歌》
  9. 计算机数字书写制作过程,凹印日字符,规范阿拉伯数字的书写制造技术
  10. 基于SpringBoot的私人健身与教练预约管理系统的设计与实现