中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何使用k8s容器鉤子確保服務安全退出

發布時間:2021-09-08 15:24:05 來源:億速云 閱讀:166 作者:小新 欄目:大數據

這篇文章主要為大家展示了“如何使用k8s容器鉤子確保服務安全退出”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何使用k8s容器鉤子確保服務安全退出”這篇文章吧。

Kubernetes為容器提供了生命周期鉤子。
鉤子能使容器感知其生命周期內的事件,并且當相應的生命周期鉤子被調用時運行指定的代碼。

@[TOC]

容器生命周期的鉤子

Kubernetes為容器提供了生命周期鉤子。
鉤子能使容器感知其生命周期內的事件,并且當相應的生命周期鉤子被調用時運行指定的代碼。

容器鉤子分為兩類觸發點:容器創建后PostStart和容器終止前PreStop。

PostStart

這個鉤子在容器創建后立即執行。
但是,并不能保證鉤子將在容器ENTRYPOINT之前運行。
沒有參數傳遞給處理程序。

容器ENTRYPOINT和鉤子執行是異步操作。
如果鉤子花費太長時間以至于容器不能運行或者掛起, 容器將不能達到running狀態

PreStop

這個鉤子在容器終止之前立即被調用。
它是阻塞的,意味著它是同步的, 所以它必須在刪除容器的調用發出之前完成

如果鉤子在執行期間掛起, Pod階段將停留在running狀態并且永不會達到failed狀態。

如果PostStart或者PreStop鉤子失敗, 容器將會被kill。
用戶應該使他們的鉤子處理程序盡可能的輕量。

鉤子處理程序的實現

容器可以通過實現和注冊該鉤子的處理程序來訪問鉤子。
可以為容器實現兩種類型的鉤子處理程序:

  • Exec - 在容器的cgroups和命名空間內執行一個特定的命令,比如pre-stop.sh。
    該命令消耗的資源被計入容器。

  • HTTP - 對容器上的特定的端點執行HTTP請求。

在Pod的事件中沒有鉤子處理程序的日志。 如果一個處理程序因為某些原因運行失敗,它廣播一個事件。
對于PostStart, 這是FailedPostStartHook事件, 對于PreStop, 這是FailedPreStopHook事件。
你可以通過運行kubectl describe pod <pod_name>來查看這些事件。

定義預啟動和預結束事件操作

下面將會創建含有一個容器的Pod,我們將會給這個容器設置預啟動和預結束操作。
https://raw.githubusercontent.com/kubernetes/website/master/docs/tasks/configure-pod-container/lifecycle-events.yaml

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/usr/sbin/nginx","-s","quit"]

使用 prestop hook 保證服務安全退出

在實際生產環境中使用spring框架,由于服務更新過程中,服務容器被直接終止,部分請求仍然被分發到終止的容器,導致出現500錯誤,這部分錯誤的請求數據占比較少,也可以忽略。
考慮添加優雅的終止方式,將錯誤請求降到最低,直至沒有錯誤出現。

這里介紹 spring cloud 的服務發現組件:
Eureka 是一個基于 REST 的服務,作為服務注冊中心,用于定位服務來進行中間層服務器負載均衡和故障轉移。
各服務啟動時,會向Eureka Server注冊自己的信息(IP,端口,服務信息等),Eureka Server會存儲這些信息.
微服務啟動后,會周期性(默認30秒)的向Eureka Server發送心跳以續約自己的”租期”,并可以從eureka中獲取其他微服務的地址信息,執行相關的邏輯。

考慮現在eureka server 修改注冊實例的狀態,暫停服務( InstanceStatus.OUT_OF_SERVICE ),保留一段時間后,再刪除服務。

禁用某個服務:
curl -X PUT “http://admin:admin@192.168.101.100:8761/eureka/apps/{appName}/{instanceId}/status?value=OUT_OF_SERVICE"

說明:admin:admin是eureka的登錄名和密碼,如果沒有,直接去掉前面這段;
instanceId是上面打開的鏈接顯示的服務列表中的標簽內容,如:myapp:192.168.1.100:8080

在k8s 中的具體操作:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: NAME-service-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: NAME-service
  template:
    metadata:
      labels:
        app: NAME-service
    spec:
      containers:
      - name: NAME-service
        lifecycle:
          preStop:
            exec:
              command:
                - "/bin/sh"
                - "-c"
                - ">

刪除了無用的信息,重點關注 lifecycle
首先定義了服務名和端口的環境變量,把這部分單獨作為變量,便于不同的服務進行修改。
使用 curl PUT 到eureka 配置狀態為 OUT_OF_SERVICE。
配置一個sleep時間,作為服務停止緩沖時間。

以上是“如何使用k8s容器鉤子確保服務安全退出”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

k8s
AI

溧水县| 四平市| 泰州市| 上栗县| 丹巴县| 松潘县| 洪湖市| 南漳县| 松江区| 阿图什市| 措勤县| 黄陵县| 大英县| 响水县| 镇巴县| 七台河市| 永宁县| 新巴尔虎左旗| 页游| 金寨县| 宁津县| 高州市| 江津市| 河北省| 密云县| 石家庄市| 阿巴嘎旗| 盐城市| 新疆| 安福县| 如东县| 曲沃县| 翼城县| 九寨沟县| 汝城县| 太康县| 图片| 鲁甸县| 涡阳县| 西乡县| 延吉市|