CentOS上Kubernetes日志管理指南
在CentOS上部署Kubernetes集群后,日志管理是保障集群稳定运行、快速排查问题的核心环节。完整的日志管理需覆盖收集→存储→查看/分析→轮转/清理→监控告警全链路,以下是具体实施方案:
Kubernetes日志收集需根据集群规模、资源预算选择合适方案,常见工具及特点如下:
/var/log/containers/*.log中的容器日志。Elasticsearch需持久化存储(如NFS、云盘),并配置资源限制(避免OOM)。示例StatefulSet配置(简化版):
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
spec:
serviceName: "elasticsearch"
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
ports:
- containerPort: 9200
env:
- name: discovery.type
value: "single-node"
- name: ES_JAVA_OPTS
value: "-Xms512m -Xmx512m"
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: nfs-client # 替换为实际存储类
resources:
requests:
storage: 10Gi
Fluentd以DaemonSet模式运行在每个节点,收集/var/log/containers/*.log(容器日志)并转发至Elasticsearch。示例DaemonSet配置(简化版):
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1.16-es
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch.default.svc.cluster.local" # Elasticsearch服务地址
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
resources:
limits:
memory: 500Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
Kibana通过Deployment和Service暴露,配置连接Elasticsearch。创建Service后,获取Service IP并通过浏览器访问(如http://<Kibana-Service-IP>:5601)。
kubectl logs:查看Pod日志(示例:kubectl logs -f payment-service-abcde -n prod 实时查看);kubectl logs --previous:查看容器重启前的日志;kubectl logs -c <container-name>:查看多容器Pod中指定容器的日志。k8s-logs-*),使用“Discover”页面查看实时日志,“Dashboard”构建可视化面板(如错误日志趋势、Pod日志量排名);namespace=prod、pod_name=payment-service)。kubetail payment-service -n prod);stern 'payment.*' -n prod)。容器日志默认存储在节点/var/log/containers目录,需通过logrotate配置轮转规则,避免日志文件过大。示例配置(/etc/logrotate.d/kubernetes-containers):
/var/lib/docker/containers/*/*.log {
daily # 每天轮转
rotate 7 # 保留7天
compress # 压缩旧日志
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 文件不存在不报错
notifempty # 空文件不轮转
copytruncate # 复制后截断原文件(不影响正在写入的日志)
}
此配置会每天轮转Docker容器日志,保留最近7天的压缩日志,节省磁盘空间。
结合Prometheus+Alertmanager实现日志监控与告警:
groups:
- name: k8s-log-alerts
rules:
- alert: HighErrorLogs
expr: rate(elasticsearch_indices_indexing_slowlog_total[5m]) > 100
for: 5m
labels:
severity: critical
annotations:
summary: "K8s集群错误日志过多 (instance {{ $labels.instance }})"
description: "5分钟内错误日志数超过100条,需立即排查"
通过以上流程,可在CentOS上搭建高效的Kubernetes日志管理系统,满足日志收集、存储、分析及监控需求,保障集群稳定运行。