0부터 시작하는 OpenStack 공부 - Volume 을 이용한 Instance & Docker Cluster 형성 & Object Storage

Jaehong Lee·2022년 9월 19일
0
post-thumbnail

1. Instance 생성하는 방법

1. Local Disk 사용하는 방법

  • Cloud image 를 glance 에 등록 -> 인스턴스 생성시 이미지를 기반으로 인스턴스 배포 ( 로컬 디스크를 사용 )
  • 마이그레이션 불가능하고, 실제 퍼블릭 클라우드에서는 사용하지 않는다

이때, glance 에 저장된 이미지 를 Compute Node 에서 다운 받아서 Node 의 local Disk 를 인스턴스의 Disk 와 연결하는 방식이다. 이때 Volume 을 연결하면, 이는 Data 저장용 빈 Volume 이다. 부팅 소스는 이미지 내용이 풀어진 Local Disk 이다


2. Block Storage 사용하는 방법

  • Cloud image 를 glance 에 등록 -> glance 에 등록된 이미지를 통해 볼륨 생성 -> 이 볼륨을 부팅 소스로 Instance 를 생성
  • 마이그레이션 가능, 실제 퍼블릭 클라우드에서 사용

이때, glance 에 저장된 이미지를 Storage Node 에서 다운 받아서 Volume 을 생성하고, 이를 Block Device Mapping 을 통해 인스턴스의 Disk 와 연결해준다. 이때, Compute Node 는 Cpu 와 Ram 과 같은 컴퓨팅 자원만 제공해준다. 부팅 소스는 이미지 내용이 풀어진 Storage 의 Volume 이다


Instance 생성시 HyperVisor 호출 구조

  • 사용자가 Control Node 에 인스턴스 생성 명령을 내리면, Nova Api 를 통해 Compute Node 의 HyperVisor 를 호출한다
  • 외부 볼륨은 nova 가 만들고, 관리는 cinder 가 한다

2. 환경 준비

Key-Pair 생성 및 등록

ssh-keygen -q -f /root/.ssh/mykey.pem -N ""
  • 먼저, key 를 생성해준다
openstack keypair create --public-key /root/.ssh/mykey.pem.pub mykey
  • public key 를 등록하자
  • 잘 등록되었다

Flavor 생성

openstack flavor create --id 6 --vcpus 1 --ram 1024 --disk 20 m1.xsmall
  • 사양과 Flavor 이름을 지정하여 Flavor 를 생성하였다

Security Group 생성

openstack security group create permitdocker
  • 보안 그룹 생성
openstack security group rule create --proto tcp --dst-port 22 permitdocker # ssh 연결 접속 허용
openstack security group rule create --proto tcp --dst-port 80 permitdocker # http 접속 허용
openstack security group rule create --proto tcp --dst-port 443 permitdocker # httpd 접속 허용
openstack security group rule create --proto icmp permitdocker # ping 접속 허용
  • 보안 그룹에 rule 추가
openstack security group rule create --proto tcp --dst-port 2376 permitdocker
openstack security group rule create --proto tcp --dst-port 2377 permitdocker
openstack security group rule create --proto tcp --dst-port 7946 permitdocker
openstack security group rule create --proto udp --dst-port 7946 permitdocker
openstack security group rule create --proto udp --dst-port 4789 permitdocker
  • docker cluster 구성을 위한 rule 추가

Image 등록

openstack image create "docker" --file ubuntu1804Docker.img --disk-format qcow2 --container-format bare --public
  • Image 를 등록해주자
  • 잘 등록되었다

Volume 생성

Volume 은 Data 저장용 빈 볼륨과 이미지를 통해 Os 가 설치된 볼륨을 생성할 수 있다

  • 위의 설정으로 Volume 을 생성해주자

  • 두 개 생성해주자

3. Instance 생성 및 설정

  • 위 와 같은 구조를 만들어보자

Instance 생성

  • 이름 설정

  • 부팅 소스는 볼륨이다!!! 이는 외부 Storage 의 Volume 에 있는 이미지가 있으므로, 이를 부팅 소스로 하는 것이다

  • flavor 선택

  • network 선택

  • 보안 그룹 선택

  • Key 선택 후 Instance 를 생성해주자

worker Instance 도 생성해주자

  • 생성됬는지 확인하자

Floating Ip 연결

  • 각 Instance 에 Floating Ip 를 연결해주자

  • 둘 다 연결해주자

4. Docker Cluster 형성

생성한 Instance 를 통해 Docker Cluster 를 형성하자


SSH 연결 확인

[root@localhost ~(keystone_admin)]# ssh -i /root/.ssh/mykey.pem -l ubuntu 211.183.3.219 'hostname'
worker
[root@localhost ~(keystone_admin)]# ssh -i /root/.ssh/mykey.pem -l ubuntu 211.183.3.204 'hostname'
manager
  • ID 는 ubuntu 로 접속해야 한다

Docker Cluster init 및 Token 발급


[root@localhost ~(keystone_admin)]# ssh -i /root/.ssh/mykey.pem -l ubuntu 211.183.3.204 'sudo docker swarm init --advertise-addr ens3'
Swarm initialized: current node (sq4b8ov83k2muwa78ce00lbnp) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token '토큰' 172.16.123.216:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  • manager Instance 에서 Docker Swarm Mode Cluster 를 초기화 하고, 가입용 Token 을 발급하자

Cluster 가입

ssh -i /root/.ssh/mykey.pem -l ubuntu 211.183.3.219 'sudo docker swarm join --token '토큰' 172.16.123.216:2377'
  • Worker Node 를 Cluster 에 가입시키자

확인하기

[root@localhost ~(keystone_admin)]# ssh -i /root/.ssh/mykey.pem -l ubuntu 211.183.3.204 'sudo docker node ls'
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
sq4b8ov83k2muwa78ce00lbnp *   manager    Ready     Active         Leader           20.10.18
ootb3j6gi61ziqi6cbbpp4bez     worker     Ready     Active                          20.10.18
  • 잘 가입되었다

5. Object Storage

Object Storage 란

Object Storage 는 Server 의 위치와 상관없이, 계정 별로 일정 저장 공간을 제공할 수 있다. 이는 특정 Server 에 연결을 위한 목적의 Storage 가 아니다

Server 에게 제공해주는 것은 File Storage / Block Storage 가 있다

  • File Storage 는 파일을 트리 형태로 관리한다
  • Block Storage 는 구획을 나눠서 번호로 관리한다
  • Onject Storage 는 Key : Value 로 관리한다
  • OpenStack 에서는 Object Storage 를 Swift 서비스라고 한다
    • Aws 에서는 S3 라고 한다

Container 생성 - DashBoard

Data 를 담기 위한 Object 를 Aws s3 에서는 Bucket 이라고 하며, Swift 에서는 Container 라고 한다

  • Container 를 생성하자

  • 위와 같이 폴더를 올릴 수 있다

  • 파일도 올릴 수 있다

Public Access

<html>
<head>
    <title> test </title>
</head>
<body>
	<center>
		<h2> testpage </h2> 
	</center>
</body>

</html>
  • 위와 같은 index.html 을 생성하고, Container 에 업로드 하자

  • Public Access 를 선택해주면 Link 가 생긴다

  • 접속해주면, 위와 같이 Container 내용을 외부에서 확인할 수 있다

  • 주소 끝에 원하는 파일 명을 입력하여 위와 같이 웹 상에 파일 내용을 출력할 수 있다

Container 생성 - Cli

[root@localhost ~(keystone_admin)]# openstack container create www
  • Container 를 생성해주자. 만드는 것은 무조건 create 이다
[root@localhost ~(keystone_admin)]# openstack container list
+---------------+
| Name          |
+---------------+
| testcontainer |
| www           |
+---------------+
  • 잘 생성되었는지 확인하자
wget https://github.com/twbs/bootstrap/releases/download/v5.2.1/bootstrap-5.2.1-examples.zip
unzip bootstrap-5.2.1-examples.zip
  • BootStrap 파일을 다운 받고, 압축을 풀어주자
swift upload www blog
  • swift 서비스를 이용해 www Container 에 blog 디렉토리를 업로드 하였다
  • 해당 디렉토리가 존재하는 경로에서 명령을 실행해야 한다

  • Container 의 Public Access 를 허용해주자

  • 해당 Link 로 blog 의 index.html 을 주소창에 치면, 해당 페이지를 웹 상에서 확인 가능하다
profile
멋진 엔지니어가 될 때까지

0개의 댓글