为了账号安全,请及时绑定邮箱和手机立即绑定

如何确保 kubernetes 中的优雅扩展?

如何确保 kubernetes 中的优雅扩展?

Go
翻阅古今 2021-10-25 16:20:37
作为在 kubernetes 中扩展 pod 的一部分,我想确保在关闭之前优雅地为我的 http 连接提供服务。在某种程度上,我已经在 go 中实现了这段代码: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!")}这会寻找 docker SIGTERM 并在现有请求得到服务后正常关闭。当我在具有 10 个实例的 kubernetes 中运行这个容器时,只要我不缩减到单个实例,我就可以毫无意外地扩展和缩减。当我扩展到单个实例时,我看到一组简短的 http 错误,然后一切看起来都很好。我觉得很奇怪,因为在扩展时我会假设代理首先更新,然后容器被关闭,上面的代码将允许提供请求。在我当前的设置中,我正在运行 2 个节点,也许问题是当扩展低于节点数量时,并且 etcd 更新存在某种计时问题?对这里发生的事情的任何见解都会非常有用
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

有一个小窗口,在此期间,正在移除但仍处于活动状态的 Pod 将成为负载平衡集的一部分。正如 Brendan 刚刚说的(他以几秒钟的优势击败了我),准备就绪检查应该完全在你的控制之下为你解决这个问题。


查看完整回答
反对 回复 2021-10-25
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信