使用k8s容器鉤子觸發事件

2022-07-03 22:06:16 字數 1866 閱讀 9441

原文: 

kubernetes為容器提供了生命週期鉤子。

鉤子能使容器感知其生命週期內的事件,並且當相應的生命週期鉤子被呼叫時執行指定的**。

容器鉤子分為兩類觸發點:容器建立後poststart和容器終止前prestop。

這個鉤子在容器建立後立即執行。

但是,並不能保證鉤子將在容器entrypoint之前執行。

沒有引數傳遞給處理程式。

容器entrypoint和鉤子執行是非同步操作。

如果鉤子花費太長時間以至於容器不能執行或者掛起, 容器將不能達到running狀態

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

如果poststart或者prestop鉤子失敗, 容器將會被kill。

使用者應該使他們的鉤子處理程式盡可能的輕量。

容器可以通過實現和註冊該鉤子的處理程式來訪問鉤子。

可以為容器實現兩種型別的鉤子處理程式:

在pod的事件中沒有鉤子處理程式的日誌。 如果乙個處理程式因為某些原因執行失敗,它廣播乙個事件。

對於poststart, 這是failedpoststarthook事件, 對於prestop, 這是failedprestophook事件。

你可以通過執行kubectl describe pod 來檢視這些事件。

下面將會建立含有乙個容器的pod,我們將會給這個容器設定預啟動和預結束操作。

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"]

在實際生產環境中使用spring框架,由於服務更新過程中,服務容器被直接終止,部分請求仍然被分發到終止的容器,導致出現500錯誤,這部分錯誤的請求資料佔比較少,也可以忽略。

考慮新增優雅的終止方式,將錯誤請求降到最低,直至沒有錯誤出現。

這裡介紹 spring cloud 的服務發現元件:

eureka 是乙個基於 rest 的服務,作為服務註冊中心,用於定位服務來進行中間層伺服器的負載均衡和故障轉移。

各服務啟動時,會向eureka server註冊自己的資訊(ip,埠,服務資訊等),eureka server會儲存這些資訊.

微服務啟動後,會週期性(預設30秒)的向eureka server傳送心跳以續約自己的」租期」,並可以從eureka中獲取其他微服務的位址資訊,執行相關的邏輯。

image

考慮現在eureka server 修改註冊例項的狀態,暫停服務( instancestatus.out_of_service ),保留一段時間後,再刪除服務。

在k8s 中的具體操作:

刪除了無用的資訊,重點關注 lifecycle

首先定義了服務名和埠的環境變數,把這部分單獨作為變數,便於不同的服務進行修改。

使用 curl put 到eureka 配置狀態為 out_of_service。

配置乙個sleep時間,作為服務停止緩衝時間。

容器生命週期的鉤子

pods 的終止

給容器生命週期設定操作事件

eureka服務禁用

k8s 容器鉤子

有兩個鉤子暴露在容器中 poststart 這個鉤子在建立容器之後立即執行。但是,不能保證鉤子會在容器入口點之前執行。沒有引數傳遞給處理程式。kind deployment metadata name testlifecycle labels spec replicas 1 selector mat...

容器編排工具k8s

如何實踐 1 搜尋kubunetes online kubernetes playground katacoda pod k8s最小排程單位 docker pause 二個容器 deployments 維持pod一定數量 service 解決deploytemnets內部之間的乙個負載均衡 dns解...

k8s的 容器映象

my registry.example.com 5000 example web example v1.0.1 2.綠色部分 registry 埠 3.紫色部分 repository 名字 4.紅色部分 image 名字 5.棕色部分 image 標籤 更新映象 如果您期望每次啟動 pod 時,都強...