MINIO 로 Storage Service 구축하기
S3 like Service 인 MINIO 구축하기
Private Registry Service 구축하기
NEXUS3 with S3
HABOR Registry
CEPH Storage Server
Machine 1
디스크가 많은 시스템
Docker 에 Block 장치를 직접 Bypass 하여 사용하도록 할 예정
Nexus3 or Harbor Registry 구축
Machine 2
minio 의 오브젝트 Storage의 활용
대안: NFS 서버를 사용
$env:VAGRANT_EXPERIMENTAL="disks"
vagrant up minio
- 윈도우 파워쉘 기준
sda : 40 GB
sdb : 10 MB
extra 1 : sdc 25GB
extra 2 : sdd 25GB
/dev/h => IDE , /dev/s:sata,scsi
sda1,2,3 => 파티션
sudo mkfs.xfs /dev/sdc -L DISK1
- xfs : 오버레이가 가능 , 중첩
- 레이블 => 디스크1
sudo mkfs.xfs /dev/sdd -L DISK2
sudo vim /etc/fstab
LABEL=DISK1 /mnt/disk1 xfs defaults,noatime 0 2
LABEL=DISK2 /mnt/disk2 xfs defaults,noatime 0 2
- 장치 , 마운트 포인트, 파일 시스템 타입 , 옵션 , 부팅시 처리(체크) , 에러시 패스or정지?
sudo mkdir -p /mnt/disk1 /mnt/disk2
sudo mount -a => sudo mount /mnt/disk1 /mnt/disk2
docker run -d --name minio \
-p 9000-9001:9000-9001 \
-v /mnt/disk1:/data1 \
-v /mnt/disk2:/data2 \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=secret%1 \
minio/minio \
server /data1 /data2 --console-address ":9001"
docker run -d --name minio -p 9000-9001:9000-9001 -v /mnt/disk1:/data1 -v /mnt/disk2:/data2 -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=secret%1 minio/minio server /data1 /data2 --console-address ":9001"
오픈 소스
GO 언어로 구현
AWS S3 호환
Minio Server : 오브젝트 스토리지 서버
Minio Client : mc CLI, 파일 업로드, 관리 등의 기능 제공
Minio Library : 개발자용 라이브러리, Go, Java, Python 등 SDK 제공
FS (File System) 방식
백엔드를 파일 시스템 사용
각기 다른 HW 볼륨에 연결된 경로들을 묶어 사용
ES (Erase Coding)방식
데이터를 EC 코덱이라는 알고리즘으로인코딩
복제 수행, 데이터 손실시 복구하는 기법
RAID의 패리티 디스크 복구 개념
- DATA => n등분 => 인코딩 => n+k개 => 디코딩 => 원본복구
- 백업이 목적이 아닌 동작중인 시스템을 복원하기 위함
단독 모드(Standalone)
단일 노드 – 단일 디스크 -- FS 모드
주로 개발과 테스트용
하나의 서버에서 하나의 디스크만
EC 모드(Standalone)
단일 노드 – 멀티 디스크
디스크 4개이상 2의 배수로 구성
분산 모드(Distributed)
멀티 노드
디스크를 제공하는 노드가 다수
각 노드는 minio 서비스 수행
이를 통합할 수 있는 로드밸런서를 앞 단에 두어 사용
분산 모드 EC 모드(Distributed)
멀티 노드 – 멀티 디스크
각각의 노드가 EC 모드
노드간 분산 형태는 동일
NEXUS3 S3기반 구축
Nexus3 의 Blob Store 를 MinIO 를 사용하도록 설정하기
docker volume create nexus-data
docker run -d -p 8081:8081 -p 5000-5001:5000 --name nexus \
-e INSTALL4J_ADD_VM_PARAMS="-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=512m" \
-v nexus-data:/nexus-data sonatype/nexus3
GPG키 준비
sudo gpg --keyserver hkps://keyserver.ubuntu.com --receive-keys 644FF454C0B4115C
curl -LO https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-online-installer-v2.8.2.tgz
tar xvzf harbor-online-installer-v2.8.2.tgz
openssl genrsa -out ca.key 4096
공개키 : 다른 사람이 읽는 것
비공개키 : 열람 금지
인증서 : 제 3자가 공증
4kb정도 되는 rsa key를 만든다.
이 키에 대응하는 인증서를 만들어야한다. => self-sign ca 인증서
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=KR/O=grepp/OU=docker/CN=192.168.34.105" \
-key ca.key \
-out ca.crt
openssl genrsa -out habor.local.key 4096
openssl req -sha512 -new \
-subj "/C=KR/O=grepp/OU=docker/CN=habor.local" \
-key habor.local.key \
-out habor.local.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment,
dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=habor.local
DNS.2=habor
DNS.3=192.168.34.105
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in habor.local.csr \
-out habor.local.crt
sudo mkdir -p /data/cert
sudo cp habor.local.key habor.local.crt /data/cert
openssl x509 -inform PEM -in habor.local.crt -out habor.local.cert
복사할 파일
ca.crt
habor.local.cert
habor.local.key
복사할 위치 (Habor에 접근하는 모든 Docker 노드)
/etc/docker/certs.d/habor.local/
sudo mkdir -p /etc/docker/certs.d/habor.local/
sudo cp ca.crt /etc/docker/certs.d/habor.local/
sudo cp habor.local.cert /etc/docker/certs.d/habor.local/
sudo cp habor.local.key /etc/docker/certs.d/habor.local/
habor.yml.tmpl 을 참고하여 작성
cd habor
cp habor.yml.tmpl habor.yml
hostname: harbor.local
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/habor.local.crt
private_key: /data/cert/habor.local.key
# # Uncomment following will enable tls communication between all harbor components
# internal_tls:
# # set enabled to true means internal tls is enabled
# enabled: true
# # put your cert and key files on dir
# dir: /etc/harbor/tls/internal
# Uncomment external_url if you want to enable external proxy
# And when it enabled the hostname will no longer used
# external_url: https://reg.mydomain.com:8433
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor12345
# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: root123
./prepare (이미지 pull해줌)
sudo docker compose ps