helm 또는 kustomize를 통해 설치된 MetalLB를 kubectl delete ns metallb-system로 삭제하고 다시 helm이나 kustomize로 설치하는 경우 아래와 같은 문제가 발생함
[root@m-k8s ~]# helm install metallb edu/metallb \
> --namespace=metallb-system \
> --create-namespace \
> --set controller.tag=v0.8.3 \
> --set speaker.tag=v0.8.3 \
> --set configmap.ipRange=192.168.1.11-192.168.1.29
Error: rendered manifests contain a resource that already exists. Unable to continue with install: PodSecurityPolicy "speaker" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "metallb"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "metallb-system"
문제 원인:
clusterrole, podsecuritypolicy, clusterrolebinding은 네임스페이스를 구분하지 않는 클러스터의 전역 리소스이기 때문에 namespace 삭제한다고 삭제되지 않는다. 실제로 해당 리소스에 -n 옵션을 넣어 get을 해보면 네임스페이스 구분없이 모든 리소스가 조회된다.
문제 정의:
helm
또는kustomize
를 통해 설치된 MetalLB를kubectl delete ns metallb-system
로 삭제하고 다시helm
이나kustomize
로 설치하는 경우 아래와 같은 문제가 발생함문제 원인:
clusterrole
,podsecuritypolicy
,clusterrolebinding
은 네임스페이스를 구분하지 않는 클러스터의 전역 리소스이기 때문에 namespace 삭제한다고 삭제되지 않는다. 실제로 해당 리소스에 -n 옵션을 넣어 get을 해보면 네임스페이스 구분없이 모든 리소스가 조회된다.임시 방편(WorkAround)
직접 전역 리소스를 삭제한다.
해결 방안:
helm
또는kustomize
로 설치된 리소스는 설치한 도구를 통해서 삭제하는 것을 매우 권장함