1. 하드웨어 사양 및 네트워크 아키텍처
| 노드 명칭 | 관리망 IP | 저장소/클러스터 IP | 테넌트 데이터 IP | 메모리 | CPU |
|---|---|---|---|---|---|
| node-hci-01 | 10.10.10.60 | 20.20.20.60 | 30.30.30.60 | 32GB | 12 Cores |
| node-hci-02 | 10.10.10.61 | 20.20.20.61 | 30.30.30.61 | 32GB | 12 Cores |
| node-hci-03 | 10.10.10.62 | 20.20.20.62 | 30.30.30.62 | 32GB | 12 Cores |
초고결합형 환경에서는 각 노드에 최소 3개 이상의 SSD/HDD 물리 디스크를 할당하여 Ceph 저장소 풀을 구성해야 합니다. 테스트용 Windows 리소스는 메모리 64GB 이상을 권장합니다.
2. 운영체제 초기화 및 보안 정책 우회
모든 클러스터 노드에서 방화벽과 SELinux를 비활성화하여 호스트 간 통신 및 컨테이너 이동을 허용합니다.
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
3. 배포 툴리케이션 및 SSH 키 관리
마스터 노드에 필요한 배포 아카이브와 도메인 내 레지스트리를 추출한 후, Ansible 실행 환경을 준비합니다.
xz -d tar-tool.rpm.xz
rpm -ivh tar-tool.rpm
tar xvf ops-director-kolla-new.tar.gz
cd ops-director-kolla
키 쌍을 생성하고 모든 계산 노드 및 컨트롤 노드에 무口令 인증을 적용합니다.
ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa
for ip_seq in {0..2}; do ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.6${ip_seq}; done
Inventroy 파일 구조를 정의하고 외부 트래픽이 처리될 네트워크 인터페이스 변수를 설정합니다.
# inventory/deployment.ini
[deployment_servers]
10.10.10.60
[all:vars]
ansible_password='SecurePass123'
[control_nodes]
10.10.10.60 hostname=node-hci-01
10.10.10.61 hostname=node-hci-02
10.10.10.62 hostname=node-hci-03
[nova_compute_nodes]
10.10.10.60
10.10.10.61
10.10.10.62
# settings/init_env.sh
export EXTERNAL_NIC="eth2"
# 스크립트 실행 후 SSH 세션 재접속 필요
source ./init_env.sh
exit
4. Ceph 저장소 풀 프로비저닝
4.1 모니터 및 OSD 메타데이터 정의
# ceph-inventory/cluster.ini
[all:vars]
ansible_password='SecurePass123'
[monitor_nodes]
10.10.10.60
10.10.10.61
10.10.10.62
[osd_pools]
10.10.10.60 devices='["/dev/sdb", "/dev/sdc", "/dev/sdd"]'
10.10.10.61 devices='["/dev/sdb", "/dev/sdc", "/dev/sdd"]'
10.10.10.62 devices='["/dev/sdb", "/dev/sdc", "/dev/sdd"]'
4.2 글로벌 네트워킹 및 레지스트리 설정
# ceph-inventory/group_vars/cluster_globals.yaml
yum_mirror_addr: "10.10.10.60"
monitor_network_if: "eth0"
public_subnet_cidr: "10.10.10.0/24"
cluster_data_subnet_cidr: "20.20.20.0/24"
radosgw_binding_if: "eth0"
local_docker_registry: "10.10.10.60:8086"
insecure_registry_list: "10.10.10.60:8086"
4.3 OSD 디스크 경로 매핑
# ceph-inventory/group_vars/osd_vars.yaml
target_devices:
- /dev/sdb
- /dev/sdc
- /dev/sdd
# 반드시 형제 장치명이 동일해야 하며, lsblk 명령어로 확인 후 입력하십시오.
4.4 리소스 할당 제한 (선택 사항)
# mdss 자원 한계
ceph_mds_memory_limit: "4096m"
ceph_mds_cpu_limit: 4
# mgr 자원 한계
ceph_mgr_memory_limit: "4096m"
ceph_mgr_cpu_limit: 1
# mon 자원 한계
ceph_mon_memory_limit: "4096m"
ceph_mon_cpu_limit: 1
# rgw 자원 한계
ceph_rgw_memory_limit: "4096m"
ceph_rgw_cpu_limit: 8
4.5 플레이북 실행 및 검증
cd ceph-inventory
source run_ansible_playbook_docker.sh
컨테이너 상태 확인 및 인트라넷 대시보드 접근:
docker ps | grep ceph
docker exec -it $(docker ps -qf "name=ceph-mon-node-hci-01") bash
# 안전성을 위해 불안전한 ID 수락 차단
ceph config set mon auth_allow_insecure_global_id_reclaim false
ceph mgr services
- 웹 UI 접속 주소:
https://<MONITOR_IP>:8443 - 기본 자격증명: admin / <dashboard_admin_password 값 조회>
5. OpenStack 플랫폼 빌드
Kolla 전역 설정 파일을 수정하여 VIP, 레지스트리 위치, 가상머신 하이퍼바이저 타입 등을 정의합니다.
# inventory/kolla_globals.yaml
kolla_internal_vip_address: "10.10.10.248"
docker_registry_server: "10.10.10.60:8086"
management_net_iface: "eth0"
tenant_external_iface: "eth2"
novacompute_virtualization_type: "kvm"
[주의] Ceph 백엔드 미사용 시 Cinder에 로컬 LVM 풀을 연결하려면 다음을 추가하세요:
vgcreate kolla-cinder-volumes /dev/sdd
echo 'cinder_volume_group: "kolla-cinder-volumes"' >> inventory/kolla_globals.yaml
[PG_NUM 최적화 참고]
Ceph의 Object Gateway 확장성을 위해 Placement Group 수치는 클러스터 규모에 따라 수동 조정되어야 합니다.
- OSD < 5 : 128
- 5 <= OSD <= 10 : 512
- 10 <= OSD <= 50 : 4096
- 상세 계산은 공식
pgcalc도구를 활용하시기 바랍니다.
설치 자동화 스크립트를 실행합니다.
source apply_openstack_deploy.sh
도메인 네임 서비스 응답 후 포털 로그인:
openstack credentials check
# 관리자 비밀번호는 /etc/kolla/passwords.yml에서 keystone_admin_password 항목으로 확인 가능합니다.
6. 객체 및 블록 스토리지 연동 검증
6.1 Glance 이미징 백엔드
source /etc/kolla/admin-keystonerc.sh
openstack image create cirros-test --disk-format qcow2 --file cirros-0.5.1-x86_64-disk.raw
# RBD 풀에 이미지 등록 확인
docker exec -it ceph-mon-node-hci-01 bash -c "rbd ls images"
6.2 Cinder 볼륨 타입 및 생성
openstack volume type create ceph-backup --public --description "RBD-Based Storage"
openstack volume create test-volume-01 --size 20 --type ceph-backup
docker exec -it ceph-mon-node-hci-01 bash -c "rbd ls volumes"
6.3 Swift 호환 RGW 객체 스토리지
Keystone IDP와 연동된 S3/Swift 게이트웨이 서비스를 등록합니다.
openstack service create object-store --name rgw-swift-proxy --description "S3 & Swift Compatible Service"
openstack user create --domain default --password RGWAdminPass123 rgw-admin-user
openstack role add --project service --user rgw-admin-user admin
openstack endpoint create swift internal "http://10.10.10.60:8080/swift/v1" --region RegionOne
openstack endpoint create swift public "http://10.10.10.60:8080/swift/v1" --region RegionOne
openstack endpoint create swift admin "http://10.10.10.60:8080/swift/v1" --region RegionOne
RGW 인증 정보 및 캐싱 파라미터를 /etc/ceph/ceph.conf에 적용합니다.
# RGW Keystone 연동 및 버킷 동기화 설정
[client.rgw.node-hci-01]
rgw_keystone_url = http://10.10.10.248:5000
rgw_keystone_accepted_roles = admin,_member_,member
rgw_keystone_admin_project = admin
rgw_keystone_admin_user = admin
rgw_s3_auth_use_keystone = True
rgw_bucket_quota_sync_interval = 3600
docker restart $(docker ps -qf "name=ceph-rgw")
openstack container create shared-bucket --public
docker exec -it ceph-mon-node-hci-01 bash -c "radosgw-admin bucket list"
6.4 컴퓨팅 인스턴스 데이터 저장소
플랫(Flat) 또는 VXLAN overlay 네트워크 및 라우터를 생성한 후, 인스턴스를 부트합니다. 실제 VM 디스크 이미지는 RBD 풀에 다음과 같이 기록됩니다.
docker exec -it ceph-mon-node-hci-01 bash -c "rbd ls vms"