在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集群的日志,確保日志數據的可用性和可分析性。