k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测

在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型的探针:存活探针(liveness probes)、就绪探针(readiness probes)

存活探针

资源文档:kubectl explain deploy.spec.template.spec.containers.livenessProbe

livenessProbe:存活探针用于检测容器中的应用是否还在正常运行。如果探测失败,说明容器不健康,kubelet 会杀死该容器,并根据重启策略决定是否重启容器,从而帮助恢复异常的容器。

探测方式:

  • exec : 在容器内部执行一个命令,若命令返回结果为 0,则认为探测成功。
  • httpGet: 向容器指定路径发起 HTTP 请求,若返回状态码在 200-399 之间,则认为探测成功。
  • tcpSocket:尝试与容器的指定端口建立 TCP 连接,若连接成功,则认为探测成功。

存活探针exec案例

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: 21du
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      tolerations:
      - key: node
        operator: "Exists"
        effect: NoSchedule
      containers:
        - name: nginx
          image: nginx:1.20.0
          livenessProbe:
            exec:
              command:
              - ls
              - /usr/share/nginx/html/index.html
          ports:
            - containerPort: 80

存活探针httpGet案例

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: 21du
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      tolerations:
      - key: node
        operator: "Exists"
        effect: NoSchedule
      containers:
        - name: nginx
          image: nginx:1.20.0
          livenessProbe:
            httpGet:
              port: 80
              path: /
          ports:
            - containerPort: 80

存活探针tcpSocket案例

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: 21du
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      tolerations:
      - key: node
        operator: "Exists"
        effect: NoSchedule
      containers:
        - name: nginx
          image: nginx:1.20.0
          livenessProbe:
            tcpSocket:
              port: 80
          ports:
            - containerPort: 80

就绪探针

资源文档:kubectl explain deploy.spec.template.spec.containers.readinessProbe

readinessProbe:就绪探针用于判断容器是否已经准备好接收请求。如果探测失败,Kubernetes会暂停将流量转发给该容器,并将其从服务的负载均衡池中移除,直到探测成功为止。这适用于需要初始化时间或依赖外部服务的应用,防止它们在未准备好的状态下接收请求。

探测方式:

  • exec : 在容器内部执行一个命令,若命令返回结果为 0,则认为探测成功。
  • httpGet: 向容器指定路径发起 HTTP 请求,若返回状态码在 200-399 之间,则认为探测成功。
  • tcpSocket:尝试与容器的指定端口建立 TCP 连接,若连接成功,则认为探测成功。

就绪探针exec案例

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: 21du
spec:
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
        - name: redis
          image: redis:6.0
          readinessProbe:
            exec:
              command:
              - ls
              - /etc/os-release
          ports:
            - containerPort: 6379

就绪探针httpGet案例

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: 21du
spec:
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          readinessProbe:
            httpGet:
              port: 80
              path: /
          ports:
            - containerPort: 80

就绪探针tcpSocket案例

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: 21du
spec:
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
        - name: redis
          image: redis:6.0
          readinessProbe:
            tcpSocket:
              port: 6379
          ports:
            - containerPort: 6379
相关推荐
sbjdhjd1 小时前
Redis 主从复制、哨兵高可用与 Cluster 集群部署实验手册
运维·前端·redis·云原生·开源·bootstrap·html
ggaofeng2 小时前
glusterfs如何在k8s中使用
云原生·容器·kubernetes·glusterfs
暮云星影2 小时前
个人总结 搭建Docker监控
docker·容器·grafana·prometheus
IT策士4 小时前
第49篇 k8s之服务网格入门:Istio 简介
容器·kubernetes·istio
张忠琳6 小时前
【client-go v0.36.1】LeaderElection 深度分析(上篇)— 模块定位、结构、LeaderElector 核心逻辑
云原生·kubernetes·client-go·leaderelection
牛奶咖啡137 小时前
k8s容器编排技术实践——K8s中服务发现ingress、ingress controller 应用实践
kubernetes·服务发现·ingress·ingress-nginx·部署ingress-nginx·部署ingress的三种方法·ingress的服务发现原理
l1t7 小时前
DeepSeek总结的使用 Docker 对 PostgreSQL 进行 Beta 测试
docker·postgresql·容器
张忠琳9 小时前
【client-go v0.36.1】tools/cache 深度分析(中篇)— 辅助组件逐行解析
云原生·kubernetes·cache·informer·client-go
暮云星影13 小时前
个人总结 docker 常用命令
docker·容器
张忠琳13 小时前
【client-go v0.36.1】WorkQueue 深度分析(下篇)— 限流队列、限流器、指标、并行化
云原生·kubernetes·informer·workqueue·client-go