首页 > 其他分享 >五分钟 k8s 实战-应用探针

五分钟 k8s 实战-应用探针

时间:2023-11-27 10:22:41浏览次数:33  
标签:k8s kubernetes 检测 配置 探针 五分钟 Pod 就绪

Probe.png

今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧密了。

今天主要讲解 Probe 探针相关的功能,探针最实用的功能就是可以控制应用优雅上线。

就绪探针

举个例子,当我们的 service 关联了多个 Pod 的时候,其中一个 Pod 正在重启但还没达到可以对外提供服务的状态,这时候如果有流量进入。

那这个请求肯定就会出现异常,从而导致问题,所以我们需要一个和 kubernetes 沟通的渠道,告诉它什么时候可以将流量放进来。
image.png
比如如图所示的情况,红色 Pod 在未就绪的时候就不会有流量。

使用就绪探针就可以达到类似的效果:

livenessProbe:  
  failureThreshold: 3  
  httpGet:  
    path: /ping  
    port: 8081  
    scheme: HTTP  
  periodSeconds: 3  
  successThreshold: 1  
  timeoutSeconds: 1

这个配置也很直接:

  • 配置一个 HTTP 的 ping 接口
  • 每三秒检测一次
  • 失败 3 次则认为检测失败
  • 成功一次就认为检测成功

但没有配置就绪探针时,一旦 Pod 的 Endpoint 加入到 service 中(Pod 进入 Running 状态),请求就有可能被转发过来,所以配置就绪探针是非常有必要的。

启动探针

而启动探针往往是和就绪探针搭配干活的,如果我们一个 Pod 启动时间过长,比如超过上面配置的失败检测次数,此时 Pod 就会被 kubernetes 重启,这样可能会进入无限重启的循环。

所以启动探针可以先检测一次是否已经启动,直到启动成功后才会做后续的检测。

startupProbe:  
  failureThreshold: 30  
  httpGet:  
    path: /ping  
    port: 8081  
    scheme: HTTP  
  periodSeconds: 5  
  successThreshold: 1  
  timeoutSeconds: 1

我这里两个检测接口是同一个,具体得根据自己是实际业务进行配置;
比如应用端口启动之后并不代表业务已经就绪了,可能某些基础数据还没加载到内存中,这个时候就需要自己写其他的接口来配置就绪探针了。

image.png

所有关于探针相关的日志都可以在 Pod 的事件中查看,比如如果一个应用在启动的过程中频繁重启,那就可以看看是不是某个探针检测失败了。

存活探针

存活探针往往是用于保证应用高可用的,虽然 kubernetes 可以在 Pod 退出后自动重启,比如 Pod OOM;但应用假死他是检测不出来的。

为了保证这种情况下 Pod 也能被自动重启,就可以配合存活探针使用:

livenessProbe:  
  failureThreshold: 3  
  httpGet:  
    path: /ping  
    port: 8081  
    scheme: HTTP  
  periodSeconds: 3  
  successThreshold: 1  
  timeoutSeconds: 1

一旦接口响应失败,kubernetes 就会尝试重启。

image.png

总结

image.png

以上探针配置最好是可以在研效平台可视化配置,这样维护起来也比较简单。

探针是维护应用健康的必要手段,强烈推荐大家都进行配置。

本文的所有源码在这里可以访问:
https://github.com/crossoverJie/k8s-combat

标签:k8s,kubernetes,检测,配置,探针,五分钟,Pod,就绪
From: https://www.cnblogs.com/crossoverJie/p/17858684.html

相关文章

  • day05 K8S网络组件的深度剖析 (1.10.1 -1.10.3)
    一、K8S网络组件的深度剖析上1、认识FlannelFlannel是专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信问题优势:kubernetes发行版都可以默认安装Flannel容器安装和配置中小型网络架构首选不需要专用的数据存储劣势:性能损耗高不支持NetworkPolic......
  • k8s配置与密钥管理
    1、configmap1.1configmap创建方式命令行创建方式#kubectlcreateconfigmapcm1--from-literal=host=127.0.0.1--from-literal=port=3306configmap/cm1created#kubectldescribecmcm1Name:cm1Namespace:defaultLabels:<none>Annotations:......
  • k8s定时备份与故障还原
    Kubernetesetcd定时备份及恢复方案原创 小小平头哥 小小平头哥 2023-11-2311:17 发表于山东收录于合集#云原生相关6个#kubernetes1个#k8s使用技巧3个#k8s5个点关注......
  • k8s中pvc和pv扩容
    参考网址:https://zhuanlan.zhihu.com/p/640035530 背景:部署的postgres,采用存储类sc来动态挂载pvc和pv。设定是100Gi,后期需要扩容成200Gi。扩容步骤:1.修改PV的配置。1.1回收策略确认pv的回收策略,十分的重要!!!!!,确认回收策略必须为Retain不能是Delete不然解除绑定后PV就被删了,并......
  • 【Kubernetes】 容器探针
    【Kubernetes】容器探针Kubernetes提供了探针,通过Kubelet对容器执行定期诊断,以了解容器内应用的状态,以探测结果来决定做哪些操作(比如重启容器、关闭流量),kubernetes中提供了三种探针,分别是就绪探针、存活探针、启动探针,如果不使用探针,默认认为是成功的。每种探针又提供了四种探......
  • k8s命令补全
    正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc......
  • k8s 高可用集群3:VIP:HAProxy、keepalived
    为何要使用负载均衡器VIP(HAProxy、keepalived)​k8sMaster初始化配置时,使用负载均衡器,可以将apiserver的请求转发到不同的机器上,避免一台服务器宕机,造成所有节点不可使用。如果不使用负载均衡器,先创建一个k8sMaster,然后再加入其他的k8sMaster,当第一台k8sMaster宕机时......
  • k8s集群二进制安装部署
    1、前期规划主机规划IP地址主机名主机角色软件列表192.168.16.129k8s-master01masterkube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、haproxy、keepalived192.168.16.130k8s-master02masterkube-apiserver、kube-controller-man......
  • 关于K8S亲和性的解释
    kubernetes提供了一种亲和性调度(Affinity)。它在NodeSelector的基础之上的进行了扩展,可以通过配置的形式,实现优先选择满足条件的Node进行调度,如果没有,也可以调度到不满足条件的节点上,使调度更加灵活。Affinity主要分为三类:nodeAffinity(node亲和性):以node为目标,解决pod可以调......
  • k8s解析kubeconfig的两种常用方式
    k8sv1.19.0方法1staging/src/k8s.io/client-go/tools/clientcmd/client_config.goBuildConfigFromFlags函数根据本地kubeconfig文件路径来生成restclient.Config对象。staging/src/k8s.io/client-go/tools/clientcmd/loader.goLoad方法读取指定目录下多个文件内容并合并,转换......