【學(xué)習(xí)筆記08】每天5分鐘肢础,玩轉(zhuǎn)kubernetes-08(Health Check)

第八章 Health Check

8.1 默認(rèn)的健康檢查

每個(gè)容器啟動(dòng)時(shí)會(huì)執(zhí)行一個(gè)進(jìn)程喂分,此進(jìn)程由Dockerfile的CMD或ENTRYPOINT指定。如果進(jìn)程退出時(shí)返回碼非零野宜,則認(rèn)為容器發(fā)生故障扫步,K8s就會(huì)根據(jù)restartPolicy.
如果容器進(jìn)程返回非零,K8s就認(rèn)為容器發(fā)生故障匈子,需要重啟河胎。
可是有時(shí)候,容器發(fā)生了故障虎敦,但是容器并不退出游岳。

編寫Pod配置

vim healthcheck.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: healthcheck
  name: healthcheck
spec:
  restartPolicy: OnFailure
  containers:
  - name: healthcheck
    image: busybox
    args: 
    - /bin/sh
    - -c
    - sleep 10; exit 1

測(cè)試

 $kubectl apply -f healthcheck.yml 
 $kubectl get pods healthcheck
NAME          READY   STATUS   RESTARTS   AGE
healthcheck   0/1     Error    3          112s

#刪除pod healthcheck
$kubectl delete pod healthcheck

8.2 Liveness探測(cè)

Liveness探測(cè)讓用戶可以自定義判斷容器是否健康的條件。如果探測(cè)失敗其徙,K8是就會(huì)重啟容器胚迫。
開始30秒,/tmp/healthy文件存在唾那,cat 命令返回0访锻,liveness探測(cè)成功,

vim liveness.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness
spec:
  restartPolicy: OnFailure
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600         # 創(chuàng)建文件闹获,30秒后刪除
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy                           # 如果文件存在期犬,則認(rèn)為容器處于正常狀態(tài),反之則發(fā)生故障避诽;
      initialDelaySeconds: 10                    # 容器啟動(dòng)10秒后開始探測(cè)             
      periodSeconds: 5                           # 每5秒執(zhí)行一次探測(cè)
#執(zhí)行
kubectl apply -f liveness.yml 

kubectl describe pod liveness

$kubectl describe pod liveness
  Warning  Unhealthy  0s (x9 over 2m40s)   kubelet, k8s-node-122132072  Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory
  Normal   Killing    0s (x3 over 2m30s)   kubelet, k8s-node-122132072  Container liveness failed liveness probe, will be restarted

$ kubectl get pods liveness
NAME       READY   STATUS    RESTARTS   AGE
liveness   1/1     Running   3          4m8s

8.3 Readiness探測(cè)

liveness探測(cè)龟虎,告訴k8s通過重啟來自愈。
Readiness探測(cè):告訴k8s什么時(shí)候可以將容器加入到Service負(fù)載均衡池中沙庐,對(duì)外提供服務(wù)鲤妥。
\color{red}{僅把配置中l(wèi)iveness改為readiness就可}

vim readiness.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: readiness   #修改
  name: readiness #修改
spec:
  restartPolicy: OnFailure
  containers:
  - name: readiness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    readinessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 10
      periodSeconds: 5

readiness布署

kubectl apply -f readiness.yml 
$ kubectl get pods readiness
NAME        READY   STATUS    RESTARTS   AGE
readiness   0/1     Running   0          87s
$kubectl describe pod readiness
  Normal   Pulling    112s               kubelet, k8s-node-122132073  Pulling image "busybox"
  Normal   Pulled     103s               kubelet, k8s-node-122132073  Successfully pulled image "busybox"
  Normal   Created    103s               kubelet, k8s-node-122132073  Created container readiness
  Normal   Started    103s               kubelet, k8s-node-122132073  Started container readiness
  Warning  Unhealthy  3s (x14 over 68s)  kubelet, k8s-node-122132073  Readiness probe failed: cat: can't open '/tmp/healthy': No such file or directory

liveness 和 Readiness 比較:
1)默認(rèn)情況二者都是看容器退出時(shí)返回值是否為0,來判斷是否失敗拱雏。
2)二者的配置方法完全相同棉安,不同的是探測(cè)失敗后的處理:Liveness重啟容器;Readiness將容器設(shè)置為不可用铸抑。

  1. 二者獨(dú)立執(zhí)行垂券,沒有依賴。Liveness探測(cè)判斷容器是否需要重啟來自愈; Readiness探測(cè)容器是否已經(jīng)準(zhǔn)備好對(duì)外提供服務(wù)菇爪。

8.4 Health Check在Scale up中的應(yīng)用

當(dāng)執(zhí)行scale up(擴(kuò)容)的時(shí)候算芯,新的副本添加到service的負(fù)載均衡中,與已有副本一起處理客戶請(qǐng)求凳宙。應(yīng)用啟動(dòng)通常需要一個(gè)準(zhǔn)備階段熙揍,比如加載緩存、連接數(shù)據(jù)庫等氏涩,從容器啟動(dòng)到真正提供服務(wù)需要一段時(shí)間届囚。可以通過Readiness探測(cè)判斷容器是否就緒是尖,避免將請(qǐng)求發(fā)到?jīng)]有準(zhǔn)備好的backend.

\color{red}{httpGet: 探測(cè)成功的判斷條件是http請(qǐng)求返回碼在200 ~ 400之間意系。(支持HTTP 和 HTTPS)}

readinessProbe:
  httpGet:
    scheme: HTTP                   
    path: /healthy                 # 訪問路徑
    port: 8080                     # 指定端口
    initialDealySeconds: 10        # 容器啟動(dòng)10秒后開始探測(cè)
    periodSeconds: 5               # 每隔5秒探測(cè)一次

\color{red}{需要實(shí)現(xiàn) http://[container-ip]:8080/healthy 接口。若返回200-400饺汹,則表示容器可開始接收請(qǐng)求}

8.5 Health check 在滾動(dòng)更新中的應(yīng)用

$ kubectl get deployment
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
httpd     2         2         2            0           6s

DESIRED:  期望有多少個(gè)副本
CURRENT: 當(dāng)前副本數(shù)目蛔添,  舊的 +  新的
UP-TO-DATE: 已經(jīng)完成更新的副本數(shù)
AVAILABLE: 狀態(tài)是READY可以提供服務(wù)的副本數(shù)

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兜辞,一起剝皮案震驚了整個(gè)濱河市迎瞧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逸吵,老刑警劉巖凶硅,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扫皱,居然都是意外死亡足绅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門韩脑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氢妈,“玉大人,你說我怎么就攤上這事扰才。” “怎么了厕怜?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵衩匣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我粥航,道長(zhǎng)琅捏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任递雀,我火速辦了婚禮柄延,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己搜吧,他們只是感情好市俊,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滤奈,像睡著了一般摆昧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜒程,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天绅你,我揣著相機(jī)與錄音,去河邊找鬼昭躺。 笑死忌锯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的领炫。 我是一名探鬼主播偶垮,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼驹吮!你這毒婦竟也來了针史?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤碟狞,失蹤者是張志新(化名)和其女友劉穎啄枕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族沃,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡频祝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脆淹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片常空。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盖溺,靈堂內(nèi)的尸體忽然破棺而出漓糙,到底是詐尸還是另有隱情,我是刑警寧澤烘嘱,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布昆禽,位于F島的核電站,受9級(jí)特大地震影響蝇庭,放射性物質(zhì)發(fā)生泄漏醉鳖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一哮内、第九天 我趴在偏房一處隱蔽的房頂上張望盗棵。 院中可真熱鬧,春花似錦、人聲如沸纹因。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辐怕。三九已至逼蒙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寄疏,已是汗流浹背是牢。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陕截,地道東北人驳棱。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像农曲,于是被迫代替她去往敵國和親社搅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容