国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Kubernetes Pod的重啟策略+健康檢查(實(shí)現(xiàn)應(yīng)用自修復(fù));

這篇具有很好參考價值的文章主要介紹了Kubernetes Pod的重啟策略+健康檢查(實(shí)現(xiàn)應(yīng)用自修復(fù));。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1.重啟策略(restartPolicy)

指的是容器什么時候才會被重啟,如果沒有健康檢查的話,默認(rèn)是根據(jù)pod的status來判斷的
有三個值,分別是:

  • Always: 只要容器被終止退出后,總是重啟容器,默認(rèn)策略;
    應(yīng)用場景:常駐進(jìn)程(例如nginx,tomcat、mysql等)

  • OnFailure:只有當(dāng)容器異常退出(退出狀態(tài)碼非0)時,才重啟容器;
    應(yīng)用場景:預(yù)期性終止的程序,如果執(zhí)行失敗,進(jìn)行重啟(例如定時任務(wù))

  • Never:只要當(dāng)容器終止退出時,不管什么原因,從不重啟容器;
    應(yīng)用場景:預(yù)期性終止的程序,如果執(zhí)行失敗,不進(jìn)行重啟(例如一次性任務(wù) 需要修改數(shù)據(jù)庫里的數(shù)據(jù)時,如果執(zhí)行失敗則不能重新執(zhí)行,否則將會對數(shù)據(jù)庫里的數(shù)據(jù)造成影響、產(chǎn)生臟數(shù)據(jù)等等)

查看Pod的重啟策略:
kubectl get pod名稱 -o yaml [-n 所在命名空間] | grep restartPolicy

[root@k8s-master ~]# kubectl get pod/nginx-9456bbbf9-zdccj -o yaml  | grep restartPolicy
  restartPolicy: Always

2.健康檢查類型

檢測容器中應(yīng)用程序的工作狀態(tài),為了防止那些進(jìn)程顯示正常但是又不能正常工作的應(yīng)用,例如tomcat的堆內(nèi)存溢出等等;
有三個值,分別是:

  • livenessProbe(存活檢查):如果檢查容器中的應(yīng)用失?。☉?yīng)用不可用),將殺死容器,根據(jù)Pod的restartPlicy來操作;

  • readinessProbe(就緒檢查):如果檢查失敗,Kubernetes會把Pod從service endpoints中剔除;

  • startupProbe(啟動檢查):檢查成功后才會由存活檢查/就緒檢查接手,用于保護(hù)那些啟動慢的容器還沒起來就被存活檢查干掉;

存活檢查和就緒檢查,也是實(shí)現(xiàn)k8s實(shí)現(xiàn)自動化的兩個緯度/行為,一個是失敗后重啟pod,一個是剔除不健康的pod;

支持的健康檢查方法有:

  • httpGet:發(fā)送HTTP請求,返回200-400范圍的狀態(tài)碼為成功;(例curl、wget命令)
  • exec:執(zhí)行Shell命令返回狀態(tài)碼是0為成功;(執(zhí)行一段命令)
  • tcpSocket:發(fā)起TCP Socket建立成功;(探測端口是否已經(jīng)打開并可以建立連接,例如nc、netstat、telnet命令)

service endpoints解釋:
如下圖:瀏覽器/客戶端需要訪問我們的應(yīng)用, 首先應(yīng)該去訪問service,service會將客戶端的請求轉(zhuǎn)發(fā)給后端關(guān)聯(lián)的一個/一組pod上,所以service在這里可以說是充當(dāng)了一個虛擬負(fù)載均衡器(LB)的角色,那么service和一個/一組pod之間的關(guān)聯(lián)就是service endpoints,當(dāng)就緒檢查發(fā)現(xiàn)pod失敗時,會將檢查失敗的pod從service endpoints中剔除,不讓service將流量轉(zhuǎn)發(fā)至檢查失敗的pod中去,只留下可以正常工作的pod來處理service轉(zhuǎn)發(fā)過來的請求;

可以通過kubectl get endpoints [-n 命名空間]來查看service關(guān)聯(lián)的容器
restartpolicy,Kubernetes學(xué)習(xí)分享;,kubernetes,運(yùn)維,容器
如上圖:存活和就緒的檢查動作都是由kubelet完成的;因?yàn)閗ubelet是分布在每個節(jié)點(diǎn)運(yùn)行的,相當(dāng)于是一個每個節(jié)點(diǎn)都運(yùn)行了一個agent;而容器也是在每個節(jié)點(diǎn)都運(yùn)行的,所以kubelet是有直接的條件去接觸/探測容器的;

  • kubelet 通過使用 liveness probe 來確定你的應(yīng)用程序是否正在運(yùn)行,通俗點(diǎn)將就是是否還活著。一般來說,如果你的程序一旦崩潰了, Kubernetes 就會立刻知道這個程序已經(jīng)終止了,然后就會重啟這個程序。而我們的 liveness probe 的目的就是來捕獲到當(dāng)前應(yīng)用程序還沒有終止,還沒有崩潰,如果出現(xiàn)了這些情況,那么就重啟處于該狀態(tài)下的容器,使應(yīng)用程序在存在 bug 的情況下依然能夠繼續(xù)運(yùn)行下去。
  • kubelet 使用 readiness probe 來確定容器是否已經(jīng)就緒可以接收流量過來了。這個探針通俗點(diǎn)講就是說是否準(zhǔn)備好了,現(xiàn)在可以開始工作了。只有當(dāng) Pod 中的容器都處于就緒狀態(tài)的時候 kubelet 才會認(rèn)定該 Pod 處于就緒狀態(tài),因?yàn)橐粋€ Pod 下面可能會有多個容器。當(dāng)然 Pod 如果處于非就緒狀態(tài),那么我們就會將他從 Service 的 Endpoints 列表中移除出來,這樣我們的流量就不會被路由到這個 Pod 里面來了。

3.存活、就緒探針使用方法(httpGet)如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  web
  namespace: default
  labels:
    app:  web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 3
  template:
    metadata:
      labels:
        app:  web
    spec:
      containers:
      - name:  web
        image:  nginx:latest
        #存活檢查
        livenessProbe:
          httpGet:
            #進(jìn)行探測的地址/頁面,一般都是由開發(fā)寫一個簡單的用于健康檢查的頁面 
            #如果沒有的話就找一個url頁面內(nèi)容較少的,盡量不要找頁面里業(yè)務(wù)邏輯多的 因?yàn)榻】禉z查也會不斷的去請求這個頁面來判斷是否可以訪問,在請求的過程中,也會不斷的進(jìn)行處理,消耗一定的cpu和內(nèi)存
            path: /index.html  
            #指定健康檢查的端口,就是程序使用的端口【例如nginx80 tomcat8080 mysql3306】
            port: 80
          #啟動容器后多少秒開始進(jìn)行健康檢查【根據(jù)自己應(yīng)用的啟動時間來設(shè)置】
          initialDelaySeconds: 5 
          #以后每間隔多少秒檢查一次
          periodSeconds: 10 
        #就緒檢查【就緒檢查和存活檢查配置項(xiàng)一樣,根據(jù)自己應(yīng)用相對應(yīng)調(diào)整參數(shù)即可】
        readinessProbe:
          httpGet:
            path: /index.html
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10

---
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: default
spec:
  selector:
    app: web
  type: ClusterIP
  ports:
  - name: web
    protocol: TCP
    port: 80
    targetPort: 80
    
[root@k8s-master ~]# kubectl apply -f probe-web.yaml 
[root@k8s-master ~]# kubectl get pod -o wide 
NAME                   READY   STATUS    RESTARTS[重啟次數(shù)]   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
web-6c5678449f-ddkpd   1/1     Running   0          9m22s   10.244.36.94   k8s-node1   <none>           <none>
web-6c5678449f-pj9xn   1/1     Running   0          9m22s   10.244.36.93   k8s-node1   <none>           <none>
web-6c5678449f-rqbf9   1/1     Running   0          9m22s   10.244.36.91   k8s-node1   <none>           <none>
[root@k8s-master ~]# kubectl get ep
NAME         ENDPOINTS                                         AGE
kubernetes   10.8.0.2:6443                                     78d
web          10.244.36.91:80,10.244.36.93:80,10.244.36.94:80   13m
#此時我們的nginx副本已經(jīng)創(chuàng)建好了,通過kubectl get ep 也可以查看道service關(guān)聯(lián)的副本的pod;

(1).驗(yàn)證存活檢查

(存活檢查的行為是當(dāng)容器里的服務(wù)掛了之后會進(jìn)行重啟)

大家可以通過 kubectl logs -f [pod名稱] [-n 命名空間] 看下正常的容器日志輸出為:
每隔10秒會出現(xiàn)兩條健康檢查的日志,分別是由kubelet的組件kube-proxy發(fā)起的存活檢查和就緒檢查的日志,探測的頁面地址就是我們上面配置的index.html;

restartpolicy,Kubernetes學(xué)習(xí)分享;,kubernetes,運(yùn)維,容器

此時模擬存活檢查失敗,也就是將狀態(tài)碼變成非200,才可以觸發(fā)這個條件;
最簡單的方法就是進(jìn)入nginx容器將index.html頁面刪掉即可將狀態(tài)碼變?yōu)?04;

[root@k8s-master ~]# kubectl exec -it pod/web-6c5678449f-ddkpd bash 
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@web-6c5678449f-ddkpd:/# cd /usr/share/nginx/html/
root@web-6c5678449f-ddkpd:/usr/share/nginx/html# ls 
50x.html  index.html
root@web-6c5678449f-ddkpd:/usr/share/nginx/html# rm index.html 
root@web-6c5678449f-ddkpd:/usr/share/nginx/html# exit

現(xiàn)在已經(jīng)將index.html頁面刪掉了,再次查看容器日志
可以看到探測失敗以及關(guān)閉此容器的的錯誤日志;
restartpolicy,Kubernetes學(xué)習(xí)分享;,kubernetes,運(yùn)維,容器

同時我們可以使用kubectl describe [pod名稱] [-n 命名空間] 來查看下容器的事件
可以看到里面有kubelet發(fā)出的兩個事件
“Liveness probe failed: HTTP probe failed with statuscode: 404”,“Container web failed liveness probe, will be restarted”
代表存活檢查探測HTTP失敗狀態(tài)碼為404,容器網(wǎng)絡(luò)活動探測失敗將重啟啟動
restartpolicy,Kubernetes學(xué)習(xí)分享;,kubernetes,運(yùn)維,容器

使用kubectl get [pod名稱] [-n 命名空間] 查看pod內(nèi)容器的重啟次數(shù)(restart列)
可以看有一個pod內(nèi)的容器在37分鐘前被重啟了,這是因?yàn)榻】禉z查失敗導(dǎo)致的;
注:這里重啟的是pod內(nèi)的容器,而不是重建的pod;只是用新的鏡像又重新拉起了容器,所以pod名和IP不會發(fā)生變化,如果是重建的pod的話,那么pod名和IP就會發(fā)生改變;
restartpolicy,Kubernetes學(xué)習(xí)分享;,kubernetes,運(yùn)維,容器

(2).驗(yàn)證就緒檢查

(就緒檢查的行為是當(dāng)容器里的服務(wù)未就緒或者掛了之后會將pod在service endpoints列表里剔除,不再將流量轉(zhuǎn)發(fā)至pod)

首先使用kubectl get ep查看一下關(guān)聯(lián)的pod
restartpolicy,Kubernetes學(xué)習(xí)分享;,kubernetes,運(yùn)維,容器
然后使用kubectl get ep -w 實(shí)時觀察一下,同時新建立一個終端并開始模擬故障(這里就緒檢查用的也是httpGet所以,只需要將index.html這個頁面刪除即可改變狀態(tài)碼為404)

[root@k8s-master ~]# kubectl exec -it web-6c5678449f-pj9xn  bash 
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@web-6c5678449f-pj9xn:/# cd /usr/share/nginx/html/
root@web-6c5678449f-pj9xn:/usr/share/nginx/html# ls 
50x.html  index.html
root@web-6c5678449f-pj9xn:/usr/share/nginx/html# rm index.html 
root@web-6c5678449f-pj9xn:/usr/share/nginx/html# exit 
exit

restartpolicy,Kubernetes學(xué)習(xí)分享;,kubernetes,運(yùn)維,容器
如上圖,大家可以發(fā)現(xiàn)由最開始的3個IP變成了2個,這就是就緒檢查失敗造成的,就緒檢查失敗就會把不可用的pod剔除,此時再去訪問service就不會再把請求轉(zhuǎn)發(fā)至失敗的pod了;最后又變成了3個,是因?yàn)榕渲昧舜婊顧z查將pod的容器重啟了、就緒檢查沒問題了之后,就會再把pod加入到enpoints列表中;

4.存活、就緒探針其它使用方法

示例:tcpSocket端口探測

livenessProbe:
  tcpSocket:
    #要探測的端口號;
    port: 80
  initialDelaySeconds: 120 
  periodSeconds: 30 

示例:exec執(zhí)行命令探測

livenessProbe:
  exec:
    #執(zhí)行的shell命令,如果執(zhí)行后返回值為0則成功(可以執(zhí)行完成命令后使用 echo $? 來查看命令返回值);
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 120 
  periodSeconds: 30 

注:存活檢查和就緒檢查是沒有先后順序的,如果一個項(xiàng)目都配置了這兩個探針的話,配置的時間參數(shù)也一致 是可以同時去進(jìn)行檢測的;



總結(jié):
我們可以把k8s的健康檢查nacos/eureka結(jié)合起來實(shí)現(xiàn)真正的優(yōu)雅上下線;
具體方案可以參考如下地址:
https://blog.csdn.net/Dream_Weave/article/details/126379544文章來源地址http://www.zghlxwxcb.cn/news/detail-774240.html

到了這里,關(guān)于Kubernetes Pod的重啟策略+健康檢查(實(shí)現(xiàn)應(yīng)用自修復(fù));的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解決pod健康檢查問題

    引自:Solving the mystery of pods health checks failures in Kubernetes。原文中的某些描述并不清晰,本文作了調(diào)整。 很早以前,環(huán)境中的pod有時候會遇到健康檢查失敗的問題,但并沒有什么明顯表征,且?guī)缀跏橇ⅠR就會恢復(fù)。由于這種情況很少發(fā)生,且不會對業(yè)務(wù)造成影響,因此起初并

    2024年02月03日
    瀏覽(17)
  • [kubernetes]服務(wù)健康檢查

    進(jìn)程在運(yùn)行,但是不代表應(yīng)用是正常的,對此pod提供的探針可用來檢測容器內(nèi)的應(yīng)用是否正常。k8s對pod的健康狀態(tài)可以通過三類探針來檢查:LivenessProbe、ReadinessProbe和StartupProbe。 用于判斷容器是否存活(Running狀態(tài)),如果LivenessProbe探針檢測到容器不健康,則kubelet“殺掉”容

    2024年02月10日
    瀏覽(21)
  • k8s之Pod及Probe 探針機(jī)制(健康檢查機(jī)制)

    k8s之Pod及Probe 探針機(jī)制(健康檢查機(jī)制)

    1.1、定義 Pod 是一組(一個或多個) 容器(docker容器)的集合 (就像在豌豆莢中);這些容器共享存儲、網(wǎng)絡(luò)、以及怎樣運(yùn)行這些容器的聲明 - 我們一般不直接創(chuàng)建Pod,而是創(chuàng)建一些工作負(fù)載由他們來創(chuàng)建Pod 1.2、Pod的形式 Pod對容器有自恢復(fù)能力(Pod自動重啟失敗的容器)

    2024年02月12日
    瀏覽(26)
  • 【Kubernetes運(yùn)維篇】零故障升級Pod健康探測詳解

    【Kubernetes運(yùn)維篇】零故障升級Pod健康探測詳解

    中文官方參考文檔: Pod探測是Kubernetes中的一種機(jī)制, 用于檢測Pod的狀態(tài)和健康狀況。當(dāng)探測到Pod狀態(tài)不正常時,根據(jù)重啟策略進(jìn)行相應(yīng)的Pod操作 ,探測可以幫助Kubernetes集群自動化地管理容器的健康狀態(tài),提高應(yīng)用程序的可靠性和可用性。 探測針對Pod中容器進(jìn)行操作,所以探

    2024年02月08日
    瀏覽(25)
  • 【k8s】:如何進(jìn)行 Kubernetes 集群健康檢查?

    【k8s】:如何進(jìn)行 Kubernetes 集群健康檢查?

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? 在使用 Kubernetes(k8s)部署應(yīng)用程序時,保證集群的健康狀態(tài)至關(guān)重要。通過定期的健康檢查,可以及時發(fā)現(xiàn)并解決可能導(dǎo)致應(yīng)用程序中斷或故障的問題,確保集群的穩(wěn)定性和可靠性。 將列出所有節(jié)點(diǎn)的狀態(tài),包括節(jié)點(diǎn)的名稱、狀態(tài)、版

    2024年04月16日
    瀏覽(52)
  • Pod詳解(Pod使用、容器分類、鏡像拉取和容器重啟策略)

    目錄 一、Pod基礎(chǔ)概念 二、Pod兩種使用方式 1.pause容器使得Pod中的所有容器可以共享兩種資源:網(wǎng)絡(luò)和存儲 2.Kubernetes為什么設(shè)計這樣的Pod概念和特殊組成結(jié)構(gòu)? 三、Pod容器的分類 1.自主式Pod 2.控制器管理的Pod 四、Pod中的容器類型分3種 1.pause容器(基礎(chǔ)容器/父容器/根容器) 2

    2024年02月10日
    瀏覽(20)
  • Nginx配置大全【六大使用場景、七大負(fù)載均衡策略、四大負(fù)載健康檢查】

    !!! 反向代理也可以基于請求路徑轉(zhuǎn)發(fā)到不同服務(wù)器 !!! !!!反向代理路徑結(jié)尾加不加 / 符號的區(qū)別?。?! 如果只是簡單的重定向操作,并且不需要進(jìn)行復(fù)雜的路徑重寫或捕獲,推薦使用 return 301 的方式來實(shí)現(xiàn)重定向。這樣能夠更直接、更高效地達(dá)到重定向的目的,避免不必要的

    2024年04月16日
    瀏覽(21)
  • kubernetes|云原生| 如何優(yōu)雅的重啟和更新pod---pod生命周期管理實(shí)務(wù)

    kubernetes|云原生| 如何優(yōu)雅的重啟和更新pod---pod生命周期管理實(shí)務(wù)

    kubernetes的管理維護(hù)的復(fù)雜性體現(xiàn)在了方方面面,例如,pod的管理,服務(wù)的管理,用戶的管理(RBAC),網(wǎng)絡(luò)的管理等等,因此,kubernetes安裝部署完畢僅僅是萬里長征的第一步,后面的運(yùn)營和維護(hù)工作才是更為關(guān)鍵的東西。 那么,pod的生命周期是什么概念呢?這

    2024年02月04日
    瀏覽(18)
  • K8s(四)Pod資源——pod生命周期、重啟策略、容器鉤子與容器探測

    目錄 Pod生命周期 Pod重啟策略 初始化容器 容器鉤子 容器探測 啟動探測 存活探測 就緒探測 參考資料 Pod 的生命周期 | Kubernetes Init 容器 | Kubernetes Pod的生命周期可以分為以下幾個階段: Pending(等待):在這個階段,Pod被創(chuàng)建,并且正在等待被調(diào)度到一個節(jié)點(diǎn)上運(yùn)行。此時,

    2024年01月20日
    瀏覽(43)
  • Kubernetes(k8s)健康性檢查:livenessprobe探測和readinessprobe探測

    目錄 一.系統(tǒng)環(huán)境 二.前言 三.Kubernetes健康性檢查簡介 四.創(chuàng)建沒有探測機(jī)制的pod 五.添加livenessprobe探測 5.1 使用command的方式進(jìn)行l(wèi)ivenessprobe探測 5.2 使用httpGet的方式進(jìn)行l(wèi)ivenessprobe探測 5.3 使用tcpSocket的方式進(jìn)行l(wèi)ivenessprobe探測 六.readinessprobe探測 七.總結(jié) 本文主要基于Kubernetes1.

    2024年02月07日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包