国产毛多水多高潮高清,久热这里只有精品视频6,国内精品久久久久久久久电影网,国产男同志CHINA69,精品999日本久久久影院,人人妻人人澡人人爽人人精品,亚洲中文无码永久免

开发和运维对K8S中的应用都做了什么?-劲爆体育英超直播

开发和运维对K8S中的应用都做了什么?

2026-01-19 05:06:16投稿人:如雪直播APP下載地址(濟寧)有限公司圍觀2644463 評論

開發(fā)和運維對K8S中的應(yīng)用都做了什么 ?

在應(yīng)用的整個生命周期里  ,開發(fā)和運維都和它密不可分 。一個塑造它,一個保養(yǎng)它 。

如果應(yīng)用需要部署到K8S中 ,開發(fā)和運維在其中都做了什么呢?

開發(fā)側(cè)

從開發(fā)側(cè)來說 ,我們的應(yīng)用應(yīng)該具備以下能力 :

  • 具有健康檢測接口

  • 具有優(yōu)雅退出能力

  • 具有metrics接口

  • 能夠接入鏈路追蹤系統(tǒng)

  • 日志輸出標準統(tǒng)一

定義健康檢測接口

健康檢測接口用于檢測應(yīng)用的健康狀態(tài) ,在K8S中,使用Readiness和Liveness分別來探測應(yīng)用是否就緒和是否存活  ,如果未就緒或者未存活,K8S會采取相應(yīng)的措施來確保應(yīng)用可用 。

如果我們應(yīng)用未定義好相應(yīng)的健康檢測接口,K8S就無法判斷應(yīng)用是否正??捎?,整個應(yīng)用對我們來說就是黑匣子,也就談不上應(yīng)用穩(wěn)定性了。

定義一個簡單的健康檢測接口如下 :

package router

import (
"github.com/gin-gonic/gin"
v1 "go-hello-world/app/http/controllers/v1"
)

funcSetupRouter(router *gin.Engine) {
ruc := new(v1.RootController)
router.GET("/", ruc.Root)

huc := new(v1.HealthController)
router.GET("/health", huc.HealthCheck)
}
package v1

import (
"github.com/gin-gonic/gin"
"go-hello-world/app/http/controllers"
"go-hello-world/pkg/response"
"net/http"
)

type HealthController struct {
controllers.BaseController
}

func(h *HealthController)HealthCheck(c *gin.Context) {
response.WriteResponse(c, http.StatusOK, nil, gin.H{
"result": "健康檢測頁面",
"status": "OK",
})
}

如上我們定義了health接口 ,當應(yīng)用啟動后,只需要探測這個接口,如果返回OK,表示應(yīng)用是正常的。

當然,上面的接口是非常簡單的,在實際情況下 ,應(yīng)用本身也許還依賴起來應(yīng)用 ,比如redis,mysql ,mq等 ,如果它們異常 ,應(yīng)用是不是異常的呢 ?那我們的應(yīng)用健康檢測需不需要檢測其他應(yīng)用的健康狀態(tài)呢?

既然我們定義好了健康檢測接口 ,那我們的YAML模板就可以增加健康檢測功能 ,如下:

readinessProbe:
httpGet:
path: /health
port: http
timeoutSeconds: 3
initialDelaySeconds: 20
livenessProbe:
httpGet:
path: /health
port: http
timeoutSeconds: 3
initialDelaySeconds: 30

定義優(yōu)雅下線功能

應(yīng)用發(fā)版是常規(guī)不能再常規(guī)的操作 ,通常情況下都是滾動更新的方式上線  ,也就是先起一個新應(yīng)用,再刪一個老應(yīng)用 。

如果這時候老應(yīng)用有部分的流量 ,突然把老應(yīng)用的進程殺了,這部分流量就無法得到正確的處理 ,部分用戶也會因此受到影響 。

怎么才會不受影響呢?

假如我們在停止應(yīng)用之前先告訴網(wǎng)關(guān)或者注冊中心 ,等對方把我們應(yīng)用摘除后再下線,這樣就不會有任何流量受到影響了。

在K8S中,當我們要刪除Pod的時候 ,Pod會變成Terminating狀態(tài)  ,kubelet看到Pod的狀態(tài)如果為Terminating,就會開始執(zhí)行關(guān)閉Pod的流程 ,給Pod發(fā)SIGTERM信號,如果達到寬限期Pod還未結(jié)束就給Pod發(fā)SIGKILL信號  ,從Endpoints中摘除Pod等