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

더 알아보기 (Learn more)