成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五分鐘 K8s 實(shí)戰(zhàn)-滾動更新與優(yōu)雅停機(jī)

云計(jì)算 云原生
當(dāng)我們在生產(chǎn)環(huán)境發(fā)布應(yīng)用時(shí),必須要考慮到當(dāng)前系統(tǒng)還有用戶正在使用的情況,所以盡量需要做到不停機(jī)發(fā)版。所以在發(fā)布過程中理論上之前的 v1 版本依然存在,必須得等待 v2 版本啟動成功后再刪除歷史的 v1 版本。

當(dāng)我們在生產(chǎn)環(huán)境發(fā)布應(yīng)用時(shí),必須要考慮到當(dāng)前系統(tǒng)還有用戶正在使用的情況,所以盡量需要做到不停機(jī)發(fā)版。

所以在發(fā)布過程中理論上之前的 v1 版本依然存在,必須得等待 v2 版本啟動成功后再刪除歷史的 v1 版本。

如果 v2 版本啟動失敗 v1 版本不會做任何操作,依然能對外提供服務(wù)。

滾動更新

圖片圖片

這是我們預(yù)期中的發(fā)布流程,要在 kubernetes 使用該功能也非常簡單,只需要在 spec 下配置相關(guān)策略即可:

spec:
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate

這個(gè)配置的含義是:

  • 使用滾動更新,當(dāng)然還有 Recreate 用于刪除舊版本的 Pod,我們基本不會用這個(gè)策略。
  • maxSurge:滾動更新過程中可以最多超過預(yù)期 Pod 數(shù)量的百分比,當(dāng)然也可以填整數(shù)。
  • maxUnavailable:滾動更新過程中最大不可用 Pod 數(shù)量超過預(yù)期的百分比。

這樣一旦我們更新了 Pod 的鏡像時(shí),kubernetes 就會先創(chuàng)建一個(gè)新版本的 Pod 等待他啟動成功后再逐步更新剩下的 Pod。

圖片圖片

優(yōu)雅停機(jī)

滾動升級過程中不可避免的又會碰到一個(gè)優(yōu)雅停機(jī)的問題,畢竟是需要停掉老的 Pod。

這時(shí)我們需要注意兩種情況:

  • 停機(jī)過程中,已經(jīng)進(jìn)入 Pod 的請求需要執(zhí)行完畢才能退出。
  • 停機(jī)之后不能再有請求路由到已經(jīng)停機(jī)的 Pod

第一個(gè)問題如果我們使用的是 Go,可以使用一個(gè)鉤子來監(jiān)聽  kubernetes 發(fā)出的退出信號:

quit := make(chan os.Signal)  
signal.Notify(quit, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGPIPE)  
go func() {  
    <-quit  
    log.Printf("quit signal received, exit \n")  
    os.Exit(0)  
}()

在這里執(zhí)行對應(yīng)的資源釋放。

如果使用的是 spring boot 也有對應(yīng)的配置:

server: 
 shutdown: "graceful"
spring: 
 lifecycle: 
  timeout-per-shutdown-phase: "20s"

當(dāng)應(yīng)用收到退出信號后,spring boot 將不會再接收新的請求,并等待現(xiàn)有的請求處理完畢。

但 kubernetes 也不會無限等待應(yīng)用將 Pod 將任務(wù)執(zhí)行完畢,我們可以在 Pod 中配置

terminationGracePeriodSeconds: 30

來定義需要等待多長時(shí)間,這里是超過 30s 之后就會強(qiáng)行 kill Pod。

具體值大家可以根據(jù)實(shí)際情況配置

spec:
  containers:
  - name: example-container
    image: example-image
    lifecycle:
      preStop:
        exec:
          command: ["sh", "-c", "sleep 10"]

同時(shí)我們也可以配置 preStop 做一個(gè) sleep 來確保 kubernetes 將準(zhǔn)備刪除的 Pod 在 Iptable 中已經(jīng)更新了之后再刪除 Pod。

這樣可以避免第二種情況:已經(jīng)刪除的 Pod 依然還有請求路由過來。具體可以參考 spring boot 文檔:

https://docs.spring.io/spring-boot/docs/2.4.4/reference/htmlsingle/#cloud-deployment-kubernetes-container-lifecycle

回滾

回滾其實(shí)也可以看作是升級的一種,只是升級到了歷史版本,在 kubernetes 中回滾應(yīng)用非常簡單。

# 回滾到上一個(gè)版本
 k rollout undo deployment/abc
# 回滾到指定版本
k rollout undo daemonset/abc --to-revisinotallow=3

同時(shí) kubernetes 也能保證是滾動回滾的。

優(yōu)雅重啟

在之前的 如何優(yōu)雅重啟 kubernetes 的 Pod 那篇文章中寫過,如果想要優(yōu)雅重啟 Pod 也可以使用 rollout 命令,它也也可以保證是滾動重啟。

k rollout restart deployment/nginx

使用 kubernetes 的滾動更新確實(shí)要比我們以往的傳統(tǒng)運(yùn)維簡單許多,就幾個(gè)命令的事情之前得寫一些復(fù)雜的運(yùn)維腳本才能實(shí)現(xiàn)。

責(zé)任編輯:武曉燕 來源: crossoverJie
相關(guān)推薦

2023-11-15 13:44:00

k8s-域名日志

2023-11-27 13:54:00

kubernetes高可用

2023-09-15 08:00:20

Ingress網(wǎng)關(guān)Istio

2020-02-19 19:26:27

K8S開源平臺容器技術(shù)

2023-09-27 08:09:22

2023-09-21 11:28:28

Kubernetes云原生

2023-09-27 22:33:40

KubernetesK8S

2023-09-24 22:47:42

Kubernetes親和性

2024-07-30 14:09:19

裝飾器Python代碼

2022-10-10 12:54:00

Flink運(yùn)維

2021-03-12 08:20:24

架構(gòu)網(wǎng)絡(luò)模型

2023-12-25 08:05:35

2023-09-17 17:51:43

Android 14

2024-01-29 13:03:02

2024-12-11 07:00:00

面向?qū)ο?/a>代碼

2025-03-13 06:22:59

2009-11-16 10:53:30

Oracle Hint

2020-06-16 08:47:53

磁盤

2023-09-06 08:12:04

k8s云原生

2023-03-06 07:19:50

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美中文字幕一区二区三区亚洲 | 亚洲精品二区 | 91视频免费 | 日韩在线 | 人人干在线视频 | 中文在线日韩 | 在线观看免费高清av | 五月天婷婷久久 | 国产精品一区二区在线播放 | 国产小视频在线 | 午夜视频免费网站 | 欧美色综合 | 91香蕉视频在线观看 | 国产精品一区一区 | 国产乱肥老妇国产一区二 | 日韩欧美在线不卡 | 罗宾被扒开腿做同人网站 | 亚洲精品乱码久久久久久黑人 | 成人免费视频 | 国产精品视频一二三区 | a在线视频 | 日本成年免费网站 | 午夜在线 | 亚洲综合99 | 一区二区三区中文字幕 | 亚洲97 | 精品欧美一区二区精品久久 | 中文字幕第7页 | 日韩成人在线播放 | 成人在线精品 | 久久精品一区二区三区四区 | 一区二区在线不卡 | 色婷婷国产精品综合在线观看 | 国产91在线 | 欧美 | 久久久成人免费视频 | 日韩一区二区在线视频 | 亚洲一区二区三区免费在线 | 国产精品视频久久 | 日本久久久一区二区三区 | 精品国产区 | 91一区二区在线观看 |