[Retry, k8s] 06-2. 온프레미스 환경에서 SDS에 의한 동적 볼륨 프로비저닝(CephFS) - (2)
카테고리: KUBERNETES
태그: kubernetes
[Retry, k8s] 06-2. 온프레미스 환경에서 SDS에 의한 동적 볼륨 프로비저닝(CephFS) - (2)
🔔 Ceph 클러스터 구성

(1) [Monitor+Manager 데몬] 노드(여기서는 관리 노드라고 함)에서 SSH 키 쌍을 생성하고 각 노드에 설정
root@osd01:~# cat <<EOF >> /etc/hosts
192.168.219.51 osd01 osd01.test.com
192.168.219.52 osd02 osd02.test.com
192.168.219.53 osd03 osd03.test.com
EOF
root@osd01:~# {
ssh-keygen -t ed25519 -C "Ansible Test" -N ''
for i in osd01 osd02 osd03;
do
ssh-copy-id -i ~/.ssh/id_ed25519.pub $i
done
}
(2) 관리 노드에서 각 노드에 Ceph를 설치
root@osd01:~# for NODE in osd01 osd02 osd03
do
ssh $NODE "apt update; apt -y install ceph"
done
(3) 관리 노드에서 [Monitor+Manager 데몬]을 설정
# UUID 생성
root@osd01:~# uuidgen
3adf5d85-7d69-455d-82cf-f799e63981e4
# 새 구성 생성
# 파일 이름 ⇒ (임의의 클러스터 이름).conf
# 이 예에서 클러스터 이름 [ceph](기본값) 설정 » [ceph.conf]
cat <<EOF > /etc/ceph/ceph.conf
[global]
# 모니터링할 클러스터 네트워크 지정
cluster network = 192.168.219.0/24
# 공용 네트워크 지정
public network = 192.168.219.0/24
# 위에서 생성된 UUID 지정
fsid = 3adf5d85-7d69-455d-82cf-f799e63981e4
# 모니터 데몬의 IP 주소 지정
mon host = 192.168.219.51
# 모니터 데몬의 호스트 이름 지정
mon initial members = osd01
osd pool default crush rule = -1
# mon.(노드 이름)
[mon.osd01]
# 모니터 데몬의 호스트 이름 지정
host = osd01
# 모니터 데몬의 IP 주소 지정
mon addr = 192.168.219.51
# 풀 삭제 허용
mon allow pool delete = true
EOF
# 비밀 키 생성
root@osd01:~# {
echo '# 클러스터 모니터링을 위한 비밀 키 생성'
ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
echo '# 클러스터 관리자에 대한 비밀 키 생성'
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
echo '# 부트스트랩용 키 생성'
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
}
# 생성된 키 가져오기
root@osd01:~# {
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
}
# 모니터맵 생성
root@osd01:~# {
FSID=$(grep "^fsid" /etc/ceph/ceph.conf | awk {'print $NF'})
NODENAME=$(grep "^mon initial" /etc/ceph/ceph.conf | awk {'print $NF'})
NODEIP=$(grep "^mon host" /etc/ceph/ceph.conf | awk {'print $NF'})
monmaptool --create --add $NODENAME $NODEIP --fsid $FSID /etc/ceph/monmap
}
# 모니터 데몬에 대한 디렉터리 생성 / 키 및 모니터 맵을 모니터 데몬에 연결
# 디렉토리 이름 ⇒ (클러스터 이름)-(노드 이름)
# --cluster (클러스터 이름)
root@osd01:~# mkdir /var/lib/ceph/mon/ceph-osd01
root@osd01:~# {
ceph-mon --cluster ceph --mkfs -i $NODENAME --monmap /etc/ceph/monmap --keyring /etc/ceph/ceph.mon.keyring
chown ceph. /etc/ceph/ceph.*
chown -R ceph. /var/lib/ceph/mon/ceph-osd01 /var/lib/ceph/bootstrap-osd
systemctl enable --now ceph-mon@$NODENAME
}
# Messenger v2 프로토콜 사용
root@osd01:~# {
ceph mon enable-msgr2
ceph config set mon auth_allow_insecure_global_id_reclaim false
ceph mgr module enable pg_autoscaler
}
# Manager Daemon의 디렉터리 생성
# 디렉토리 이름 ⇒ (클러스터 이름)-(노드 이름)
root@osd01:~# mkdir /var/lib/ceph/mgr/ceph-osd01
# 인증 키 생성
root@osd01:~# {
ceph auth get-or-create mgr.$NODENAME mon 'allow profile mgr' osd 'allow *' mds 'allow *'
ceph auth get-or-create mgr.osd01 | tee /etc/ceph/ceph.mgr.admin.keyring
cp /etc/ceph/ceph.mgr.admin.keyring /var/lib/ceph/mgr/ceph-osd01/keyring
chown ceph. /etc/ceph/ceph.mgr.admin.keyring
chown -R ceph. /var/lib/ceph/mgr/ceph-osd01
systemctl enable --now ceph-mgr@$NODENAME
}
(4) 클러스터 상태를 확인
root@osd01:~# ceph -s
cluster:
id: 413ec571-2a9e-4c8f-bf89-855677311fcd
health: HEALTH_OK
OSD count 0 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum osd01 (age 3m)
mgr: osd01(active, since 2m)
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
(5) 관리 노드에서 각 노드로 OSD(Object Storage Device)를 구성
root@osd01:~# for NODE in osd01 osd02 osd03
do
if [ ! ${NODE} = "osd01" ]
then
scp /etc/ceph/ceph.conf ${NODE}:/etc/ceph/ceph.conf
scp /etc/ceph/ceph.client.admin.keyring ${NODE}:/etc/ceph
scp /var/lib/ceph/bootstrap-osd/ceph.keyring ${NODE}:/var/lib/ceph/bootstrap-osd
fi
ssh $NODE \
"chown ceph. /etc/ceph/ceph.* /var/lib/ceph/bootstrap-osd/*; \
parted --script /dev/sdb 'mklabel gpt'; \
parted --script /dev/sdb "mkpart primary 0% 100%"; \
ceph-volume lvm create --data /dev/sdb1"
done
(6) 클러스터 상태 확인
root@osd01:~# ceph -s
cluster:
id: 413ec571-2a9e-4c8f-bf89-855677311fcd
health: HEALTH_OK
services:
mon: 1 daemons, quorum osd01 (age 58s)
mgr: osd01(active, since 44s)
osd: 3 osds: 3 up (since 8s), 3 in (since 17s)
data:
pools: 1 pools, 1 pgs
objects: 2 objects, 449 KiB
usage: 69 MiB used, 120 GiB / 120 GiB avail
pgs: 1 active+clean
(7) OSD 트리 확인
root@osd01:~# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.11728 root default
-3 0.03909 host osd01
0 hdd 0.03909 osd.0 up 1.00000 1.00000
-5 0.03909 host osd02
1 hdd 0.03909 osd.1 up 1.00000 1.00000
-7 0.03909 host osd03
2 hdd 0.03909 osd.2 up 1.00000 1.00000
root@osd01:~# ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 120 GiB 120 GiB 69 MiB 69 MiB 0.06
TOTAL 120 GiB 120 GiB 69 MiB 69 MiB 0.06
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
.mgr 1 1 389 KiB 2 1.1 MiB 0 38 GiB
root@osd01:~# ceph osd df
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS
0 hdd 0.03909 1.00000 40 GiB 24 MiB 544 KiB 0 B 24 MiB 40 GiB 0.06 1.06 1 up
1 hdd 0.03909 1.00000 40 GiB 20 MiB 544 KiB 0 B 20 MiB 40 GiB 0.05 0.88 1 up
2 hdd 0.03909 1.00000 40 GiB 24 MiB 544 KiB 0 B 24 MiB 40 GiB 0.06 1.06 1 up
TOTAL 120 GiB 69 MiB 1.6 MiB 0 B 67 MiB 120 GiB 0.06
MIN/MAX VAR: 0.88/1.06 STDDEV: 0.00
(8) 관리 노드에서 MDS(메타 데이터 서버)를 구성
# 디렉터리 만들기
# 디렉토리 이름 ⇒ (클러스터 이름)-(노드 이름)
root@osd01:~# mkdir -p /var/lib/ceph/mds/ceph-osd01
root@osd01:~# ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-osd01/keyring --gen-key -n mds.osd01
root@osd01:~# chown -R ceph. /var/lib/ceph/mds/ceph-osd01
root@osd01:~# ceph auth add mds.osd01 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-osd01/keyring
root@osd01:~# systemctl enable --now ceph-mds@osd01
(9) Ceph fs volume 생성
root@osd01:~# ceph fs volume create kubernetes
Volume created successfully (no MDS daemons created)
root@osd01:~# ceph fs ls
name: kubernetes, metadata pool: cephfs.kubernetes.meta, data pools: [cephfs.kubernetes.data ]
(10) ceph fs auth 생성
root@osd01:~# ceph auth get-or-create client.cephfs mon 'allow r' osd 'allow rwx pool=kubernetes'
[client.cephfs]
key = AQBgJ1Rg9DMzEhAA/y3+g2tDGHOujxPVjFHS6A==
(11) ceph mds stat
root@osd01:~# ceph mds stat
kubernetes:1 cephfs:1 {cephfs:0=osd01=up:active}
댓글 남기기