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

Kubernetes 存活、就緒探針

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

在設計關鍵任務、高可用應用程序時,彈性是要考慮的最重要因素之一。

當應用程序可以快速從故障中恢復時,它便具有彈性。

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

The High Observability Principle (HOP)

高可觀察性原則是基于容器的應用程序設計原則之一。微服務體系要求每個服務不關心(也不應該關心)被調用方如何處理請求。

HOP原則要求每個服務必須公開幾個API端點,其意義在于揭示服務健康狀態,Kubernetes調用這些端點,決定下一步的路由和負載平衡。

設計良好的云原生程序應將日志事件記錄到STDERR和STDOUT,由logstash、Fluent等日志攝取服務將這些日志運送到集中式監控(例如Prometheus)和日志聚合系統(例如ELK)。下圖說明了云原生應用程序如何遵守健康狀況探測模式和高可觀察性原則。

 

Kubernetes 存活、就緒探針

How to Apply Health Probe Pattern in Kubernetes?

我之前寫過ASP.NetCore + Docker健康檢查的原創:[web程序暴露http健康檢查端點,平臺輪詢探測], Kubernetes針對不同場合細化了探針,更為強大的是給出對應決策。

Liveness Probes

使用[存活探針]判斷什么時候重啟容器。

使用存活探針檢查容器本身是否無響應、死鎖, 有時候重啟容器常常能解決此類問題。

我們以kubernetes官方demo為例:

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.   labels: 
  5.     test: liveness 
  6.   name: liveness-exec 
  7. spec: 
  8.   containers: 
  9.   - name: liveness 
  10.     image: busybox 
  11.     args: 
  12.     - /bin/sh    - -c    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 
  13.     livenessProbe: 
  14.       exec
  15.         command: 
  16.         - cat 
  17.         - /tmp/healthy 
  18.       initialDelaySeconds: 5   # 指示kubectl等待5s才執行首次探測 
  19.       periodSeconds: 5         # 間隔5秒輪詢 
  • 在第5秒kubectl開始首次liveness探測
  • 在30秒進行的每次探測均成功
  • 30s之后容器內文件被刪除,之后間隔5s的探測會失敗,根據liveness默認配置連續3次失敗就會放棄探測,放棄探測意味著重啟容器,故容器會在第45s重啟
  • 重啟之后又開始以上流程, 故可以看到此探針以重啟的決策嘗試修復應用問題。

這個探針會體現到 kubectl get pod 的 RESTARTS 列

 

Kubernetes 存活、就緒探針

Readiness Probes

使用[就緒探針]判斷容器是否就緒,是否可以接受流量。

Pod內所有容器ready,則該Pod被認為ready,當pod沒有ready,將會從服務負載均衡中移除。

有些時候,應用程序臨時不可用(加載大量數據或者依賴外部服務),這個時候,重啟這個Pod無濟于事,同時你也不希望請求被發送到該Pod

下面的應用強依賴mongodb,我們針對這些依賴項設置了readiness探針

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

以下是探測Mongodb的連通性

  1. sealed class MongoHealthCheck : IHealthCheck 
  2.     {        private readonly IMongoDatabase _defaultMongoDatabase; 
  3.         public MongoHealthCheck(IDefaultMongoDatabaseProvider defaultMongoDatabaseProvider) 
  4.         {            _defaultMongoDatabase = defaultMongoDatabaseProvider.GetDatabase();        }        public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default
  5.         {            var doc = await _defaultMongoDatabase.RunCommandAsync( 
  6.                 new BsonDocumentCommand<BsonDocument>( 
  7.                     new BsonDocument() { 
  8.                         { "ping""1" } 
  9.                     }),                 cancellationToken: cancellationToken);            var ok = doc["ok"].ToBoolean(); 
  10.             if (ok) 
  11.             {                return HealthCheckResult.Healthy("OK"); 
  12.             }            return HealthCheckResult.Unhealthy("NotOK"); 
  13.         }    } 

對于依賴項的探測,探測周期和超時時間可以設置的稍長一點

  1. readinessProbe: 
  2.   httpGet: 
  3.     path: /readyz 
  4.     port: 80 
  5.   initialDelaySeconds: 5 
  6.   periodSeconds: 60     # 60s探測一次 
  7.   timeoutSeconds: 30    # 每次探測30s超時,與應用建立與依賴項的連接超時時間一致 
  8.   failureThreshold: 3   # 連續3次探測失敗,該Pod會被標記為`Unready` 

Startup Probes

使用[啟動探針]判斷容器應用是否已經啟動。如果配置了這個探針,則該探針成功之前將會禁用存活和就緒探針。

配置探針

  • initialDelaySeconds:容器啟動,探針延后工作,默認是0s
  • periodSeconds 探針探測周期,默認10s
  • timeoutSeconds: 探針工作的超時時間,默認1s
  • successThreshold: 連續幾次探測成功,該探針被認為是成功的,默認1次
  • failureThreshold: 連續幾次探測失敗,該探針被認為最終失敗,對于livenes探針最終失敗意味著重啟,對于readiness探針意味著該pod Unready, 默認3次。

強烈建議根據應用結構合理設置探針參數,避免不切實際的認定失敗導致的頻繁重啟或 Unready。

結論:

  • Kubernetes生態這么龐大,為啥單獨拎出k8s探針, 是因為k8s探針是與應用程序結構密切相關的機制。

就使用方式看:

  • 存活探針:用于快速判斷應用進程是否無響應,嘗試重啟修復;
  • 就緒探針:判斷應用及依賴項是否就緒,是否可以分配流量,如果不能就標記Unready,從負載均衡器中移除該Pod

Kubernetes存活、就緒探針可以極大地提高服務的健壯性和彈性,并提供出色的最終用戶體驗。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2023-01-30 07:51:38

云原生Kubernetesk8s

2025-02-18 00:00:00

2020-09-15 08:46:26

Kubernetes探針服務端

2023-12-27 06:48:49

KubernetesDevOpsHTTP

2023-03-07 08:25:39

探針Kubernetes

2023-11-27 13:54:00

kubernetes高可用

2023-12-07 07:23:39

APIsSDKs

2015-11-09 17:28:12

戴爾云計算

2023-09-11 17:39:35

SSH服務TCP

2015-11-09 19:03:04

戴爾云計算

2022-05-19 07:01:34

架構

2020-11-26 15:10:20

Python代碼函數

2015-11-18 21:39:53

戴爾

2011-11-25 09:56:16

H3C

2025-01-06 08:12:30

2020-09-26 22:08:17

內網協議滲透

2010-08-03 19:00:12

數據中心證券行業Juniper Net

2015-12-08 11:14:47

戴爾云計算

2013-06-09 16:01:16

JDK8Java8Java8功能

2011-12-02 13:16:14

JavaNIO
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线精品强乱中文字幕 | 亚洲视频免费 | 成人在线中文字幕 | 99爱在线视频 | 91久久久www播放日本观看 | 黄色网址在线播放 | 日韩中文字幕第一页 | 黑人巨大精品欧美一区二区免费 | 成人午夜精品 | 精品国产不卡一区二区三区 | 99riav国产一区二区三区 | 中文字幕亚洲专区 | 日本三级网站在线 | 一级a爱片久久毛片 | 国产乱码一二三区精品 | 国产精品久久久久久久久久三级 | 丁香五月网久久综合 | 亚洲一区二区三区在线 | 欧美精品啪啪 | 日日夜夜精品视频 | 97视频免费 | 麻豆视频国产在线观看 | 色综合一区二区三区 | 欧美日韩在线免费 | 欧美国产精品一区二区三区 | 日本中文字幕在线观看 | 成人蜜桃av| 欧美嘿咻| 成年女人免费v片 | 亚洲免费观看 | 91视视频在线观看入口直接观看 | 91精品久久久久久久久久 | 视频一区二区在线观看 | 在线免费观看黄视频 | 久久一区二区三区免费 | 亚洲一区二区中文字幕 | 国产精品免费观看视频 | 成人日韩 | 国产一区二区三区在线免费观看 | 偷拍第一页 | 国产成人免费视频 |