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

Kubernetes中Pod应用无法连接及启动探针超时问题求助

问题分析:Applicare应用无法访问及启动探针超时问题

问题背景

通过以下YAML配置在Kubernetes中部署了Applicare应用(包含Namespace、ConfigMap、Deployment、Service、HPA、PodDisruptionBudget),但无法访问Pod内的服务,执行kubectl describe pod -n applicare applicare-db4dcb7c7-6zzzw得到启动探针超时错误。

部署YAML配置

---
apiVersion: v1
kind: Namespace
metadata:
  name: applicare
  labels:
    name: applicare
---
apiVersion: v1
data:
  app.properties: |
    applicare.dbVendor=MySql
    applicare.autoPersist=true
    applicare.useSNMP=0
    applicare.stuckthread.max=600
    applicare.updateUrl=http\://support.arcturustech.com
    applicare.systemUser=JFUuyKJT1Ls\=
    applicare.smtp_auth_pwd=Ni2Bih3nCUU\=
    applicare.useRSTATD=1
    applicare.blackboxSaveType=all
    applicare.invokeRSTATD=1
    applicare.enableChartScrollbar=true
    heapTracker.interval=240
    applicare.serverPort=8880
    applicare.serverSSL=true
    applicare.dbDriverClass=com.mysql.jdbc.Driver
    applicare.SMTPSSL=false 
    applicare.adminName=AdminServer
    applicare.dbPassword=Applicare01$1
    applicare.alertDuration=3
    applicare.dbUsername=applicare01
    applicare.smtp_host=localhost
    applicare.dburl=jdbc\:mysql\://192.168.1.209\:3306/applicarenew?allowPublicKeyRetrieval\=true&useSSL\=false
    applicare.smtp_auth_user=test
    applicare.custAlertClass=
    applicare.serverIP=192.168.1.209
    applicare.agentJobInterval=1
    applicare.dbTestSQL=SELECT 1
     applicare.smtp_from=
    applicare.enable_readonly_mode=false
    applicare.sendMailTo=test@localhost.com
    applicare.alertMonitorJobInterval=1
    applicare.alertOn=1
    applicare.intellitrace.auto_refresh=60000
    applicare.SMTPPort=25
    applicare.enable_server_time=false
    applicare.systemPassword=JFUuyKJT1Ls\=
    applicare.serverName=
    applicare.httpErrorCode=400
    applicare.monitorOn=1
    applicare.ipLocUpdate.jobInterval=60
    applicare.alertClearanceNotificationDuration=3
    applicare.logDir=/usr/local/Applicare/logs
    applicare.dataSource=Applicare-DataSource
    applicare.minTimeBetweenAlerts=5
kind: ConfigMap
metadata:
  name: applicare-config
  namespace: applicare

---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: applicare
  labels:
    run: applicare
  name: applicare
spec:
  replicas: 3
  selector:
    matchLabels:
      run: applicare
  template:
    metadata:
      annotations:
      labels:
        run: applicare
    spec:
      containers:
      - image: 'applicare:latest'
        imagePullPolicy: Never
        name: applicare
        resources:
          requests:
            memory: "2000Mi"
            cpu: "200m"
          limits:
            memory: "5000Mi"
            cpu: "2000m"
        volumeMounts:
        - name: app-config
          mountPath: /usr/local/Applicare/Applicare.props
          subPath: app.properties
        livenessProbe:
          httpGet:
            path: /applicare/login/console.jsp
            port: 8880
          failureThreshold: 5
          periodSeconds: 60
         #  terminationGracePeriodSeconds: 200
          initialDelaySeconds: 180
        startupProbe:
          httpGet:
            path: /applicare/login/console.jsp
            port: 8880
          failureThreshold: 3
          periodSeconds: 90
      volumes:
      - name: app-config
        configMap:
          name: applicare-config

---
apiVersion: v1
kind: Service
metadata:
  namespace: applicare
  name: applicare-service
spec:
  selector:
    run: applicare
  ports:
    - port: 8880
      targetPort: 8880
      name: port1
    - port: 8984
      targetPort: 8983
      name: port2

---

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: applicare
  namespace: applicare
spec:
  maxReplicas: 3
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: applicare
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 97

---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: applicare-pdb
  namespace: applicare
spec:
  minAvailable: 1
  selector:
    matchLabels:
      run: applicare 

错误信息

Warning  Unhealthy  14m   kubelet            Startup probe failed: Get "http://10.1.0.82:8880/applicare/login/console.jsp": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

排查结论与修复建议

这个问题是YAML配置错误+应用网络监听/启动逻辑问题共同导致的,并非单一的端口开放问题,核心问题点及修复步骤如下:

1. 最紧急的配置冲突:SSL与探针协议不匹配

  • ConfigMap中applicare.serverSSL=true启用了HTTPS,但Deployment的探针用的是httpGet(HTTP协议),直接导致探针无法与应用建立连接,引发超时。
  • 修复:要么将探针改为HTTPS模式(添加scheme: HTTPS到httpGet配置),要么临时设置applicare.serverSSL=false验证基础连通性。

2. 应用监听地址错误

  • ConfigMap中applicare.serverIP=192.168.1.209指定了固定物理IP作为监听地址,导致应用仅绑定该IP,而Pod的IP是集群内部的10.1.0.82,Kubelet无法从Pod IP访问应用端口。
  • 修复:将applicare.serverIP改为0.0.0.0,让应用监听容器内所有网卡地址。

3. 启动探针参数不合理

  • 当前startupProbe的failureThreshold=3、periodSeconds=90,总超时窗口仅270秒,如果Applicare应用启动时需要初始化数据库连接、加载大量资源,可能还未就绪就被判定启动失败。
  • 修复:调大参数,比如设置failureThreshold=5、periodSeconds=60,给应用更长的启动缓冲时间。

4. 数据库连通性验证

  • 需确认Pod能否访问配置的MySQL地址192.168.1.209:3306,如果数据库网络不通,应用会卡在启动阶段,无法响应探针请求。
  • 验证方式:执行kubectl exec -n applicare <pod-name> -- telnet 192.168.1.209 3306,或直接在Pod内尝试连接数据库。

内容的提问来源于stack exchange,提问作者anandarc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:45:55