2.1 查看集群状态
# 查看master组件
kubectl get cs
# 查看node状态
kubectl get nodes
# 查看apiserver代理的URL
kubectl cluster-info
# 查看集群详细信息
kubectl cluser-info dump
# 查看资源信息
kubectl describe <资源> <名称>
# 查看资源信息
kubectl get <资源>
2.2 监控集群资源利用率
# 查看Node资源利用率
kubectl top <node name>
# 查看Pod资源利用率
kubectl top <top name> [-n namespace]
- 执行时报错: error: Metrics API not available
这是因为该命令需要metric-server服务提供数据,而这个服务默认没有安装,需要手动部署!
项目地址:https://github.com/kubernetes-sigs/metrics-server
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
- 替换为良哥的镜像(国外的可能拉取不到)
检测是否部署成功
# 如果状态True并能返回数据说明Metrics Server服务工作正常
kubectl get apiservices |grep metrics
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
kubectl top 命令解读
$ kubectl top nodes --use-protocol-buffers
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master1 235m 5% 1161Mi 67%
k8s-node1 159m 3% 631Mi 36%
k8s-node2 128m 3% 805Mi 46%
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组件日志
系统组件日志
# systemd守护进程管理的组件
journalctl -u <组件名称>
# Pod部署的组件
kubectl logs <pod name> [namespace]
# 系统日志
tail -20f /var/log/messages # centos
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应用日志
查看容器标准输出日志
kubectl logs <Pod名称>
kubectl logs -f <Pod名称>
kubectl logs -f <Pod名称> -c <容器名称>
标准输出在宿主机的路径:
/var/lib/docker/containers/<container-id>/<container-id>-json.log
宿主机的路径
- 容器中应用日志可以使用emptyDir数据卷将日志文件持久化到宿主机上。
/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/logs/access.log
2.5 收集k8s日志思路
针对标准输出:
以DaemonSet方式在每个Node 上部署一个日志收集程序,采集 /var/lib/docker/containers/目录下所有容器日志
针对容器中日志文件:
在Pod中增加一个容器运行 日志采集器,使用emtyDir共享日志目录让日志采 集器读取到日志文件