“Hack”阿里雲Kubernetes的Scheduler的日誌級別

了哥-duff發表於2018-06-29

問題

阿里雲的Kubernetes容器服務,預設已經根據生產的要求建立好了3個master的高可用叢集。每個master節點都部署了對應的apiserver, controller, scheduler。對於一些高階使用者,特別是在開發測試階段,或許需要調整這些元件的日誌級別來dubug其執行的行為,則需要手工做一下日誌級別的調整。那麼我們需要了解阿里雲的kubernetes是如何配置,從而“hack”它。

瞭解阿里雲Kubernetes的部署方式

Docker的部署

Docker是通過systemd部署,可以登入到一臺master,通過

systemctl status docker

檢視docker daemon的狀態,從而知道docker的配置在/usr/lib/systemd/system/docker.service
可以檢視改檔案知道,docker的日誌配置:
image.png

那麼可以知道容器的stdout的日誌將存在容器的目錄裡,檔案為/var/lib/docker/containers/<container-id>/<container-id>-json.log

Kubelet的部署方式

Kubelet也是通過systemd部署,可以登入到一臺master,通過

systemctl status kubelet

檢視kubelet的執行狀態,從而知道kubelet的配置在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
可以檢視改檔案知道,kubelet的執行配置為:
image.png
紅色框是配置static pod的對應的yaml檔案所在的路徑:/etc/kubernetes/manifests

Static Pod的使用和原理可以參見:https://kubernetes.io/docs/tasks/administer-cluster/static-pod/

scheduler的日誌啟動引數

進入/etc/kubernetes/manifests目錄,可以看到有三個檔案,這個就是apiserver, scheduler, controller的pod的執行yaml檔案

對雲的scheduler的podyaml檔案是:kube-scheduler.yaml,相關的配置就在這裡面。從配置可以知道,該scheduler pod是直接輸出到stdout的,那麼它的日誌對應檔案就在之前說的容器的目錄裡。

Kubernetes scheduler的日誌級別配置

Kubernetes的scheduler的日誌配置第一反應就是去改配置引數,但是比較坑的是kube-scheduler --help輸出的提示是:

image.png

盡然沒有說配置的可選值是什麼,然後官網的文件也沒有說怎麼配置,連-v引數都不說
不得不去google,最後找到一下文件:

https://github.com/kubernetes/community/blob/master/contributors/devel/logging.md

Hack scheduler日誌級別實踐

從上面的資訊我們已經知道了scheduler的執行方式,以及瞭解了日記級別的配置,那麼hack就簡單多了

  • 修改 /etc/kubernetes/manifests/kube-scheduler.yaml 增加. -v=4的配置

image.png

  • 等待kubelet重啟對應的pod,可以通過docker ps | grep scheduler 來看對應的pod是否已經重啟
  • docker ps | grep scheduler 獲得對應的container id
  • 檢視對應的 /var/lib/docker/containers/<container-id>/<container-id>-json.log就可以獲得對應的日誌了

總結

如果需要“hack”其它元件也是類似的原理。不過提醒大家,這個只能是作為開發/測試需要時才使用。在生產環境還是要保留原有的方式,畢竟那個是經過生產檢驗過的配置方式。


相關文章