2.1 查看集群状态

  1. # 查看master组件
  2. kubectl get cs
  3. # 查看node状态
  4. kubectl get nodes
  5. # 查看apiserver代理的URL
  6. kubectl cluster-info
  7. # 查看集群详细信息
  8. kubectl cluser-info dump
  9. # 查看资源信息
  10. kubectl describe <资源> <名称>
  11. # 查看资源信息
  12. kubectl get <资源>

2.2 监控集群资源利用率

  1. # 查看Node资源利用率
  2. kubectl top <node name>
  3. # 查看Pod资源利用率
  4. kubectl top <top name> [-n namespace]
  • 执行时报错: error: Metrics API not available

这是因为该命令需要metric-server服务提供数据,而这个服务默认没有安装,需要手动部署!

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

2、kubernetes监控和日志 - 图1

Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一 个应用部署在集群中。Metric server从每个节点上Kubelet API收集指 标,通过Kubernetes聚合器注册在Master APIServer中。 为集群提供Node、Pods资源利用率指标

部署metrics-server

  • —kubelet-insecure-tls 告诉metrics-server不验证kubelet提供的https证书
  • —kubelet-preferred-address-types=InternalIP 使用节点IP连接kubelet
  • 替换为良哥的镜像(国外的可能拉取不到)

2、kubernetes监控和日志 - 图2

检测是否部署成功

  1. # 如果状态True并能返回数据说明Metrics Server服务工作正常
  2. kubectl get apiservices |grep metrics
  3. kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes

kubectl top 命令解读

  1. $ kubectl top nodes --use-protocol-buffers
  2. NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
  3. k8s-master1 235m 5% 1161Mi 67%
  4. k8s-node1 159m 3% 631Mi 36%
  5. k8s-node2 128m 3% 805Mi 46%
  6. k8s-node3 112m 2% 589Mi 34%
  • —use-protocol-buffers 切换到协议缓冲区
  • CPU(cores) 使用的微核心数

科普知识:

  • 一核心会分成1000个微核心,一个毫核心为1m,如下cpu(cores)中324m就表示324个毫核心。
  • 核心计算百分比方式,需要先知道自己有多少颗cpu,命令:lscpu,一颗cpu是1000毫核心,得出总毫核心以后就可以计算了,如上master使用了235m,则master的使用率为(假设我的核心数为4):235/(41000)100=5.857%
  • 问题来了,你觉得nodes中已经有CPU的%了,还自己算个der?
    是的,node使用率已经有了,但pod没有,所有pod都需要自己计算的,要知道m这个东西是啥才是最重要的。

2.3 管理k8s组件日志

系统组件日志

  1. # systemd守护进程管理的组件
  2. journalctl -u <组件名称>
  3. # Pod部署的组件
  4. kubectl logs <pod name> [namespace]
  5. # 系统日志
  6. tail -20f /var/log/messages # centos
  7. tail -20f /var/log/auth.log # ubuntu

一些最为重要的 Linux 系统日志包括:

/var/log/syslog 或 /var/log/messages 存储所有的全局系统活动数据,包括开机信息。基于 Debian 的系统如 Ubuntu 在 /var/log/syslog 中存储它们,而基于 RedHat 的系统如 RHEL 或 CentOS 则在 /var/log/messages 中存储它们。 /var/log/auth.log 或 /var/log/secure 存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。Ubuntu 和 Debian 在 /var/log/auth.log 中存储认证信息,而 RedHat 和 CentOS 则在 /var/log/secure 中存储该信息。

2.4 管理k8s应用日志

查看容器标准输出日志

  1. kubectl logs <Pod名称>
  2. kubectl logs -f <Pod名称>
  3. kubectl logs -f <Pod名称> -c <容器名称>

标准输出在宿主机的路径:

  1. /var/lib/docker/containers/<container-id>/<container-id>-json.log

宿主机的路径

  • 容器中应用日志可以使用emptyDir数据卷将日志文件持久化到宿主机上。
  1. /var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/logs/access.log

2.5 收集k8s日志思路

2、kubernetes监控和日志 - 图3

针对标准输出:

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

针对容器中日志文件:

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