日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Kubernetes中容器探測(cè),你都了解了嗎?

Kubernetes中容器探測(cè),你都了解了嗎?

作者:全棧行動(dòng)派 2023-06-26 07:32:43

云計(jì)算

云原生 LivenessProbe 決定是否重啟容器,ReadinessProbe 決定是否將請(qǐng)求轉(zhuǎn)發(fā)給容器。

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的江達(dá)網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1、概述

容器探測(cè)用于檢測(cè)容器中的應(yīng)用實(shí)例是否正常工作,是保障業(yè)務(wù)可用性的一種傳統(tǒng)機(jī)制。如果經(jīng)過(guò)探測(cè),實(shí)例的狀態(tài)不符合預(yù)期,那么kubernetes就會(huì)把該問(wèn)題實(shí)例" 摘除 ",不承擔(dān)業(yè)務(wù)流量。kubernetes提供了兩種探針來(lái)實(shí)現(xiàn)容器探測(cè),分別是:

  • liveness probes:存活性探針,用于檢測(cè)應(yīng)用實(shí)例當(dāng)前是否處于正常運(yùn)行狀態(tài),如果不是,k8s會(huì)重啟容器
  • readiness probes:就緒性探針,用于檢測(cè)應(yīng)用實(shí)例當(dāng)前是否可以接收請(qǐng)求,如果不能,k8s不會(huì)轉(zhuǎn)發(fā)流量

livenessProbe 決定是否重啟容器,readinessProbe 決定是否將請(qǐng)求轉(zhuǎn)發(fā)給容器。

上面兩種探針目前均支持三種探測(cè)方式:

  • Exec命令:在容器內(nèi)執(zhí)行一次命令,如果命令執(zhí)行的退出碼為0,則認(rèn)為程序正常,否則不正常
……
  livenessProbe:
    exec:
      command:
      - cat
      - /tmp/healthy
……

  • TCPSocket:將會(huì)嘗試訪問(wèn)一個(gè)用戶(hù)容器的端口,如果能夠建立這條連接,則認(rèn)為程序正常,否則不正常
……      
  livenessProbe:
    tcpSocket:
      port: 8080
……

  • HTTPGet:調(diào)用容器內(nèi)Web應(yīng)用的URL,如果返回的狀態(tài)碼在200和399之間,則認(rèn)為程序正常,否則不正常
……
  livenessProbe:
    httpGet:
      path: / #URI地址
      port: 80 #端口號(hào)
      host: 127.0.0.1 #主機(jī)地址
      scheme: HTTP #支持的協(xié)議,http或者h(yuǎn)ttps
……

2、存活性探針

(1)Exec模式

創(chuàng)建pod-liveness-exec.yaml。

apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-exec
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx
    ports: 
    - name: nginx-port
      containerPort: 80
    livenessProbe:
      exec:
        command: ["/bin/cat","/tmp/hello.txt"] # 執(zhí)行一個(gè)查看文件的命令

因?yàn)?tmp/hello.txt 文件不存在,導(dǎo)致反復(fù)重啟容器。

#進(jìn)入yaml目錄
[root@k8s-master ~]# ls
anaconda-ks.cfg  pod-liveness-exec.yaml
[root@k8s-master ~]# clear
[root@k8s-master ~]#
[root@k8s-master ~]#
#查看當(dāng)前dev命名空間下無(wú)pod
[root@k8s-master ~]# kubectl get pod -n dev
No resources found in dev namespace.
[root@k8s-master ~]#
#創(chuàng)建pod
[root@k8s-master ~]# kubectl apply -f pod-liveness-exec.yaml
pod/pod-liveness-exec created
[root@k8s-master ~]#
#再次查看dev命名空間已創(chuàng)建pod
[root@k8s-master ~]# kubectl get pod -n dev
NAME                READY   STATUS              RESTARTS   AGE
pod-liveness-exec   0/1     ContainerCreating   0          5s
#查看pod詳情
[root@k8s-master ~]# kubectl describe pod pod-liveness-exec -n dev
#在最下面Events中,容器創(chuàng)建過(guò)程報(bào)錯(cuò)
Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Normal   Scheduled  28s   default-scheduler  Successfully assigned dev/pod-liveness-exec to k8s-node2
  Normal   Pulling    27s   kubelet            Pulling image "nginx"
  Normal   Pulled     11s   kubelet            Successfully pulled image "nginx" in 15.48165061s
  Normal   Created    11s   kubelet            Created container nginx
  Normal   Started    11s   kubelet            Started container nginx
  Warning  Unhealthy  7s    kubelet            Liveness probe failed: /bin/cat: /tmp/hello.txt: No such file or directory
#再次頻繁查看dev下pod信息可以發(fā)現(xiàn) pod的重啟次數(shù)一直在增加
[root@k8s-master ~]# kubectl get pod -n dev
NAME                READY   STATUS    RESTARTS      AGE
pod-liveness-exec   1/1     Running   3 (53s ago)   2m54s
[root@k8s-master ~]# kubectl get pod -n dev
NAME                READY   STATUS    RESTARTS      AGE
pod-liveness-exec   1/1     Running   4 (20s ago)   3m1s

這個(gè)時(shí)候我們將 yaml改為查看已存在的文件。

apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-exec
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx
    ports: 
    - name: nginx-port
      containerPort: 80
    livenessProbe:
      exec:
        command: ["/bin/cat","/usr/share/nginx/html/index.html"] # 執(zhí)行一個(gè)查看文件的命令 此文件為nginx歡迎頁(yè)面 因?yàn)槲覀兊娜萜骶褪莕ginx所以這個(gè)文件肯定存在的

再看效果:

(2)TCPSocket模式

創(chuàng)建pod-liveness-tcpsocket.yaml。

apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-tcpsocket
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx
    ports: 
    - name: nginx-port
      containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 8080 # 嘗試訪問(wèn)8080端口,端口不存在

因?yàn)槿萜髦?080端口未開(kāi)通,所以連接失敗。

[root@k8s-master ~]# ls
anaconda-ks.cfg  pod-liveness-tcpsocket.yaml
[root@k8s-master ~]#
#創(chuàng)建pod
[root@k8s-master ~]# kubectl apply -f pod-liveness-tcpsocket.yaml
pod/pod-liveness-tcpsocket created
[root@k8s-master ~]#
#獲取pod
[root@k8s-master ~]# kubectl get pod -n dev
NAME                     READY   STATUS    RESTARTS   AGE
pod-liveness-tcpsocket   1/1     Running   0          12s
#查看詳情可以看出最后一步 連接被拒絕
[root@k8s-master ~]# kubectl describe pod pod-liveness-tcpsocket -n dev
Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  23s               default-scheduler  Successfully assigned dev/pod-liveness-tcpsocket to k8s-node2
  Normal   Pulling    22s               kubelet            Pulling image "nginx"
  Normal   Pulled     21s               kubelet            Successfully pulled image "nginx" in 475.556438ms
  Normal   Created    21s               kubelet            Created container nginx
  Normal   Started    21s               kubelet            Started container nginx
  Warning  Unhealthy  2s (x2 over 12s)  kubelet            Liveness probe failed: dial tcp 172.17.169.138:8080: connect: connection refused
#頻繁獲取pod詳情可以看出  重啟次數(shù)也在不斷增加
[root@k8s-master ~]# kubectl get pod -n dev
NAME                     READY   STATUS    RESTARTS      AGE
pod-liveness-tcpsocket   1/1     Running   3 (32s ago)   2m13s
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get pod -n dev
NAME                     READY   STATUS    RESTARTS      AGE
pod-liveness-tcpsocket   1/1     Running   3 (46s ago)   2m27s
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get pod -n dev
NAME                     READY   STATUS    RESTARTS      AGE
pod-liveness-tcpsocket   1/1     Running   4 (16s ago)   2m37s

然后將 tcpSocket.port 改為80 再重復(fù)以上步驟就會(huì)發(fā)現(xiàn),容器正常啟動(dòng)。

(3)HTTPGet模式

創(chuàng)建pod-liveness-httpget.yaml。

apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-httpget
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - name: nginx-port
      containerPort: 80
    livenessProbe:
      httpGet:  # 其實(shí)就是訪問(wèn)http://127.0.0.1:80/hello  
        scheme: HTTP #支持的協(xié)議,http或者h(yuǎn)ttps
        port: 80 #端口號(hào)
        path: /hello #URI地址 此地址不存在

[root@k8s-master ~]#
#創(chuàng)建pod
[root@k8s-master ~]# kubectl apply -f pod-liveness-httpget.yaml
pod/pod-liveness-httpget created
#獲取pod
[root@k8s-master ~]# kubectl get pod -n dev
NAME                   READY   STATUS              RESTARTS   AGE
pod-liveness-httpget   0/1     ContainerCreating   0          7s
[root@k8s-master ~]# kubectl get pod -n dev
NAME                   READY   STATUS              RESTARTS   AGE
pod-liveness-httpget   0/1     ContainerCreating   0          13s
#查看pod詳情 發(fā)現(xiàn)最后HTTP執(zhí)行報(bào)404
[root@k8s-master ~]# kubectl describe pod pod-liveness-httpget -n dev
Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Normal   Scheduled  24s   default-scheduler  Successfully assigned dev/pod-liveness-httpget to k8s-node2
  Normal   Pulling    23s   kubelet            Pulling image "nginx"
  Normal   Pulled     8s    kubelet            Successfully pulled image "nginx" in 15.416092349s
  Normal   Created    8s    kubelet            Created container nginx
  Normal   Started    8s    kubelet            Started container nginx
  Warning  Unhealthy  4s    kubelet            Liveness probe failed: HTTP probe failed with statuscode: 404
#頻繁獲取pod,發(fā)現(xiàn)pod重啟次數(shù)不斷增加
[root@k8s-master ~]# kubectl get pod -n dev
NAME                   READY   STATUS    RESTARTS   AGE
pod-liveness-httpget   1/1     Running   0          36s
[root@k8s-master ~]# kubectl get pod -n dev
NAME                   READY   STATUS    RESTARTS     AGE
pod-liveness-httpget   1/1     Running   1 (3s ago)   43s
[root@k8s-master ~]# kubectl get pod -n dev
NAME                   READY   STATUS    RESTARTS      AGE
pod-liveness-httpget   1/1     Running   2 (47s ago)   117s

然后將 httpGet.path 改為/ 再重復(fù)以上步驟就會(huì)發(fā)現(xiàn),容器正常啟動(dòng)。

至此,已經(jīng)使用liveness Probe演示了三種探測(cè)方式,但是查看livenessProbe的子屬性,會(huì)發(fā)現(xiàn)除了這三種方式,還有一些其他的配置,在這里一并解釋下:

[root@k8s-master01 ~]# kubectl explain pod.spec.containers.livenessProbe
FIELDS:
   exec   
   tcpSocket    
   httpGet      
   initialDelaySeconds    # 容器啟動(dòng)后等待多少秒執(zhí)行第一次探測(cè)
   timeoutSeconds         # 探測(cè)超時(shí)時(shí)間。默認(rèn)1秒,最小1秒
   periodSeconds          # 執(zhí)行探測(cè)的頻率。默認(rèn)是10秒,最小1秒
   failureThreshold       # 連續(xù)探測(cè)失敗多少次才被認(rèn)定為失敗。默認(rèn)是3。最小值是1
   successThreshold       # 連續(xù)探測(cè)成功多少次才被認(rèn)定為成功。默認(rèn)是1


文章題目:Kubernetes中容器探測(cè),你都了解了嗎?
文章來(lái)源:http://www.5511xx.com/article/dpcgggg.html