031.核心組件-kubelet

来源:https://www.cnblogs.com/itzgr/archive/2020/03/18/12516417.html
-Advertisement-
Play Games

一 kubelet概述 1.1 kubelet作用 在Kubernetes集群中,在每個Node(又稱Minion)上都會啟動一個kubelet服務進程。該進程用於處理Master下發到本節點的任務,管理Pod及Pod中的容器。每個kubelet進程都會在API Server上註冊節點自身的信息,定 ...


一 kubelet概述

1.1 kubelet作用

在Kubernetes集群中,在每個Node(又稱Minion)上都會啟動一個kubelet服務進程。該進程用於處理Master下發到本節點的任務,管理Pod及Pod中的容器。每個kubelet進程都會在API Server上註冊節點自身的信息,定期向Master彙報節點資源的使用情況,並通過cAdvisor監控容器和節點資源。

二 節點管理

節點通過設置kubelet的啟動參數“--register-node”,來決定是否向API Server註冊自己。如果該參數的值為true,那麼kubelet將試著通過API Server註冊自己。在自註冊時,kubelet啟動時還包含下列參數。
  • --api-servers:API Server的位置。
  • --kubeconfig:kubeconfig文件,用於訪問API Server的安全配置文件。
  • --cloud-provider:雲服務商(IaaS)地址,僅用於公有雲環境。
提示:通常可能每個kubelet都被授予創建和修改任何節點的許可權。生產環境中,建議kubelet的許可權進行限制,僅允許它修改和創建所在節點的許可權。 如果在集群運行過程中遇到集群資源不足的情況,用戶就很容易通過添加機器及運用kubelet的自註冊模式來實現擴容。 在某些情況下,Kubernetes集群中的某些kubelet沒有選擇自註冊模式,用戶需要自己去配置Node的資源信息,同時告知Node上Kubelet API Server的位置,需要手動創建和修改節點信息。 如果需要手動創建節點信息,則通過設置kubelet的啟動參數“--registernode=false”即可關閉自註冊模式。 kubelet在啟動時通過API Server註冊節點信息,並定時向API Server發送節點的新消息,API Server在接收到這些信息後,將這些信息寫入etcd。通過kubelet的啟動參數“--node-status-update-frequency”設置kubelet每隔多長時間向API Server報告節點狀態,預設為10s。

三 Pod管理

kubelet通過以下幾種方式獲取自身Node上要運行的Pod清單。
  1. 文件:kubelet啟動參數“--config”指定的配置文件目錄下的文件(預設目錄為“/etc/kubernetes/manifests/”)。通過--file-checkfrequency設置檢查該文件目錄的時間間隔,預設為20s。
  2. HTTP端點(URL):通過“--manifest-url”參數設置。通過--http-check-frequency設置檢查該HTTP端點數據的時間間隔,預設為20s。
  3. API Server:kubelet通過API Server監聽etcd目錄,同步Pod列表。

所有以非API Server方式創建的Pod都叫作Static Pod。kubelet將Static Pod的狀態彙報給API Server,API Server為該Static Pod創建一個Mirror Pod和其相匹配。Mirror Pod的狀態將真實反映Static Pod的狀態。當Static Pod被刪除時,與之相對應的Mirror Pod也會被刪除。 對於通過API Server獲得Pod清單的方式,kubelet會使用API Server Client的Watch加List的方式監聽“/registry/nodes/$”當前節點的名稱和“/registry/pods”目錄,將獲取的信息同步到本地緩存中。 kubelet監聽etcd,所有針對Pod的操作都會被kubelet監聽。如果發現有新的綁定到本節點的Pod,則按照Pod清單的要求創建該Pod。如果發現本地的Pod被修改,則kubelet會做出相應的修改,比如在刪除Pod中的某個容器時,會通過Docker Client刪除該容器。 如果發現刪除本節點的Pod,則刪除相應的Pod,並通過Docker Client刪除Pod中的容器。 kubelet讀取所監聽的信息,如果是創建和修改Pod任務,則做如下處理:
  1. 為該Pod創建一個數據目錄。
  2. 從API Server讀取該Pod清單。
  3. 為該Pod掛載外部捲(ExternalVolume)。
  4. 下載Pod用到的Secret。
  5. 檢查已經運行在節點上的Pod,如果該Pod沒有容器或Pause容器(“kubernetes/pause”鏡像創建的容器)沒有啟動,則先停止Pod里所有容器的進程。如果在Pod中有需要刪除的容器,則刪除這些容器。
  6. 用“kubernetes/pause”鏡像為每個Pod都創建一個容器。該Pause容器用於接管Pod中所有其他容器的網路。每創建一個新的Pod,kubelet都會先創建一個Pause容器,然後創建其他容器。“kubernetes/pause”鏡像大概有200KB,是個非常小的容器鏡像。
  7. 為Pod中的每個容器做如下處理:
    • 為容器計算一個Hash值,然後用容器的名稱去查詢對應Docker容器的Hash值。若查找到容器,且二者的Hash值不同,則停止Docker中容器的進程,並停止與之關聯的Pause容器的進程;若二者相同,則不做任何處理。
    • 如果容器被終止了,且容器沒有指定的restartPolicy(重啟策略),則不做任何處理。
    • 調用Docker Client下載容器鏡像,調用Docker Client運行容器。

四 容器健康檢查

4.1 健康檢查方法

Pod通過兩類探針來檢查容器的健康狀態,LivenessProbe探針和ReadinessProbe探針。

4.2 LivenessProbe探針

LivenessProbe探針,用於判斷容器是否健康並反饋給kubelet。如果LivenessProbe探針探測到容器不健康,則kubelet將刪除該容器,並根據容器的重啟策略做相應的處理。如果一個容器不包含LivenessProbe探針,那麼kubelet認為該容器的LivenessProbe探針返回的值永遠是Success。 kubelet定期調用容器中的LivenessProbe探針來診斷容器的健康狀況。LivenessProbe包含以下3種實現方式:
  1. ExecAction:在容器內部執行一個命令,如果該命令的退出狀態碼為0,則表明容器健康。
  2. TCPSocketAction:通過容器的IP地址和埠號執行TCP檢查,如果埠能被訪問,則表明容器健康。
  3. HTTPGetAction:通過容器的IP地址和埠號及路徑調用HTTPGet方法,如果響應的狀態碼大於等於200且小於等於400,則認為容器狀態健康。

LivenessProbe探針被包含在Pod定義的spec.containers.{某個容器}中。 示例1:HTTP檢查方式 [root@k8smaster01 study]# vi myweb-liveness.yaml
  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   labels:
  5     test: liveness
  6   name: myweb
  7 spec:
  8   containers:
  9   - name: myweb
 10     image: kubeguide/tomcat-app:v1
 11     ports:
 12     - containerPort: 8080
 13     livenessProbe:
 14       httpGet:
 15         path: /index.html
 16         port: 8080
 17         httpHeaders:
 18         - name: X-Custom-Header
 19           value: Awesome
 20       initialDelaySeconds: 5
 21       timeoutSeconds: 1
 22 #kubelet發送一個HTTP請求到本地主機、埠及指定的路徑,來檢查容器的健康狀態。
示例2:運行一個具體的命令。
[root@k8smaster01 study]# vi myweb-liveness.yaml
  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   labels:
  5     test: liveness
  6   name: myweb
  7 spec:
  8   containers:
  9   - name: myweb
 10     image: kubeguide/tomcat-app:v1
 11     ports:
 12     - containerPort: 8080
 13     livenessProbe:
 14       exec:
 15         command:
 16           - cat
 17           - /tmp/health
 18       initialDelaySeconds: 5
 19       timeoutSeconds: 1
 20 #kubelet在容器中執行“cat /tmp/health”命令,如果該命令返回的值為0,則表明容器處於健康狀態,否則表明容器處於不健康狀態。

4.3 ReadinessProbe探針

另一類是ReadinessProbe探針,用於判斷容器是否啟動完成,且準備接收請求。如果ReadinessProbe探針檢測到容器啟動失敗,則Pod的狀態將被修改,Endpoint Controller將從Service的Endpoint中刪除包含該容器所在Pod的IP地址的Endpoint條目。

五 cAdvisor資源監控

5.1 cAdvisor概覽

在Kubernetes集群中,應用程式生命周期內的信息可以在不同的級別上進行監測,如:容器、Pod、Service和整個集群。 Kubernetes儘可能提供用戶詳細的各個級別的資源使用信息,從而能深入地瞭解應用的執行情況,並找到應用中可能的瓶頸。 cAdvisor是一個開源的分析容器資源使用率和性能特性的代理工具,它是因為容器而產生的,因此也支持Docker容器。在Kubernetes項目中,cAdvisor被集成到Kubernetes代碼中,kubelet則通過cAdvisor獲取其所在節點及容器的數據

5.2 cAdvisor原理及作用

cAdvisor自動查找所有在其所在Node上的容器,自動採集CPU、記憶體、文件系統和網路使用的統計信息。通常cAdvisor通過它所在Node的4194埠暴露一個簡單的UI。 kubelet作為連接Kubernetes Master和各Node之間的橋梁,管理運行在Node上的Pod和容器。kubelet將每個Pod都轉換成它的成員容器,同時從cAdvisor獲取單獨的容器使用統計信息,然後通過該REST API暴露這些聚合後的Pod資源使用的統計信息。 cAdvisor只能提供2~3min的監控數據,對性能數據也沒有持久化,因此在Kubernetes早期版本中需要依靠Heapster來實現集群範圍內全部容器性能指標的採集和查詢功能。 從Kubernetes1.8版本開始,性能指標數據的查詢介面升級為標準的Metrics API,後端服務則升級為全新的Metrics Server。因此,cAdvisor在4194埠提供的UI和API服務從Kubernetes1.10版本開始進入棄用流程,並於1.12版本完全關閉。 若需要重新啟用該服務,可手動部署一個DaemonSet在每個Node上啟動一個cAdvisor來提供UI和API,參考:https://github.com/google/cadvisor。 在新的Kubernetes監控體系中,Metrics Server用於提供CoreMetrics(核心指標),包括Node和Pod的CPU和記憶體使用數據。其他CustomMetrics(自定義指標)則由第三方組件(如Prometheus)採集和存儲。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • At the end of last year, we shipped .NET Core 3.0 and 3.1. These versions added the desktop app models Windows Forms (WinForms) and WPF, ASP.NET Blazo ...
  • 1. 死鎖問題出現 2. 死鎖的成因 3. 死鎖的4個必要條件 4. 死鎖處理方法 1. 死鎖預防 2. 死鎖避免 判斷這次請求是否會引起死鎖? 演算法實現 死鎖避免之銀行家演算法實例 請求出現時: 首先假裝分配,然後調用銀行家演算法 3. 死鎖檢測+恢復: 發現問題再處理 例題: 4. 死鎖忽略 ...
  • 8. gitlab相關介紹 8.1 gitlab優勢 社區版本,自己可以在公司搭建環境 維護人員多,版本更新塊 易用性強,上手快 集成CI(持續集成) 集成CD(持續發佈) 8.2 持續集成 8.2.1 持續集成的優勢 快速發現錯誤。每完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易 ...
  • 一、進程描述符 進程式控制制塊PCB:是OS控制進程運行用的數據結構,是一個task_struct結構體。 PCB包括:進程標識信息(進程標識符PID等)、執行現場信息(CPU現場,進程切換時需要保存現場信息)、進程映像信息(進程地址空間,即進程在運行時代碼、數據、棧放在什麼位置,方便OS對地址空間進行 ...
  • 最近使用了parallels desktop 安裝了win10,啟動後發現會導致mac無聲音。後來百度到重啟coreaudiod進程可解決(在活動監視器里直接結束該進程後會自動重啟) 參考鏈接:MAC技巧:兩個方法,輕鬆解決蘋果電腦沒聲音! https://baijiahao.baidu.com/s ...
  • 命令幾乎是每個程式員都會用到的Linux命令。這個命令用來查看Linux系統的綜合性能,比如CPU使用情況,記憶體使用情況。這個命令能幫助我快速定位程式的性能問題。 雖然這個命令很重要,但是之前對於這個命令的使用幾乎僅限於查看下哪個進程使用的CPU最高,哪個進程占用的記憶體最高。對於輸出的各個參數的含義 ...
  • 虛擬機沒有VMnet0 橋接模式,你可以試試以下幾種方式,儘量都試試,因為具體情況原因有很多種!! 首先打開虛擬網路編輯器,發現沒有橋接。。。深吸一口氣,說我沒有毒!!! 一、先右擊開始 網路連接 更改網路適配器,查看一下是否有下麵這倆個 如果沒有,試試最靠命運的方法,重啟主機!!!(win10這樣 ...
  • 一 kube-proxy原理 1.1 kube-proxy概述 Kubernetes為了支持集群的水平擴展、高可用性,抽象出了Service的概念。Service是對一組Pod的抽象,它會根據訪問策略(如負載均衡策略)來訪問這組Pod。Kubernetes在創建Service時會為Service分配 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...