ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes Pod Ready 0/1 원인과 해결방법
    WEB/BACK 2026. 10. 6. 09:00
    반응형

    Kubernetes를 사용하다 보면 다음과 같은 상태를 볼 수 있습니다.

    NAME                         READY   STATUS    RESTARTS   AGE
    my-api-7fc7944d4f-jtk95      0/1     Running   4          5m
    

    여기서 가장 눈에 띄는 부분이 바로 READY 0/1입니다.

    Pod의 상태가 Running인데 왜 Ready는 0/1일까요?

    이번 글에서는 Kubernetes에서 0/1 상태가 발생하는 대표적인 이유와 확인 순서를 정리하겠습니다.


    1. READY 0/1이 의미하는 것

    0/1은 Pod 안의 컨테이너 1개 중 현재 Ready 상태인 컨테이너가 0개라는 의미입니다.

    반대로 다음과 같다면 정상적인 Ready 상태입니다.

    READY
    1/1
    

    즉,

    • 0/1 → 컨테이너는 있지만 Ready 상태가 아님
    • 1/1 → 컨테이너가 Ready 상태

    2. Running인데 왜 Ready가 아닐까?

    여기서 헷갈리기 쉽습니다.

    Running과 Ready는 같은 의미가 아닙니다.

    Running은 컨테이너가 실행되고 있다는 의미이고, Ready는 Kubernetes가 해당 컨테이너를 실제 서비스에 사용할 준비가 되었다고 판단했다는 의미입니다.


    3. 가장 먼저 Pod 상세정보 확인하기

    문제가 생기면 가장 먼저 다음 명령어를 실행해봅니다.

    kubectl describe pod POD_NAME
    

    예를 들어:

    kubectl describe pod my-api-7fc7944d4f-jtk95
    

    결과의 아래쪽에 있는 Events 부분을 확인하는 것이 중요합니다.

    Events:
      Type     Reason     Message
      Warning  Unhealthy  Readiness probe failed
    

    이런 메시지가 있다면 Readiness Probe를 확인해야 합니다.


    4. Pod 로그 확인하기

    애플리케이션 자체에서 문제가 발생했을 수도 있습니다.

    kubectl logs POD_NAME
    

    예:

    kubectl logs my-api-7fc7944d4f-jtk95
    

    Spring Boot, FastAPI 등의 애플리케이션이 시작하다가 오류가 발생했다면 로그에서 원인을 확인할 수 있습니다.


    5. 컨테이너가 재시작됐다면 --previous 확인

    특히 RESTARTS가 증가하고 있다면 이전 컨테이너가 왜 종료됐는지도 확인해야 합니다.

    kubectl logs POD_NAME --previous
    

    예를 들어:

    kubectl logs my-api-7fc7944d4f-jtk95 --previous
    

    이 명령은 이전 컨테이너의 로그를 확인할 때 유용합니다.


    6. Readiness Probe 확인

    Deployment YAML에 다음과 같은 설정이 있을 수 있습니다.

    readinessProbe:
      httpGet:
        path: /health
        port: 8000
      initialDelaySeconds: 10
      periodSeconds: 10
    

    이 경우 Kubernetes는 다음 주소를 확인합니다.

    http://컨테이너IP:8000/health
    

    이 요청이 정상적으로 성공하지 않으면 Pod가 실행 중이어도 Ready 상태가 되지 않을 수 있습니다.


    7. 애플리케이션 포트 확인

    Readiness Probe에서 8000번 포트를 확인하고 있는데 애플리케이션은 8080번 포트에서 실행되고 있다면 문제가 발생할 수 있습니다.

    예를 들어 FastAPI가 다음처럼 실행되고 있다고 해보겠습니다.

    uvicorn main:app --host 0.0.0.0 --port 8000
    

    이 경우 Kubernetes Probe도 실제 애플리케이션 포트와 맞아야 합니다.


    8. 애플리케이션이 127.0.0.1로만 실행되는 경우

    컨테이너 안에서 애플리케이션을 실행할 때 127.0.0.1에만 바인딩되어 있으면 외부에서 접근하지 못하는 문제가 생길 수 있습니다.

    FastAPI라면 컨테이너 환경에서 다음과 같이 실행하는 경우가 많습니다.

    uvicorn main:app --host 0.0.0.0 --port 8000
    

    9. 문제 확인 순서

    1. kubectl get pods
    2. kubectl describe pod POD_NAME
    3. kubectl logs POD_NAME
    4. kubectl logs POD_NAME --previous
    5. Readiness Probe 확인
    6. 애플리케이션 포트 확인
    7. 애플리케이션 로그 확인

    10. 정리

    Kubernetes에서 READY 0/1이 보인다고 해서 무조건 컨테이너가 죽었다는 의미는 아닙니다.

    컨테이너는 실행 중이지만 Kubernetes가 "아직 트래픽을 받아도 되는 상태가 아니다"라고 판단하고 있을 수 있습니다.

    따라서 가장 먼저 kubectl describe pod와 kubectl logs를 확인하고, Readiness Probe와 애플리케이션 상태를 순서대로 확인하면 됩니다.

    관련 검색어

    Kubernetes Ready 0/1, Kubernetes Pod 0/1, Pod Running Ready 0/1, Kubernetes Readiness Probe, kubectl describe pod, kubectl logs

     

    반응형

    댓글

Designed by Tistory.