K3s 에 Rancher를 설치하는 방법을 탐색해보고. 필요한 요건을 파악하기 위해 다양한 시도를 하며 남긴 문서입니다.
rancher를 즉시 nodport 로 설치하시려면, 맨 아래 결론부에 작성된 코드를 참고하세요.
Rancher는 HTTPS 을 사용해야만 한다. 따라서 인증서 관련된 설정이 필요하다. 기본값은 cert-manager 를 이용한다. 이걸 먼저 설치해두면 rancher가 설치될 때 인증서 관련된 설정도 스스로 수행한다.
cert-manager 설치
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true
약 3분정도의 시간 필요. 1.15 이상 버전에서는 crds.enalbed=true 옵션을 써야한다.
Rancher 설치하기
stable 버전으로 설치를 시도하였으나, K3s 버전이 훨씬 높아 다음 에러가 발생하였다.
Error: INSTALLATION FAILED: chart requires kubeVersion: < 1.33.0-0 which is incompatible with Kubernetes v1.33.3+k3s1그래서 rancher latest 로 설치했다.
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
kubectl create namespace cattle-system
helm install rancher rancher-latest/rancher -n cattle-system \
--set ingress.enabled=false \
--set service.type=NodePort \
--set service.ports.https.nodePort=30443 \
--set bootstrapPassword=admin해보니 nodeport 가 30443 이 아닌 것과, relicas 가 굳이 3일 필요는 없어서 1로 수정해야 한다. rancher 설치 후 pw 가 다르다는 이슈가 뜰 경우, 초기화를 해서 새로운 PW를 사용하면 로그인이 가능하다. 아마 PW 가 너무 짧에서 안되는 것으로 보인다.
다시 찾아보니 저 helm 옵션 중 일부는 유효하지 않은 것으로 보인다.
kubectl -n cattle-system exec $(kubectl -n cattle-system get pods -l app=rancher | grep '1/1' | head -1 | awk '{ print $1 }') -- reset-password해보니 제대로 확신하기 위해 여러번 설치 테스트가 필요
- cert-manager가 진짜 필요할까? -> 둘다 제거 후 RANCHER만 다시 설치해보기 - NodePort 방식에서는 없어도 됨.
- rancher 의 replicas 를 시작부터 1로 설정할 순 없을까? - 가능
- rancher 에 password는 기본값으로 쓰거나 충분히 길게 쓰면 바로 로그인에 성공하지 않을까? - 충분히 길게 하니 됨.
- NODEPORT 설정값을 제대로 적용하는 다른 방법이 있을 것 같은데 가이드를 읽고 해보자.
- nodeport 가 권고되지 않는다. 대신 ingress를 쓰려면 domain이 필요하다.
- domain을 설정할 쉽고 적절한 전략이 없다면
- 그냥 아무 domain 정하고 모든 pc 마다 개별로 hosts 를 지정하거나
- nodeport 를 쓰던가.
알아보니 애초에 nodeport 로의 접근보다 ingress를 통한 접근이 권고된다. 약간 찾아보니, Ingress로 쓰는게 아무래도 쿠베스럽게 사용하는 방법인 것 같다. 다만 ingress 사용법을 또 따로 학습해야 하는 상황이 발생.
실험을 하려고 해보니 일단 삭제부터가 도전이었다. rancher-cleanup 프로젝트를 다운로드 받아 그 안에 있는 ./cleanup.sh 를 수행시키니 작동됨. 한번 삭제할 때 약 10분정도 시간 소요된다.
이제 최소구성을 찾고 이해하기 위한 실험을 해보자
실험을 하다보니, helm install 이 실패 로그를 남기고 중단되어도, 설치 자체는 진행이 계속 된다. 그래서 한번의 실패가 롤백되지 않고 계속 설치를 진행한다. 한번 실패할 때마다 빠르게 helm 을 삭제해야 한다.
helm uninstall rancher -n cattle-system빠르게 수행하지 못했다면, helm uninstall 이후에도 여러 ns 가 남아있게 된다. 이 경우 매번 cleanup 을 수행해야 아주 깔끔하게 진행될 것 같다.
실험
- cert-manage 없이 설치시도
helm install rancher rancher-latest/rancher -n cattle-system \
--namespace cattle-system \
--create-namespace
--set replicas=1
속성을 하나씩 이해해보자.
- rancher는 기본적으로 cert-manager 를 쓴다. (자체발행 서명키 사용) 이걸 설정하는 속성이
ingress.tls.source. 이는 rancher가 기본값이다. 만약 letsEncrypt 를 쓰고 있거나, 자체 privateCA 를 쓰고 있다면, 이 속성을 변경하고privateCA값을 true 로 설정해야 한다.
- cert-manager 설치 후 설치
Error: INSTALLATION FAILED: failed to create resource: Ingress.networking.k8s.io "rancher" is invalid: spec.tls[0].hosts[0]: Invalid value: "" a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character즉 hostname 을 제대로된 값을 입력하지 않아서 나는 문제라는 거다.
나는 저 도메인, hostname을 강제하는 시스템이 이해가 안간다. 저걸 설치할 땐 /etc/hosts 를 수정해서 할 수도 있겠지. 그러면 다른 동일 망 내 다른 pc들은? 그들도 일일이 저 dns 를 수기로 입력해야 한다는거 아니냐? 아니면 외부에선 걍 ip 로 접근하는거야?
저런 도메인 형식을 FQDN이라고 한다. 이걸 요구하는 이유는 Rancher 의 기본설정이 접속시 Ingress 를 써야하기 때문이라고. Ingress 가 L7 게이트웨이라 들어온 요청을 어떤 서비스로 보낼지 host 해더 경로로 보기 때문.
만약 사설도메인을 운영한다면, 최상위 도메인은 뭘 쓰는게 좋은가?
- .local 은 피해야 한다. 이는 mDNS 라는 프로토콜에서 사용하므로 교란이 일어날 수 있다. (로컬 네트워크에서 장비들끼리 정보를 교환한다) 해당 프로토콜을 잘 안다면 오히려 잘 써먹을 방법을 찾을지도.
- home.arpa 가 2018년 기준으로 홈네트워크용 dns 값으로 사용되기로 결정되었다. 이는 결국 사설 DNS를 운영하는 것과 같긴 하다. 다만 DNS를 직접 운영하고 조작할 수 있다면, 굳이 저 dns를 써야할까? 싶기도 함.
그러나 사설DNS를 이용하는 것은 네트워크 구성상 전체 설계 변경에 해당하는 작지 않은 일이다. 단순히 rancher 사용을 위해 지금 공부하는 것은 수지타산이 맞지 않으므로 이 방법은 pass.
- Ingress 대신 Nodeport 설치
helm install rancher rancher-latest/rancher -n cattle-system \
--namespace cattle-system \
--create-namespace \
--set replicas=1 \
--set ingress.enabled=false \
--set service.type=NodePort \
--set bootstrapPassword='<나만의 PW>'놀랍게도 설치 성공 메세지가 뜸. 몇분정도 후 설정이 될거라 함. 접속에 성공함.
- Cert-manager 없이 3번 설치
Ingress 를 안쓸꺼면 cert-manager 는 필요한가? Ingress 를 쓰지 않아도 https는 쓰지않나?
1번과 2번의 버그가 같다는 점에서, cert-manager 없이도 3번만 적용하면 가능하리라는 생각이 든다
시도해보니, 설치 성공 메세지가 뜬다. 접속도 된다.
로그인 성공 후 서버ip, port 입력란을 그대로 사용했는데 오류가 발생. 조금 후 다시 시도하니 성공. 아무래도 설치 완료까지 시간이 걸렸던 것으로 추정.
아.. 착각이었다. 이건 기존에 cert-manager 를 설치했던 흔적이 남아있기에 가능했던 것이고, 실제로 바로 rancher 를 설치하려고 하면 아래와 같이 에러가 발생한다.
Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: resource mapping not found for name: "rancher" namespace: "" from "": no matches for kind "Issuer" in version "cert-manager.io/v1"결론
아래 명령어를 복붙한다면, Rancher 를 곧바로 사용할 수 있다.
- cert-manager 설치
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true
- rancher latest 설치
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
helm repo update
helm install rancher rancher-latest/rancher -n cattle-system \
--namespace cattle-system \
--create-namespace \
--set replicas=1 \
--set ingress.enabled=false \
--set service.type=NodePort내 홈서버에서는 설치 완료까지 약 8분정도 필요했다. 이후 다음 명령어나, lens 를 통해 nodeport 를 파악하여 접속하면 된다.
kubectl get svc -n cattle-system접속하고 나면 로그인에 필요한 초기 비밀번호를 알아내는 방법을 제안하는데, 아래 명령어를 치면 된다.
kubectl kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{"\n"}}'
이후 새로운 password를 다시 입력할 수 있다.
이 방법은 다음과 같은 상황에서 추천한다.
- 단일 PC에서 K3s 운영
- NodePort 운영이 가능한 환경
- Rancher 가 뭔지 일단 한번 써보고 싶을 때
사용후기
- 실용성이 애매함
무언가 문제가 생겼을 때 rancher 로 상태를 확인할 수 있기를 기대했는데, 정작 kube 에 문제가 생기니 모든 서비스가 내려갔고 Rancher 도 내려가서 접속이 안된다. - 자원을 많이 씀
Rancher 를 설치하고 나면 다음과 같이 수많은 namespace들이 생기게 된다.

- 8/26일쯤 설치했는데 그 때 수치가 딱 뛰는게 보인다.
- RAM 만해도 1~2GB 를 하는 것으로 보인다.

이후 kube 를 재설치해야 할 일이 생겨서 우선 내려둔 상태. 나중에 다시 사용해 볼 예정이다.
Member discussion: