Kubernetes

Namespace - Terminating

빠빠담 2022. 1. 1. 22:03
반응형

 

문제점

  • ingress에 삭제 명령어를 --force 방식으로 전달해도 삭제되지 않고 유지됨
  • ingress를 삭제하고 namespace를 삭제할때 Terminating 에서 멈춘 상태로 유지됨

해결

  1. ingress가 삭제되지 않음

EKS로 k8s 클러스터를 운영하던 상태였는데 ingress 설정이 꼬인건지 삭제되지 않음
AWS console에서 로드벨런서와 대상그룹을 직접 삭제하고

$ kubectl edit ing ${ingress-name} -n ${namespace}

ingress 수정으로 들어가서 finalizer를 aws로 설정된 부분을 삭제하여
ingress를 삭제할 수 있었다.

https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/

Finalizers are namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion.
Finalizers alert controllers to clean up resources the deleted object owned.

  1. namespace Terminating 상태 유지
$ kubectl get ns

NAME              STATUS        AGE
buf-fg            Terminating   3d11h

위와 같이 네임스페이스가 멈춘상태
분명히 다른 오브젝트들을 모두 삭제했고 1번의 ingress도 삭제한 상태인데

{
    "lastTransitionTime": "2022-01-01T05:34:10Z",
    "message": "Some content in the namespace has finalizers remaining: elbv2.k8s.aws/resources in 2 resource instances",
    "reason": "SomeFinalizersRemain",
    "status": "True",
    "type": "NamespaceFinalizersRemaining"
}

두개의 리소스가 남아있다고 나오고 있었다

kubectl api-resources
# k8s에서 사용가능한 모든 objects 리스트

kubectl api-resources --verbs=list --namespaced -o name \
  | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>
# 특정 namespace에서 사용중인 objects 리스트

위 명령어를 통해 해당 namespace에 존재하는 모든 리소스를 찾을 수 있었고

$ kubectl api-resources --verbs=list --namespaced -o name \
>   | xargs -n 1 kubectl get --show-kind --ignore-not-found -n buf-fg

NAME                                                             SERVICE-NAME    SERVICE-PORT   TARGET-TYPE   AGE
targetgroupbinding.elbv2.k8s.aws/k8s-buffg-rollouts-2611fa57be   rollouts-demo   80             instance      2d19h
targetgroupbinding.elbv2.k8s.aws/k8s-buffg-rollouts-27bc5c59f5   rollouts-demo   80             instance      3d6h

targetgroupbinding 객체가 남아 있는것을 확인했다
targetgroupbinding 은 AWS의 alb에서 뒷단의 targetgroup으로 binding에 대한 정보가 담겨져 있는것 같다

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/targetgroupbinding/targetgroupbinding/

The AWS LoadBalancer controller internally used TargetGroupBinding to support the functionality for Ingress and Service resource as well. It automatically creates TargetGroupBinding in the same namespace of the Service used.

위 두개의 targetgroupbinding 객체도 edit을 통해 finalizer를 삭제하여 모두 삭제할 수 있었고
이후 정상적으로 namespace도 삭제처리 되었다.

 

 


 

근본적인 문제점

 

- aws-load-balancer-controller 설정이 뒤틀리기 시작하며 인증과 관련된 문제가 발생

- aws-load-balancer-controller 를 삭제하고 재설정하여 정상적으로 운영 적용하였다.

반응형

'Kubernetes' 카테고리의 다른 글

K8S - On prem Install  (0) 2023.03.17
ArgoCD - Account setup  (0) 2022.01.02
AWS load balancer controller on Fargate - CrashLoopBackOff  (0) 2021.12.28
Docker network  (0) 2021.12.20
Helm - Basic  (0) 2021.12.19