1. 程式人生 > 實用技巧 >kubernetes監控與日誌管理

kubernetes監控與日誌管理

監控叢集資源利用率

metrics-server是一個叢集範圍的資源使用情況的資料聚合器,作為一個應用部署在叢集中
metrics-server從每個節點上kubelet API收集指標,通過kubernetes聚合器註冊在master APIserver中

Metrics-Server預設是沒有部署的,需要手工進行部署

GitHub地址:https://github.com/kubernetes-sigs/metrics-server/
yaml檔案下載地址
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml 

裡面有兩種模式可選:

1、HPA 模式可以實現pod水平擴充套件,可以增加pod的數量
2、VAP 模式可以實現Pod 可以橫向擴充套件,可以增加pod的配置

修改yaml

vimcomponents.yaml

 86   image: lizhenliang/metrics-server:v0.3.7       #更換為國內的映象下載地址
 87   imagePullPolicy: IfNotPresent
 88   args:
 89       - --cert-dir=/tmp
 90       - --secure-port=4443
 91       - --kubelet-insecure-tls   #跳過https(證書)校驗
 92       - --kubelet-preferred-address-types=InternalIP  #使用IP進行連線kuberlet

kubectl describe node|grep InternalIP

修改完成後生效檔案

kubectl apply -f components.yaml
kubectl get pods -n kube-system

檢視metrics server是否向apiserver註冊

kubectl get apiservice #檢視聚合成註冊資訊

如果有異常情況可以使用命令進行檢視資源情況

kubectl describe apiservice v1beta1.metrics.k8s.io

檢視node和pod資源消耗

kubectl top node      #不加節點名稱預設是所有節點資源利用率
kubectl top pods      #不加pod名稱預設是全部pod的資源利用率
kubectl top pods nginx-f89759699-6n8qg  #指定pod檢視利用率
kubectl top pods -n kube-system         #指定名稱空間下的資源利用率

工作流程:kubectl top -->所有請求都請求apiserver -->代理metrics-server pod -->kubelet(cadvisor) -->通過cgroups中獲取
apiserver聚合成:動態註冊,安全代理,方便第三方應用接入,統一接入
cgroups 資源限制位置ls /sys/fs/cgroup/memory/kubepods/

k8s系統的元件日誌

k8s Cluster裡面部署的應用程式日誌

- 標準輸出

- 日誌檔案

1、標準輸出路徑
/var/log/docker/containers/<container-id>/<container-id>-json.log
2、檢視容器標準輸出日誌
kubectl logs <pod名稱>
kubectl logs -f <pod名稱>
kubectl logs -f <pod名稱> -c <容器名稱>
3、容器內應用日誌路徑
/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/logs/acess.log

例子:

將日誌檔案通過資料卷掛著到宿主機目錄,這樣一來就可以在宿主機上統一檢視日誌了

mkdir /tmp/logs        #每個節點都要建立
kubectl apply -f pod.yaml
kubectl delete pod.yaml  #建立錯誤刪除
kubectl get pods -o wide 

vim pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: web
    image: lizhenliang/nginx-php
    volumeMounts:
    - name: logs
      mountPath: /usr/local/nginx/logs    #容器中的目錄
  volumes:
  - name: logs
    hostPath:
      path: /tmp/logs   #宿主機的目錄
      type: Directory

日誌收集方案

1、deamonset方式在每個節點部署一個日誌採集pod完成講解的兩個目錄採集

2、sidecar在pod部署一個日誌採集容器,通過資料卷共享業務容器日誌目錄