kubernetes實踐之五十:kubelet執行機制分析

dbasdk發表於2018-06-12
一:簡介

在Kubernetes叢集中,每個Node節點上都會啟動一個Kubelet服務進行。該程式用於處理Master節點下發到本節點的任務,管理Pod及Pod中的容器。每個Kubelet程式會在API SERVER上註冊節點自身資訊,定期向Master節點彙報節點資源的使用情況,並透過cAdvise監控容器和節點資源。

二:節點管理

節點透過設定kubelet的啟動引數“–register-node”,來決定是否向API Server註冊自己,預設為true。可以透過kubelet –help檢視該引數。

kubelet在啟動時透過API Server註冊節點資訊,並定時向API Server傳送節點的新資訊,API Server在接收到這些訊息後,將這些訊息寫入etcd. 透過kubelet的啟動引數"--node-status-update-frequency"設定每隔多長時間向API Server報告節點狀態,預設10s.

kubelet配置引數

點選(此處)摺疊或開啟

  1. ## kubelet (minion) config
  2. #
  3. ## The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
  4. KUBELET_ADDRESS="--address=10.116.82.28"
  5. #
  6. ## The port for the info server to serve on
  7. #KUBELET_PORT="--port=10250"
  8. #
  9. ## You may leave this blank to use the actual hostname
  10. KUBELET_HOSTNAME="--hostname-override=10.116.82.28"
  11. #
  12. ## location of the api-server
  13. #KUBELET_API_SERVER="--api-servers="
  14. #
  15. ## pod infrastructure container
  16. #KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=sz-pg-oam-docker-hub-001.tendcloud.com/library/pod-infrastructure:rhel7"
  17. KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure"
  18. #
  19. ## Add your own!
  20. KUBELET_ARGS="--cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local. --hairpin-mode promiscuous-bridge --serialize-image-pulls=false --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"
三:Pod管理
1.kubelet透過API Server Client使用Watch+List的方式監聽“/registry/nodes/$當前節點的名稱”和“/registry/pods”目錄,將獲取的資訊同步到本地快取中。
2.kubelet 監聽etcd,所有針對Pod的操作將會被kubelet監聽到。如果發現有新的繫結到本節點的Pod,則按照Pod清單的要求建立該Pod.
kubelet讀取監聽到的資訊,則做如下處理:
a.為該Pod建立一個資料目錄
b.從API Server讀取該Pod清單
c.為該Pod掛載外部卷
d.下載Pod用到的Secret
e.建立pause容器
f.建立應用容器

四:容器健康檢查

對Pod的健康狀態檢查可以透過兩類探針來檢查:LivenessProbe和ReadinessProbe
1.LivenessProbe探針: 用於判斷容器是否存活,如果LivenessProbe探針探測到容器不健康,則kubelet將殺掉該容器,並根據容器的重啟策略做相應的處理。如果一個容器不包含LivenessProbe探針,那麼kubelet認為該容器的LivenessProbe探針返回值永遠是“Success”.

2.ReadinessProbe探針: 用於判斷容器是否啟動完成,可以接收請求。如果ReadinessProbe 探針檢測到失敗,則Pod的狀態將被修改。Endpoint Controller將從Service的Endpoint中刪除包括該容器所在Pod的Endpoint.

五:cAdvisor資源監控

在Kubernetes叢集中,應用程式的執行情況可以在不同的級別上監測到,這些級別包括:容器,Pod,Service和整個叢集。

1.Heapster專案為Kubernetes提供了一個基本的監控平臺,它是叢集級別的監控。

2.cAdvisor是一個開源的分析容器資源使用率和效能特性的代理工具。cAdvisor被整合到Kubernetes程式碼中,cAdvisor自動查詢所有在其節點上的容器,自動採集CPU,記憶體,檔案系統和網路使用的統計資訊。cAdvisor透過它所在節點機的Root容器,採集並分析該節點的全面使用情況。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2156047/,如需轉載,請註明出處,否則將追究法律責任。

相關文章