Crater服务容器健康检查:Docker与Kubernetes配置

Crater服务容器健康检查:Docker与Kubernetes配置

【免费下载链接】crater Open Source Invoicing Solution for Individuals & Businesses 【免费下载链接】crater 项目地址: https://gitcode.com/gh_mirrors/cr/crater

容器化部署架构概述

Crater作为开源发票管理系统,其容器化部署涉及多服务协同工作。当前架构基于Docker Compose实现,包含四大核心服务组件:应用服务(app)、数据库服务(db)、Web服务(nginx)和定时任务服务(cron)。各组件通过bridge网络crater实现通信,数据持久化通过命名卷db实现。

服务组件关系图

mermaid

Docker健康检查实现

应用服务健康检查配置

在Docker Compose配置中为app服务添加健康检查机制,通过PHP内置服务器验证应用可用性:

services:
  app:
    # 现有配置...
    healthcheck:
      test: ["CMD", "php", "-S", "localhost:8000", "-t", "public"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

配置解析:

  • 测试命令:启动临时PHP开发服务器验证应用入口文件可访问性
  • 检测周期:每30秒执行一次健康检查
  • 启动等待期:60秒启动缓冲,适应应用初始化过程

数据库服务健康检查配置

为MariaDB添加内置健康检查,验证数据库连接可用性:

services:
  db:
    # 现有配置...
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u$MYSQL_USER", "-p$MYSQL_PASSWORD"]
      interval: 15s
      timeout: 5s
      retries: 5

完整配置文件参考

修改后的docker-compose.yml实现了多服务健康检查联动,确保依赖服务就绪后才标记整体健康。

Kubernetes部署扩展

Deployment健康检查配置

将Docker Compose健康检查迁移至K8s部署清单,实现更精细的容器生命周期管理:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: crater-app
spec:
  template:
    spec:
      containers:
      - name: app
        image: gitcode.com/gh_mirrors/cr/crater:latest
        livenessProbe:
          httpGet:
            path: /api/health
            port: 8000
          initialDelaySeconds: 60
          periodSeconds: 30
        readinessProbe:
          httpGet:
            path: /api/ready
            port: 8000
          initialDelaySeconds: 20
          periodSeconds: 10
        startupProbe:
          httpGet:
            path: /api/startup
            port: 8000
          failureThreshold: 30
          periodSeconds: 10

健康检查接口实现

创建专用健康检查控制器HealthController.php:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class HealthController extends Controller
{
    public function health()
    {
        return response()->json(['status' => 'ok']);
    }
    
    public function ready()
    {
        try {
            DB::connection()->getPdo();
            return response()->json(['status' => 'ready']);
        } catch (\Exception $e) {
            return response()->json(['status' => 'not ready'], 503);
        }
    }
    
    public function startup()
    {
        // 检查关键配置是否加载完成
        if (config('app.key')) {
            return response()->json(['status' => 'started']);
        }
        return response()->json(['status' => 'starting'], 503);
    }
}

添加路由配置至routes/api.php

Route::get('/health', [HealthController::class, 'health']);
Route::get('/ready', [HealthController::class, 'ready']);
Route::get('/startup', [HealthController::class, 'startup']);

监控与告警集成

Prometheus指标暴露

通过laravel-prometheus扩展暴露健康指标:

// 在HealthController中添加
public function metrics()
{
    $health = DB::connection()->getPdo() ? 1 : 0;
    return response("crater_health_status $health")->header('Content-Type', 'text/plain');
}

Grafana监控面板

配置关键指标监控面板,包含:

  • 容器重启次数
  • 健康检查成功率
  • 数据库连接延迟
  • API响应时间分布

最佳实践与常见问题

健康检查优化策略

  1. 分层检查设计

    • 存活探针:检查应用进程状态
    • 就绪探针:验证依赖服务可用性
    • 启动探针:适应长启动时间场景
  2. 资源限制协同: 确保健康检查超时时间大于资源限制导致的响应延迟,避免误判。

  3. 检查频率调优

    • 核心服务:15-30秒检查间隔
    • 非关键服务:60-120秒检查间隔

常见故障排查

问题现象可能原因解决方案
健康检查频繁失败启动时间不足增加start_period配置
数据库连接超时资源竞争优化数据库连接池配置
间歇性健康检查失败网络波动增加retries参数值

部署验证与维护

手动健康检查命令

# 验证应用服务健康状态
docker exec -it crater_app_1 curl -f http://localhost:8000/api/health

# 检查数据库连接
docker exec -it crater_db_1 mysqladmin ping -ucrater -pcrater

自动化部署验证

集成健康检查状态至CI/CD流程,在.github/workflows/deploy.yml中添加:

jobs:
  deploy:
    steps:
      # 部署步骤...
      - name: Verify health status
        run: |
          curl --retry 10 --retry-delay 5 -f http://localhost/api/health

通过以上配置,Crater服务实现了从Docker到Kubernetes环境的完整健康检查体系,提升了系统部署可靠性与运维效率。建议定期审查健康检查指标,根据实际运行状况优化参数配置。

【免费下载链接】crater Open Source Invoicing Solution for Individuals & Businesses 【免费下载链接】crater 项目地址: https://gitcode.com/gh_mirrors/cr/crater

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值