Rancher
Rancher is a complete, open source platform for deploying and managing containers in production. It includes commercially-supported distributions of Kubernetes, Mesos, and Docker Swarm, making it easy to run containerized applications on any infrastructure.
Plaforms
이러한 Docker 클러스터링을 구축하는 방법으로 몇가지 오픈소스를 사용할 수 있는데, Docker Swarm은 Docker에서 배포하는 네이티브 클러스터링 툴입니다. Docker Swarm으로 클러스터링을 구성하면, 기존에 사용하던 Docker API와 크게 다를 것없이 클러스터링을 사용할 수 있습니다. 그러나 클러스터링 API가 부실해서 Cross-Host 오토 스케일 등은 알아서 개발해주어야 합니다.
Rancher은 커뮤니티에서 최근 각광받고있는 오픈소스인데, 각 호스트에 Agent용 컨테이너를 올려서 Management 컨테이너와의 통신으로 클러스터링을 구축합니다. 그래서 그냥 Manage 컨테이너와 Agent 컨테이너만 올리면 클러스터링 구성이 끝납니다. 그리고 Docker Swarm에 비해 Cross-Host 컨테이너 관리나 네트워크, 로드 밸런서 등이 구현되어있고 특히 웹 UI를 제공하고 있어서 컨테이너 생성이나 관리가 편리합니다. 저는 Rancher를 쓰고 나서부터는 이미지 빌드를 제외하고는 웹에서 거의 모든 것을 처리하고 있습니다.
그 다음으로 Volume 플러그인인데, Flocker라는 오픈소스가 거의 독보적인 것 같습니다. 아마존의 EBS나 오픈스택의 Cinder, EMC, VMware, Dell 등 벤더사의 스토리지를 지원하기 때문에 스냅샷이나 백업/복구 등 벤더사가 지원하는 기능을 추가적으로 사용할 수 있습니다.
Convoy는 Rancher의 하위 프로젝트인데, Rancher를 사용하고 EBS, GFS, NFS/VFS 정도의 스토리지만 사용한다면 충분히 괜찮은 플러그인인 것 같습니다.
Install/Upgrade Rancher on a Kubernetes Cluster
Prerequisites
- Kubernetes Cluster -> k3s로 설치함.
- Ingress Controller -> k3s로 설치하면 기본 설정됨.
- cert-manager -> Rancher의 Self-Signed Cert 또는 Let's Encrypt 를 사용할 경우 필요. 파일로 적용할 경우 필요없음.
- CLI Tools
Install the Rancher Helm Chart
Rancher는 전체적으로 helm으로 설치하는 느낌이다. 셋 중 하나의 저장소를 추가해야 한다.
- Latest
- Recommended for trying out the newest features
-
helm repo add rancher-latest
https://releases.rancher.com/server-charts/latest
- Stable
- Recommended for production environments
-
helm repo add rancher-stable
https://releases.rancher.com/server-charts/stable
- Alpha
- Experimental preview of upcoming releases.
-
helm repo add rancher-alpha
https://releases.rancher.com/server-charts/alpha
INFORMATION |
알파(rancher-alpha) 저장소는 설치 시 |
필요하면 저장소 업데이트:
Create a Namespace for Rancher
차트에서 생성된 리소스가 설치되어야 하는 Kubernetes 네임스페이스를 정의해야 합니다. 이는 항상 cattle-system
이어야 합니다.
Choose your SSL Configuration
Rancher 관리 서버는 기본적으로 보안되도록 설계되었으며 SSL/TLS 구성이 필요합니다.
INFORMATION |
외부 접속을 위한 SSL/TLS 를 종료하려면 #TLS termination on an External Load Balancer 항목 참조. |
Rancher 서버에서 TLS 종료에 사용되는 인증서 소스에 대해 권장되는 세 가지 옵션이 있습니다.
- Rancher 생성 TLS 인증서
- cert-manager 이 경우 클러스터에 설치해야 합니다 . Rancher는 cert-manager인증서를 발급하고 유지하는 데 활용합니다. Rancher는 자체 CA 인증서를 생성하고 해당 CA를 사용하여 인증서에 서명합니다. cert-manager그런 다음 해당 인증서를 관리할 책임이 있습니다.
- Let's Encrypt
- cert-manager는 Let's Encrypt에서 발급한 인증서를 얻는 데 필요한 모든 작업(요청 및 유효성 검사 포함)을 수행하는 Let's Encrypt용 특수 발급자와 결합됩니다.
- 이 구성은 HTTP 검증(HTTP-01)을 사용하므로 로드 밸런서에는 공용 DNS 레코드가 있어야 하며 인터넷에서 액세스할 수 있어야 합니다.
- 자체 인증서 가져오기
- 이 옵션을 사용하면 자체 공용 또는 개인 CA 서명 인증서를 가져올 수 있습니다. Rancher는 해당 인증서를 사용하여 웹소켓 및 HTTPS 트래픽을 보호합니다.
- 이 경우 이 인증서(및 관련 키)를
tls.crt
및tls.key
사용. - 사설 CA를 사용하는 경우 해당 인증서도 업로드해야 합니다. 이는 이 사설 CA가 귀하의 노드에서 신뢰되지 않을 수 있기 때문입니다. Rancher는 해당 CA 인증서를 가져와서 체크섬을 생성합니다. 이 체크섬은 다양한 Rancher 구성 요소가 Rancher에 대한 연결을 확인하는 데 사용할 것입니다.
Configuration | Helm Chart Option | Requires cert-manager |
Rancher Generated Certificates (Default) | | yes |
Let’s Encrypt | | yes |
Certificates from Files | | no |
Install cert-manager
cert-manager 를 설치. 자세한 내용은 해당 항목 참조.
주의할 점으로 Rancher 의 문서 사이트에서는 CDRs를 설치한 후 jetstack 저장소를 추가하는데 cert-manager 공식 사이트에서는 kubectl apply -f ...
하면 한번에 전부 설치된다.
아래 주소의 마지막에 ~.crds.yaml
를 확인하면 된다:
- cert-manager 공식 사이트 - https://github.com/cert-manager/cert-manager/releases/download/v1.15.0/cert-manager.yaml
- Rancher 문서 - https://github.com/cert-manager/cert-manager/releases/download/<VERSION>/cert-manager.crds.yaml
잘 설치되었는지 확인하자:
다음과 같이 출력된다:
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
Install Rancher with Helm and Your Chosen Certificate Option
Rancher를 설치하는 정확한 명령은 인증서 구성에 따라 다릅니다.
INFORMATION |
Alpha 버전은 |
Rancher 생성 TLS 인증서
helm install rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin
Let's Encrypt
helm install rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin \
--set ingress.tls.source=letsEncrypt \
--set letsEncrypt.email=[email protected] \
--set letsEncrypt.ingress.class=nginx
자체 인증서 가져오기
helm install rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org \
--set bootstrapPassword=admin \
--set ingress.tls.source=secret
기타
Rancher 차트 구성에는 특정 환경에 맞게 설치를 사용자 정의할 수 있는 다양한 옵션이 있습니다. 다음은 몇 가지 일반적인 고급 시나리오입니다.
나의 경우
Blackhole#Rancher 항목 참조.
Verify that the Rancher Server is Successfully Deployed
Rancher가 성공적으로 롤아웃되었는지 확인합니다.
다음과 같은 로그가 출력되고...
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
좀 기다리면 레플리카가 하나씩 올라간다:
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 2 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
디플로이를 확인:
다음과 같이 출력되면 대략 안심
이제 설치 때 입력한 hostname 을 사용하여 HTTPS로 접속하면 된다. 위에 입력대로 했다면 https://rancher.your.com/ 으로 접속 ㄱㄱ.
TLS termination on an External Load Balancer
일반 80/tcp 및 443/tcp를 Rancher 관리 클러스터 노드에 전달하여 로드 밸런서를 L4 밸런서로 구성하는 것이 좋습니다. 클러스터의 수신 컨트롤러는 포트 80의 http 트래픽을 포트 443의 https로 리디렉션합니다.
Rancher 클러스터의 수신(외부에서 인바운드)하는 L7 로드 밸런서에서 SSL/TLS를 종료할 수 있습니다. 옵션을 사용 --set tls=external
하고 모든 Rancher 클러스터 노드의 포트 http 80에서 로드 밸런서를 가리킵니다. 그러면 http 포트 80에 Rancher 인터페이스가 노출됩니다. Rancher 클러스터에 직접 연결할 수 있는 클라이언트는 암호화되지 않습니다. 이 작업을 수행하기로 선택한 경우 네트워크 수준의 직접 액세스를 로드 밸런서로만 제한하는 것이 좋습니다.
만약 사설 CA 서명 인증서를 사용하는 경우
사설 CA 서명 인증서 추가후
``--set privateCA=true`` 를 적용해야 한다.
로드 밸런서는 수명이 긴 웹소켓 연결을 지원해야 하며 Rancher가 링크를 올바르게 라우팅할 수 있도록 프록시 헤더를 삽입해야 합니다.
Adding TLS Secrets
제거 방법
Rancher는 보통 Helm을 통해 설치되므로, 먼저 Helm Release를 삭제해야 합니다. 설치된 Helm 차트를 삭제하면 관련 리소스도 함께 삭제됩니다.
## Rancher는 보통 Helm을 통해 설치되므로, 먼저 Helm Release를 삭제해야 합니다. 설치된 Helm 차트를 삭제하면 관련 리소스도 함께 삭제됩니다.
helm uninstall rancher -n cattle-system
## Rancher 설치 시 사용된 네임스페이스를 삭제합니다. 기본적으로 cattle-system 네임스페이스가 사용됩니다.
kubectl delete namespace cattle-system
## Rancher 설치 시 사용된 Custom Resource Definition(CRD)을 삭제해야 합니다. 다음 명령어를 사용하여 CRD를 삭제합니다.
kubectl get crd | grep rancher | awk '{print $1}' | xargs kubectl delete crd
## Rancher 설치 중 생성된 리소스 중 일부는 Helm 릴리즈 삭제로는 제거되지 않을 수 있습니다. 이러한 리소스를 수동으로 제거해야 합니다.
kubectl get all -n kube-system | grep rancher | awk '{print $1}' | xargs kubectl delete -n kube-system
## 또한, Rancher와 관련된 클러스터 역할 및 바인딩, 서비스 어카운트 등을 삭제할 수 있습니다.
kubectl delete clusterrolebinding rancher
kubectl delete clusterrole rancher
kubectl delete sa rancher -n kube-system
## Rancher의 데이터는 Persistent Volume에 저장될 수 있습니다. 관련 PVC를 삭제합니다.
kubectl get pvc -n cattle-system
kubectl delete pvc <pvc-name> -n cattle-system
Launching Management Server
The UI and API are available on the exposed port 80.
내가 설치한 방법 및 순서
Blackhole#Rancher 항목 참조.
Troubleshooting
ERROR: DNS Checking loopback IP address
- Add FAQ on localhost reference in /etc/resolv.conf
- Reference to localhost present in /etc/resolv.conf
Host 설치가 정상적으로 진행되지 않을 경우 docker logs [CONTAINER_ID]
를 사용해 로그를 확인하면 아래와 같은 현상이 나타난다.
ERROR: DNS Checking loopback IP address 127.0.0.0/8, localhost or ::1 configured as the DNS server on the host file /etc/resolv.conf, can't accept it
이 경우 Docker의 DNS servers를 재 설정 하거나 dnsmasq를 Diable해야 한다.
Container orchestration
Tools
See also
- Docker
- suse