zoukankan      html  css  js  c++  java
  • k8s实现elk日志收集系统部署

    k8s实现elk日志收集系统

    说明:es搭建集群,3台master,3台node,node角色分别为热数据,温数据,冷数据

    kibana进行数据展示,同时连接es的工具使用es-head。

    此处使用deployment+service结合搭建,logstash还未进行试验,等我继续更新。。。

    master节点搭建

    ######### 创建名称空间 ###########
    kind: Namespace
    apiVersion: v1
    metadata:
      name: elastic
    ---
    ######## service类型为nodeport用以暴露es端口供外部访问 ########
    kind: Service
    apiVersion: v1
    metadata:
      name: es-cluster-nodeport
      namespace: elastic
    spec:
      type: NodePort
      selector:
        app: es-cluster
      ports:
        - port: 9200
          targetPort: 9200
          nodePort: 32700
    ---
    ####### es集群间通讯端口,使用service进行暴露,但不像nodeport可对集群外服务器提供访问 #############
    kind: Service
    apiVersion: v1
    metadata:
      name: es-svc
      namespace: elastic
      labels:
        app: es-cluster
      annotations:
        es.kubernetes.io/es: es-cluster
    spec:
      selector:
        app: es-cluster
        role: master
      ports:
        - port: 9300
          targetPort: 9300
    ---
    ###### es的master创建 #############################
    kind: Deployment				       # 资源类型
    apiVersion: apps/v1  				       # 版本
    metadata:				              	# 元数据
      namespace: elastic   				       # 名称空间
      name: es-cluster-master  			        # deployment类型的元数据名
      labels:						# 标签
        app: es-cluster-master			        # 定义deployment的标签
        role: master		
    spec:							# 说明				
      replicas: 3						# 副本数为3,表示创建3个pod
      selector:						# 选择器
        matchLabels:				        # 精确选择
          app: es-cluster				       # 选择标签为 app: es-cluster
          role: master					 # 选择标签为 role: master
      template:						# 模板
        metadata:						# 元数据信息
          labels:						# 标签
            app: es-cluster				       # 此模板的信息
            role: master
        spec:						# 模板对应的说明
          containers:					 # 容器
            - name: elasticsearch-master	# 名称
              image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1		# 镜像
              ports:						# 端口
                - containerPort: 9200	            # 这里的端口不提供暴露,仅说明
                  protocol: TCP
                - containerPort: 9300
                  protocol: TCP
              lifecycle:					# 生命周期,也是回调钩子
                postStart:					# 当容器启动后执行的操作
                  exec:					# 执行命令
                    command:				
                      - "/bin/sh"
                      - "-c"
                      - "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
              securityContext:				# 安全上下文,指具备对系统的操作权限
                privileged: true			
              readinessProbe:				# 就绪性探测
                httpGet:					# 探测9200端口是否就绪
                  port: 9200
              volumeMounts:					# 存储性挂载
                - mountPath: /usr/share/elasticsearch/data	# 容器中需要挂载的路径
                  name: es-data				 # 挂载到的地方,这个名称对应下方的挂载
              env:					      # 此处定义的环境变量相当于在命令行执行命令,替代了配置文件的操作
                - name: "cluster.name"
                  value: "es-cluster"
                - name: "bootstrap.memory_lock"
                  value: "true"
                - name: "discovery.zen.ping.unicast.hosts"
                  value: "es-svc"
                - name: "discovery.zen.minimum_master_nodes"
                  value: "2"
                - name: "discovery.zen.ping_timeout"
                  value: "5s"
                - name: "node.master"
                  value: "true"
                - name: "node.data"
                  value: "false"
                - name: "ES_JAVA_OPTS"
                  value: "-Xms256m -Xmx256m"
                - name: "http.cors.enabled"
                  value: "true"
                - name: "http.cors.allow-origin"
                  value: "*"
          volumes:					# 对应上方的挂载名
            - name: es-data
              emptyDir: {}
    

    head插件

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      namespace: elastic
      name: es-head
    spec:
      selector:
        matchLabels:				# deployment精确匹配选择对应的模板
          app: es-head
      template:
        metadata:
          labels:
            app: es-head			      # 模板标签信息,供deployment选择
        spec:
          containers:
            - name: head
              image: alvinos/elasticsearch-head		
              ports:
                - containerPort: 9100
                  protocol: TCP
    ---
    ##### 使用nodeport型的service,将pod中的端口进行暴露 ##########
    kind: Service
    apiVersion: v1
    metadata:
      name: es-head-svc
      namespace: elastic
    spec:
      type: NodePort
      selector:
        app: es-head
      ports:
        - port: 9100
          targetPort: 9100
          nodePort: 32701
    

    node节点--hot

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: es-cluster-data-hot
      namespace: elastic
      labels:						# deployment的标签
        app: es-cluster-data-hot
        role: data
    spec:
      selector:
        matchLabels:					# deployment选择器精确匹配模板中的信息
          app: es-cluster
          role: data
          datatype: hot
      template:
        metadata:
          labels:						# 供上方deployment选择器选择
            app: es-cluster
            role: data
            datatype: hot
        spec:
          containers:
            - name: es-cluster-hot
              image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1
              ports:
                - containerPort: 9200
                  protocol: TCP
                - containerPort: 9300
                  protocol: TCP
              env:								# 环境变量
                - name: "cluster.name"
                  value: "es-cluster"
                - name: "bootstrap.memory_lock"
                  value: "true"
                - name: "discovery.zen.ping.unicast.hosts"
                  value: "es-svc"
                - name: "node.master"
                  value: "false"
                - name: "node.data"
                  value: "true"
                - name: "ES_JAVA_OPTS"
                  value: "-Xms256m -Xmx256m"
                - name: "node.attr.box_type"
                  value: "hot"					# 指定为hot数据类型
              lifecycle:
                postStart:						# 容器启动后的操作
                  exec:
                    command:
                      - "/bin/sh"
                      - "-c"
                      - "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
              securityContext:
                privileged: true
              volumeMounts:
                - mountPath: /usr/share/elasticsearch/data
                  name: es-data
          volumes:
            - name: es-data
              emptyDir: {}
    

    node节点--warm

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: es-cluster-data-warm
      namespace: elastic
      labels:
        app: es-cluster-data-warm
        role: data
    spec:
      selector:
        matchLabels:
          app: es-cluster
          role: data
          datatype: warm
      template:
        metadata:
          labels:
            app: es-cluster
            role: data
            datatype: warm
        spec:
          containers:
            - name: es-cluster-warm
              image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1
              ports:
                - containerPort: 9200
                  protocol: TCP
                - containerPort: 9300
                  protocol: TCP
              env:
                - name: "cluster.name"
                  value: "es-cluster"
                - name: "bootstrap.memory_lock"
                  value: "true"
                - name: "discovery.zen.ping.unicast.hosts"
                  value: "es-svc"
                - name: "node.master"
                  value: "false"
                - name: "node.data"
                  value: "true"
                - name: "ES_JAVA_OPTS"
                  value: "-Xms256m -Xmx256m"
                - name: "node.attr.box_type"
                  value: "warm"
              lifecycle:
                postStart:
                  exec:
                    command:
                      - "/bin/sh"
                      - "-c"
                      - "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
              securityContext:
                privileged: true
              readinessProbe:
                httpGet:
                  port: 9200
              volumeMounts:
                - mountPath: /usr/share/elasticsearch/data
                  name: es-data
          volumes:
            - name: es-data
              emptyDir: {}
    

    node节点--cold

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: es-cluster-data-cold
      namespace: elastic
      labels:
        app: es-cluster-data-cold
        role: data
    spec:
      selector:
        matchLabels:
          app: es-cluster
          role: data
          datatype: cold
      template:
        metadata:
          labels:
            app: es-cluster
            role: data
            datatype: cold
        spec:
          containers:
            - name: es-cluster-cold
              image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1
              ports:
                - containerPort: 9200
                  protocol: TCP
                - containerPort: 9300
                  protocol: TCP
              env:
                - name: "cluster.name"
                  value: "es-cluster"
                - name: "bootstrap.memory_lock"
                  value: "true"
                - name: "discovery.zen.ping.unicast.hosts"
                  value: "es-svc"
                - name: "node.master"
                  value: "false"
                - name: "node.data"
                  value: "true"
                - name: "ES_JAVA_OPTS"
                  value: "-Xms256m -Xmx256m"
                - name: "node.attr.box_type"
                  value: "cold"
              lifecycle:
                postStart:
                  exec:
                    command:
                      - "/bin/sh"
                      - "-c"
                      - "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
              securityContext:
                privileged: true
              readinessProbe:
                httpGet:
                  port: 9200
              volumeMounts:
                - mountPath: /usr/share/elasticsearch/data
                  name: es-data
          volumes:
            - name: es-data
              emptyDir: {}
    
  • 相关阅读:
    在Visual Studio 2019中配置OpenCV环境
    Java中的垃圾回收
    线程池
    Java中锁优化
    二叉树的几种遍历
    java中Comparator的用法(排序、分组)
    java8 stream
    Java后台生成二维码并上传到阿里云OSS
    代码生成器的成长过程
    软件的军工六性
  • 原文地址:https://www.cnblogs.com/tcy1/p/13814266.html
Copyright © 2011-2022 走看看