在K8S集群中部署EFK日志收集

目錄

      • 引言
      • 環境準備
      • 安裝自定義資源
      • 部署Elasticsearch
      • Master 節點與 Data 節點的區別
      • 生產優化建議
      • 安裝好以后測試ES是否正常
      • 部署Fluentd
      • 測試filebeat是否正常推送日志
      • 部署Kibana
      • 獲取賬號密碼,賬號是:elastic
      • 集群測試

引言

  • 系統版本為 Centos7.9
  • 內核版本為 6.3.5-1.el7
  • K8S版本為 v1.26.14
  • ES官網
  • 本次部署已經盡量避免踩坑,直接使用官方的方法有點問題。

環境準備

  • 準備ceph存儲或者nfs存儲
  • NFS存儲安裝方法
  • 本次安裝使用官方ECK方式部署 EFK(老版本,7.17.3。 現存的生產環境版本基本都是這個版本。)
  • 增加RBAC權限和日志模板相關內容方便在輸出日志的時候添加K8S相關內容

安裝自定義資源

kubectl create -f https://download.elastic.co/downloads/eck/1.7.1/crds.yaml
kubectl apply -f https://download.elastic.co/downloads/eck/1.7.1/operator.yaml

部署Elasticsearch

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:name: quickstartnamespace: elastic-system
spec:version: 7.17.3nodeSets:- name: masterscount: 1config:node.roles: ["master"]xpack.ml.enabled: truepodTemplate:spec:initContainers:- name: sysctlsecurityContext:privileged: truerunAsUser: 0command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']volumeClaimTemplates:- metadata:name: elasticsearch-dataspec:storageClassName: nfs-dynamicaccessModes:- ReadWriteOnceresources:requests:storage: 10Gi- name: datacount: 1config:node.roles: ["data", "ingest", "ml", "transform"]podTemplate:spec:initContainers:- name: sysctlsecurityContext:privileged: truerunAsUser: 0command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']volumeClaimTemplates:- metadata:name: elasticsearch-dataspec:storageClassName: nfs-dynamicaccessModes:- ReadWriteOnceresources:requests:storage: 50Gi

生產環境建議按照下面的方式配置,我這個是測試環境怎么省事怎么來。

Master 節點與 Data 節點的區別

特性Master 節點Data 節點
核心職責管理集群元數據(如索引、分片分配、節點狀態)存儲數據(主分片和副本分片),執行讀寫操作(搜索、聚合)
配置中的角色定義node.roles: ["master"]node.roles: ["data", "ingest", "ml", "transform"]
資源需求低 CPU/內存(輕量級元數據管理)高 CPU/內存/磁盤(處理數據和計算)
高可用性要求必須冗余(生產環境至少 3 個,避免腦裂)可水平擴展(根據數據量和負載動態增減)
示例場景集群協調、分片分配、狀態維護文檔寫入、搜索請求處理、機器學習任務

生產優化建議

Master 節點配置優化

nodeSets:
- name: masterscount: 3  # 生產環境至少部署 3 個config:node.roles: ["master"]# 禁用非必要功能(節省資源)xpack.ml.enabled: false

Data 節點角色分離

- name: data-onlycount: 2config:node.roles: ["data"]  # 專注數據存儲- name: ingestcount: 2config:node.roles: ["ingest"]  # 專用寫入節點- name: mlcount: 1config:node.roles: ["ml", "transform"]  # 獨立計算節點

安裝好以后測試ES是否正常

## 打開兩個終端測試或者后臺運行一個命令。
kubectl port-forward -n elastic-system services/quickstart-es-http 9200## 獲取密碼
PASSWORD=$(kubectl get secret -n elastic-system quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}')## 訪問一下測試
curl -u "elastic:$PASSWORD" -k "https://localhost:9200"

部署Fluentd

  • 提供Fluentd的DaemonSet配置文件示例
apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:name: filebeatnamespace: elastic-system
spec:type: filebeatversion: 7.17.3elasticsearchRef:name: quickstart             # 關聯的 Elasticsearch 資源對象名namespace: elastic-system    # Elasticsearch 所在 Namespaceconfig:filebeat.inputs:- type: containerpaths:- /var/log/containers/*.logprocessors:- add_kubernetes_metadata: # 增加 k8s label 等相關信息。host: ${NODE_NAME} matchers:- logs_path:logs_path: "/var/log/containers/"- drop_fields: # 這里可以根據需求增減需要去除的值fields: ["agent", "ecs", "container", "host","host.name","input", "log", "offset", "stream","kubernetes.namespace","kubernetes.labels.app","kubernetes.node", "kubernetes.pod", "kubernetes.replicaset", "kubernetes.namespace_uid", "kubernetes.labels.pod-template-hash"]ignore_missing: true # 字段不存在時不報錯- decode_json_fields: fields: ["message"]  # 要解析的原始字段target: ""           # 解析到根層級(平鋪字段)overwrite_keys: false # 是否覆蓋原有值process_array: false # 是否解析數組格式max_depth: 1         # 僅解析一層 JSONoutput.elasticsearch:username: "elastic"  # 使用 Elastic 內置超級用戶(生產環境不推薦)password: "5ypyQpuC6BB191Si9w1209MM"    # 這里需要改成正確的密碼(生產環境建議使用Secret注入)index: "filebeat-other-log-%{+yyyy.MM.dd}"indices: # # 索引路由規則(按條件分流)- index: "filebeat-containers-log-%{+yyyy.MM.dd}"  # 默認索引格式(按日滾動)when.or:- contains:kubernetes.labels.app: "etcd"- index: "filebeat-services-log-%{+yyyy.MM.dd}"when.contains:kubernetes.labels.type: "service"pipelines: # 引用 Ingest Pipeline 處理數據流- pipeline: "filebeat-containers-log-pipeline"when.or:- contains:kubernetes.labels.app: "etcd"- pipeline: "filebeat-services-log-pipeline"when.contains:kubernetes.labels.type: "service"setup.template.settings:index:number_of_shards: 1    # 主分片數設為 1number_of_replicas: 0  # 副本數設為 0  ## 生產環境至少為1.setup.template.enabled: true      # 必須開啟模板功能setup.template.overwrite: true    # 強制覆蓋舊模板setup.template.name: "filebeat-log-template"  # ? 自定義模板名setup.template.pattern: "filebeat-*-log-*"    # ? 匹配所有日setup.ilm.enabled: false           # 禁用 ILM(與手動模板配置兼容)daemonSet:podTemplate:spec:serviceAccount: elastic-beat-filebeat-quickstartautomountServiceAccountToken: truednsPolicy: ClusterFirstWithHostNethostNetwork: truesecurityContext:runAsUser: 0containers:- name: filebeatenv: - name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeNamevolumeMounts:- name: varlogcontainersmountPath: /var/log/containers- name: varlogpodsmountPath: /var/log/pods- name: varlibdockercontainersmountPath: /var/lib/containersvolumes:- name: varlogcontainershostPath:path: /var/log/containers- name: varlogpodshostPath:path: /var/log/pods- name: varlibdockercontainershostPath:path: /var/lib/containers
---
apiVersion: v1
kind: ServiceAccount
metadata:name: elastic-beat-filebeat-quickstartnamespace: elastic-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: elastic-beat-autodiscover-bindingnamespace: elastic-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: elastic-beat-autodiscover
subjects:
- kind: ServiceAccountname: elastic-beat-filebeat-quickstartnamespace: elastic-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: elastic-beat-autodiscovernamespace: elastic-system
rules:
- apiGroups:- ""resources:- nodes- namespaces- events- podsverbs:- get- list- watch

測試filebeat是否正常推送日志

PASSWORD=$(kubectl get secret -n elastic-system quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}')
curl -u "elastic:$PASSWORD" -k "https://localhost:9200/filebeat-*/_search"

部署Kibana

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: kibana-data-pvcnamespace: elastic-system
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GistorageClassName: nfs-dynamic
---
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:name: quickstartnamespace: elastic-system
spec:version: 7.17.3count: 1elasticsearchRef:name: quickstartnamespace: elastic-systemhttp:tls:selfSignedCertificate:disabled: trueconfig:i18n.locale: "zh-CN" # 添加中文支持podTemplate:spec:containers:- name: kibanaenv:- name: NODE_OPTIONSvalue: "--max-old-space-size=2048"volumeMounts:- mountPath: /usr/share/kibana/dataname: kibana-data volumes:- name: kibana-datapersistentVolumeClaim:claimName: kibana-data-pvc 
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: kibana-ingressnamespace: elastic-system
spec:ingressClassName: nginxrules:- host: kibana.deployers.cnhttp:paths:- backend:service:name: quickstart-kb-httpport:name: httppath: /pathType: Prefixtls:- hosts:- kibana.deployers.cn

獲取賬號密碼,賬號是:elastic

## 獲取密碼
kubectl get secret -n elastic-system quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo

集群測試

查詢集群健康狀態

## 新建一個窗口,執行這條命令。
kubectl port-forward -n elastic-system services/quickstart-es-http 9200## 獲取密碼
PASSWORD=$(kubectl get secret -n elastic-system quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}')
## 查看狀態
curl -u "elastic:$PASSWORD" -k "https://localhost:9200/_cluster/health?pretty"

正常輸出狀態

{"cluster_name" : "quickstart","status" : "green","timed_out" : false,"number_of_nodes" : 2,"number_of_data_nodes" : 1,"active_primary_shards" : 14,"active_shards" : 14,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0
}

查看未分配分片詳細信息

  • prirep:r 表示副本分片
  • unassigned.reason:未分配原因(如 NODE_LEFT、INDEX_CREATED 等)
curl -u "elastic:$PASSWORD" -k "https://localhost:9200/_cat/shards?v&h=index,shard,prirep,state,unassigned.reason"

輸出結果

index                                                         shard prirep state   unassigned.reason
.async-search                                                 0     p      STARTED 
.apm-agent-configuration                                      0     p      STARTED 
.apm-custom-link                                              0     p      STARTED 
.kibana-event-log-7.17.3-000001                               0     p      STARTED 
.geoip_databases                                              0     p      STARTED 
.kibana_security_session_1                                    0     p      STARTED 
.ds-ilm-history-5-2025.05.09-000001                           0     p      STARTED 
.kibana_task_manager_7.17.3_001                               0     p      STARTED 
.security-7                                                   0     p      STARTED 
.ds-.logs-deprecation.elasticsearch-default-2025.05.09-000001 0     p      STARTED 
product-other-log-2025.05.12                                  0     p      STARTED 
.tasks                                                        0     p      STARTED 
.kibana_7.17.3_001                                            0     p      STARTED 
product-other-log-2025.05.09                                  0     p      STARTED

檢查節點資源使用情況

curl -u "elastic:$PASSWORD" -k "https://localhost:9200/_cat/nodes?v&h=name,disk.used_percent,ram.percent,cpu"

輸出結果

name                    disk.used_percent ram.percent cpu
quickstart-es-masters-0              1.73          54   16
quickstart-es-data-0                 1.73          55   16
  • 閾值參考?:
    – 磁盤使用率 ≤85%
    – 內存使用率 ≤80%

查看es節點狀態

curl -u "elastic:$PASSWORD" -k "https://localhost:9200/_cat/nodes?v"ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.20.129.129            8          55   16    0.96    0.76     0.57 m         *      quickstart-es-masters-0
172.20.129.130           70          56   16    0.96    0.76     0.57 dilt      -      quickstart-es-data-0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905745.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905745.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

polarctf-web-[rce1]

考點: (1)RCE(exec函數) (2)空格繞過 (3)執行函數(exec函數) (4)閉合(ping命令閉合) 題目來源:Polarctf-web-[rce1] 解題: 這段代碼實現了一個簡單的 Ping 測試工具,用戶可以通過表單提交一個 IP 地址,服務器會執…

【串流VR手勢】Pico 4 Ultra Enterprise 在 SteamVR 企業串流中無法識別手勢的問題排查與解決過程(Pico4UE串流手勢問題)

寫在前面的話 此前(用Pico 4U)接入了MRTK3,現項目落地需要部署,發現串流場景中,Pico4UE的企業串流無法正常識別手勢。(一體機方式部署使用無問題) 花了半小時解決,怕忘,…

ES(Elasticsearch)的應用與代碼示例

Elasticsearch應用與代碼示例技術文章大綱 一、引言 Elasticsearch在現代化應用中的核心作用典型應用場景分析(日志分析/全文檢索/數據聚合) 二、環境準備(前提條件) Elasticsearch 8.x集群部署要點IK中文分詞插件配置指南Ingest Attachment插件安裝…

臨床決策支持系統的提示工程優化路徑深度解析

引言 隨著人工智能技術在醫療領域的迅猛發展,臨床決策支持系統(CDSS)正經歷從傳統規則引擎向智能提示工程的范式轉變。在這一背景下,如何構建既符合循證醫學原則又能適應個體化醫療需求的CDSS成為醫學人工智能領域的核心挑戰。本報告深入剖析了臨床決策支持系統中提示工程的…

火山RTC 8 SDK集成進項目中

一、SDK 集成預備工作 1、SDK下載 https://www.volcengine.com/docs/6348/75707 2、解壓后 3、放在自己項目中的位置 1)、include 2)、lib 3)、dll 暫時,只需要VolcEngineRTC.dll RTCFFmpeg.dll openh264-4.dll, 放在intLive2…

OkHttp用法-Java調用http服務

特點:高性能,支持異步請求,連接池優化 官方文檔:提供快速入門指南和高級功能(如攔截器、連接池)的詳細說明,GitHub倉庫包含豐富示例。 社區資源:中文教程豐富,GitHub高…

python中常用的參數以及命名規范

以下是 Python 中常見的命名規范、參數用法及在大型項目中常用的操作模式,供記錄參考: 1. 命名規范(Naming Conventions) 前綴/形式含義示例_age單下劃線:弱“私有”標記(可訪問但不建議外部使用&#xff…

第五十七篇 Java接口設計之道:從咖啡機到智能家居的編程哲學

目錄 引言:生活中的接口無處不在一、咖啡機與基礎接口:理解抽象契約1.1 咖啡制作的標準接口 二、智能家居與策略模式:靈活切換實現2.1 溫度調節策略場景 三、物流系統與工廠模式:標準接口下的多樣實現3.1 快遞運輸接口設計 四、健…

第二十六天打卡

全局變量 global_var 全局變量是定義在函數、類或者代碼塊外部的變量,它在整個程序文件內都能被訪問。在代碼里, global_var 就是一個全局變量,下面是相關代碼片段: print("\n--- 變量作用域示例 ---") global_var …

聯合查詢

目錄 1、笛卡爾積 2、聯合查詢 2.1、內連接 2.2、外連接 1、笛卡爾積 笛卡爾積: 笛卡爾積是讓兩個表通過排列組合的方式,得到的一個更大的表。笛卡爾積的列數,是這兩個表的列數相加,笛卡爾積的行數,是這兩個表的行…

【HTML5學習筆記2】html標簽(下)

1表格標簽 1.1表格作用 顯示數據 1.2基本語法 <table><tr> 一行<td>單元格1</td></tr> </table> 1.3表頭單元格標簽 表頭單元格會加粗并且居中 <table><tr> 一行<th>單元格1</th></tr> </table&g…

window 顯示驅動開發-分頁視頻內存資源

與 Microsoft Windows 2000 顯示驅動程序模型不同&#xff0c;Windows Vista 顯示驅動程序模型允許創建比可用物理視頻內存總量更多的視頻內存資源&#xff0c;然后根據需要分頁進出視頻內存。 換句話說&#xff0c;并非所有視頻內存資源都同時位于視頻內存中。 GPU 的管道中可…

《C 語言指針高級指南:字符、數組、函數指針的進階攻略》

目錄 一. 字符指針變量 二. 數組指針變量 三. 二維數組傳參 3.1 二維數組的本質 3.2 訪問方式與地址計算 3.3 二維數組的傳參方式 3.4 深入解析 *(*(arri)j) 與 arr[i][j] 的等價性 四. 函數指針變量 4.1 函數指針變量的創建 4.2 函數指針變量的使用 4.3 兩段"…

Unity:場景管理系統 —— SceneManagement 模塊

目錄 &#x1f3ac; 什么是 Scene&#xff08;場景&#xff09;&#xff1f; Unity 項目中的 Scene 通常負責什么&#xff1f; &#x1f30d; 一個 Scene 包含哪些元素&#xff1f; Scene 的切換與管理 &#x1f4c1; 如何創建與管理 Scenes&#xff1f; 什么是Scene Man…

內容中臺重構企業知識管理路徑

智能元數據驅動知識治理 現代企業知識管理的核心挑戰在于海量非結構化數據的有效治理。通過智能元數據分類引擎&#xff0c;系統可自動識別文檔屬性并生成多維標簽體系&#xff0c;例如將技術手冊按產品版本、功能模塊、適用場景進行動態標注。這種動態元數據框架不僅支持跨部…

Vue3:腳手架

工程環境配置 1.安裝nodejs 這里我已經安裝過了&#xff0c;只需要打開鏈接Node.js — Run JavaScript Everywhere直接下載nodejs&#xff0c;安裝直接一直下一步下一步 安裝完成之后我們來使用電腦的命令行窗口檢查一下版本 查看npm源 這里npm源的地址是淘寶的源&#xff0…

悅數圖數據庫一體機發布,讓復雜關聯計算開箱即用

在金融風控、政務治理、能源監測等關鍵領域&#xff0c;復雜數據關聯分析已成為業務決策的核心需求。然而&#xff0c;信創場景的特殊性——全棧自主可控、海量實時計算、系統高可用性——對傳統技術架構提出了近乎苛刻的要求。悅數圖數據庫一體機應運而生&#xff0c;以軟硬協…

收放卷“材料停機減速距離“計算FC(算法公式+ST源代碼+C++代碼)

PLC運動控制基礎系列之梯形速度曲線 PLC運動控制基礎系列之梯形速度曲線_三菱運動控制模塊梯形加減速-CSDN博客文章瀏覽閱讀3.2k次,點贊3次,收藏7次。本文是關于PLC運動控制的基礎教程,重點介紹了梯形速度曲線的概念、計算和應用。討論了梯形加減速在啟動和停止階段的作用,…

Centos7系統(最小化安裝)安裝zabbix7版本詳細文章、nginx源代碼配置、php源代碼、mysql-yum安裝

zabbix官網鏈接下載zabbix源代碼安裝包 選擇zabbix版本&#xff08;此文章使用zabbix7.0版本&#xff09; 安裝之前由于是最小化安裝centos7安裝一些開發環境和工具包 文章使用國內阿里源 cd /etc/yum.repos.d/;curl -O https://mirrors.aliyun.com/repo/epel-7.repo;curl -…

描述性統計圖表

一、核心圖表類型與用途 1、直方圖(Histogram) (1)定義:用連續矩形表示數據分布,橫軸為數據區間,縱軸為頻數或頻率。 (2)用途:展示數據分布形態(對稱、偏態)、識別離群值。 (3)適用場景:分析連續型變量的分布特征,如收入分布、考試成績分布。 2、箱線圖(Box P…