k8s的探針

一、探針原理
分布式系統和微服務體系結構的挑戰之一是自動檢測不正常的應用程序,并將請求(request)重新路由到其他可用系統,恢復損壞的組件。健康檢查是應對該挑戰的一種可靠方法。使用 Kubernetes,可以通過探針配置運行狀況檢查,以確定每個 Pod 的狀態。

二、探針類型
liveness探針:影響的是單個容器,如果檢查失敗,將殺死容器,根據pod的restartPolicy來操作。

readiness探針:影響的是整個pod,即如果pod中有多個容器,只要有一個容器的readiness探針診斷失敗,那么整個pod都會處于unready狀態。

startup探針:指示容器中的應用是否已經啟動。如果提供了啟動探針(startup probe),則禁用所有其他探針,直到它成功為止。如果啟動探針失敗,kubelet 將殺死容器,容器服從其重啟策略進行重啟。如果容器沒有提供啟動探針,則默認狀態為成功Success

三、探針參數
initialDelaySeconds:容器啟動后第一次執行探測是需要等待多少秒。
periodSeconds:執行探測的頻率。默認是10秒,最小1秒。
timeoutSeconds:探測超時時間。默認1秒,最小1秒。
successThreshold:探測失敗后,最少連續探測成功多少次才被認定為成功。默認是1。對于liveness必須是1。最小值是1。
failureThreshold:探測成功后,最少連續探測失敗多少次才被認定為失敗。默認是3。最小值是1

四、探測結果
Success:Container通過了檢查。
Failure:Container未通過檢查。
Unknown:未能執行檢查,因此不采取任何措施。

五、探測運行原理
liveness probe(存活探針)
用于判斷容器是否存活,即Pod是否為running狀態,如果LivenessProbe探針探測到容器不健康,則kubelet將kill掉容器,并根據容器的重啟策略是否重啟。 如果一個容器不包含LivenessProbe探針,則Kubelet認為容器的LivenessProbe探針的返回值永遠成功。

有時應用程序可能因為某些原因(后端服務故障等)導致暫時無法對外提供服務,但應用軟件沒有終止,導致K8S無法隔離有故障的pod,調用者可能會訪問到有故障的pod,導致業務不穩定。 K8S提供livenessProbe來檢測應用程序是否正常運行,并且對相應狀況進行相應的補救措施。

readiness probe(就緒探針)
用于判斷容器是否啟動完成,即容器的Ready是否為True,可以接收請求,如果ReadinessProbe探測失敗,

若容器的Ready將為False,控制器將此Pod的Endpoint從對應的service的Endpoint列表中移除,從此不再將任何請求調度此Pod上,直到下次探測成功。

通過使用Readiness探針,Kubernetes能夠等待應用程序完全啟動,然后才允許服務將流量發送到新副本。

關于 Readiness 探針有一點很重要,它會在容器的整個生命周期中運行。這意味著 Readiness 探針不僅會在啟動時運行,而且還會在 Pod 運行期間反復運行。這是為了處理應用程序暫時不可用的情況(比如加載大量數據、等待外部連接時)。在這種情況下,我們不一定要殺死應用程序,可以等待它恢復。Readiness 探針可用于檢測這種情況,并在 Pod 再次通過 Readiness 檢查后,將流量發送到這些 Pod。

Startup probe(啟動探針)
startup 探針與 Readiness 探針類似,但它僅在啟動時執行,能針對啟動緩慢的容器或在初始化過程中有不可預測行為的應用程序進行優化。借助 Readiness 探針,我們可以配置 initialDelaySeconds 來確定 Readiness 探測在準備就緒前要等待多長時間。

六、探測方式
exec通過執行shell命令的方式,判斷退出狀態碼是否是0,針對復雜檢測或無HTTP接口的服務,命令返回值為0則表示容器健康。

tcpSocket:通過容器的IP和Port執行TCP檢查,kubelet嘗試打開容器上的某個端口,如果能夠建立TCP連接,則表明容器健康。

httpGet通過發送http請求檢查服務是否正常,每進行一次HTTP健康檢查都會curl訪問一次指定的URL,返回200-399狀態碼則表明容器健康,否則認為容器運轉不正常。

HTTP:
kubelet 將 HTTP GET 請求發送到 endpoint,并檢查 2xx 或 3xx 響應。我們可以重復使用現有的 HTTP endpoint 或設置輕量級 HTTP 服務器以進行探測(例如,具有 /healthz endpoint 的 Express server)。HTTP 探針包含其他額外參數:
host:要連接的主機名(默認值:pod 的 IP)。
scheme:HTTP(默認)或 HTTPS。
path:HTTP/S 服務器上的路徑 。
httpHeaders:自定義標頭(如果需要標頭用于身份驗證、CORS 設置等) 。
port:訪問服務器的端口名稱或端口號。

apiVersion: v1
kind: Pod
metadata:name: pod-liveness-httpgetnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports:- name: nginx-portcontainerPort: 80livenessProbe:httpGet:  # 其實就是訪問http://127.0.0.1:80/hello  scheme: HTTP #支持的協議,http或者httpsport: 80 #端口號path: /hello #URI地址

TCP
如果僅需要檢查是否可以建立 TCP 連接,則可以指定 TCP 探針。如果建立 TCP 連接,則將 Pod 標記為運行狀況良好。對于不適合使用 HTTP 探針的 gRPC 或 FTP 服務器,TCP 探針可能會有用。

apiVersion: v1
kind: Pod
metadata:name: pod-liveness-tcpsocketnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports: - name: nginx-portcontainerPort: 80livenessProbe:tcpSocket:port: 8080 # 嘗試訪問8080端口

Command
可以將探針配置為運行 shell 命令。如果命令返回的退出代碼為 0,則檢查通過,否則 Pod 將被標記為不健康。如果不希望公開 HTTP 服務器與端口,或者希望通過命令檢查初始化步驟(例如,檢查是否已創建配置文件、運行 CLI 命令),這種類型的探針會很有用

apiVersion: v1
kind: Pod
metadata:name: pod-liveness-execnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports: - name: nginx-portcontainerPort: 80livenessProbe:exec:command: ["/bin/cat","/tmp/hello.txt"] # 執行一個查看文件的命令

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373165.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第一百三十節,JavaScript,封裝庫--連綴

JavaScript,封裝庫--連綴 學習要點: 1.連綴介紹 2.改寫庫對象 本章我們重點來介紹,在調用庫的時候,我們需要能夠在前臺調用的時候可以同時設置多個操作,比如設置CSS,設置innerHTML,設置click事件…

Spring3:類型安全依賴項注入

在從Spring跳到類型安全依賴注入之前,我想討論一下我們之前所做的方式。 我們一直在借助Spring的Autowired注釋按類型使用依賴項注入。 像這樣的東西會注入Spring Bean。 Autowired private StudentDao studentDao; // Autowires by type. Injects the instance who…

userData IE

蠻討厭IE的,因為他常常需要特別照顧,就像DOM Storage(sessionStorage和localStorage)只能支持IE8,對于以下的只能使用userData。 原理:通過在document元素后面附加一個專屬的“DHTML行為”來實現客戶端存儲, var memor…

context元素大概解說

Context元素代表一個web應用,運行在某個特定的虛擬主機上。如Servlet Specification 2.2或以后版本中描述的那樣,每個web應用基于一個Web Application Archive(WAR)文件,或者是一個目錄,包含WAR文件解壓后的內容。有關Web Applica…

全新的Play模塊資料庫

去年11月,我曾與Play框架的 Nicolas Leroux談過創建模塊存儲庫的問題。 他同意這將是一個好主意,但是時間不足使我無法開始。 在上周Google Play小組發生了暴風雨之后,我決定將其優先處理。 可以在幾周內提供可工作的原型。 概述:…

Ubuntu 16.04 安裝 VMware-Workstation-12

以前一直使用 Ubuntu Virtaulbox ,最近測試了 VMware-Workstation-9,性能超過 Virtaulbox-4.2.x,下面是詳細步驟:1 首先準備一個Ubuntu 系統 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04 LTS Release: 16.04 …

Linux的md64進程,在Linux上安裝Elasticsearch Kibaba.md(示例代碼)

在Linux上安裝Elasticsearch KibabaKibana是一個開源為elasticsearch 引擎提供數據和數據分析1、下載安裝切換到root賬戶,按順序依次執行以下命令rpm包安裝$wget -c https://artifacts.elastic.co/downloads/kibana/kibana-5.5.3-x86_64.rpm$sha1sum kibana-5.3.2-x…

SSH實戰 · 唯唯樂購項目(中)

用戶模塊三:一級分類的查詢創建一級分類表并導入基本數據CREATE TABLE category (cid int(11) NOT NULL AUTO_INCREMENT,cname varchar(255) DEFAULT NULL,PRIMARY KEY (cid)) ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8;建包及相應的類:com.weiwei.shoppi…

播放2 –模塊,插件有什么區別?

關于Play 2模塊和插件似乎有些混亂。 我想這是因為兩者經常是同義詞。 在Play(兩個版本-1和2)中,存在明顯的差異。 在本文中,我將介紹什么是插件,如何在Java和Scala中實現插件,以及如何從模塊導入插件。 外…

Linux多線程貝葉斯建樹教程,建樹經驗.doc

建樹經驗分子進化樹構建及數據分析的簡介mediocrebeing, rodger, lylover, klaus, oldfish, yzwpf一、引言開始動筆寫這篇短文之前,我問自己,為什么要寫這樣的文章?寫這樣的文章有實際的意義嗎?我希望能夠解決什么樣的問題&#x…

Android的IPC機制(一)——AIDL的使用

綜述 IPC(interprocess communication)是指進程間通信,也就是在兩個進程間進行數據交互。不同的操作系統都有他們自己的一套IPC機制。例如在Linux操作系統中可以通過管道、信號量、消息隊列、內存共享、套接字等進行進程間通信。那么在Android系統中我們可以通過Bin…

python學習筆記(python介紹)

為什么要學python? python和shell的比較,和PHP、和JAVA比較 運維開發只是用到python的很小一部分 python在一些知名公司的應用: 谷歌:python的創始人原來在谷歌工作。 CIA:美國中情局網站用python開發的 NASA&#xff…

Netty:透明地使用SPDY和HTTP

大多數人已經從谷歌那里聽說過SPDY,該協議被提議作為老化的HTTP協議的替代品。 Web服務器是瀏覽器正在緩慢地實現該協議,并且支持正在增長。 在最近的文章中,我已經寫過SPDY的工作方式以及如何在Jetty中啟用SPDY支持。 由于Netty(…

selenium 等待頁面加載完成

一、隱形加載等待&#xff1a; file:///C:/Users/leixiaoj/Desktop/test.html 該頁面負責創建一個div <html> <head><title>Set Timeout</title><style>.red_box {background-color: red; width 20%; height:100px; border: none;}</style&…

linux nfsnobody用戶,處理CentOS 5.5 x64 配置NFS服務過程中nfsnobody用戶造成的問題

4、我們編譯一下這個NFS的配置文件。[rootNFS /]# vi /etc/exports/share 192.168.60.0/24(rw,sync,all_squash,root_squash) (我們允許這個共享對192.168.60.0/24網段可讀可寫&#xff0c;且將所有訪問者包括root的身份都改為nfsnobody)[rootNFS /]# /etc/init.d/nfs resta…

計算機語言

軟件&#xff1a;是一系列按照特定順序組織的計算機數據和指令的集合。一般來講軟件被劃分為系統軟件、應用軟件和介于這兩者之間的中間件。 系統軟件 系統軟件是各類操作系統&#xff0c;如windows、Linux、UNIX等&#xff0c;還包括操作系統的補丁程序及硬件驅動程序&#xf…

Apache Shiro第2部分–領域,數據庫和PGP證書

這是致力于Apache Shiro的系列文章的第二部分。 我們從簡單的不安全Web應用程序開始了上一部分 。 完成后&#xff0c;該應用程序具有基本的身份驗證和授權。 用戶可以登錄和注銷。 所有網頁和按鈕均已分配和實施訪問權限。 授權和身份驗證數據都已存儲在靜態配置文件中。 正如…

js中變量作用域的小理解

一&#xff1a;變量作用域 在js代碼中每個變量都是有自己的作用域的&#xff0c;js中不像C語言有塊級作用域的概念&#xff0c;取而代之的是函數作用域&#xff0c;看如下代碼&#xff1a; var scope"global"; function init(){ alert(scope);var scope "local…

安卓linux開機畫面,Android系統的開機畫面顯示過程分析(1)

好幾個月都沒有更新過博客了&#xff0c;從今天開始&#xff0c;老羅將嘗試對Android系統的UI實現作一個系統的分析&#xff0c;也算是落實之前所作出的承諾。提到Android系統的UI&#xff0c;我們最先接觸到的便是系統在啟動過程中所出現的畫面了。Android系統在啟動的過程中&…

如果你的NavigationDrawer里面的Item沒有響應,Drawer不能左滑關閉

如果你的NavigationDrawer里面的Item沒有響應&#xff0c;Drawer不能左滑關閉&#xff0c;應該是因為你沒有把主要內容放在DrawerLayout標簽下的第一位。 The main content view (the FrameLayout above) must be the first child in the DrawerLayout because the XML order i…