K8s 為pod新增sidecar進行日誌收集

2022-02-18 09:34:50 字數 2294 閱讀 5837

我們在k8s部署服務時,一般來說乙個服務會對應一類pod,而pod通過rs實現副本集,而這些pod的日誌一般有控制台stdout和檔案的,一般會把這些日誌最終輸出到elasticsearch裡,再通過kabana進行分析,而在實現由pod到elasticsearch(es)時有多種方法,下面我列舉一下:

直接從標準控制台 stdout中通過fluentd進行收集,再存到es( 早期docker有實現)

通過logback裡的fluentd包,直接把日誌輸出到fluentd,再存到es

在k8s裡,可以為pod新增乙個邊車(邊鬥,sidecar),這個邊車主要是fluentd外掛程式,從容器日誌檔案裡讀取日誌,收集到es

從上面的解析可以看到第1種如果你是docker swarm環境可以使用,而第2種與業務**耦合太緊也不合適,只有第三種是未來的趨勢,目前大都是使用這種方式!

1 sidecar的fluentd的mapconfig

apiversion: v1

kind: configmap

metadata:

name: fluentd-config

namespace: saas

data:

fluentd.conf: |

type tail

format none

path /var/log/*.log

pos_file /var/log/log.pos

tag saas

@id elasticsearch

@type elasticsearch

@log_level debug

index_name fluentd

type_name _doc

host elasticsearch.elk

port 9200

include_tag_key true

tag_key @log_name

logstash_format true

flush_interval 10s

執行

kubectl create -f fluentd-config-sidecar.yaml
測試乙個pod,像容器輸出日誌到目錄,定時反覆輸出

name: fluentd-config部署它

kubectl create -f fluentd-demo.yaml
然後去你的kabana裡檢視日誌,可以按著@log_name欄位去查詢,這就是我們日誌裡的tag,這個我們可以在**裡配置,可以設定成乙個namespace,這樣方便日誌的跟蹤!

k8s集群建立pod,執行pod

k8s集群搭建好後,各個node的狀態變成了ready,就可以建立pod,建立完成後,就會預設的執行其中的container。使用乙個簡單yaml檔案描述pod apiversion v1 必選,版本號,例如v1,版本號必須可以用 kubectl api versions 查詢到 kind pod ...

k8s排程 原理 K8s排程原理和Pod生命週期

1 k8s排程原理 pod只存在某乙個物理節點上,可以執行多個container 2 pod的生命週期 暫停pod,可以暫停deployment kubectl get depolyment kubectl scale replicas 0 deployment 刪除pod。刪除之後,狀態變成suc...

k8s檢視pod的命令

引數解析 name pod名 ready 準備好的副本數 status 狀態 restarts 重啟 age 已經執行的時間 kubectl get pod o wide 引數解析 ip ip位址 node 執行節點 nominated node 指定節點 kubectl describe pod ...