Skip to content

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

Install the Rancher Helm Chart

Rancher는 전체적으로 helm으로 설치하는 느낌이다. 셋 중 하나의 저장소를 추가해야 한다.

Latest
Recommended for trying out the newest features
helm repo add rancher-latesthttps://releases.rancher.com/server-charts/latest
Stable
Recommended for production environments
helm repo add rancher-stablehttps://releases.rancher.com/server-charts/stable
Alpha
Experimental preview of upcoming releases.
helm repo add rancher-alphahttps://releases.rancher.com/server-charts/alpha

INFORMATION

알파(rancher-alpha) 저장소는 설치 시 --devel옵션을 추가해야 정상 설치된다.

필요하면 저장소 업데이트:

helm repo update

Create a Namespace for Rancher

차트에서 생성된 리소스가 설치되어야 하는 Kubernetes 네임스페이스를 정의해야 합니다. 이는 항상 cattle-system이어야 합니다.

kubectl create namespace 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.crttls.key 사용.
사설 CA를 사용하는 경우 해당 인증서도 업로드해야 합니다. 이는 이 사설 CA가 귀하의 노드에서 신뢰되지 않을 수 있기 때문입니다. Rancher는 해당 CA 인증서를 가져와서 체크섬을 생성합니다. 이 체크섬은 다양한 Rancher 구성 요소가 Rancher에 대한 연결을 확인하는 데 사용할 것입니다.

Configuration

Helm Chart Option

Requires cert-manager

Rancher Generated Certificates (Default)

ingress.tls.source=rancher

yes

Let’s Encrypt

ingress.tls.source=letsEncrypt

yes

Certificates from Files

ingress.tls.source=secret

no

Install cert-manager

cert-manager 를 설치. 자세한 내용은 해당 항목 참조.

주의할 점으로 Rancher 의 문서 사이트에서는 CDRs를 설치한 후 jetstack 저장소를 추가하는데 cert-manager 공식 사이트에서는 kubectl apply -f ... 하면 한번에 전부 설치된다.

아래 주소의 마지막에 ~.crds.yaml를 확인하면 된다:

잘 설치되었는지 확인하자:

kubectl get pods --namespace cert-manager

다음과 같이 출력된다:

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 버전은 --devel 옵션도 추가해야 한다.

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가 성공적으로 롤아웃되었는지 확인합니다.

kubectl -n cattle-system rollout status deploy/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

디플로이를 확인:

kubectl -n cattle-system get deploy rancher

다음과 같이 출력되면 대략 안심

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
rancher   3/3     3            3           15m

이제 설치 때 입력한 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

kubectl -n cattle-system create secret tls tls-rancher-ingress \
  --cert=tls.crt \
  --key=tls.key

제거 방법

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

$ docker run -d --restart=unless-stopped -p 80:8080 rancher/server

The UI and API are available on the exposed port 80.

내가 설치한 방법 및 순서

Blackhole#Rancher 항목 참조.

Troubleshooting

ERROR: DNS Checking loopback IP address

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해야 한다.

Docker를 사용하는 방법은 이 곳을 참조

Container orchestration

Tools

See also

Favorite site