k8s日志管理

瑞星  论坛元老 | 2025-3-31 17:09:04 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1675|帖子 1675|积分 5025

k8s查看日志

  1. # 查看pod日志
  2. kubectl logs po pod名 -n namespace名称
  3. # 获取容器实例的 pod 日志(标准输出)
  4. kubectl logs my-pod --previous
复制代码

  1. # 流式输出 Pod 的日志(标准输出)
  2. kubectl logs po pod名 -n namespace名称 -f
复制代码

  1. # 获取含 name=myLabel 标签的 Pods 的日志(标准输出)
  2. kubectl logs -l name=myLabel
  3. # 流式输出含 name=myLabel 标签的 Pod 的所有日志(标准输出)
  4. kubectl logs -f -l name=myLabel --all-containers
复制代码


查看集群中不是完全运行状态的pod

  1. # 列出 Kubernetes 集群中所有不是完全运行状态的 Pods
  2. ## 1/1, 2/2, 3/3, 4/4, 5/5, 6/6: 这些通常表示 Pod 中的容器数量/期望的容器数量,比如 1/1 表示一个容器正在运行,并且只有一个容器是期望运行的,因此 Pod 状态是好的。
  3. ## Com: 这可能是用于匹配 "Completed" 状态的 Pods 的缩写。
  4. ## NAME: 可能用于排除输出中的表头行。
  5. kubectl get pods -A -o wide |grep -vE "1/1|2/2|3/3|4/4|5/5|6/6|Com|NAME"
复制代码


查看deployment日志

  1. # 查看deployment日志
  2. kubectl logs deploy deploy名称 -n namespace名称
  3. kubectl logs -f deploy/my-deployment -n namespace名称
  4. # 获取一个Deployment的Pod的日志(多容器例子)                        
  5. kubectl logs deploy/my-deployment -c my-container
  6. kubectl logs -f deploy/my-deployment -c my-container  
复制代码

查看service日志

  1. # 查看service日志
  2. kubectl logs svc svc名称 -n namespace名称
  3. kubectl logs svc/服务名
复制代码

进入pod的容器内查看日志

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

  1. # 输出pod中容器的日志(stdout,pod中有多个容器的情况下使用)
  2. # 获取 Pod 容器的日志(标准输出, 多容器场景)
  3. kubectl logs my-pod -c 容器名
  4. # 流式输出 Pod 容器的日志(标准输出, 多容器场景)
  5. kubectl -f logs my-pod -c 容器名
复制代码

管理k8s组件日志

   k8s系统的组件日志
  1. # 查看你systemd守护进程管理的组件日志
  2. ## kubelet是systemd方式运行的
  3. journalctl -u kubelet
  4. # 查看Pod部署的组件日志
  5. ## k8s的其他组件都是pod运行的
  6. kubectl logs kube-proxy-xxx -n kube-system
  7. ## 持续查看日志
  8. kubectl logs -f kube-proxy-xxx -n kube-system
  9. # 从OS中查看日志
  10. tail /var/log/messages
  11. # 持续查看OS日志
  12. tail -f /var/log/messages
复制代码

kubectl logs查看日志原理

kubectl logs (获取容器标准输出的日志) -----> apiserver -----> kubelet -----> docker(接管容器标准输出并写入文件中持久化保存) -----> 获取某个容器的日志
  1. # 标准输出在宿主机的路径:
  2. /var/lib/docker/containers/容器id/容器id-json.log
  3. # 想要查看该日志文件
  4. ## 先通过pod名称查询容器id
  5. docker ps|grep pod名称
  6. ## 进入该容器id的目录
  7. cd /var/lib/docker/containers/容器id/
  8. ## 查看该容器id的log
  9. cat 容器id-json.log
  10. # 防止文件过大打开卡死,可以使用
  11. less 容器id-json.log
复制代码

管理k8s应用日志

   k8s集群上摆设的应用程序日志
  
收集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
  1. # clone项目
  2. git clone https://github.com/prometheus-operator/kube-prometheus.git
  3. cd kube-prometheus
  4. # apply
  5. kubectl apply --server-side -f manifests/setup
复制代码

  1. # apply
  2. kubectl apply -f manifests/
  3. # 查看部署是否成功
  4. until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
复制代码

  1. # 查看节点状态
  2. kubectl get pods -n monitoring
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表