본문 바로가기
DevOps/Kubernetes

[Rancher] Rancherd 쿠버네티스 HA 클러스터 구성 및 설치, 폐쇄망 대처 방법

by 마이자몽 🌻♚ 2021. 3. 11.

Rancher란?

Rancher는 쿠버네티스 클러스터를 배포하고 관리하기 위해 사용되는 툴입니다. web기반 GUI와 command line 인터페이스로 쿠버네티스 클러스터를 구성할 수 있고 확장 또한 쉽게 가능하다. 이미 존재하는 클러스터도 import하여 rancher 인터페이스로 관리가 가능하고 또한 제공되는 리포지토리에서 필요한 application들을 쉽게 배포할 수도 있다. kubernetes를 웹기반으로 쉽게 관리할 수 있다는게 가장 큰 장점이다.

 

Rancher 설치

사전 요구 사항

스펙

HA 구성을 위해 3개 노드 준비 --> 리소스 부족으로 2개 master와 1개 worker 노드로 구성한다.
  - master01.centos.test (Memory 4G)
  - master02.centos.test (Memory 4G)
  - worker01.centos.test (Memory 2G)
노드별 호스트 이름으로 인식할 수 있도록 /etc/hosts에 각각 추가해준다

root계정으로 진행한다.

 

방화벽 해제

rancher.com/docs/rancher/v2.x/en/installation/requirements/ports/

 

Port Requirements

Read about port requirements needed in order for Rancher to operate properly, both for Rancher nodes and downstream Kubernetes cluster nodes

rancher.com

rancher에서 사용하는 포트에 대한 정보입니다.

 

간편한 실습 진행을 위해 방화벽은 해제하고 진행합니다.

$ systemctl stop firewalld
$ systemctl disable firewalld

 

docker 설치

$ yum install -y docker
$ systemctl start docker

 

ntp 설정

$ yum install -y ntp
$ systemctl start ntpd
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*send.mx.cdnetwo 125.185.190.74   2 u    8   64    1    2.359   -0.734   0.454
 106.247.248.106 141.223.182.106  2 u    7   64    1    6.034    0.685   0.157
 dadns.cdnetwork 216.239.35.12    2 u    6   64    1    1.917    0.856   0.487

 

rancherd로 rancher 설치 및 첫 번째 server node 배포

첫번째로 배포되는 서버에 rancher-server를 설치하면서 Fixed Registration Address로 사용됩니다. Fixed Registration Address는 rancher에서 관리되는 쿠버네티스 노드들의 endpoint로 사용되며 아래 두가지 목적으로 사용됩니다.

  • Kubernetes API 접근
  • Kubernetes cluster에 노드를 추가하기 위해 사용

해당 서버에 rancher관련 Web UI를 접근할 수 있고 rancher-server가 실행될때 쿠버네티스의 클러스터를 구성하고 노드를 추가하게됩니다.

 

rancher config 설정

/etc/rancher/rke2/config.yaml

token: secret
tls-san:
  - master01.centos.test
  • token : 다른 노드에서 통신하기 위해 사용되는 token명이다.
  • tls-san : 서버 tls cert에 추가된다.

 

rancherd 설치

$ curl -sfL https://get.rancher.io | sh -
[INFO]  finding release for channel latest
[INFO]  using v2.5.6 as release
[INFO]  downloading checksums at https://github.com/rancher/rancher/releases/download/v2.5.6/sha256sum.txt
[INFO]  downloading tarball at https://github.com/rancher/rancher/releases/download/v2.5.6/rancherd-amd64.tar.gz
[INFO]  verifying installer
[INFO]  unpacking tarball file

가장 최신버전으로 rancherd installer를 설치한다.

"INSTALL_RANCHERD_VERSION=<version> sh -" 형태로 뒤 명령어를 수정하면 원하는 버전으로 설치가 가능하다. 버전에 대한 정보는 rancher git에서 확인 가능합니다.

github.com/rancher/rancher

 

rancher/rancher

Complete container management platform. Contribute to rancher/rancher development by creating an account on GitHub.

github.com

정상적으로 설치가 되었다면 rancherd 명령을 사용할 수 있습니다.

$ rancherd --help
NAME:
   rancherd - Rancher Kubernetes Engine 2

USAGE:
   rancherd [global options] command [command options] [arguments...]

VERSION:
   v2.5.6 (HEAD)

COMMANDS:
   server       Run management server
   agent        Run node agent
   reset-admin  Bootstrap and reset admin password
   help, h      Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug        Turn on debug logs [$RKE2_DEBUG]
   --help, -h     show help
   --version, -v  print the version

 

rancherd-server 서비스 실행

$ systemctl start rancherd-server

# 해당 명령으로 서비스가 실행하면서 클러스터 구축에 대한 로그를 팔로업할 수 있다.
$ journalctl -eu rancherd-server -f
...
...
3월 11 06:05:24 master01.centos.test rancherd[8961]: time="2021-03-11T06:05:24-05:00" level=info msg="Handling backend connection request [master01.centos.test]"

서비스가 올라오고 정상적으로 쿠버네티스 클러스터가 실행될때까지 시간이 다소 소요될 수 있습니다.

 

 

kubernetes cluster 확인

$ export KUBECONFIG=/etc/rancher/rke2/rke2.yaml PATH=$PATH:/var/lib/rancher/rke2/bin

$ kubectl get nodes
NAME                   STATUS   ROLES         AGE    VERSION
master01.centos.test   Ready    etcd,master   112s   v1.18.16+rke2r1

$ kubectl get daemonset rancher -n cattle-system
NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                         AGE
rancher   1         1         1       1            1           node-role.kubernetes.io/master=true   2m27s

클러스터에 rancher가 daemonset으로 배포가 된다.

 

 

rancher Web UI 세팅

$ rancherd reset-admin
INFO[0000] Server URL: https://master01.centos.test:8443 
INFO[0000] Default admin and password created. Username: admin, Password: mrmgsgxfwn5tjcfkft42bbtq4m7rxsgdgm28p9mqc5qdnlcq7kfmw9 

rancher admin 비밀번호를 reset하고 새롭게 비밀번호를 얻는다.

host명이나 ip로 서버의 8443포트로 접근한다.

 

지정된 비밀번호로 접속한다.

 

새로운 비밀번호를 설정하고 진행한다.

 

rancherd-server 서비스가 실행되면서 하나의 클러스터를 생성하고 하나의 노드가 추가 된것을 확인할 수 있습니다.

여기까지가 rancher 설치와 하나의 마스터 노드를 구성하는데까지 완료했습니다. 이후에는 워커노드를 추가하고 필요에 의하면 HA구성을 위해 master노드를 더 추가할 수 있습니다.

 

 

Rancher 쿠버네티스 HA 구성

쿠버네티스 HA 구성을 위해 master 노드를 하나더 추가하도록 하겠습니다.

방법은 위의 첫번째 노드를 등록하는 과정과 설정에대한 수정 이외에는 크게 차이나는 부분은 없습니다.

rancherd를 설치하게되면 rancherd-server와 rancherd-agent 서비스가 생기는데 rancherd-server로 실행해줘야 master 노드로 인식합니다.

 

master node 추가

rancher config 설정

/etc/rancher/rke2/config.yaml

server: https://master01.centos.test:9345
token: secret
tls-san:
  - master02.centos.test

 

rancherd 설치

$ curl -sfL https://get.rancher.io | sh -
[INFO]  finding release for channel latest
[INFO]  using v2.5.6 as release
[INFO]  downloading checksums at https://github.com/rancher/rancher/releases/download/v2.5.6/sha256sum.txt
[INFO]  downloading tarball at https://github.com/rancher/rancher/releases/download/v2.5.6/rancherd-amd64.tar.gz
[INFO]  verifying installer
[INFO]  unpacking tarball file

 

rancherd-server 서비스 실행

$ systemctl start rancherd-server

$ journalctl -eu rancherd-server -f
...
...
3월 11 07:01:34 master02.centos.test rancherd[9784]: time="2021-03-11T07:01:34-05:00" level=info msg="Handling backend connection request [master02.centos.test]"

 

Rancher 클러스터 선택 > Nodes

정상적으로 두번째 master가 올라온 것을 확인할 수 있습니다.

Roles의 역할을 봤을때 etcd와 Control Plane의 역할을 갖고 있다면 master node로 성공적으로 배포된것입니다.

 

 

Worker 노드 클러스터 추가

Worker 노드는 rancherd-server가 아닌 rancherd-agent 서비스를 실행한다. 마찬가지로 rancher config에 대한 부분과 agent로 실행하는것 이외에는 설치 내용이 동일하다.

 

Worker node 추가

rancher config 설정

/etc/rancher/rke2/config.yaml

server: https://master01.centos.test:9345
token: secret

worker의 경우 tls-san에 대한 정보는 기입하지 않고 server와 token만 지정합니다.

 

 

rancherd 설치

$ curl -sfL https://get.rancher.io | sh -
[INFO]  finding release for channel latest
[INFO]  using v2.5.6 as release
[INFO]  downloading checksums at https://github.com/rancher/rancher/releases/download/v2.5.6/sha256sum.txt
[INFO]  downloading tarball at https://github.com/rancher/rancher/releases/download/v2.5.6/rancherd-amd64.tar.gz
[INFO]  verifying installer
[INFO]  unpacking tarball file

 

rancherd-agent 서비스 실행

$ systemctl start rancherd-agent

$ journalctl -eu rancherd-agent -f
...
...
3월 11 07:26:59 worker01.centos.test rancherd[8940]: time="2021-03-11T07:26:59-05:00" level=info msg="labels have been set successfully on node: worker01.centos.test"

 

Rancher 클러스터 선택 > Nodes

woker노드가 추가된것을 확인할 수 있다.

이렇게 필요한 노드 수 만큼 클러스터에 추가하여 rancher를 통해서 쿠버네티스 클러스터 HA 구성을 할 수 있다.

 

폐쇄망 대처방법

외부로 통신이 가능한 환경이라면 위의 내용대로 크게 문제 없이 설치가 가능할겁니다. 하지만... 대부분의 프로덕션 환경은 폐쇄망으로 이루어져 있고 제한되는 부분이 많습니다. 사실 완전한 폐쇄망에서 Kubernetes와 Rancher를 설치해보지는 않았지만... 만약 외부로 통신가능한 프록시가 있다면 프록시 설정으로 후에 설치가 가능합니다.

 

rancherd 설치를 위한 프록시 설정

rancherd를 설치하는데 curl 명령을 사용하기 때문에 centos 운영체제에 대한 프록시를 설정해주면 된다. 즉, 환경변수를 이용해서 프록시 설정을 하게되면 프록시를 통해 외부 통신이 가능하다.

$ export HTTP_PROXY=<proxy address>:<proxy port>
$ export HTTPS_PROXY=<proxy address>:<proxy port>
$ export NO_PROXY=<exclude ip1>,<exclude ip2>...

프록시와 예외가 필요한 아이피를 지정하고 외부 통신으로 rancherd를 설치한다.

 

rancherd 서비스 실행에 필요한 프록시 설정

rancherd 서비스를 실행할때 docker hub를 통해 필요한 이미지들을 받게된다. 그래서 외부 통신이 불가능하면 rancherd를 통해 쿠버네티스 클러스터 구성을 할 수 없습니다. 프록시를 설정하는 방법은 OS 단의 환경변수가 아닌 서비스 데몬 설정에 환경변수를 추가해주는 방법입니다.

 

/usr/local/lib/systemd/system/rancherd-server.service

/usr/local/lib/systemd/system/rancherd-agent.service

각각 역할에 맞게 맞는 서비스의 구동 설정을 변경한다.

...
...
 
Environment="HTTP_PROXY=<proxy address>:<proxy port>"
Environment="HTTPS_PROXY=<proxy address>:<proxy port>"
Environment="NO_PROXY=<exclude ip1>,<exclude ip2>..."

해당 Environment를 추가해서 서비스 구동 시 프록시를 통해 docker hub에서 필요한 이미지들을 받아 올 수 있습니다.

 

 

댓글0