作為在 kubernetes 中擴(kuò)展 pod 的一部分,我想確保在關(guān)閉之前優(yōu)雅地為我的 http 連接提供服務(wù)。在某種程度上,我已經(jīng)在 go 中實(shí)現(xiàn)了這段代碼:package mainimport ( "fmt" "io" "net/http" "os" "os/signal" "syscall" "github.com/braintree/manners")func main() { shutdown := make(chan int) //create a notification channel to shutdown sigChan := make(chan os.Signal, 1) //start the http server http.HandleFunc("/", hello) server := manners.NewWithServer(&http.Server{Addr: ":80", Handler: nil}) go func() { server.ListenAndServe() shutdown <- 1 }() //register for interupt (Ctrl+C) and SIGTERM (docker) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) go func() { <-sigChan fmt.Println("Shutting down...") server.Close() }() <-shutdown}func hello(w http.ResponseWriter, r *http.Request) { // time.Sleep(3000 * time.Millisecond) io.WriteString(w, "Hello world!")}這會(huì)尋找 docker SIGTERM 并在現(xiàn)有請(qǐng)求得到服務(wù)后正常關(guān)閉。當(dāng)我在具有 10 個(gè)實(shí)例的 kubernetes 中運(yùn)行這個(gè)容器時(shí),只要我不縮減到單個(gè)實(shí)例,我就可以毫無(wú)意外地?cái)U(kuò)展和縮減。當(dāng)我擴(kuò)展到單個(gè)實(shí)例時(shí),我看到一組簡(jiǎn)短的 http 錯(cuò)誤,然后一切看起來(lái)都很好。我覺(jué)得很奇怪,因?yàn)樵跀U(kuò)展時(shí)我會(huì)假設(shè)代理首先更新,然后容器被關(guān)閉,上面的代碼將允許提供請(qǐng)求。在我當(dāng)前的設(shè)置中,我正在運(yùn)行 2 個(gè)節(jié)點(diǎn),也許問(wèn)題是當(dāng)擴(kuò)展低于節(jié)點(diǎn)數(shù)量時(shí),并且 etcd 更新存在某種計(jì)時(shí)問(wèn)題?對(duì)這里發(fā)生的事情的任何見(jiàn)解都會(huì)非常有用
2 回答

九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
有一個(gè)小窗口,在此期間,正在移除但仍處于活動(dòng)狀態(tài)的 Pod 將成為負(fù)載平衡集的一部分。正如 Brendan 剛剛說(shuō)的(他以幾秒鐘的優(yōu)勢(shì)擊敗了我),準(zhǔn)備就緒檢查應(yīng)該完全在你的控制之下為你解決這個(gè)問(wèn)題。
- 2 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)
0/150
提交
取消