Terminating 상태에 빠진 NS(namespaces)을 확인합니다.
kubectl get namespace
여러 방법을 시도해봤지만, 아래 코드가 제일 리소스들을 확실하게 지워주는 방법인 것 같습니다.
$ kubectl get namespace "stucked-namespace" -o json \
| tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
| kubectl replace --raw /api/v1/namespaces/"stucked-namespace"/finalize -f -
$ kfctl delete -f kfctl_istio-blah.yaml
# 실행하면 namespace가 finalizer 때문에 Terminating 상태로 멈추어 있습니다.
# 그래서 아래와 같이 finalizer를 해제 해주어야 합니다.
$ kubectl proxy &
$ NAMESPACE=kubeflow
$ kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
$ curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
# 그리고 그 외의 남아있는 리소스들을 처리해주어야 하는데요. 아래와 같이 순서대로 정리해 줍니다.
# 진행하다보면 순서에 따라서 finalizer로 보호되어 있는 리소스들이 발생합니다.
# 그럴 경우 해당 리소스를 edit하여 finalizer의 값을 []로 바꾸어준 후 다시 실행시키면 됩니다 :>
$ kubectl delete clusterroles katib-controller katib-ui ml-pipeline-persistenceagent ml-pipeline-viewer-controller-role pipeline-runner
$ kubectl delete clusterrolebindings katib-controller katib-ui ml-pipeline-persistenceagent ml-pipeline-scheduledworkflow ml-pipeline-viewer-crd-role-binding pipeline-runner
$ kubectl delete admission-webhook-mutating-webhook-configuration experiment-mutating-webhook-config istio-sidecar-injector mutating-webhook-configuration
$ for labels in app.kubernetes.io/part-of=kubeflow kustomize.component; do
kubectl api-resources --verbs=list -o name | grep -v '^componentstatuses$' \
| xargs -n 1 kubectl delete --all-namespaces --ignore-not-found -l app.kubernetes.io/part-of=kubeflow
done
$ kubectl delete crd applications.app.k8s.io
$ kubectl get configmap -o name -n kube-system | egrep 'cert-manager'|xargs kubectl delete -n kube-system
$ kubectl get mutatingwebhookconfiguration -o name | egrep 'kubeflow|katib'|xargs kubectl delete
# 만약 쿠브플로우를 설치하시면서 istio-system 도 같이 설치하셨다면 'kubeflow|dex|istio'로 변경
$ kubectl get crd -o name| egrep 'kubeflow|dex|istio|certmanager|cert-manager|applications.app.k8s.io'|xargs kubectl delete
$ kubectl get clusterrole -o name| egrep 'kubeflow|dex|istio'|xargs kubectl delete
$ kubectl get clusterrolebinding -o name| egrep 'kubeflow|dex|istio'|xargs kubectl delete
Terminating 상태에 빠져있던 NS들이 정상적으로 사라진 것을 확인합니다!
제대로 삭제되지 않았다면 kubeflow를 설치한 폴더에서 설치파일을 기반으로 다시 삭제 명령을 진행해봅니다.
kfctl delete -V -f kfctl_aws.yaml
이미 aws EKS 클러스터가 구성되어 있고, 권한을 위임받은 IAM(컨텍스트, 프로파일)이 있다는 조건 하에 진행됩니다.
~/.aws/credentials 를 수정합니다.
vim ~/.aws/credentials
- 익숙한 편집기를 사용해서 수정해주세요. value값에 루트 사용자의 액세스 키와 시크릿 액세스 키를 입력하면 됩니다.[default]
aws_access_key_id =
aws_secret_access_key =
~/.aws/config를 수정합니다.
[default]
sts_regional_endpoints=regional
region = ap-northeast-2
output = yaml
[profile <사용할 프로파일명>]
role_arn = <해당 arn>
source_profile = default
region = ap-northeast-2
output = yaml
컨텍스트를 받아옵니다.(kubeconfig를 업데이트합니다.)
aws eks update-kubeconfig \
--name environment-predict \
--alias env-predict \
--profile environment-predict
kubectl default context를 설정한 컨텍스트로 변경합니다. 내용을 잘 받아오는지 확인합니다.
export AWS_DEFAULT_PROFILE=<설정한 프로파일명>
aws sts get-caller-identity
이제 EKS에 kubeflow 설치 과정에서 IAM 권한이 없어 발생하는 이슈는 사라졌을 것입니다. 이제껏 실패했던 kubeflow 설치과정을 다시 천천히 따라가볼까요?
cluster가 없다면 다음과 같이 설정합니다.
Kubeflow 설치를 진행하기 전에 Amazon EKS에 Kubernetes 클러스터가 필요합니다. 클러스터가 이미 있는 경우 현재 kubectl컨텍스트가 설정 되었는지 확인 하고 다음 단계로 이동합니다.
wget https://github.com/kubeflow/kfctl/releases/download/v1.2.0/kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.2-branch/kfdef/kfctl_aws.v1.2.0.yaml"
aws eks describe-cluster --name <클러스터명>
으로 제대로 된 클러스터명인지 확인해보세요!export AWS_CLUSTER_NAME=<YOUR EKS CLUSTER NAME>
mkdir ${AWS_CLUSTER_NAME} && cd ${AWS_CLUSTER_NAME}
wget -O kfctl_aws.yaml $CONFIG_URI