1、制作JDK镜像
1.1 Dockerfile编写
下载JDK,这里使用的版本是jdk1.8.0_221
FROM centos:latest
RUN mkdir -p /usr/jdk8
ADD jdk-8u221-linux-x64.tar.gz /usr/jdk8
ENV JAVA_HOME /usr/jdk8/jdk1.8.0_221
ENV CLASSPATH ./:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
1.2 构建镜像
将所需的文件放在Dockerfile同目录下,然后执行构建命令:
docker build -t jdk8:v1.0.0
1.3 查看镜像
docker images|grep jdk8
2、制作filebeat镜像
2.1 Dockerfile编写
下载filebeat(https://www.elastic.co/cn/beats/filebeat),这里用的是7.6.2。注意ES要和filebeat版本一致。
FROM jdk8:v1.0.1 #上面制作的JDK镜像
WORKDIR /usr/local
ADD filebeat-7.6.2-linux-x86_64.tar.gz /usr/local
RUN cd /usr/local/filebeat-7.6.2-linux-x86_64
RUN mv /usr/local/filebeat-7.6.2-linux-x86_64/filebeat.yml /root/
COPY filebeat.yml /usr/local/filebeat-7.6.2-linux-x86_64/ #复制filebeat的配置文件到镜像中
COPY ofm-dcloud-server.jar /usr/local/ #微服务
ADD restart.sh /usr/local/restart.sh #微服务启动脚本
ADD run.sh /usr/local/run.sh #filebeat启动脚本
ADD runall.sh /usr/local/runall.sh #启动微服务和filebeat的脚本
RUN chmod 755 /usr/local/*.sh
CMD sh /usr/local/runall.sh
2.2 相关脚本和filebeat配置文件
filebeat启动脚本
run.sh
#! /bin/bash
/usr/local/filebeat-7.6.2-linux-x86_64/filebeat -e -c /usr/local/filebeat-7.6.2-linux-x86_64/filebeat.yml
jar包启动脚本
runjar.sh
# !/bin/bash
nohup java -jar xxxx.jar > out.log 2>&1 &
此脚本用于启动 filebeat启动脚本和jar包启动脚本
runall.sh
#! /bin/bash
sh /usr/local/restart.sh
sh /usr/local/run.sh
filebeat配置文件
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/logs/*.log #要收集日志的位置(容器中的路径)
output.elasticsearch:
hosts: ["ES的ip地址:9200"]
index: "filebeat-%{+yyyy.MM.dd}"
setup.template.name: "filebeat"
setup.template.pattern: "filebeat-*"
setup.template.enabled: false
setup.template.overwrite: true
2.3 构建镜像
docker build --platform linux/amd64 -t jdk-filebeat:v1.0.0 .
--platform linux/amd64 指定容器架构,以防出现容器架构和服务器架构不一致导致容器启动失败
查看镜像:
docker images|grep jdk-filebeat
启动filebeat容器
docker run -d --name=filebeat jdk-filebeat:v1.0.0
查看容器是否启动
docker ps|grep jdk-filebeat
查看filebeat容器日志
需要等待三十秒再查看filebeat日志
docker logs -f filebeat
2.4 查看ES
3、K8S部署filebeat
3.1 制作jar包镜像
FROM jdk8:v1.0.1
WORKDIR /usr/local
COPY ofm-dcloud-server.jar /usr/local/
ADD restart.sh /usr/local/restart.sh
RUN chmod 755 /usr/local/*.sh
CMD sh /usr/local/restart.sh
3.2 制作filebeat镜像
FROM jdk8:v1.0.1
WORKDIR /usr/local
ADD filebeat-7.6.2-linux-x86_64.tar.gz /usr/local
RUN cd /usr/local/filebeat-7.6.2-linux-x86_64
RUN mv /usr/local/filebeat-7.6.2-linux-x86_64/filebeat.yml /root/
COPY filebeat.yml /usr/local/filebeat-7.6.2-linux-x86_64/
ADD run.sh /usr/local/run.sh
RUN chmod 755 /usr/local/run.sh
CMD sh /usr/local/run.sh
3.3 编写yml文件
apiVersion: v1
kind: Pod
metadata:
name: k8sjdk-filebeat
namespace: default
labels:
environment: kf
spec:
nodeName: host140
containers:
- name: k8sfilebeat
image: filebeat:v2.0.5
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: logs-service
mountPath: /home
- name: k8sjdk
image: k8sjdk:v1.0.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8961
volumeMounts:
- name: logs-service
mountPath: /usr/local/logs
volumes:
- name: logs-service
emptyDir: {}
这里使用的挂载方式是emptyDir,通过这种挂载方式使微服务的启动日志可以同步到filebeat容器中,从而收集到jar包日志。