- 관리탭의 Compute 의 하이퍼바이저에 들어가면, 호스트의 자원 사용량을 확인할 수 있다. 우리는 현재 로컬 저장소를 사용하고 있다
CentOS1 -> disk: 20GB -> 속해있는 Host 의 로컬 디스크를 사용하고 있다
CentOS2 -> disk: 20GB
- 현재 우리는 인스턴스의 Disk 를 Host 의 Disk 를 사용하고 있다. 이는 인스턴스를 Migration 하면, 전에 있던 Host 에서 Host 의 Disk 를 사용하였기에 옮겨간 다른 Host 에는 해당 Disk 가 없으므로 인스턴스를 실행할 수 없다. 이는 퍼블릭 클라우드에서 잘 사용하지 않는 방식이다
- 이러한 문제를 해결하기 위해 외부 Storage 의 Volume 을 Instance 에 Mount 하는 방식을 사용해야 한다. 이는 인스턴스의 부팅 소스를 볼륨으로 하는 방식이다. 이때, 볼륨 소스가 이미지인 볼륨을 이용한다
- 이를 외부 스토리지의 볼륨을 사용하면, Instance 의 Disk 는 외부 스토리지의 Volume 과 Mount 하므로 이미지는 실질적으로 외부 스토리지의 Volume 에 넣어진다 ( 인스턴스가 부팅 소스로 볼륨 소스가 이미지인 볼륨을 사용할 시 ) . 이때, Storage 에서 glance 에 등록된 이미지를 다운 받아 볼륨을 생성하며, 이를 Block Device Mapping 을 통해 인스턴스와 연결한다. Compute Node 는 Cpu 와 Ram 과 같은 컴퓨팅 자원만 제공해주며, 부팅 소스는 Storage 의 볼륨이다
- CINDER API 는 Control Node 에 있다
- Cinder 서비스를 사용하여 인스턴스에 DISK 를 제공해주자. 이는 Block Storage 이다
- 볼륨 생성은 Nova 서비스를 이용한다. ' 생성 ' 이기 때문이다
- 볼륨을 생성해주자
- 빈 볼륨은 Data 저장에 사용된다. 이미지 옵션은 볼륨에 이미지 파일을 풀어 넣는 것이다. 이는 KVM 에서 Virt-install 로 iso 파일을 볼륨에 설치하는 것과 유사하다
KVM -> virt-install -> iso 파일 -> virt-install --disk CentOS...qcow2 --import # CentOS..qcow2 이미지를 볼륨으로 사용 -> virt-builder --size 20G ~ # virt-resize 기능을 이용
- 허나, OpenStack 의 경우 볼륨에 iso 파일이 아닌 이미지를 풀어 넣어주는 것이다. 이 이미지는 qcow2 로 iso 와 같은 파일이 설치된 볼륨이다. 따라서, OpenStack 의 경우에는 qcow2 파일 내용을 생성한 볼륨에 풀어 넣어준다. 이는 qcow2 의 저장 공간을 확장 시켜주는 것과 같다고 볼 수 있다
- 위와 같이 설정해주고 볼륨을 생성해주자. 볼륨을 ' 생성 ' 해주기에 가용 구역이 nova 이다. Cinder 는 이러한 생성된 볼륨을 관리해주고, 연결해준다
Cinder 서비스를 사용하여 인스턴스에 볼륨을 연결해주자
- 볼륨을 연결할 인스턴스의 메뉴에서 볼륨 연결을 눌러주자
- 연결할 볼륨을 선택하고 볼륨 연결을 눌러주자
- 관리 > 볼륨 > 볼륨에 들어가서 볼륨 상태 업데이트를 눌러주자
- Available 로 변경하고 상태를 업데이트 시키면 볼륨 연결이 된다
- 기존에 생성한 Instance 를 모두 삭제하자
- 위의 설정으로 Volume 을 생성하자. 볼륨 소스는 이미지이고, 사용할 이미지는 CentOS7 이다
- 이 이미지는 qcow2 로 iso 와 같은 파일이 설치된 볼륨이다. 따라서, qcow2 파일 내용을 생성한 20GB 의 볼륨에 넣어준다. 이는 기존의 qcow2 의 저장 공간을 확장 시켜주는 것과 같다고 볼 수 있다
- 이렇게 생성된 볼륨을 이용해 볼륨을 부팅 소스로 한 Instance 를 생성할 수 있다
- 상태를 Available 로 변경해주자
- 5.1 커널에서는 이미지 생성이 되지만, 볼륨 생성이 안된다
- 3.1 커널에서는 이미지 생성이 안되고, 볼륨 생성이 된다
- 우리는 커널을 왔다갔다 해야 한다
- ISO 파일을 이용해 Virt-install 을 하면, 볼륨이 생성되며 해당 볼륨에 Iso 파일을 설치한다. 생성된 가상 머신을 실행하면 설치 마법사가 실행된다
- qcow2 와 같은 경우 Iso 파일을 이용해 OS 가 이미 설치된 저장 공간을 가지는 볼륨이다. 이 qcow2 를 이용해 virt-install 을 하면, 볼륨이 생성되지 않고, 해당 qcow2 파일을 볼륨으로 사용한다. 실행시 OS 가 바로 실행된다
- 저장 공간 용량에 대해 수정할 수 없고, 설치 과정도 복잡하기 때문이다
- virt-builder 를 이용하여 기본 이미지 ( 볼륨 ) 를 원하는 이미지 ( 볼륨 ) 로 변경
or virt-customize 를 이용하여 기본 이미지 ( 볼륨 ) 를 원하는 이미지 ( 볼륨 ) 로 변경
- 1GB 볼륨으로 늘어난 CentOS.qcow2 를 glance 에 등록
- glance 에 이미지로 등록된 CentOS.qcow2 를 Cinder 와 Nova 를 이용하여 20GB 볼륨에 풀어 놓는다. 결국 20GB 디스크가 생성되고, 해당 디스크에는 OS, httpd 가 설치된 상태가 된다
- 인스턴스를 생성할 때 기존에는 image 를 이용해서 설치했지만, " 3 " 과정에서 만들어준 볼륨을 이용하여 새로운 인스턴스를 배포한다
- 위와 같이 mynet1 에 Block Storage 를 이용한 Instance 를 생성할 것이다
yum -y install libvirt qemu-kvm virt-install
- 위 패키지를 설치해주자
systemctl enable libvirtd --now
- libvirtd 를 항상 실행시키게 하자
yum -y install libguestfs-tools
- virt-resize / customize 등이 포함된 libguestfs-tools 를 설치하자
[root@localhost ~]# export LIBGUESTFS_BACKEND=direct # libguest 의 tool 들과 libvirtd 를 직접 연결시켜주어 virt-customize 와 같은 명령을 내릴 수 있게 해주는 설정
[root@localhost ~]# systemctl start libvirtd
- 위 내용을 실행해주자
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2.xz ; xz -d CentOS-7-x86_64-GenericCloud-2003.qcow2.xz
- CentOS qcow2 이미지를 다운받고, 압축을 풀어주자
#!/bin/bash
# https 를 통해 저장소에 접근할 수 있도록 하기 위하여
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 도커의 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 도커 저장소 설치
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 최종업데이트
apt-get update -y
# 도커 설치
apt-get -y install docker-ce
- docker 설치 명령을 내릴 shell 파일 작성
virt-customize -a "이미지 이름" --update --run install.sh --firstboot-command 'sudo systemctl start docker' --firstboot-command 'sudo systemctl start sshd' --root-password password:test123
- run 은 로컬에 있는 shell 파일을 이미지에서 실행한다
- run--command 는 실행할 명령을 이미지로 전달하여 실행한다. 이는 인스턴스에서 실행하는 것이 아닌, 이미지에서 실행하는 것으로 정적인 상태를 지정하는 명령을 내려야 한다
- enable 같은건 run-command 에 적합하지만, start 같은건 firstboot-command 에 적합하다
openstack image create "CenOS7DOCKER" --file CentOS.qcow2 --disk-format qcow2 --container-format bare --public
- glance 에 수정한 Image 를 등록하자
- 잘 등록되었다
- manager / worker
- 먼저, manager Volume 을 생성하자
- Worker Volume 을 생성하자
- 상태가 Available 인지 확인하자
MariaDB [cinder]> update volumes set deleted=1,status=deleted,deleted_at=now(),updated_at=now() where deleted=0 and id= '볼륨 ID';
- mysql 에 접속하여 cinder DB 에 들어가서 위 명령어를 입력하면 강제 삭제된다
- 이름을 지정하자
- 부팅 소스를 Volume 으로 선택하고, 생성한 Volume 을 지정해주자
- Flavor 는 디스크 용량이 20GB 이상인 것을 고르자
- 네트워크를 지정해주자
- 보안 그룹을 지정해주자
- Key-Pair 까지 지정해준 다음 Instance 를 생성해주자
- Instance 가 잘 생성되었다
- 현재 위와 같은 구조이다
- Floating IP 를 두 개 할당받았다
- Instance 에 연결해주었다