网站首页 > 技术教程 正文
k8s的日志收集有多种方案,其中一种是将pod的日志挂载到node节点,然后在node节点运行单独的日志收集客户端,将日志收集并分发到其他日志分析服务如elasticsearch上。
原理
借助docker的Volume功能。在host机器上开辟一个固定目录D;产生日志的容器将日志文件所在目录mount到D目录下的子目录中;收集日志的容器再把目录D mount到自己容器内。
这样日志收集容器就能访问到所有日志文件了。如下图所示:
如果pod有多个replicas时存在一个问题,多个pod的日志会写到node机器上的同一个文件中
解决办法是:利用HOSTNAME这个环境变量(每个pod的HOSTNAME值默认为pod_name),每个pod将日志写在$HOSTNAME目录下,便可以实现不同的pod日志写到不同目录下
方案:
1. 使用一个能持久化存储的公用目录,比方说hostpath:/data/logs
2. 将这个目录挂载到所有pod的/data/logs路径
3. 在pod的/data/logs创建一个不可能重名的文件夹,比如/data/logs/pod-name
mkdir -p /data/logs/$HOSTNAME
4. 将log目录软链接到pod里面的/data/logs/pod-name目录
比如程序日志打印到/logs目录
ln -s /data/logs/$HOSTNAME /logs
假设程序日志输出到 /logs
母机上设置日志目录:/data/logs
案例:
制作好镜像:
一:dockerfile
#dockerfile
FROM nginx
MAINTAINER mengshiye "shiye@meng.com"
CMD mkdir -p /data/logs/${HOSTNAME} && ln -s /data/logs/${HOSTNAME} /logs && nginx -g "daemon off;"
二:生成镜像
docker build -t nginx:v1 .
三:yaml 文件
#svc-nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: svc-nginx-30083
spec:
ports:
- port: 8003
targetPort: 80
nodePort: 30083
protocol: TCP
type: NodePort
selector:
app: svc-nginx-30083创建服务
kubectl create -f svc-nginx.yaml
四:deployment 创建Pods
#deploy-nginx-30083.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx-30083
spec:
replicas: 2
selector:
matchLabels:
app: svc-nginx-30083
template:
metadata:
labels:
app: svc-nginx-30083
spec:
nodeSelector:
node: k2
containers:
- name: contain-nginx-30083
image: nginx:v1
volumeMounts:
- mountPath: /data/logs
name: ledou-volume-log
ports:
- containerPort: 80
volumes:
- name: ledou-volume-log
hostPath:
path: /data/logs
type: DirectoryOrCreate创建deploy
kubectl create -f deploy-nginx-30083.yaml
四:验证日志信息
1.进入pods
docker exec -it 0c387469be94 /bin/bash
2.查看日志目录
ls -l /logs
logs -> /data/logs/nginx-deploy-30083-6cd88c7c94-lszrk
3.打印日志测试
4.母机上验证
ls /data/logs/*
5.通过母机上的filebeat 搜集并传到logstash/kafka/redis/es
方案2:直接修改deployment 注入command方式
(覆盖默认的nginx -g "daemon off;",需要单独加上)
#nginx-deploy-30083.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy-30083
spec:
replicas: 2
selector:
matchLabels:
app: nginx-svc-30083
template:
metadata:
labels:
app: nginx-svc-30083
spec:
nodeSelector:
node: k6
containers:
- name: nginx-deploy-30083
image: nginx
command: ["/bin/bash", "-c"]
args:
- "mkdir -p /data/logs/${HOSTNAME} && ln -s /data/logs/${HOSTNAME} /logs && nginx -g 'daemon off;'"
volumeMounts:
- mountPath: /data/logs
name: ledou-volume-log
ports:
- containerPort: 80
volumes:
- name: ledou-volume-log
hostPath:
path: /data/logs
type: DirectoryOrCreate猜你喜欢
- 2024-10-16 LNMP环境搭建-nginx(lnmp搭建后怎么做网站)
- 2024-10-16 进阶必备 | Linux系统管理工具 supervisor 详解,代码齐全可复制
- 2024-10-16 K8S 之 Ingress-nginx 源码解析(k8s nginx配置)
- 2024-10-16 编排系统K8S Ingress-nginx源码解析
- 2024-10-16 让博客Docker化,轻松上手Docker(博客登录界面)
- 2024-10-16 「这些都不知道你就是个弟弟」Docker常用命令
- 2024-10-16 容器技术:Podman 与 RESTful 接口
- 2024-10-16 Docker:网络模式详解(docker五种网络模式)
- 2024-10-16 Docker部署前端Web项目(docker部署webdav)
- 2024-10-16 Docker容器操作(docker容器操作命令)
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
- 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
- 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
- 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
- 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- 最近发表
-
- Excel计算工龄和年份之差_excel算工龄的公式year
- Excel YEARFRAC函数:时间的"年份比例尺"详解
- 最常用的10个Excel函数,中文解读,动图演示,易学易用
- EXCEL中如何计算截止到今日(两个时间中)的时间
- 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- Excel日期函数之DATEDIF函数_excel函数datedif在哪里
- Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)

本文暂时没有评论,来添加一个吧(●'◡'●)