zoukankan      html  css  js  c++  java
  • 基于k8s搭建微服务日志收集中心

    由于项目组业务需求,在k8s中运行的微服务日志要进行收集。

    1、需要将k8s中的每个pod微服务挂载一个卷,(每个pod都会在一个node上,在node节点上创建一个文件夹,如:/logs/ 将这个目录挂载到每个微服务的pod中,使之实现映射)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: neusipo-cloud-gateway-deployment
      namespace: gateway
    spec:
      selector:
        matchLabels:
          app: neusipo-cloud-gateway
      replicas: 3
      minReadySeconds: 10
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 0
        type: RollingUpdate
      template:
        metadata:
          name: neusipo-cloud-gateway
          labels:
            app: neusipo-cloud-gateway
        spec:
          containers:
          - name: neusipo-cloud-gateway
            image: cr.registry.cnipaig1.cloud/neusipo/neusipo-cloud-gateway-test:1.0  #这里的镜像地址是阿里云镜像仓库地址
            args: ["--spring.profiles.active=test"]   #配置文件中的测试配置
            env:
            - name: SERVER_PORT
              value: "18080"
            resources:
              requests:
                cpu: 4
                memory: 4Gi
              limits:
                cpu: 4
                memory: 4Gi
            volumeMounts:   #pod中挂载
            - name: gateway-logs   #name与下方本机name保持一致
              mountPath: /sipo-data/neusipo-test/   #pod中的挂载地址
              readOnly: false
          volumes:    #本机卷
          - name: gateway-logs     
            hostPath:
              path: /logs/   #本机创建的挂载目录
    

    2、执行命令,创建pod。

    kubectl apply -f deployment-demo.yaml -n gateway
    

    3、查看是否创建成功

    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl get pods -n gateway
    NAME                                                READY   STATUS    RESTARTS   AGE
    neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht   1/1     Running   0          4h16m
    neusipo-cloud-gateway-deployment-66b6c96fbf-r7wcd   1/1     Running   0          4h16m
    neusipo-cloud-gateway-deployment-66b6c96fbf-wwjpk   1/1     Running   0          4h16m
    

     看到STATUS状态为Running 时说明容器已启动。

    4、此时验证pod中是否已经挂载上本机目录。

    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl exec -it  neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht -n gateway -- bash
    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht data]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          40G   17G   21G  45% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
    /dev/vda1        40G   17G   21G  45% /sipo-data/neusipo-test   #这里就代表已经挂载上本机所创建的目录了
    shm              64M     0   64M   0% /dev/shm
    tmpfs           7.8G   12K  7.8G   1% /run/secrets/kubernetes.io/serviceaccount
    tmpfs           7.8G     0  7.8G   0% /proc/acpi
    tmpfs           7.8G     0  7.8G   0% /proc/scsi
    tmpfs           7.8G     0  7.8G   0% /sys/firmware
    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht data]# 

    此时查看pod服务启动后是否有日志打印,通过映射到node节点上创建的目录。(查看pod在那个node节点上,登录node节点,进入创建的目录,查看是否pod日志映射出来)

    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht data]# cd /sipo-data/neusipo-test/
    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht neusipo-test]# ls
    gateway
    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht neusipo-test]# cd gateway/
    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht gateway]# ls
    logs
    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht gateway]# cd logs/
    [root@neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht logs]# ls
    error  info 
    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl get pods -n gateway -o wide
    NAME                                                READY   STATUS    RESTARTS   AGE     IP             NODE                                         NOMINATED NODE   READINESS GATES
    neusipo-cloud-gateway-deployment-66b6c96fbf-9ncht   1/1     Running   0          4h26m   172.20.1.91    cn-beijing-gzj1-d01.i-qj001np4kv147gu45x2l   <none>           <none>
    neusipo-cloud-gateway-deployment-66b6c96fbf-r7wcd   1/1     Running   0          4h26m   172.20.0.198   cn-beijing-gzj1-d01.i-qj001np4kv147gu45x2k   <none>           <none>
    neusipo-cloud-gateway-deployment-66b6c96fbf-wwjpk   1/1     Running   0          4h26m   172.20.1.60    cn-beijing-gzj1-d01.i-qj001np4kv147gu45x2j   <none>           <none>
    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl get node -o wide
    NAME                                         STATUS   ROLES    AGE    VERSION            INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
    cn-beijing-gzj1-d01.i-qj001np4kv147ax0tr54   Ready    master   198d   v1.14.8-aliyun.1   10.160.22.68   <none>        CentOS Linux 7 (Core)   3.10.0-957.21.3.el7.x86_64   docker://18.9.2
    cn-beijing-gzj1-d01.i-qj001np4kv147ax0tr55   Ready    master   198d   v1.14.8-aliyun.1   10.160.22.69   <none>        CentOS Linux 7 (Core)   3.10.0-957.21.3.el7.x86_64   docker://18.9.2
    cn-beijing-gzj1-d01.i-qj001np4kv147ax0tr56   Ready    master   198d   v1.14.8-aliyun.1   10.160.22.70   <none>        CentOS Linux 7 (Core)   3.10.0-957.21.3.el7.x86_64   docker://18.9.2
    cn-beijing-gzj1-d01.i-qj001np4kv147gu45x2j   Ready    <none>   198d   v1.14.8-aliyun.1   10.160.22.73   <none>        CentOS Linux 7 (Core)   3.10.0-957.21.3.el7.x86_64   docker://18.9.2
    cn-beijing-gzj1-d01.i-qj001np4kv147gu45x2k   Ready    <none>   198d   v1.14.8-aliyun.1   10.160.22.72   <none>        CentOS Linux 7 (Core)   3.10.0-957.21.3.el7.x86_64   docker://18.9.2
    cn-beijing-gzj1-d01.i-qj001np4kv147gu45x2l   Ready    <none>   198d   v1.14.8-aliyun.1   10.160.22.71   <none>        CentOS Linux 7 (Core)   3.10.0-957.21.3.el7.x86_64   docker://18.9.2
    

     从这里看到其中一个pod在10.160.22.73这个node节点上,登录node节点查看是否有映射的日志

    [root@iZqj001np4kv147gu45x2jZ logs]# pwd
    /logs
    [root@iZqj001np4kv147gu45x2jZ logs]# ls
    gateway
    [root@iZqj001np4kv147gu45x2jZ logs]# cd gateway/
    [root@iZqj001np4kv147gu45x2jZ gateway]# ls
    logs
    [root@iZqj001np4kv147gu45x2jZ gateway]# cd logs/
    [root@iZqj001np4kv147gu45x2jZ logs]# ls
    error  info
    

     如果node节点出现了和pod中一样的目录则说明,挂载成功并映射成功,(其他微服务同理就行)

    5、日志映射出来后,需要搭建filebeat镜像,创建filebeat的pod容器,容器需要创建为DaemonSet形式的(DaemonSet所创建的容器类似于守护进程,它会在每个node节点都创建一个pod),使filebeat容器可以从所有的node节点日志目录拉取日志到pod中,并发送给elk进行日志分析。在master节点上下载filebeat压缩包,并解压。

    [root@iZqj001np4kv147ax0tr54Z ~]# ls
    deployment-demo.yaml              filebeat-7.13.1-linux-x86_64.tar.gz         daemonset-demo.yamlfilebeat-7.13.1-linux-x86_64      daemonset-demo.yaml        dockerfile-filebeat
    

     创建filebeat的docker镜像

    [root@iZqj001np4kv147ax0tr54Z ~]# cat dockerfile-filebeat 
    FROM cr.registry.cnipaig1.cloud/neusipo/centos:7.9.2009
    ENV LANG en_US.UTF-8
    ENV TZ Asia/Shanghai
    
    ADD filebeat-7.13.1-linux-x86_64.tar.gz /data/
    
    WORKDIR /data/filebeat-7.13.1-linux-x86_64
    
    ENTRYPOINT ["./filebeat", "-c", "filebeat.yml", "-e"]
    

     上传到阿里云的镜像仓库,阿里云容器镜像服务文档中已写如何上传,照着一步步执行就可。

     构建filebeat的yaml文件

    apiVersion: apps/v1
    kind: DaemonSet   #这里为DaemonSet模式
    metadata:
      name: neusipo-filebeat
      namespace: filebeat
    spec:
      selector:
        matchLabels:
          app: neusipo-filebeat
      template:
        metadata:
          name: neusipo-filebeat
          labels:
            app: neusipo-filebeat
        spec:
          containers:
          - name: neusipo-filebeat
            image: cr.registry.cnipaig1.cloud/neusipo/filebeat:v2
            command: ["./filebeat", "-c", "/data/filebeat/conf/filebeat.yml", "-e"]   #command模块可以强制替换容器里默认的启动命令
            resources:
              requests:
                cpu: 4
                memory: 4Gi
              limits:
                cpu: 4
                memory: 4Gi
            volumeMounts:
              - name: filebeat-log
                mountPath: /sipo-data/neusipo-test/    #这里为挂载node目录到pod中的目录
                readOnly: false
              - name: neusipo-filebeat
                mountPath: /data/filebeat/conf/       #这里为pod容器内filebeat配置文件目录
                readOnly: true
          volumes:
          - name: filebeat-log
            hostPath:
              path: /logs/          #node节点目录
          - name: neusipo-filebeat
            configMap:               #将pod容器内的filebeat配置文件映射到configmap中
              name: neusipo-filebeat    #configmap内filebeat的name
              items:
                - key: filebeat.yml      #映射在configmap中的filebeat的配置文件名
                  path: filebeat.yml       #pod中filebeat的配置文件名
    

     创建neusipo-filebeat的configmap,映射的文件是从filebeat压缩包解压出来的配置文件

    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl create configmap neusipo-filebeat --from-file=filebeat.yml -n filebeat
    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl get configmap -n filebeat
    NAME               DATA   AGE
    neusipo-filebeat   1      3h55m   #这里DATA出现1,说明文件已经写入
    

     创建namesapce

    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl create configmap ns filebeat
    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl get ns |grep filebeat
    filebeat              Active   4h25m
    

     创建filebeat的pod容器,并查看是否创建成功

    kubectl apply -f daemonset-demo.yaml -n filebeat
    
    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl get pods -n filebeat
    NAME                     READY   STATUS    RESTARTS   AGE
    neusipo-filebeat-64mhf   1/1     Running   0          3h55m
    neusipo-filebeat-k9ncp   1/1     Running   0          3h55m
    neusipo-filebeat-lsvcb   1/1     Running   0          3h55m
    

     进入容器查看是否挂载上node目录,并查看是否拉取到微服务的日志

    [root@iZqj001np4kv147ax0tr54Z ~]# kubectl exec -it neusipo-filebeat-k9ncp -n filebeat /bin/bash
    [root@neusipo-filebeat-k9ncp filebeat-7.13.1-linux-x86_64]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          40G   17G   21G  45% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
    /dev/vda1        40G   17G   21G  45% /sipo-data/neusipo-test
    shm              64M     0   64M   0% /dev/shm
    tmpfs           7.8G   12K  7.8G   1% /run/secrets/kubernetes.io/serviceaccount
    tmpfs           7.8G     0  7.8G   0% /proc/acpi
    tmpfs           7.8G     0  7.8G   0% /proc/scsi
    tmpfs           7.8G     0  7.8G   0% /sys/firmware
    [root@neusipo-filebeat-k9ncp filebeat-7.13.1-linux-x86_64]# cd /sipo-data/neusipo-test/
    [root@neusipo-filebeat-k9ncp neusipo-test]# ls
    gateway
    [root@neusipo-filebeat-k9ncp neusipo-test]# cd gateway/
    [root@neusipo-filebeat-k9ncp gateway]# ls
    logs
    [root@neusipo-filebeat-k9ncp gateway]# cd logs/
    [root@neusipo-filebeat-k9ncp logs]# ls
    error  info
    [root@neusipo-filebeat-k9ncp logs]# 
    

     后续只需要更改configmap中的filebeat配置文件,就可以了。

    kubectl edit configmap neusipo-filebeat -n filebeat
    

     完成!!!

  • 相关阅读:
    jvm 垃圾收集算法
    jvm 判断对象死亡
    jvm 内存分配
    jvm 对象奥秘
    mysql事务测试及delete和update是使用行级锁,还是表级锁
    sql语句中where后边的哪些条件会使索引失效 -- SQL语句优化
    java nio详解
    mysql数据库优化概述详解
    java 序列化和反序列化
    java io框架详解
  • 原文地址:https://www.cnblogs.com/Zrecret/p/14875701.html
Copyright © 2011-2022 走看看