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

Kubernetes创建Deployment后始终不可用,Available值一直为0

解决Deployment中Available始终为0的问题

嘿,我来帮你搞定这个头疼的问题~你的Deployment显示Available: 0,说明Pod已经被成功创建了(Current和Up-to-date都是1),但容器要么没通过健康检查,要么没法正常对外提供服务。结合你给出的yaml片段,我整理了几个最常见的排查方向和解决办法:

一、先查Pod的详细状态,找到核心问题

先跑这条命令看看Pod的具体情况,这是最快定位问题的方式:

kubectl describe pod <你的Pod名称>

重点盯这两个部分:

  • Events区域:有没有报错?比如镜像拉不下来、启动命令错了、端口被占用之类的
  • Containers区域:容器的Ready状态是不是False?还有State是啥——是CrashLoopBackOff(反复崩溃重启),还是Running但没就绪?

二、检查就绪探针(Readiness Probe)配置

如果你的Deployment里没定义就绪探针,K8s默认觉得容器启动就就绪,但nginx有时候需要几秒初始化,或者内部服务没起来,就会导致Available一直是0。要是你定义了探针,得检查配置对不对:
比如正确的nginx就绪探针应该是这样的:

readinessProbe:
  httpGet:
    path: /
    port: 80
  initialDelaySeconds: 5  # 给容器5秒初始化时间
  periodSeconds: 5         # 每5秒检查一次

要是探针的路径写错了(比如你的nginx根目录不是/),或者端口填错,就会导致探针失败,Pod永远不会被标记为可用。

三、钻进容器看看nginx到底跑没跑

直接进到容器内部,手动验证nginx服务状态:

kubectl exec -it <Pod名称> -- /bin/bash

然后执行nginx -t检查配置文件有没有错,或者curl localhost:80看看能不能访问页面。要是nginx启动失败(比如配置文件语法错误),容器可能显示Running但实际服务没起来,自然没法就绪。

四、确认Service和Deployment的标签完全匹配

你的Service selector是app: website, tier: frontend,得确保Deployment的Pod模板里的labels和这个完全一致:
Deployment的spec.template.metadata.labels应该长这样:

labels:
  app: website
  tier: frontend

不过你说Service和Deployment创建都正常,这个问题概率不高,但还是确认一下更稳妥。

五、检查镜像是否靠谱

试试用官方的nginx:latest镜像测试,要是你用的是自定义镜像,得确认集群的节点能拉到这个镜像——要么镜像已经推到集群能访问的仓库,要么节点本地已经有这个镜像了。

给你一个完整的Deployment参考示例

要是你的Deployment缺了关键配置,这里给一个可以直接用的示例:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: website
        tier: frontend
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        # 就绪探针:确保容器能正常提供服务才标记为可用
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 5
        # 存活探针:如果容器挂了就重启
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 10
          periodSeconds: 10

先从查Pod的describe输出开始,里面肯定会明确告诉你为什么Pod没被标记为可用,大概率是探针配置或者容器启动的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:51:18