成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Kubernetes怎么判斷什么時(shí)候重啟容器

本篇內(nèi)容介紹了“Kubernetes怎么判斷什么時(shí)候重啟容器”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)是一家專業(yè)提供肇州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為肇州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

在設(shè)計(jì)關(guān)鍵任務(wù)、高可用應(yīng)用程序時(shí),彈性是要考慮的最重要因素之一。

當(dāng)應(yīng)用程序可以快速?gòu)墓收现谢謴?fù)時(shí),它便具有彈性。

云原生應(yīng)用程序通常設(shè)計(jì)為使用微服務(wù)架構(gòu),其中每個(gè)組件都位于容器中。為了確保Kubernetes托管的應(yīng)用程序高可用,在設(shè)計(jì)集群時(shí)需要遵循一些特定的模式,其中有“健康探測(cè)模式”。應(yīng)用高可觀察性原則(HOP)可確保您的應(yīng)用程序收到的每個(gè)請(qǐng)求都能及時(shí)找到響應(yīng)。

The High Observability Principle (HOP)

高可觀察性原則是基于容器的應(yīng)用程序設(shè)計(jì)原則之一。微服務(wù)體系要求每個(gè)服務(wù)不關(guān)心(也不應(yīng)該關(guān)心)被調(diào)用方如何處理請(qǐng)求。
HOP原則要求每個(gè)服務(wù)必須公開幾個(gè)API端點(diǎn),其意義在于揭示服務(wù)健康狀態(tài),Kubernetes調(diào)用這些端點(diǎn),決定下一步的路由和負(fù)載平衡。

“  

設(shè)計(jì)良好的云原生程序應(yīng)將日志事件記錄到STDERR和STDOUT,由logstash、Fluent等日志攝取服務(wù)將這些日志運(yùn)送到集中式監(jiān)控(例如Prometheus)和日志聚合系統(tǒng)(例如ELK)。下圖說(shuō)明了云原生應(yīng)用程序如何遵守健康狀況探測(cè)模式和高可觀察性原則。Kubernetes怎么判斷什么時(shí)候重啟容器

 

How to Apply Health Probe Pattern in Kubernetes?

我之前寫過(guò)ASP.NetCore + Docker健康檢查的原創(chuàng):[web程序暴露http健康檢查端點(diǎn),平臺(tái)輪詢探測(cè)],Kubernetes針對(duì)不同場(chǎng)合細(xì)化了探針,更為強(qiáng)大的是給出對(duì)應(yīng)決策。

Kubernetes怎么判斷什么時(shí)候重啟容器 

Liveness Probes

使用[存活探針]判斷什么時(shí)候重啟容器。
使用存活探針檢查應(yīng)用本身是否無(wú)響應(yīng)、死鎖, 有時(shí)候重啟容器常常能解決此類問(wèn)題。

我們以kubernetes官方demo為例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5   # 指示kubectl等待5s才執(zhí)行首次探測(cè)
      periodSeconds: 5         # 間隔5秒輪詢
 
  • 在第5秒kubectl開始首次liveness探測(cè)
  • 在30秒進(jìn)行的每次探測(cè)均成功
  • 30s之后容器內(nèi)文件被刪除,之后間隔5s的探測(cè)會(huì)失敗,根據(jù)liveness默認(rèn)配置連續(xù)3次失敗就會(huì)放棄探測(cè),放棄探測(cè)意味著重啟容器,故容器會(huì)在第45s重啟
  • 重啟之后又開始以上流程, 故可以看到此探針以重啟的決策嘗試修復(fù)應(yīng)用問(wèn)題。

這個(gè)探針會(huì)體現(xiàn)到kubectl get podRESTARTSKubernetes怎么判斷什么時(shí)候重啟容器

Readiness Probes

使用[就緒探針]判斷容器是否就緒,是否可以接受流量。
Pod內(nèi)所有容器ready,則該P(yáng)od被認(rèn)為ready,當(dāng)pod沒(méi)有ready,將會(huì)從服務(wù)負(fù)載均衡中移除。

“  

有些時(shí)候,應(yīng)用程序臨時(shí)不可用(加載大量數(shù)據(jù)或者依賴外部服務(wù)),這個(gè)時(shí)候,重啟這個(gè)Pod無(wú)濟(jì)于事,但你也不希望請(qǐng)求被發(fā)送到該P(yáng)od

下面的應(yīng)用強(qiáng)依賴MongoDB,我們針對(duì)這些依賴項(xiàng)設(shè)置了readiness探針

services.AddHealthChecks()
    .AddCheck<MongoHealthCheck>(nameof(MongoHealthCheck), tags: new[] { "readyz" });
// ----------------------
app.UseHealthChecks("/readyz", new HealthCheckOptions
{
        Predicate = (check) => check.Tags.Contains("readyz")
});                
 

以下代碼探測(cè)Mongodb的連通性

  sealed class MongoHealthCheck : IHealthCheck
    {
        private readonly IMongoDatabase _defaultMongoDatabase;

        public MongoHealthCheck(IDefaultMongoDatabaseProvider defaultMongoDatabaseProvider)
        {
            _defaultMongoDatabase = defaultMongoDatabaseProvider.GetDatabase();
        }

        public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
        {
            var doc = await _defaultMongoDatabase.RunCommandAsync(
                new BsonDocumentCommand<BsonDocument>(
                    new BsonDocument() {
                        { "ping", "1" }
                    }), 
                cancellationToken: cancellationToken);

            var ok = doc["ok"].ToBoolean();

            if (ok)
            {
                return HealthCheckResult.Healthy("OK");
            }

            return HealthCheckResult.Unhealthy("NotOK");
        }
    }
 

對(duì)于依賴項(xiàng)的探測(cè),探測(cè)周期和超時(shí)時(shí)間可以設(shè)置的稍長(zhǎng)一點(diǎn)

readinessProbe:
  httpGet:
    path: /readyz
    port: 80
  initialDelaySeconds: 5
  periodSeconds: 60     # 60s探測(cè)一次
  timeoutSeconds: 30    # 每次探測(cè)30s超時(shí),與應(yīng)用建立與依賴項(xiàng)的連接超時(shí)時(shí)間一致
  failureThreshold: 3   # 連續(xù)3次探測(cè)失敗,該P(yáng)od會(huì)被標(biāo)記為`Unready`
     
Startup Probes

使用[啟動(dòng)探針]判斷容器應(yīng)用是否已經(jīng)啟動(dòng)。如果配置了這個(gè)探針,則該探針成功之前將會(huì)禁用存活和就緒探針。

配置探針
  • initialDelaySeconds:容器啟動(dòng),探針延后工作,默認(rèn)是0s
  • periodSeconds 探針探測(cè)周期,默認(rèn)10s
  • timeoutSeconds:探針工作的超時(shí)時(shí)間,默認(rèn)1s
  • successThreshold:連續(xù)幾次探測(cè)成功,該探針被認(rèn)為是成功的,默認(rèn)1次
  • failureThreshold:連續(xù)幾次探測(cè)失敗,該探針被認(rèn)為最終失敗,對(duì)于livenes探針最終失敗意味著重啟,對(duì)于readiness探針意味著該pod Unready, 默認(rèn)3次。

強(qiáng)烈建議根據(jù)應(yīng)用結(jié)構(gòu)合理設(shè)置探針參數(shù),避免不切實(shí)際的認(rèn)定失敗導(dǎo)致的頻繁重啟或 Unready。

“Kubernetes怎么判斷什么時(shí)候重啟容器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

標(biāo)題名稱:Kubernetes怎么判斷什么時(shí)候重啟容器
文章路徑:http://jinyejixie.com/article42/iicgec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、響應(yīng)式網(wǎng)站、動(dòng)態(tài)網(wǎng)站、外貿(mào)建站、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
台州市| 旌德县| 平舆县| 博白县| 宁陕县| 黎平县| 广昌县| 榆林市| 宾川县| 邹城市| 客服| 皋兰县| 邵东县| 青浦区| 黔江区| 宁都县| 崇州市| 聂拉木县| 曲水县| 满洲里市| 广南县| 岳普湖县| 天台县| 铜鼓县| 自贡市| 隆安县| 长顺县| 清远市| 平顶山市| 达州市| 年辖:市辖区| 宾阳县| 炎陵县| 晋江市| 呼和浩特市| 万安县| 寿光市| 巴楚县| 邵阳县| 台中县| 武陟县|