溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

kubernetes如何進行readinessProbe

發(fā)布時間:2021-10-19 17:23:49 來源:億速云 閱讀:112 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹kubernetes如何進行readinessProbe,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

docker容器啟動成功,并不代表容器中的服務(wù)就能處理外部的請求。比方說java web項目啟動需要一段時間。
Kubernetes提供了readiness probe來檢測pod中的容器是否可以接受外部流量。
可以在java項目中提供一個接口,kubernetes發(fā)請求給此接口,當此接口返回數(shù)據(jù)時,則表明服務(wù)準備就緒,可以接受外部請求了。

先看一個簡單例子,準備一個spring boot工程,提供一個外部接口。以下服務(wù)用的端口號是10012

    @GetMapping("/test02/version")
    public String version(){
        return "app02/version/v1";
    }
在node節(jié)點上,編寫Docker配置文件,并打成鏡像

Dockerfile

FROM openjdk:8
ADD *.jar /app/app.jar
ADD entrypoint.sh /app/
# PORT="10012" 是項目端口號
ENV PORT="10012" TIME="Asia/Shanghai" JAVA_OPS="-Xmx256m -Xms256m -XX:+UseConcMarkSweepGC"
RUN set -e \
    && chmod +x /app/entrypoint.sh \
    && ln -snf /usr/share/zoneinfo/$TIME /etc/localtime \
    && echo $TIME > /etc/timezone
ENTRYPOINT  ["/app/entrypoint.sh"]
EXPOSE $PORT
STOPSIGNAL SIGTERM
entrypoint.sh

#!/bin/sh
exec java ${JAVA_OPS} -jar /app/app.jar
打成鏡像codingsoldier/app02:v1

docker build -t codingsoldier/app02:v1 .

在master節(jié)點上編寫部署文件

k8s-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: service-app02
spec:
  selector:
    app: app02
  ports:
  - name: http
    port: 10012
    targetPort: 10012
k8s-app02.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-app02
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app02
  template:
    metadata:
      labels:
        app: app02
    spec:
      containers:
      - name: app02
        image: codingsoldier/app02:v1
        ports:
        - name: http
          containerPort: 10012
部署服務(wù)

kubectl apply -f k8s-service

kubectl apply -f k8s-app02

獲取k8s-service的ip

kubectl get svc 

重新開一個終端,循環(huán)調(diào)用接口,不要關(guān)閉這個終端,要一直開著。

while true; \
curl http://10.101.75.203:10012/test02/version; \
echo " "; \
do sleep 1; \
done;

現(xiàn)在就來升級版本吧

1、把/test02/version接口返回值改成v2

    @GetMapping("/test02/version")
    public String version(){
        return "app02/version/v2";
    }
2、打成jar包,上傳到所有node節(jié)點

3、生成docker鏡像

docker build -t codingsoldier/app02:v2 .

4、修改k8s-app02.yaml鏡像為v2

image: codingsoldier/app02:v2

5、重新開一個終端,執(zhí)行  kubectl get pod -w   動態(tài)查看pod狀態(tài)

6、重新部署下k8s-app02.yaml

kubectl apply -f k8s-app02.yaml 

在循環(huán)調(diào)用的監(jiān)控中可以看到,服務(wù)有短暫的時間無法提供服務(wù)。

原因是:docker容器啟動成功了,k8s就認為此容器可以提供服務(wù)了。但事實上docker容器啟動成功的時候,java服務(wù)還沒啟動完成,暫時無法給外部提供服務(wù)。

解決辦法,使用readiness probe來檢測pod中的容器是否可以接受外部流量。

1、java工程新增一個服務(wù)就緒接口

    //服務(wù)就緒接口,提供給k8s檢測
    @GetMapping("/readiness")
    public String readiness(){
        return "yes";
    }
2、k8s-app02.yaml加上就緒探針

readinessProbe:
  httpGet:
    port: http
    path: /readiness
  initialDelaySeconds: 20
  periodSeconds: 10


readinessProbe詳細的配置:
    initialDelaySeconds:容器啟動后第一次執(zhí)行探測是需要等待多少秒。
    periodSeconds:執(zhí)行探測的頻率。默認是10秒,最小1秒。
    timeoutSeconds:探測超時時間。默認1秒,最小1秒。
    successThreshold:探測失敗后,最少連續(xù)探測成功多少次才被認定為成功。默認是1。對于liveness必須是1。最小值是1。
    failureThreshold:探測成功后,最少連續(xù)探測失敗多少次才被認定為失敗。默認是3。最小值是1。

httpGet配置項:
    host:連接的主機名,默認連接到pod的IP。你可能想在http header中設(shè)置”Host”而不是使用IP。
    scheme:連接使用的schema,默認HTTP。
    path: 訪問的HTTP server的path。
    httpHeaders:自定義請求的header。HTTP運行重復(fù)的header。
    port:訪問的容器的端口名字或者端口號。端口號必須介于1和65525之間。    

3、改下 /test02/version ,的返回值 app02/version/v3

4、修改 k8s-app02.yaml中鏡像的版本image: codingsoldier/app02:v3

5、打成jar,上傳

6、打成鏡像

docker build -t codingsoldier/app02:v3 .

7、重新部署服務(wù)

kubectl apply -f k8s-app02.yaml 

查看循環(huán)調(diào)用接口的終端,服務(wù)一直可用

查看運行了kubectl get pod -w 的終端

1、新pod處于Running狀態(tài),但READY是0/1。pod已經(jīng)運行,但未就緒,此時不接收外部請求

2、25秒后,新pod處于Running狀態(tài),READY是1/1。pod可以接收外部請求了

3、新pod能夠接收外部請求后,一個舊pod開始終止

4、由于pod服務(wù)數(shù)設(shè)置為2,所以此時另一個新pod開始創(chuàng)建,過程跟上面的一樣,新pod能就收請求后,舊pod終止。

關(guān)于kubernetes如何進行readinessProbe就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI