Kubernetes可观测性完整指南

发表于
更新于
1 1.5~1.9 分钟 662

资源监控(Metrics Server)📈

安装和配置

  • 准备工作:确保Kubernetes版本1.8及以上,API聚合层必须启用,Kubelet必须启用Webhook认证和授权 ⚙️
  • 安装命令
    • 下载部署文件:wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    • 高可用版本:kubectl apply -f high-availability-1.21+.yaml
    • 国内镜像替换:将registry.k8s.io/metrics-server/metrics-server:v0.7.2替换为可用镜像地址 🌏

核心参数配置

args:
  - --kubelet-insecure-tls
  - --cert-dir=/tmp
  - --secure-port=10250
  - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
  - --kubelet-use-node-status-port
  - --metric-resolution=15s

使用命令

  • 查看节点资源使用:kubectl top nodes
  • 查看Pod资源使用:kubectl top pods -n <NAMESPACE>
  • 验证安装:kubectl get pods -n kube-system | grep metrics-server

日志收集(EFK)📝

EFK架构

  • Elasticsearch:分布式搜索和分析引擎,用于存储和索引日志数据 🔍
  • Fluentd:日志收集器,作为DaemonSet部署在每个节点上,收集容器日志 🔄
  • Kibana:可视化分析平台,提供日志查询和展示界面 📊

部署步骤

  1. 创建命名空间kubectl create namespace logging
  2. 部署Elasticsearch
    • 使用StatefulSet部署ES集群
    • 配置存储卷和环境变量 💾
  3. 部署Fluentd
    • 作为DaemonSet部署,确保每个节点都有实例
    • 配置RBAC权限访问Kubernetes API 🔐
  4. 部署Kibana
    • 使用Deployment部署
    • 配置Service和Ingress暴露服务 🌐

Fluentd配置要点

  • 监听路径:/var/log/containers/*.log
  • 输出目标:Elasticsearch集群
  • 使用kubernetes插件增强日志信息

常见排查命令🔧

基础状态检查

  • 查看Pod状态kubectl get pods -n <NAMESPACE>
  • 查看节点状态kubectl get nodes
  • 查看集群事件kubectl get events --all-namespaces

详细信息查询

  • 查看Pod详细信息kubectl describe pod <POD-NAME> -n <NAMESPACE>
  • 查看节点详细信息kubectl describe node <NODE-NAME>
  • 查看Service信息kubectl describe svc <SERVICE-NAME> -n <NAMESPACE>

日志查看

  • 查看容器日志kubectl logs <POD-NAME> -c <CONTAINER-NAME> -n <NAMESPACE>
  • 查看前一次日志kubectl logs <POD-NAME> --previous
  • 实时跟踪日志kubectl logs -f <POD-NAME>

容器操作

  • 进入容器kubectl exec -it <POD-NAME> -n <NAMESPACE> -- /bin/bash
  • 在容器中执行命令kubectl exec <POD-NAME> -- <COMMAND>
  • 文件拷贝kubectl cp <LOCAL-FILE> <POD-NAME>:<PATH>

网络和存储排查

  • 端口转发kubectl port-forward <POD-NAME> <LOCAL-PORT>:<POD-PORT>
  • 检查Endpointskubectl get endpoints <SERVICE-NAME> -n <NAMESPACE>
  • 检查PVC状态kubectl get pvc -n <NAMESPACE>

资源监控

  • 查看资源使用情况kubectl top nodeskubectl top pods -n <NAMESPACE>
  • 检查API服务器健康kubectl get --raw=/healthz

常见问题排查

  • Pod Pending:检查资源不足、节点Selector不匹配 ⏳
  • CrashLoopBackOff:查看应用日志,检查启动命令 🔄
  • ImagePullBackOff:检查镜像名称和认证配置 🐳
  • Service无法访问:检查Endpoints和网络策略 🌐

0
上一篇 使用须知
下一篇 ConfigMap配置与密文管理详解