04-k8s监控和日志

摘要

本文内容转自网络,个人学习记录使用,请勿传播

查看集群资源状况

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

监控集群资源利用率

1
2
3
4
5
# 查看node资源消耗
kubectl top node <node name>

# 查看pod资源消耗
kubectl top pod <pod name>

执行时会提示错误:error: Metrics API not available

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

Metrics Server

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

项目地址

image-20210901130842074

部署

1
2
3
4
5
6
7
8
9
10
11
12
13
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
vim components.yaml
...
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --kubelet-insecure-tls # 增加参数
image: lizhenliang/metrics-server:v0.4.1
...
kubectl apply -f components.yaml

增加一个kubelet-insecure-tls参数,这个参数作用是告诉metrics-server不验证kubelet提供的https证书

检查是否部署成功

1
2
kubectl get apiservices |grep metrics
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes

如果状态True并能返回数据说明Metrics Server服务工作正常。

工作流程

1
kubectl top -> kube-apiserver -> metrics-server(聚合器) -> kubelet(https的api)/cadvisor(容器资源指标采集器)

管理k8s集群组件日志

查看kubelet日志

1
2
# systemd守护进程管理的组件:
journalctl -u kubelet

查看通过pod部署的核心组件日志

  • Master组件:apiserver、controller-manager、scheduler、etcd(第三方)
  • Node组件:kubelet(systemd部署,其他都是容器化部署)、kube-proxy
1
kubectl logs kube-proxy-btz4p -n kube-system

查看其它系统日志

1
tail -f /var/log/messages

管理k8s集群应用日志

1
2
3
4
# 查看容器标准输出日志
kubectl logs <Pod名称>
kubectl logs -f <Pod名称>
kubectl logs -f <Pod名称> -c <容器名称>

查看日志的工作流程

1
kubectl logs -> kube-apiserver -> kubelet -> docker -> xxx-json.log(接管容器标准输出)

查看pod详情

1
2
3
kubectl get pods -o wide
# 进入容器终端
kubectl exec -it <Pod名称> -- bash

容器的标准输出在宿主机的存放位置

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

收集k8s集群日志思路

image-20210901131843786