본문 바로가기

메가존 클라우드 2기 교육/실무 심화

오픈 스택 - WebServer, DB Server 설치 및 CLI로 오픈스택 다루기


CentOS7 - webserver 설치

CentOS7 인스턴스 생성

인스턴스 시작 클릭
이름과 설명을 적고(필자는 사진과 달리 이름에 webserver, 설명엔 centos7 입력) Next
불륨 크기와, 이미지를 선택. 위와 같이 설정
이전에 생성한 Flavor인 'm1.micro'를 선택
내부 서버이므로 'Internal_network'선택. (10.11.1.0/32 대역폭으로 아이디 할당받음)
아래에 실습을 하면서 할당받은 적 있던 아이피들이 있다. 굳이 고를 필요 없고 비워놓은 상태로 Next
이전에도 그랬듯이 default가 아닌 'open-web'을 사용
이전처럼 생성했던 키 페어가 자동으로 할당됐다. 이대로 Next

 

# ' #! ' 은 스크립트를 실행할 때 쉘을 지정하는 명령어이다.

#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
위에 있는 대로 스크립트를 작성하고 인스턴스 시작
생성 완료. 콘솔에 접속해보자.
부팅 완료.

 

이제 생성한 인스턴스를 외부와 통신이 되도록 설정할 것이다.

유동 IP 연결 클릭
외부 아이피 하나를 골라 연결해준다.
이제 외부(윈도우) 에서도 내부 VM과 통신이 된다.
MobaXterm에서 접속해보자.
이전에 만든 키 페어 파일을 사용
접속 성공. httpd도 설치가 잘 됐다.
외부 접속도 잘 된다.

 


Ubuntu - DB 설치

Ubuntu 인스턴스 생성

인스턴스 생성을 누르고 이름, 설명 작성
크기는 10GB로 하고 Ubuntu를 할당하자.
m1.micro 선택
내부 서버이므로 internal
마찬가지로 그대루 냅두고 다음
default는 잘 안쓴다. 이전에 생성한 'open-web'사용
생성한 키 페어를 등록. 이래야 아까 처럼 윈도우에 있는 키로 접속 가능.
# 마리아db 설치 스트립트. 스크립트는 root계정에서 이뤄지므로 sudo 없어도 무방.
#!/bin/bash
apt-get update -y
apt-get install -y mariadb-server
스크립트 입력하고 인스턴스 시작 클릭
생성 성공.
콘솔 창에 들어가서 부팅 확인.
유동 IP도 연결해준다.
연결 성공.
MobaXterm에서 키 인증 방식으로 접속
연결 성공.

 


오브젝트 스토리지 활용 및 웹서버 설치

webserver에 aws.tar 풀기

업로드 버튼 클릭
aws.tar
1.52MB
aws.tar 선택하고 파일 업로드
Link 클릭
위의 주소 끝에 '/aws.tar'를 붙이고 전체 복사를 해준다.

# CentOS7 - webserver 에서
# wget 패키지 설치
sudo yum install -y get

# 위에서 업로드한 aws.tar 다운
wget [위에서 복사한 링크]

# tar파일을 html 폴더에 해제
sudo tar -xvf aws.tar -C /var/www/html/

# httpd 재기동
sudo systemctl enable --now httpd
홈페이지 구성이 갖춰졌다.

자격 증명

오픈스택이 설치된 서버 (제일 처음에 생성된 서버)에서 CLI로 오픈스택을 다뤄보자.

자격 증명과 관련된 파일 내부.
자격 증명이 안됐을 때는 권한이 없어서 불가능
# 자격증명으로 로그인
source keystonerc_admin

# 컨테이너 리스트 출력
openstack container list

 

자격 증명이 돼서 가능해졌다.

이처럼 오픈스택을 다루려면 자격 증명이 돼야한다.


컨테이너 생성

# 컨테이너 생성
openstack container create test_container

# 컨테이너 확인
openstack container list
test_container가 새로 생겼다

오브젝트 업로드

# test_container 에 asnwers.txt 업로드
openstack object create test_container answers.txt

# test_container의 오브젝트 리스트 확인
openstack object list test_container
answer.txt가 생겼다

오브젝트 다운로드

# files 컨테이너 안에 있는 aws.tar 파일 다운로드
openstack object save files aws.tar

# 다운로드 확인
ls
aws.tar 다운 성공

오브젝트 지우기

# test_container 안의 answers.txt 지우기
openstack object delete test_container answers.txt

# 확인
openstack object list test_container
삭제돼서 비어있다

컨테이너 삭제

# test_container 컨테이너 삭제
openstack container delete test_container

# 컨테이너 리스트 확인
openstack container list

 


템플릿 생성기 활용

템플릿 생성기 만들기

heat_template_version: "2021-04-16"
description: "version 2017-09-01 created by HOT Generator at Thu, 24 Mar 2022 06:33:11 GMT."
resources: 
  Server_1: 
    type: "OS::Nova::Server"
    properties: 
      security_groups: 
        - "[  보안 그룹 아이디  ]"
      networks: 
        - subnet: "[  서브넷  아이디  ]"
      name: [  이름 입력  ]
      flavor: "[ flavor 이름]"
      image: "[  image 아이디  ]"
      availability_zone: nova
      key_name: "[ 키 페어 이름] "

 위의 텍스트에서 빈칸은 순서대로 채워서 생성할 템플릿의 설정을 할 것이다.

아이디 말고 이름을 써도 되지만, 중복으로 인해 문제가 발생할 수도 있으므로 중복이 우려되는 경우엔 아이디를 추천

 

이름의 경우에는 원하는 이름을 입력하면 된다.


보안 그룹

# 보안 그룹 리스트
openstack security group list
'open-web' 보안 그룹을 사용할 것이므로 해당 아이디를 복사해서 [보안 그룹 아이디]에 붙여넣는다.

서브넷

# 서브넷 리스트
openstack subnet list
internal-subnet 아이디

Flavor

# flavor 리스트
openstack flavor list
m1.tiny 이름 복사

이미지

# 이미지 리스트
openstack image list
CirrOS 아이디 복사

키 페어

키 페어의 경우 이름이 같을 수가 없으므로 이름으로 한다.

# 키 페어 리스트
openstack keypair list
open-key 이름 복사

템플릿을 이용하여 스택 생성

# 템플릿편집
vi sample-stack.yml
// 각자 위에서 빈칸을 채운 양식으로 붙여넣는다.
heat_template_version: "2021-04-16"
description: "version 2017-09-01 created by HOT Generator at Thu, 24 Mar 2022 06:33:11 GMT."
resources: 
  Server_1: 
    type: "OS::Nova::Server"
    properties: 
      security_groups: 
        - "a4033d55-0963-4218-b183-e6fe21bbaf3c"
      networks: 
        - subnet: "701d50a5-8e16-4d33-8025-9c81cf61a83c"
      name: cirros5
      flavor: "m1.tiny"
      image: "65041f9e-3fdb-4cf0-b8ec-47beaf03dc6c"
      availability_zone: nova
      key_name: "open-key"
//

# 템플릿을 기반으로 이름이 'Sample-Stack'인 스택 생성 (서버를 만들기 위한 스택)
openstack stack create -t sample-stack.yml Sample-Stack

# 스택 확인
openstack stack list
Sample-Stack 스택 생성 완료.

# 서버 리스트
openstack server list
cirros5 서버도 생성 성공. 아직 외부 아이피가 없다. Floating IP 연결을 해야 한다.

Floating IP 연결

# 만들어놓은 'external_network'로 플로팅 아이피 생성
openstack floating ip create external_network

# 플로팅 아이피 리스트
openstack floating ip list

# 생성된 서버의 아이피 확인
openstack server list

# 플로팅 아이피의 포트 아이디 기억    --- 1
openstack floating ip list

# 생선된 서버의 포트 아이디 기억       --- 2
openstack port list

# vi floating-stack.yml
heat_template_version: "2018-08-31"
description: "version 2017-09-01 created by HOT Generator at Fri, 13 Aug 2021 10:45:18 GMT."
resources: 
  FloatingIPAssociation_1: 
    type: "OS::Neutron::FloatingIPAssociation"
    properties: 
      floatingip_id: "[  플로팅 아이피의 포트 아이디  --- 1  ]"
      port_id: "[  서버의 포트 아이디  --- 2  ]"
서버의 아이피를 기억한다.
사용할 플로팅 아이피의 아이디 기억
서버 아이피에 대응하는 포트 아이디 기억
# 플로팅 아이피 연결을 위한 스택 생성
openstack stack create -t floating-stack.yml floating-ip

# 확인
openstack server list
cirros5에 플로팅 아이피가 할당됐다.

 키 인증 방식으로 접속

로컬에 있는 open-key.pem 을 업로드하자.
# 키 파일의 퍼미션 400으로 수정 (키는 개방되어 있으면 안된다.)
chmod 400 open-key.pem

# 키를 이용하여 접속
ssh -i open-key.pem cirros@[할당한 플로팅 아이피]

키 인증 방식 접속 성공


MobaXterm에서 세션을 등록해놓자.


인스턴스 상태 삭제로 변경

만일 인스턴스가 삭제가 안되는 오류가 발생 시, 해당 방법으로 임시 조치가 가능하다.

# 서버 리스트 확인 ( 삭제할 인스턴스 아이디 확인)
openstack server list

# 프로젝트 리스트 확인 ( 대응하는 아이디 확인)
openstack project list


# DB 접속
mysql -u root

# 인스턴스는 nova에 있다. 그러므로 nova에 접속
use nova;

# mysql 인스턴스 삭제 sql문
update instances set deleted='1', vm_state='deleted', deleted_at=now() where uuid='[대응하는 서버 아이디]' and project_id='[ 대응하는 프로젝트 아이디 ]';

# 삭제 확인
select uuid, hostname, vm_state, task_state, power_state, deleted from instances where uuid='[삭제한 서버 아이디]';

deleted = 1 이므로 삭제됐다.
웹 상에서도 삭제됐다.