2 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
Kubernetes 發(fā)出一個(gè)SIGTERM信號(hào)。所以優(yōu)雅的關(guān)機(jī)可能看起來像這樣:
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
)
func main() {
var srv http.Server
idleConnsClosed := make(chan struct{})
go func() {
sigint := make(chan os.Signal, 1)
// interrupt signal sent from terminal
signal.Notify(sigint, os.Interrupt)
// sigterm signal sent from kubernetes
signal.Notify(sigint, syscall.SIGTERM)
<-sigint
// We received an interrupt signal, shut down.
if err := srv.Shutdown(context.Background()); err != nil {
// Error from closing listeners, or context timeout:
log.Printf("HTTP server Shutdown: %v", err)
}
close(idleConnsClosed)
}()
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
// Error starting or closing listener:
log.Printf("HTTP server ListenAndServe: %v", err)
}
<-idleConnsClosed
}
您還應(yīng)該將 Liveness 和 Readiness 探測(cè)器添加到您的 Pod 中:
livenessProbe:
httpGet:
path: /health
port: 80
readinessProbe:
httpGet:
path: /health
port: 80

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng) Kubernetes 發(fā)送SIGTERM
信號(hào)流量仍然可以路由到 pod 時(shí),因?yàn)閺亩它c(diǎn)集和SIGTERM
信號(hào)中刪除 pod 是異步的——如果 pod 在SIGTERM
端點(diǎn)之后可能沒有時(shí)間更新。?SIGTERM
只是禮貌地要求開始收尾,但不要立即停止接受新的請(qǐng)求。
您可以在<-sigint
部署之后或添加到部署中后將睡眠添加到您的代碼中
lifecycle: ??????preStop:? ?????????????exec:????? ??????????????????command:?["sh",?"-c",?"sleep?10"]
- 2 回答
- 0 關(guān)注
- 175 瀏覽
添加回答
舉報(bào)