본문 바로가기
개발

[K8S] 쿠버네티스 파드 미생성

by seaweed_one 2024. 2. 5.
728x90

안녕하세요~

오늘은 쿠버네티스 파드 / 서비스 생성 중 겪은 에러와 해결 방법을 공유하려고 합니다.

하나의 yaml 파일에 deployment와 service를 정의하고 kubectl apply 명령어를 이용해 생성하는 상황이었는데요.

service는 정상적으로 생성이 되었지만 pod의 경우 아무런 에러 출력도 없이 생성되지 않는 현상이 발생하였습니다.

 

보통의 경우 파드가 생성 후 에러가 발생하는 경우가 많았습니다.

대표적으로 아래와 같은 상황들을 만나게 됩니다. 

  • ImagePullBackOff
  • CrashLoopBackOff 
  • pod 생성 중 Pending / containerCreating 에서 진행 불가 

위와 같은 경우에는 pod 의 로그 혹은 description을 보고 트러블 슈팅이 가능합니다.

 

하지만 이번에는 pod 생성 자체가 되지 않는 현상이었습니다.

pod 가 생성되지 않으니 로그를 확인할 수도 없습니다.

 

결론부터 말씀드리면 쿠버네티스 event 확인을 이용해  pod 생성 실패 원인을 찾을 수 있습니다. 

해서 event log를 이용한 트러블 슈팅 케이스를 공유하려고 합니다.

파드 생성 과정과, 발생한 현상 그리고 해결방법까지 준비했어요.

 

1. 파드 생성 

먼저 pod 생성 yaml 파일을 먼저 작성해줍니다.

파일이 길어 중요 부분만 공유드립니다.

apiVersion: v1
kind: Service
metadata:
...
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 32100
  type: NodePort
  selector:
    app: feature-store-mgr-dev
---
apiVersion: v1
kind: PersistentVolumeClaim
...
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: longhorn
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
...
spec:
  replicas: 1
  selector:
    matchLabels:
      app: feature-store-mgr-dev
  template:
    metadata:
		...
      volumes:
      - name: feature-repo
        persistentVolumeClaim:
          claimName: feature-store-mgr-dev-pvc
      imagePullSecrets:
      - name: docker-repo-credential
      serviceAccountName: feature-store-mgr-dev-sa

 

service account, credential 등 생성해야 하는 것들이 많으므로 수동 생성은 번거롭습니다.

deploy 스크립트를 작성하고 이를 이용해 파드를 생성합니다.

#!/bin/bash

kubectl create ns dev-feature-store

kubectl apply -f ./docker-repo-credential.yaml -n dev-feature-store
kubectl apply -f ./feature_store_service_account.yaml 
kubectl apply -f ./feature-store-dev.yaml -n dev-feature-store

2. 현상

이때 문제가 발생했는데요.
같은 파일에서 정의한 service는 생성이 되는데, deployment는 생성이 되지 않았습니다.

위에서 말씀드린 바와 같이 파드 생성 자체가 실패했기 때문에 파드 로그 확인이 불가능합니다.  


3. 해결

yaml 파일에 잘못된 부분이 있나 하는 마음에 아무리 확인해도 문제가 없어 보입니다.

volume, image, credential 모두 정상적으로 생성이 되어 있습니다.
해서 kubernetes event를 확인해 보기로 합니다.
 
아래 명령어를 이용해 생성과 관련된 이벤트를 확인할 수 있습니다.

kubectl get events -n dev-feature-store --sort-by='.metadata.creationTimestamp'

LAST SEEN   TYPE      REASON                 OBJECT                                              MESSAGE
4s          Normal    ExternalProvisioning   persistentvolumeclaim/data-feature-store-db-dev-0   waiting for a volume to be created, either by external provisioner "driver.longhorn.io" or manually created by system administrator
4s          Normal    Provisioning           persistentvolumeclaim/data-feature-store-db-dev-0   External provisioner is provisioning volume for claim "dev-feature-store/data-feature-store-db-dev-0"
2s          Warning   FailedScheduling       pod/feature-store-db-dev-0                          0/3 nodes are available: 3 pod has unbound immediate PersistentVolumeClaims.
4s          Normal    SuccessfulCreate       statefulset/feature-store-db-dev                    create Claim data-feature-store-db-dev-0 Pod feature-store-db-dev-0 in StatefulSet feature-store-db-dev success
4s          Normal    SuccessfulCreate       statefulset/feature-store-db-dev                    create Pod feature-store-db-dev-0 in StatefulSet feature-store-db-dev successful
1s          Warning   FailedCreate           replicaset/feature-store-mgr-dev-6b7677f5f8         Error creating: pods "feature-store-mgr-dev-6b7677f5f8-" is forbidden: error looking up service account dev-feature-store/feature-store-mgr-dev-sa: serviceaccount "feature-store-mgr-dev-sa" not found
4s          Normal    ExternalProvisioning   persistentvolumeclaim/feature-store-mgr-dev-pvc     waiting for a volume to be created, either by external provisioner "driver.longhorn.io" or manually created by system administrator
4s          Normal    Provisioning           persistentvolumeclaim/feature-store-mgr-dev-pvc     External provisioner is provisioning volume for claim "dev-feature-store/feature-store-mgr-dev-pvc"
4s          Normal    ScalingReplicaSet      deployment/feature-store-mgr-dev                    Scaled up replica set feature-store-mgr-dev-6b7677f5f8 to 1

 
로그 상에서  Service Account 가 존재하지 않아 pod를 생성하지 못한 것으로 보입니다. 
확인을 해볼까요? 

 

정말로 service account 가 생성되지 않았습니다.

분명히 생성했는데..?라고 생각 했지만 deploy 스크립트를 다시 확인해 보니 service account 생성 명령어에 네임스페이스가 지정되지 않아 service account 가 적절한 곳에 생성이 되지 않았습니다.
service account를 생성해 줍니다.

[root@67-170-m feature-store-domain]# kubectl apply -f ./feature_store_service_account.yaml -n dev-feature-store

 

생성 여부를 다시 확인해보겠습니다.

 

다시 파드를 생성하면 정상적으로 생성됩니다.

 

파드 미생성 시 이벤트 로그를 확인하면 트러블 슈팅에 도움이 될 듯합니다.

누군가에겐 도움이 되었길 바라며, 전 이만 물러갑니다~

 

728x90