我們在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 ...