一、云原生日志框架ECK介绍

官网链接:Elastic Cloud on Kubernetes | Elastic Docs

Elastic Cloud on Kubernetes(CCK)是Elastic官方提供的Kubernetes Operator,用于简化在Kubernetes环境中部署、管理和扩展Elastic Stack的全方位组件。

ECK基于Kubernetes的Custom Resource Definitions(CRDs),可以让用户以声明式的方式定义和管理Elastic Stack组件,比如创建一个Elasticsearch的集群只需要像创建一个Deployment声明一个Yaml,然后创建即可。

ECK核心资源:

  • Elasticsearch:用于管理和部署Elasticsearch集群
  • Elasticsearch:用于管理和部署Elasticsearch集群
  • Kibana:用于管理和部署Kibana服务
  • Beat:用于管理和部署Filebeat服务
  • Logstash:用户管理和部署logstash服务

2.2 ECK核心资源Elasticsearch配置详解

ECK核心资源Elasticsearch配置示例:

apiVersion: elasticsearch.k8s.elastic.co/v1 
kind: Elasticsearch 
metadata:
  name: es-cluster
spec:
  # ES版本
  version: 8.14.3 
  image: registry.cn-beijing.aliyuncs.com/dotbalo/elasticsearch:8.14.3
  nodeSets: 
    #节点组名称,全局唯一
  - name: default 
    #当前节点组的节点数量
    count: 3 
    config:
      # node.roles: "master"
      # 节点自定义配置,禁用内存映射
      node.store.allow_mmap: false 
      # no persistent(pod相关配置) 
    podTemplate:
      spec:
        volumes:
        - name: elasticsearch-data
          emptyDir: {}

2.3 ECK核心资源Kibana配置详解

ECK核心资源Kibana配置示例:

apiVersion: kibana.k8s.elastic.co/v1  
kind: Kibana
metadata:
  name: kibana                        
spec:
  version: 8.14.3                     
  image: registry.cn-beijing.aliyuncs.com/dotbalo/kibana:8.14.3 
  count: 1    
  # ES集群配置,ECK部署的ES集群名字
  elasticsearchRef:                   
    name: es-cluster                  
  http:
    service:
      spec:
        # 默认是ClusterIP
        type: NodePort                
    tls:
      selfSignedCertificate:
        disabled: true               

2.4 ECK核心资源Logstash配置详解

ECK核心资源Logstash配置示例:

apiVersion: logstash.k8s.elastic.co/v1alpha1
kind: Logstash
metadata:
  name: logstash                          # Logstash实例名称
spec:
  version: 8.14.3                         # 版本与ES/Kibana保持一致
  image: registry.cn-beijing.aliyuncs.com/dotbalo/logstash:8.14.3  # 阿里云定制镜像
  count: 1                                # 实例数量(生产建议≥3)
  elasticsearchRef:                      
    name: es-cluster                      # 关联已创建的ES集群(必填)
  pipelines:
  - pipeline.id: main                    
    # 内联配置(生产建议外部挂载configmap)
    config: |
      input {
        beats {
          port => 5044
        }
      }
      filter {
        grok {
          match => { "message" => "%{COMBINEDAPACHELOG}" }
        }
      }
      output {
        elasticsearch {
          hosts => ["es-cluster-http:9200"]
          index => "logs-%{+YYYY.MM.dd}"
        }
      }
  # Pod级配置(资源/存储/安全)
  podTemplate:
    spec:
      volumes:
      - name: logstash-data
        emptyDir: {}                      # 临时存储(开发测试用)
      containers:
      - name: logstash
        resources:
          requests:
            cpu: 500m                     # 最小CPU(根据日志量调整)
            memory: 1Gi                   # 最小内存
          limits:
            memory: 2Gi                   # 内存硬限制
        # env: 可添加环境变量(如LS_JAVA_OPTS="-Xmx1g -Xms1g")