kubernetes實踐之五十:kubelet執行機制分析
一:簡介
在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配置引數
三: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容器,採集並分析該節點的全面使用情況。
在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配置引數
點選(此處)摺疊或開啟
-
## kubelet (minion) config
-
#
-
## The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
-
KUBELET_ADDRESS="--address=10.116.82.28"
-
#
-
## The port for the info server to serve on
-
#KUBELET_PORT="--port=10250"
-
#
-
## You may leave this blank to use the actual hostname
-
KUBELET_HOSTNAME="--hostname-override=10.116.82.28"
-
#
-
## location of the api-server
-
#KUBELET_API_SERVER="--api-servers="
-
#
-
## pod infrastructure container
-
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=sz-pg-oam-docker-hub-001.tendcloud.com/library/pod-infrastructure:rhel7"
-
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure"
-
#
-
## Add your own!
- 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"
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之五十一:kube-proxy執行機制分析
- Kubernetes:kubelet 原始碼分析之探針原始碼
- kubernetes實踐之五十四:垃圾回收機制
- kubernetes實踐之十三: 負載均衡機制Ingress負載
- kubernetes實踐之七:安全機制API Server認證之Service Account TokenAPIServer
- Java的執行機制分析!Java
- kubernetes/k8s CRI分析-kubelet建立pod分析K8S
- kubernetes實踐之四十九:Scheduler原理分析
- 分析.Net裡執行緒同步機制執行緒
- kubernetes/k8s CRI分析-kubelet刪除pod分析K8S
- Kubernetes安裝之九:配置node節點之kubelet
- Kubernetes 入門實踐--部署執行 Go 專案Go
- kubernetes實踐之四十五:API Server原理分析APIServer
- 多執行緒之等待通知機制執行緒
- kubernetes實踐之十一:EFK
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- ConcurrentHashMap執行緒安全機制以及原始碼分析HashMap執行緒原始碼
- JavaScript執行機制JavaScript
- Javascript 執行機制JavaScript
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之十九:API概述API
- kubernetes實踐之十七:架構架構
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- JavaScript執行緒機制與事件機制JavaScript執行緒事件
- 理解Reacg執行機制
- 比特幣執行機制比特幣
- Js執行機制圖JS
- 探索JavaScript執行機制JavaScript
- requestAnimationFrame 執行機制探索requestAnimationFrame
- 執行緒同步機制執行緒
- js的執行機制JS
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- kubernetes執行應用1之Deployment
- 一起分析執行緒的狀態及執行緒通訊機制執行緒
- kubernetes實踐之四十二:StatefulSet