k8s独立服务依赖检查逻辑

在现实世界中,一些遗留应用程序和框架无法调整。因此,我们希望将其检查策略和应用程序逻辑分离。

一种常见方法是在容器的Dockerfile启动脚本中添加相关的服务依赖性检查逻辑。有关此方法的详细信息,请参阅此Docker文档。另一种方法是使用Kubernetes pod机制本身来添加依赖性检查逻辑。

在开始之前,我们必须了解pod生命周期。

首先,pod包含三种类型的容器:

  1. 基础设施容器:这是著名的暂停容器。
  2. Init容器:这是一个初始化容器,通常用于初始化和准备应用程序。只有在等待所有初始化容器完成运行后,应用程序容器才能启动。
  3. 主容器:这是一个应用程序容器。

Kubernetes的最佳实践通常依赖于初始化容器来检查服务依赖性。我们使用以下WordPress示例来说明如何完成此操作。

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  clusterIP: None
  ports:
  - name: mysql
    port: 3306
  selector:
    app: mysql
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
spec:
  ports:
  - name: wordpress
    port: 80
    targetPort: 80
  selector:
    app: wordpress
  type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql 
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ALLOW_EMPTY_PASSWORD
          value: "true"
        livenessProbe:
          exec:
            command: ["mysqladmin", "ping"]
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
        readinessProbe:
          exec:
            # Check we can execute queries over TCP (skip-networking is off).
            command: ["mysql", "-h", "127.0.0.1", "-e", "SELECT 1"]
          initialDelaySeconds: 5
          periodSeconds: 2
          timeoutSeconds: 1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: wordpress:4
        ports:
        - containerPort: 80
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql
        - name: WORDPRESS_DB_PASSWORD
          value: ""
      initContainers:
      - name: init-mysql
        image: busybox
        command: ['sh', '-c', 'until nslookup mysql; do echo waiting for mysql; sleep 2; done;']
字段说明
initialDelaySeconds容器启动多久后开始第一次探测,显示为delay属性,默认是0
timeoutSeconds健康检查发送请求后等待响应的超时时间,显示为timeout属性,默认是1s
periodSeconds探测的频率,显示为period属性,默认是10s,最小是1s
successThreshold处于失败状态时,探测操作至少连续多少次成功才被认为是通过检测,显示为success属性,默认值为1
failureThreshold处于成功状态时,探测操作至少连续多少次失败才被认为是检测不通过,显示为failure属性,默认值为3

注意:

  1. 活动探测:此探测主要用于确定容器是否处于运行状态。例如,它可以检测服务死锁,响应缓慢和其他情况。
  2. 准备探针:此探针主要用于确定服务是否已正常工作。
  3. 准备探针不能在init容器中使用。
  4. 如果pod重新启动,则必须再次运行其所有init容器。

结论

本文讨论了用于检查服务依赖性的常用解决方案,并提供了一个示例来演示如何使用init容器,活动性和就绪性探针以及其他服务运行状况检查和依赖性检查功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值