日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

应用优雅上下线

發(fā)布時間:2024/8/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 应用优雅上下线 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 概述

kubernetes滾動升級的過程:

  • ?集群Deployment 或者 Statefulset 發(fā)生變化,觸發(fā)部署滾動升級;
  • ?根據(jù) Deolyement 等配置,K8S集群首先啟動新的POD來替代老 POD;
  • ?Deployemnt 根據(jù)配置調(diào)度 POD,拉取鏡像,此時 POD 進入 Pending 狀態(tài);
  • ?POD 綁定到Node上,啟動容器,在就緒檢查readinessProbe 探針通過后,新的POD進入Ready狀態(tài);
  • ?K8S集群創(chuàng)建Endpoint,將新的POD納入Service 的負載均衡;
  • ?K8S集群移除與老POD相關(guān)的Endpoint,并且將老POD狀態(tài)設(shè)置為Terminating,此時將不會有新的請求到達老POD,同時調(diào)用PreStop Hook執(zhí)行配置的腳本;
  • ?K8S集群會給老POD發(fā)送SIGTERM信號,并且等待 terminationGracePeriodSeconds 這么長的時間。(默認為30秒,可以根據(jù)優(yōu)雅下線服務(wù)需要消耗時間調(diào)整)
  • ?超過terminationGracePeriodSeconds等待時間后, K8S集群會強制結(jié)束老POD,在這個時間段內(nèi)要將老 POD 資源釋放掉,否則可能殘留無用資源被占用。
  • 從以上過程可以看到,如果在terminationGracePeriodSeconds 沒有及時釋放服務(wù)注冊等資源信息,Service 負載均衡的健康檢查又沒有檢查到老 POD服務(wù)已經(jīng)掛掉,導致請求分發(fā)到這些 POD 上,從而觸發(fā)一系列的請求錯誤,因而需要配置優(yōu)雅下線腳本,在terminationGracePeriodSeconds 時間段內(nèi)執(zhí)行完畢。

    ?

    2.優(yōu)雅啟動

    kubernetes 集群提供了探針,類似健康檢查,只有該請求通過,新的 POD 才能進入 Ready 狀態(tài),kubernetes集群才會將新的 POD 納入 Service 的負載均衡。

    因而如果該應用(POD)僅僅提供 service 配置的服務(wù),不需要配置探針,就可以優(yōu)雅啟動,但是實際 POD 往往還有 HSF,LWP,Dubbo等注冊于配置服務(wù)其實現(xiàn)負載均衡的服務(wù),所以需要確保這些服務(wù)都已經(jīng)啟動,所以需要配置相應的探針。

    同時,任何一個服務(wù)可能在運行中因為某種原因不穩(wěn)定,導致服務(wù)中斷,這個時候還需要配置livenessProbe探針,確保服務(wù)出故障時及時止損。

    我們的應用主要有HSF,LWP 和 Https 服務(wù),對于三種服務(wù)都有的應用,要求應用提供健康檢查的接口,能即時檢查三種服務(wù)都正常與否,然后做以下配置:

    livenessProbe:failureThreshold: 3initialDelaySeconds: 30periodSeconds: 30successThreshold: 1tcpSocket:port: 5084timeoutSeconds: 1 readinessProbe:failureThreshold: 3initialDelaySeconds: 30periodSeconds: 30successThreshold: 1tcpSocket:port: 5084timeoutSeconds: 1 restartPolicy: Always

    readinessProbe配置表示只有5804端口請求正常返回,pod 才會進入 ready 狀態(tài),確保各種服務(wù) ok 。

    livenessProbe 表示每10s 探一下5804端口,如果返回失敗,達到閾值后,pod 會重啟,對于服務(wù)出問題的 POD 及時止損。

    注意:readinessProbe探針的 探測頻率和延時時間,不健康閾值等數(shù)據(jù)要合理,部分應用啟動時間本身較長,如果設(shè)置的時間過短,會導致 POD 反復無效重啟。

    3. 優(yōu)雅下線:

    我們的應用云上主要有 HSF,LWP 和 Https 服務(wù),在 pod prestop里設(shè)置執(zhí)行摘除服務(wù)注冊信息腳本,來完成優(yōu)雅下線。

    https 服務(wù)基于 kubernetes 服務(wù) Service 來實現(xiàn)服務(wù)暴露,在老 POD 狀態(tài)設(shè)置為Terminating后,就不會有請求達到,因而已經(jīng)優(yōu)雅下線;

    lwp 服務(wù),通過注冊 vipserver 來提供負載均衡,需要在下線前先摘除該服務(wù)注冊,防止 老POD 下線后還有請求達到老 POD;

    HSF 服務(wù)通過注冊 configserver 來提供負載均衡,需要在下線前先摘除該服務(wù)注冊,防止 老POD 下線后還有請求達到老 POD。

    yaml:

    lifecycle:preStop:exec:command:- sudo- '-u'- admin- /home/admin/shutdown.sh- {app_name}

    preStop在 pod 終止之前,執(zhí)行腳本 appctl.sh {app_name} stop。

    終止 HSF 與 LWP 腳本:

    #!/bin/bashAPP_NAME=$1## HEALTH_URL="http://localhost:7002/health"offline() {echo "INFO: ${APP_NAME} try to offline..."offline_lwpoffline_hsfecho "INFO: ${APP_NAME} offline success"return $? }offline_lwp() {echo "offline lwp"times=3for e in $(seq 3); docurl -s --connect-timeout 3 --max-time 5 ${offline_lwp_url}${APP_NAME} -o /dev/nullsleep 1done }offline_hsf() {check_hsf=`(/usr/sbin/ss -ln4 sport = :12200; /usr/sbin/ss -ln6 sport = :12200) | grep -c ":12200"`check_pandora=`(/usr/sbin/ss -ln4 sport = :12201; /usr/sbin/ss -ln6 sport = :12201) | grep -c ":12201"`echo "try to offline hsf..."if [ $check_hsf -ne 0 -a $check_pandora -ne 0 ]; thenecho "start to offline hsf...."ret_str=`curl --max-time ${HSF_ONLINE_TIMEOUT} -s "http://localhost:12201/hsf/offline?k=hsf" 2>&1`if echo "$ret_str" | grep "server is unregistered on cs(dr)" &>/dev/null; thenecho "hsf offline success."return 0elseecho "hsf offline failed."exit 9 # hsf offline failedfielseif [ $check_hsf -eq 0 ]; thenecho "WARN: port 12200 cannot be detected."fiif [ $check_pandora -eq 0 ]; thenecho "WARN: port 12201 cannot be detected."fiecho "WARN: hsf offline failed."# DO NOT exit herefi }echo "[stop 1] before call offline hsf,lwp ..."


    原文鏈接
    本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

    總結(jié)

    以上是生活随笔為你收集整理的应用优雅上下线的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。