Kubernetes에서 Consul 제거(언인스톨)하기
Kubernetes에서 Consul 제거(언인스톨)하기
이 문서에서는 Helm 명령이나 Consul K8s CLI를 사용하여 Kubernetes에서 Consul을 제거하는 방법을 설명해 드려요.
출처: 문서
본문
Consul K8s CLI
consul-k8s uninstall 명령을 실행해 Kubernetes에서 Consul을 제거해요. 해당 옵션을 사용해 설치 이름, 네임스페이스, 데이터 보존 동작을 지정할 수 있어요. 기본적으로 언인스톨은 Consul on Kubernetes가 프로비저닝한 시크릿과 PVC를 보존합니다.
$ consul-k8s uninstall <OPTIONS>
다음 예시에서는 확인 프롬프트 없이 Consul을 제거하고 데이터까지 삭제해요.
$ consul-k8s uninstall -auto-approve=true -wipe-data=true
자세한 내용은 Consul K8s CLI 참조 문서를 참고하세요.
Helm 명령
helm uninstall을 실행하고 Helm이 삭제하지 않는 리소스를 수동으로 제거해요.
Helm 차트는 언인스톨 시 CRD 삭제를 자동화하지만, CRD 삭제가 실행 중인 Consul K8s 컨트롤러에 의존하기 때문에 때로는 그 CRD에 연결된 파이널라이저(finalizers)가 완료되지 않을 수 있어요. 이전에 생성된 Consul on Kubernetes용 CRD가 삭제되었는지 확인하여, 같은 Kubernetes 클러스터에 Consul on Kubernetes를 이후에 다시 설치할 때 차단되지 않도록 하세요.
$ kubectl delete crd --selector app=consul
(선택) Consul이 전용 네임스페이스에 설치된 경우, kubeConfig 컨텍스트를 consul 네임스페이스로 설정해요. 그렇지 않으면 이후의 명령에 --namespace consul을 포함해야 합니다.
$ kubectl config set-context --current --namespace=consul
Consul을 설치할 때 사용한 릴리스 이름을 지정해 helm uninstall <release-name> 명령을 실행해요.
$ helm uninstall consul
release "consul" uninstalled
Helm 릴리스를 삭제한 후에는 Consul의 데이터를 저장하는 영구 볼륨에 대한 PersistentVolumeClaim(PVC)을 삭제해야 해요. Helm의 버그로 인해 PVC가 삭제되지 않습니다. 다음 명령을 실행하세요.
$ kubectl get pvc --selector="chart=consul-helm"
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-default-hashicorp-consul-server-0 Bound pvc-32cb296b-1213-11ea-b6f0-42010a8001db 10Gi RWO standard 17m
data-default-hashicorp-consul-server-1 Bound pvc-32d79919-1213-11ea-b6f0-42010a8001db 10Gi RWO standard 17m
data-default-hashicorp-consul-server-2 Bound pvc-331581ea-1213-11ea-b6f0-42010a8001db 10Gi RWO standard 17m
$ kubectl delete pvc --selector="chart=consul-helm"
persistentvolumeclaim "data-default-hashicorp-consul-server-0" deleted
persistentvolumeclaim "data-default-hashicorp-consul-server-1" deleted
persistentvolumeclaim "data-default-hashicorp-consul-server-2" deleted
참고: 이 작업은 Consul에 저장된 모든 데이터를 삭제하며, 다른 백업을 하지 않았다면 복구할 수 없어요.
ACL을 활성화하고 설치했다면, 이어서 ACL 시크릿을 삭제해야 해요.
$ kubectl get secrets --field-selector="type=Opaque" | grep consul
consul-acl-replication-acl-token Opaque 1 41m
consul-bootstrap-acl-token Opaque 1 41m
consul-client-acl-token Opaque 1 41m
consul-connect-inject-acl-token Opaque 1 37m
consul-controller-acl-token Opaque 1 37m
consul-federation Opaque 4 41m
consul-mesh-gateway-acl-token Opaque 1 41m
삭제하려는 시크릿이 모두 Consul이 만든 것이며, 다른 사용자가 consul이라는 단어로 만든 것이 아닌지 확인하세요.
$ kubectl get secrets --field-selector="type=Opaque" | grep consul | awk '{print $1}' | xargs kubectl delete secret
secret "consul-acl-replication-acl-token" deleted
secret "consul-bootstrap-acl-token" deleted
secret "consul-client-acl-token" deleted
secret "consul-connect-inject-acl-token" deleted
secret "consul-controller-acl-token" deleted
secret "consul-federation" deleted
secret "consul-mesh-gateway-acl-token" deleted
secret "consul-gossip-encryption-key" deleted
tls.enabled로 설치했다면 남겨진 ServiceAccount를 삭제하기 위해 다음 명령을 실행해요.
$ kubectl get serviceaccount consul-tls-init
NAME SECRETS AGE
consul-tls-init 1 47m
$ kubectl delete serviceaccount consul-tls-init
serviceaccount "consul-tls-init" deleted
(선택) Consul on Kubernetes 설치를 위해 전용으로 사용한 네임스페이스(다음 예시에서는 consul)를 삭제해요.
$ kubectl delete ns consul