网站首页 > 技术教程 正文
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容器操作命令)
你 发表评论:
欢迎- 最近发表
-
- linux日志文件的管理、备份及日志服务器的搭建
- Linux下挂载windows的共享目录操作方法
- Linux系统中的备份文件命令(linux系统中的备份文件命令有哪些)
- 麒麟KYLINOS|通过不同方法设置用户访问文件及目录权限
- 「Linux笔记」系统目录结构(linux目录的结构及含义)
- linux中修改归属权chown命令和chgrp命令
- 工作日报 2021.10.27 Android-SEAndroid权限问题指南
- Windows和Linux环境下,修改Ollama的模型默认保存路径
- 如何强制用户在 Linux 上下次登录时更改密码?
- 如何删除Linux文件夹中除某些扩展名之外的所有文件?
- 标签列表
-
- 下划线是什么 (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)
本文暂时没有评论,来添加一个吧(●'◡'●)