You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s单Pod中如何保证SQL容器就绪后再启动关联测试容器

K8s 单Pod多容器启动顺序控制实现方案

方案1:K8s 1.28及以上版本(原生支持,推荐)

K8s 1.28版本正式稳定了容器启动顺序控制能力,通过容器的startupOrder字段可以指定容器启动优先级,数值越小启动越早,且前一个容器的就绪探针检测通过后才会启动下一个容器,完全匹配你的需求。
你需要修改原有YAML做3处调整:

  • 给my-sqldb容器添加就绪探针,检测SQL Server默认1433端口是否可达,确认数据库服务正常可用
  • 给两个容器配置startupOrder,my-sqldb设为1,tests设为2
  • 同一个Pod内的容器共享网络命名空间,tests容器访问数据库直接用localhost即可,修改对应环境变量值

修改后的完整配置如下:

apiVersion: v1
kind: Pod
metadata:
  name: sql-test-pod
  labels:
    name: sql-test
spec:
  restartPolicy: Never
  containers:
    - name: my-sqldb
      image: docker-registry.com/database
      imagePullPolicy: Always
      startupOrder: 1
      resources:
        limits:
          memory: "4096Mi"
          cpu: "750m"
        requests:
          memory: "4096Mi"
          cpu: "750m"
      # 就绪探针:检测SQL Server 1433端口是否连通
      readinessProbe:
        tcpSocket:
          port: 1433
        initialDelaySeconds: 30 # 首次检测前等待30秒,适配SQL Server启动耗时
        periodSeconds: 5 # 每5秒检测一次
        failureThreshold: 10 # 连续失败10次则标记容器未就绪
    - name: tests
      tty: true
      stdin: true
      image: docker-registry.com/test
      imagePullPolicy: Always
      startupOrder: 2
      resources:
        limits:
          memory: "4096Mi"
          cpu: "750m"
        requests:
          memory: "4096Mi"
          cpu: "750m"
      env:
      - name: sqlhostname
        value: "localhost" # 同Pod共享网络,直接用localhost访问
  nodeSelector:
    kubernetes.io/os: windows
  tolerations:
  - key: "windows"
    operator: "Equal"
    value: "2019"
    effect: "NoSchedule"

方案2:K8s 1.28以下版本

如果你的集群版本低于1.28不支持startupOrder字段,可以修改tests容器的启动逻辑,先轮询检测SQL Server端口连通性,确认数据库可用后再执行测试程序。
因为你的节点是Windows系统,用PowerShell实现等待逻辑即可,修改tests容器的command和args字段如下:

containers:
  # my-sqldb容器配置不变,仍建议添加就绪探针
  - name: tests
    tty: true
    stdin: true
    image: docker-registry.com/test
    imagePullPolicy: Always
    command: ["powershell", "-Command"]
    args:
      - >
        # 循环检测1433端口,直到连通再往下执行
        do {
          Start-Sleep -Seconds 5
          $portAvailable = Test-NetConnection -ComputerName localhost -Port 1433 -InformationLevel Quiet
        } while (-not $portAvailable)
        # 此处替换为你测试容器原本的启动命令/执行程序
        & "C:\your-test-path\test-runner.exe"
    resources:
      limits:
        memory: "4096Mi"
        cpu: "750m"
      requests:
        memory: "4096Mi"
        cpu: "750m"
    env:
    - name: sqlhostname
      value: "localhost"

注意事项

  • 如果你的SQL Server修改了默认监听端口,需要同步修改就绪探针、等待脚本里的端口值
  • 可以根据SQL Server实际启动耗时调整就绪探针的initialDelaySeconds和等待脚本的休眠间隔,避免无效检测

内容的提问来源于stack exchange,提问作者Gal I.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:27:02