Kubernetes 存活、就绪探针

我们以kubernetes官方demo为例:

apiVersion:v1kind:Podmetadata:  labels:    test:liveness  name:liveness-execspec:  containers:  - name:liveness    image:busybox    args:    -/bin/sh    --c    -touch/tmp/healthy;sleep30;rm-rf/tmp/healthy;sleep600    livenessProbe:      exec:        command:        -cat        -/tmp/healthy      initialDelaySeconds:5# 指示kubectl等待5s才执行首次探测      periodSeconds:5# 间隔5秒轮询

在第5秒kubectl开始首次liveness探测

在30秒进行的每次探测均成功

30s之后容器内文件被删除,之后间隔5s的探测会失败,根据liveness默认配置连续3次失败就会放弃探测,放弃探测意味着重启容器,故容器会在第45s重启

重启之后又开始以上流程, 故可以看到此探针以重启的决策尝试修复应用问题。

本次探针导致的容器重启会体现到kubectl get pod的RESTARTS列

Readiness Probes

使用[就绪探针]判断容器是否就绪,是否可以接受流量。

Pod内所有容器ready,则该Pod被认为ready,当pod没有ready,将会从服务负载均衡中移除。

有些时候,应用程序临时不可用(加载大量数据或者依赖外部服务),这个时候,重启这个Pod无济于事,同时你也不希望请求被发送到该Pod

下面的应用强依赖mongodb,我们针对这些依赖项设置了readiness探针

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

以下是探测Mongodb的连通性

sealedclassMongoHealthCheck:IHealthCheck{privatereadonlyIMongoDatabase _defaultMongoDatabase;publicMongoHealthCheck(IDefaultMongoDatabaseProvider defaultMongoDatabaseProvider){            _defaultMongoDatabase = defaultMongoDatabaseProvider.GetDatabase();        }publicasyncTaskCheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken =default){vardoc =await_defaultMongoDatabase.RunCommandAsync(newBsonDocumentCommand(newBsonDocument() {                        {"ping","1"}                    }),                cancellationToken: cancellationToken);varok = doc["ok"].ToBoolean();if(ok)            {returnHealthCheckResult.Healthy("OK");            }returnHealthCheckResult.Unhealthy("NotOK");        }    }

对于依赖项的探测,探测周期和超时时间可以设置的稍长一点

readinessProbe:  httpGet:    path:/readyz    port:80  initialDelaySeconds:5  periodSeconds:60# 60s探测一次  timeoutSeconds:30# 每次探测30s超时,与应用建立与依赖项的连接超时时间一致  failureThreshold:3# 连续3次探测失败,该Pod会被标记为`Unready`

Startup Probes

使用[启动探针]判断容器应用是否已经启动。如果配置了这个探针,则该探针成功之前将会禁用存活和就绪探针。

配置探针

initialDelaySeconds:容器启动,探针延后工作,默认是0s

periodSeconds 探针探测周期,默认10s

timeoutSeconds: 探针工作的超时时间,默认1s

successThreshold: 连续几次探测成功,该探针被认为是成功的,默认1次

failureThreshold: 连续几次探测失败,该探针被认为最终失败,对于livenes探针最终失败意味着重启,对于readiness探针意味着该pod Unready, 默认3次。

深圳网站优化www.zg886.cn

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容