JDKHOME JDKHOME
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • Kubernetes学习记录
  • 国内环境ubuntu18安装k8s
  • 部署nginx服务
  • Kubernetes部署ELK日志收集
    • 镜像准备
    • 创建Pod
    • 部署Service
    • 参考文档
  • 启动Pod遇到CrashLoopBackOff解决方案
  • Filebeat使用Node方式收集k8s集群日志
  • 主动清理日志
  • k8s修改Master的Ip
  • 手动重启Pod
  • 分配pod到指定的节点
  • jenkins-pipeline自动构建并部署至k8s
  • 搭建K8S高可用集群
  • 搭建redis

Kubernetes 部署 ELK 日志收集

# Kubernetes 部署 ELK 日志收集

# 镜像准备

我是很中意 sebp/elk 这个镜像的
但是官方文档 中表示ssl是默认开启的.
在局域网中使用ssl会有很多限制. 所以这里基于 sebp/elk 改一点点

02-beats-input.conf

input {
  beats {
    port => 5044
  }
}
1
2
3
4
5

Dockerfile

FROM sebp/elk:680
COPY ./02-beats-input.conf /etc/logstash/conf.d/02-beats-input.conf
1
2

# 创建Pod

elk-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elk-deployment
  labels:
    app: elk
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elk
  template:
    metadata:
     labels:
       app: elk
    spec:
     nodeSelector:
      type: elk
     containers:
     - name: elk
       image: jdkhome/elk:0.0.1
       tty: true
       ports: 
       - containerPort: 5601
       - containerPort: 5044
       - containerPort: 9200
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

如上所示,暴露了2个端口

  • kibana的5601
  • logstash的5044

接下来执行create命令创建Pod

kubectl create -f elk-deployment.yaml
1

可以使用get命令获取pod情况

ubuntu@master:~/my-study-data/elk$ kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
elk-deployment-788969848c-84j6q     1/1     Running   2          5m22s
1
2
3

# 部署Service

elk-kibana-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: elk-kibana-service
spec:
  type: NodePort
  ports:
       - port: 5601
         nodePort: 30001
  selector:
    app: elk
1
2
3
4
5
6
7
8
9
10
11

将kibana的5601端口以NodePort的方式对外暴露,这样外部就可以通过节点IP地址来访问kibana服务了,创建部署脚本elk-kibana-service.yaml,kibana的服务通过node节点的30001端口对外暴露

elk-elastic-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: elk-elastic-service
spec:
  type: ClusterIP
  ports:
       - port: 9200
         targetPort: 9200
  selector:
    app: elk
1
2
3
4
5
6
7
8
9
10
11

将elasticsearch的9200端口以ClusterIP的方式对外暴露,方便集群服务维护日志(比如查询、清理等)

elk-logstash-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: elk-logstash-service
spec:
  type: ClusterIP
  ports:
       - port: 5044
         targetPort: 5044
  selector:
    app: elk
1
2
3
4
5
6
7
8
9
10
11

将logstash的5044端口以ClusterIP的方式对外暴露,这样其他pod的filebeat就可以通过服务名加5044端口来访问logstash服务了,创建部署脚本elk-logstash-service.yaml,logstash的服务通过5044端口对K8S内部的pod暴露

发布服务

kubectl create -f elk-kibana-service.yaml
kubectl create -f elk-elastic-service.yaml
kubectl create -f elk-logstash-service.yaml
1
2
3

打开浏览器, 输入任意节点ip:30001, 即可访问到Kibana服务.

# 参考文档

  • Docker下ELK三部曲之三:K8S上的ELK和应用日志上报 程序员欣宸
  • elk-docker readthedocs.io
上次更新: 2020/06/11, 18:06:00

← 部署nginx服务 启动Pod遇到CrashLoopBackOff解决方案 →

最近更新
01
搭建redis
11-21
02
istio安装
10-25
03
搭建K8S高可用集群
09-13
更多文章>
鄂ICP备15015406号 | Copyright © 2015-2020 jdkhome
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式