Private Registry Service 구축 [Ceph] (1)

김현송·2023년 7월 25일
0

0. Vagrantfile

VAGRANTFILE_API_VERSION = "2"
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "ubuntu/focal64"
    config.vm.provider "virtualbox" do |vb|
            vb.memory = 2048
    end
    if Vagrant.has_plugin?("vagrant-vbguest")
        config.vbguest.auto_update = false
    end
    config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: [".git/"]
    config.vm.provision "shell", inline: <<-SHELL
        export DEBIAN_FRONTEND=noninteractive
        sudo apt -y update
        sudo apt install -y ca-certificates curl gnupg libnss-mdns
        sudo install -m 0755 -d /etc/apt/keyrings
        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
        sudo chmod a+r /etc/apt/keyrings/docker.gpg
        echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
        sudo apt -y update
        sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
        sudo usermod -aG docker vagrant
    SHELL
    config.vm.define "ceph", primary: true do |ceph|
        ceph.vm.hostname = "ceph.local"
        ceph.vm.network "private_network", ip: "192.168.34.101"
    end
    config.vm.define "registry", primary: true do |registry|
        registry.vm.hostname = "registry.local"
        registry.vm.network "private_network", ip: "192.168.34.102"
    end
    config.vm.define "node", primary: true do |node|
        node.vm.hostname = "node.local"
        node.vm.network "private_network", ip: "192.168.34.103"
    end
end
        

1. CEPH STORAGE

  1. storage를 제공하는 서비스
  • File System 제공 (Remote File System / NFS)
  • Block 서비스 제공 (iSCSI)
  • Object Storage 제공 (S3)
  1. CEPH의 내부 구조
    OSD Node: Object Storage Disk를 제공하는 디스크 노드 (SSD/HDD)
  • Block 형태로 제공
    • MONs : Monitor 노드
    • MGRs : Manager 노드
    • iSCSI-GW
  • Object Storage 형태로 제공
    • RADOS-GW
  • NFS나 SAT 파일 시스템 형태로 제공
    • MDS
  1. 일반적으로 1개 이상의 마스터 노드(MON/MGR + GW)와 다수의 데이터 노드(OSD Node)들로 구성되어 있습니다.

    출처 : Grepp

2. CEPH 모니터 구성

Docker Ceph/daemon image : 다중 호스트일 때 key value 형태의 데이터를 저장하려면 ETCD 서비스를 별도로 띄워야 합니다.

Monitor 노드

(without KV STORE(암호화 FS))

# Docker-compose.yml
services:
  ceph-mon:
  # latest-mimic 이미지로 실행하지 않을 경우 에러가 발생할 수 있습니다.
    image: ceph/daemon:latest-mimic
    network_mode: host
    container_name: ceph-mon
    volumes:
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph:/var/lib/ceph
    environment:
      - MON_IP=192.168.34.101
      - CEPH_PUBLIC_NETWORK=192.168.34.0/24
    command:
      mon

keyring issue : https://github.com/ceph/ceph-container/issues/1683

Manager 노드(관리 데몬)

# Docker-compose.yml
ceph-mgr:
    image: ceph/daemon:latest-mimic
    network_mode: host
    container_name: ceph-mgr
    volumes:
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph:/var/lib/ceph
    command:
      mgr

OSD 노드 배포

  ceph-osd:
    image: ceph/daemon:latest-mimic
    network_mode: host
    privileged: true
    container_name: ceph-osd
    volumes:
      - /etc/ceph:/etc/ceph
      - /var/lib/ceph:/var/lib/ceph
      - /dev:/dev
      - /run/udev:/run/udev
    environment:
    # sdc 디스크를 추가로 virtualbox에 생성
      - OSD_DEVICE=/dev/sdc
      - OSD_TYPE=disk
    command:
      osd

메타데이터 서버(mds) 배포

FS형태로 제공하는 노드(NFS, CephFS 등)
DATA_POOL : mds 는 블럭 중 일부를 할당받아 CephFS로 만듭니다. 이때 사용할 data 파일 내용에 대한 정보를 DATA_POOL이라 합니다.

  ceph-mds:
    image: ceph/daemon:latest-mimic
    network_mode: host
    volumes:
      - /var/lib/ceph:/var/lib/ceph
      - /etc/ceph:/etc/ceph
    environment:
      - CEPHFS_CREATE=1
    command:
      mds

ceph dashboard 모듈 및 서비스 활성화

docker exec -it ceph-mgr ceph mgr module enable dashboard

docker exec -it ceph-mgr ceph dashboard create-self-signed-cert

docker exec -it ceph-mgr ceph mgr services

실행 결과

포트포워딩

Ceph 계정 생성

docker exec -it ceph-mgr ceph dashboard set-login-credentials <id> <pw>

실행 결과

profile
안녕하세요

0개의 댓글