[SDS] Cephadm로 Ceph 구성하기

minujana
7 min readFeb 26, 2021

이전 포스팅에서는 Ansible을 이용하여서 Ceph 14버전 노틸러스의 클러스터를 구축했었다. 최근에 16버전도 나오고, 15버전부터는 Ceph의 Web UI에서 사용할 수 있는 기능이 대폭 늘어났는데, 기존의 Ceph-Ansible을 이용하여 배포를 할 경우 업데이트 된 WebUI의 API를 100% 반영할 수 없다고 한다. 그리하여 Cephadm을 이용하여 구성 해보았고, 이를 정리해둔다.

Cephadm은 kubeadm 처럼, Ceph 클러스터를 쉽게 구축하기 위한 tool로 보면된다. 오직 Ceph 구성만을 위해 나온 자동화 툴이다.

Cephadm과 Ansible로 구성했을 때의 차이점에 대하여 살펴보자면, Ansible에서는 배포 환경을 고를 수가 있었다. 이를테면 osd, mon, mgr 등의 데몬을 데몬서비스로 배포를 할 것인지, 컨테이너로 배포를 할 것인지 선택할 수 있었다. 하지만, Cephadm에서는 애초에 요구 사항으로 아래와 같이 명시해 두었다.

Podman이나 Docker 환경을 요구하고 있다. 리눅스 버전이 이제 8버전으로 넘어가면서 크게 거슬릴 것은 없지만, 차이점이니 알고있자.

또한, 컨테이너로 이미지를 바로 올리는 방식으로 배포를 하다보니 클러스터 구축도 아주 간단하고 시간도 Ansible에 비하여 상당히 단축됬다.

Cephadm Install

인스톨 가이드는 Ceph docs를 참고하였고, 잘 설명되어 있어서 참고하면 좋을듯 하다.

#curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm

Cephadm을 이용하여 Ceph 를 설치하기 위해서 먼저 Cephadm을 설치하자. 위 git 주소에서 cephadm 소스를 다운로드받아온다. 해당 깃에서 브랜치를 확인해보니 노틸러스 (14버전)는 cephadm이 없다. 15버전인 옥토퍼스와 얼마전에 새로 릴리즈된 16버전인 퍼시픽만 cephadm 툴이 존재하는 것 같다. 이 이유는 앞서 포스팅 초반에 이야기했던 Ceph Ansible → Cephadm 으로 바뀌게 된 계기와 관련이 있어보인다.

#chmod +x cephadm
#./cephadm add-repo --release octopus
#./cephadm install

cephadm tool에 실행권한을 주고, octopus 레포를 추가한 후, 인스톨을 진행하자. 인스톨을 진행한 후 부터는 /usr/bin/cephadm 으로 명령어가 추가되기 때문에 cephadm 커맨드를 이용하여 클러스터를 구축한다.

Deploy Mon

#cephadm bootstrap --mon-ip [mon ip]

클러스터를 구축할 노드 중, mon으로 사용할 노드에서 위와 같이 커맨드를 입력한다. *** 이때 사용하는 Port가 6800, 6789 등이 있는데 Localhost의 포트임에도 불구하고 포트 개방이 되어있지 않으면 배포가 정상적으로 진행되지 않더라… 포트를 개방하거나 방화벽을 내리고 진행하도록 하자. ***

mon이 구성되면 Web UI에 접근할 수 있는 주소와, Admin 계정을 알려주는데 이를 기억해두자

#cephadm install ceph-common

컨테이너로 ceph의 클러스터가 구축되기 때문에 예전처럼 Ceph의 커맨드를 노드에서 바로 사용하려면 위 패키지를 설치해주자.

#ceph -s
#podman ps

커맨드를 입력해보면 현재 만들어진 Ceph 클러스터에 mon 1개만 배포 되어있는 것을 확인할 수 있다. 다음으로 클러스터에 호스트를 추가해보고 mon을 이중화 시켜보자.

설치과정에서 문제가 생겨서 데몬을 지우거나, 클러스터를 지워야 할 일이 생겼을 경우엔 이렇게 진행하면 된다.

#cephadm ls

커맨드를 입력하면, 데몬들의 정보를 확인할 수 있다. 우선 fsid를 확인하고 클러스터를 삭제해보자.

#cephadm rm-cluster --fsid [fsid] --force

클러스터를 삭제한 후, #cephadm ls 커맨드로 확인해 보면 삭제가 되는 데몬들도 있고 여전히 남아있는 데몬들도 있다. 클러스터 구축이 정상적으로 안됬을 경우에 데몬들이 남아있더라 남아있는 데몬이 있다면 새로운 클러스터를 구성할 때 문제가 생기기 때문에 데몬도 삭제해 주자

#cephadm rm-daemon --name [name] --fsid [fsid] --force

Add Host

먼저 새로 등록할 호스트에 Ceph 클러스터 키를 공유하자. 각 노드끼리는 /etc/hosts 파일에 등록을 해두면 편리하니 등록해놓자

#ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2

키를 보내고 나서, 호스트를 추가한다.

#ceph orch host add node2
#ceph orch host ls

호스트가 추가된 것을 확인할 수 있다. 현재는 어떤 기능도 없는 호스트만 추가만 한 것이고, 새로 추가한 호스트에 mon 데몬을 추가해서 클러스터의 mon을 이중화 해보자

#ceph orch daemon add mon node2:[mon CIDR]

mon CIDR 값은 mon을 배포할때 사용한, IP가 만약 192.168.1.10/24 라고하면, 192.168.1.0/24 로 대역과 서브넷을 기입해주면 된다.

#ceph -s

클러스터를 조회하여 보면 mon 데몬이 2개가 된 것을 확인할 수 있다. *** 2번째 노드에서 ceph -s 커맨드를 입력하면, 클러스터 정보가 없다. key가 없다 등등 과 같은 로그를 출력할 수가 있는데 이때 /etc/ceph 디렉토리 밑에 파일을 확인해보고 1번 노드에서 /etc/ceph 아래의 ceph.conf 와 admin.keyring 파일을 복사해서 넣어주면 된다. ***

Osd Deploy

#ceph orch device ls

클러스터를 구성하고 있는 노드에 osd를 배포할 수 있는 Device를 위 커맨드로 조회할 수 있다.

위 처럼 확인 할 수 있는데, 위 사진은 미리 osd를 배포한 상태라서 Available이 No인 상태이다. 또한, LVM으로 구성한 장치는 위 커맨드로 확인 할 수 없다.

#ceph orch daemon add osd node1:/dev/sdb
#ceph orch daemon add osd node2:/dev/sdb
#ceph orch apply osd --all-available-devices

위 커맨드들을 이용하여 osd를 배포할 수 있는데, 커맨드에서 느껴지는 느낌 그대로 노드1의 sdb, 노드2의 sdb, 그리고 이용가능한 모든 장치에 osd 배포 하는 커맨드 순이다.

또한 LVM으로 구성된 디스크에 osd를 배포하고 싶으면,

#ceph orch daemon add osd node1:/[vg name]/[lv name]

이런식으로 커맨드 입력하면 LVM으로 파티셔닝된 디스크에 OSD를 배포할 수 있다.

Mds Deploy

다음으로 CephFS를 사용하기 위해 필요한 데몬인 Mds 데몬을 배포해보겠다. MDS 데몬은 데몬만 수동으로 배포할수도 있지만, 굳이 어려운 길을 가지 않고, CephFS를 하나 만들면 자동으로 Mds가 구성이 된다.

#ceph fs volume create [fs name]

이렇게만 커맨드를 입력하여도, 자동으로 PG 수는 오토스케일링하고 레플리카는 OSD에 맞추어 알아서 구성이 된다. 변경이 필요하다면, UI나 커맨드를 이용하여 변경할 수 있다.

기타

RGW, NFS Ganesha 같은 데몬들도 커맨드로 배포를 할 수 있지만, 이 데몬들의 사용방법과 목적에 대해 정확히 이해를 못해서 아직은 배포를 진행하지 않았다. 추후에 알게되면 따로 활용하는 포스팅을 정리할 예정이다.

--

--