在CentOS上部署Kubernetes(k8s)时,日志管理是一个关键的运维任务。有效的日志管理可以帮助你监控服务的运行状况,排查故障,优化性能,甚至发现安全问题。以下是一些常用的日志管理技巧和工具:
EFK堆栈是Kubernetes环境中常用的日志管理解决方案。
部署步骤:
部署Fluentd:
创建Fluentd的DaemonSet配置文件fluentd-ds.yaml
:
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-debian-elasticsearch
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch.logging.svc.cluster.local"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
应用配置文件:
kubectl apply -f fluentd-ds.yaml
部署Elasticsearch:
创建Elasticsearch的服务配置文件elasticsearch-svc.yaml
:
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
namespace: logging
spec:
ports:
- port: 9200
clusterIP: None
selector:
app: elasticsearch
创建Elasticsearch的部署配置文件elasticsearch-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch
namespace: logging
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
ports:
- containerPort: 9200
- containerPort: 9300
应用配置文件:
kubectl apply -f elasticsearch-svc.yaml
kubectl apply -f elasticsearch-deployment.yaml
部署Kibana:
创建Kibana的服务配置文件kibana-svc.yaml
:
apiVersion: v1
kind: Service
metadata:
name: kibana
namespace: logging
spec:
type: NodePort
ports:
- port: 5601
targetPort: 5601
nodePort: 31000
selector:
app: kibana
创建Kibana的部署配置文件kibana-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
namespace: logging
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
containers:
- name: kibana
image: docker.elastic.co/kibana/kibana:7.12.1
ports:
- containerPort: 5601
env:
- name: ELASTICSEARCH_HOSTS
value: "http://elasticsearch.logging.svc.cluster.local:9200"
应用配置文件:
kubectl apply -f kibana-svc.yaml
kubectl apply -f kibana-deployment.yaml
Kubetail:一个简单的Shell脚本,可以将多个Pod中的日志信息聚合到一起进行展示,并支持彩色输出和条件过滤。
安装和使用:
brew tap johanhaleby/kubetail && brew install kubetail
kubetail app1 app2 -c container1
Stern:使用Go语言开发的一款开箱即用的多容器实时日志查看工具。
使用logrotate
进行日志轮转,管理日志文件的大小和存储。
配置文件示例:
/etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Loki是Grafana Labs开发的日志聚合系统,专为日志数据设计,具有高性能和易于使用的特点。
安装和使用:
kubectl apply -f https://raw.githubusercontent.com/grafana/loki/v2.0.0/production/ksonnet/loki-stack.yaml
通过以上工具和技巧,你可以在CentOS上部署和管理Kubernetes集群的日志,确保日志数据的可用性和可分析性。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读:centos k8s部署中日志管理技巧