본문 바로가기

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

오픈 스택 - CLI로 생성(Webserver-워드프레스, DBserver - MariaDB)

CLI로 다시 WebServer 설치

초기화

CLI에서 다시 처음부터 시작할 것이므로 모두 삭제해줄 것이다.

인스턴스 모두 하나씩 다 삭제
모두 삭제
모두 삭제
cirros-add 제외하고 모두 삭제
모든 유동 아이피 해제
유동 아이피를 모두 해제한 후 라우터 삭제 ( 연결된 유동 아이피 있으면 삭제 안됨)
internal_network 삭제 전에 연결된 포트를 제거해야한다. 이름 클릭
포트 모두 삭제
연결된 포트가 다 사라지면 삭제가 가능해진다. external도 마저 삭제해주자.
보안 그룹 삭제. (default는 기본 값이므로 삭제 불가)
Stack 모두 삭제
컨테이너 삭제 전에 비워야 한다.
하위 폴더,파일을 모두 삭제
이제 컨테이너 삭제.
생성했던 Flavor 삭제

 

이것으로 거의 초기 상태로 되돌렸다. 이제 CLI로 다시 처음부터 생성해보자.


CLI - Project 생성

# 만일 자격 증명 필요하면
source keystonerc_admin

# 프로젝트 생성 ( 디폴트 도메인 / 설명: cli-project / 프로젝트명 : cli-project)
openstack project create --domain Default --description "cli-project" cli-project
생성에 성공하면 만들어진 프로젝트의 정보를 알려준다.
리스트에도 잘 나온다.

 

CLI - User 생성

# 유저 생성 (도메인:디폴트 / 소속 프로젝트 : cli-project (이름 말고 id로도 가능) / 패스워드: 보안을 위해 프롬프트를 띄어 따로 입력 / 유저 명 : cli-user)
openstack user create --domain Default --project cli-project --password-prompt cli-user

# 역할 추가 ( cli-user에게 cli-project 프로젝트의 _member_ 기본 역할 부여)
openstack role add --project cli-project --user cli-user _member_
생성 성공. 위와 같이 비밀번호를 안보이게 입력한다.
리스트에도 cli-user가 뜬다.

CLI - Image 생성

OpenStack 서버에서 업로드 하자.
CentOS-7-x86..... 업로드
하는 김에 우분투도 같이 올리자.
CirrOS도 올리자.
모두 다 올라갔다.

 

# 이미지 생성 (파일: CentOS7 / 디스크 포맷: qcow2 / 컨테이너 포멧: bare / 퍼블릭으로 해서 다른 쪽에서도 사용 가능하게 해서 공간 절약 / 이미지 이름: centos7)
openstack image create --file CentOS-7-x86_64-GenericCloud.qcow2 --disk-format qcow2 --container-format bare --public centos7

 

생성 성공
리스트에도 뜬다. Active 상태이므로 잘 생성됐다.

# 이미지 생성 (파일: bionic / 디스크 포맷: qcow2(img도 포함) / 컨테이너 포멧: bare / 퍼블릭으로 해서 다른 쪽에서도 사용 가능하게 해서 공간 절약 / 이미지 이름: ubuntu
openstack image create --file bionic-server-cloudimg-amd64.img --disk-format qcow2 --container-format bare --public ubuntu
실제로 img 확장자여도 qcow2 포멧 취급한다.
생성 성공.

CLI - Flavor 생성

# Flavor 생성 ( vcpus:1개 / ram: 1024mb / 디스크 사이즈 : 10gb / id : 6 / 이름: m1.micro)
openstack flavor create --vcpus 1 --ram 1024 --disk 10 --id 6 m1.micro
생성 정보.
리스트에도 잘 뜬다.

CLI - External Network 생성

# 네트워크 생성 ( 프로젝트: cli-project / 네트워크 타입: flat(외부 네트워크에서 브릿지 기능) / 프로바이더 네트워크: extnet / 외부네트워크 / 이름: external-network) 
openstack network create --project cli-project --provider-network-type flat --provider-physical-network extnet --external external-network
리스트에서도 확인 된다.

## \ : 개행문자(다음줄에서 이어서 입력 가능)
# 서브넷 생성(네트워크: external-network / 프로젝트: cli-project / 서브넷 대역폭 : 192.168.0.0/21
# 아이피 풀: 192.168.4.1 ~ 192.168.4.50 / 게이트웨이 : 192.168.0.1 / dhcp: x / 이름: external-subnet)
# 예시 코드이므로, 각자 알맞게 수정해서 쓰자.
openstack subnet create --network external-network \
--project cli-project --subnet-range 192.168.0.0/21 \
--allocation-pool start=192.168.4.1,end=192.168.4.50 \
--gateway 192.168.0.1 --no-dhcp external-subnet
# show를 이용하여 디테일한 정보를 볼 수 있다.
openstack subnet show external-subnet

CLI -  Token 생성

# OS_AUTH_URL 확인
cat keystonerc_admin

# 키스톤 설정 ( AUTH_URL: 인증을 하기 위한 URL / PS1: 이 토큰이 적용되면 변경할 프롬프트)
vi keystonerc_cli-user
// 수정하고 붙여넣기.
unset OS_SERVICE_TOKEN
    export OS_USERNAME=cli-user
    export OS_PASSWORD='[유저에서 설정한 비밀번호]'
    export OS_REGION_NAME=RegionOne
    export OS_AUTH_URL=[keystonerc_admin에 있는 주소]
    export PS1='[\u@\h \W(keystone_cli-user)]\$ '

export OS_PROJECT_NAME=cli-project
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
// 프로젝트, DNS, IDENTITY API 버전 설정
OS_AUTH_URL 확인
알맞게 수저하고 붙여넣기.
# cli-user 로 로그인
source keystonerc_cli-user
cli-user로 로그인

CLI - internal network 생성

# $를 붙여서 프로젝트ID에 다음 변수 값을 저장
projectID=$(openstack project list | grep cli-project | awk '{print $2}')

# 네트워크 생성 (소속 프로젝트: 위에서 찾아낸 프로젝트 아이디 / provider: vxlan(내부 네트워크의 경우) / 이름: internal-network)
openstack network create --project $projectID --provider-network-type vxlan internal-network
{"originWidth":701,"originHeight":56,"style":"alignCenter","caption":"openstack project list
실제로 반영된다.
하지만 에러가 날 것이다. 권한이 없기 때문이다. 다음 코드를 참고하자.

# 밑에서 provider-network-type 을 사용하기 위해서 admin 권한을 주도록 수정해줘야 한다.
# floating ip를 만들 때에도 동일하다.
vi /etc/neutron/policy.yaml
// 붙여넣기.
"create_network:provider:network_type": "role:admin or project_id:%(project_id)s"
"create_floatingip:floating_ip_address": "role:admin or project_id:%(project_id)s"
//

# 다시 네트워크 생성
openstack network create --project $projectID --provider-network-type vxlan internal-network
생성 성공.
리스트에도 뜬다. 아직 서브넷이 없다. 추가해주자.

# 서브넷 생성 (네트워크: internal-network / 대역폭: 자신의 네트워크 주소 / 게이트 웨이: 게이트웨이 주소 / dhcp 지원 / dns: 8.8.8.8 / 이름: internal-subnet
# 예시 코드이므로 각자 알맞게 수정해서 사용
openstack subnet create --network internal-network --subnet-range 10.11.1.0/24 --gateway 10.11.1.1 --dhcp --dns-nameserver 8.8.8.8 internal-subnet
생성 완료
리스트에서도 확인.

CLI - Router 생성

# 라우터 생성
openstack router create router

# 라우터 세팅 (생성했던 external-network를 외부 게이트웨이에 연결)
openstack router set --external-gateway external-network router

# 라우터에 서브넷 추가 (내부쪽 방향으로 붙이므로 internal임)
openstack router add subnet router internal-subnet
생성 완료.

CLI - Security Group 생성

# open-sg-web 보안그룹 생성
openstack security group create open-sg-web
생성 완료

# 'open-sg-web' 보안 그룹에 규칙 추가 (프로토콜: icmp / ingress: 외부에서 내부[수신])
openstack security group rule create --protocol icmp --ingress open-sg-web

# tcp 프로토콜 / 데스티네이션 포트 : 22 / ingress(디폴트 값) / '22:22' 에서 ':'의 의미는 '~' 범위
openstack security group rule create --protocol tcp --dst-port 22:22 open-sg-web

# 80포트 ( '80' = '80:80')
openstack security group rule create --protocol tcp --dst-port 80 open-sg-web

 CLI - KeyPair 생성

 전에 실습에서 WEB UI를 이용해서 키를 생성했었다. 이를 그대로 이용하면 되지만,

만일 키가 없는 상태라면 CLI를 이용하여 키를 생성(key gen)해서 사용하면 된다.

 

# 키 페어 생성 ( 퍼블릭 키 / 사용할 키 파일 경로 / 키 페어 이름: open-key)
openstack keypair create --public-key ~/.ssh/id_rsa.pub open-key
생성 완료.
리스트에서도 확인.

CLI - Floating IP 생성

# router 라우터 상세 정보 (해당 플로팅 아이피는 쓰지 말아야 한다.)
openstack router show router
라우터는 이미 자동으로 플로팅 아이피가 연결됐다.

 

# 쓸 수 있는 범위에서 랜덤하게 유동 아이피 생성 (WEB UI에서 사용한 방법)
openstack floating ip create external-network

# external-entwork와 연결된 192.168.4.1 플로팅 아이피 생성 (원하는 아이피 생성)
openstack floating ip create --floating-ip-address 192.168.4.1 external-network
랜덤 아이피, 지정한 아이피 둘 다 있다.

# 웹 서버 설치에 사용될 파일(사용자 정의 스크립트 파일)  // 여기서는 생략
vi httpd.file
// 아래 내용으로 생성
#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
//

# 서버 생성 (flaver: m1.micro / 이미지: centos7 / 보안그룹: open-sg-web / 네트워크: internal-network / 불륨 크기: 10GB / 키 페어: open-key / 이름: webserver)
openstack server create --flavor m1.micro --image centos7 --security-group open-sg-web --network internal-network --boot-from-volume 10 --key-name open-key webserver

 


# 서버 리스트
openstack server list

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

# 서버에 플로팅 아이피 연결
openstack server add floating ip webserver 192.168.4.1

# 접속 확인
ssh -i .ssh/id_rsa centos@192.168.4.1
플로팅 아이피 연결 성공

CLI - Volume 생성

# 불륨 생성 ( 사이즈: 1GB / 이름: web-add)
openstack volume create --size 1 web-add

# 불륨 리스트
openstack volume list

# webserver 서버에 web-add 불륨 추가
openstack server add volume webserver web-add
생성 성공
리스트 확인. web-add 말고도 webserver를 생성하며 만든 불륨도 있다.(webserver에 attached 됨)
webserver에 web-add를 연결

연결 성공

 


# 서버에 접속 
ssh -i .ssh/id_rsa centos@192.168.4.1

# 블록 확인
lsblk

# xfs타입 포멧
sudo mkfs -t xfs /dev/vdb

# 마운트
sudo mount /dev/vdb /mnt

# 확인
df -h

접속 성공. (부팅이 느려서 안될 수도 있으니 기달려야 될 수도 있음)
vdb 불륨이 있음을 확인

 

마운트 완료.


CLI로 Ubuntu - DBserver 설치

Security Group 생성

# 보안 그룹 open-sg-db 생성
openstack security group create open-sg-db
openstack security group rule create --protocol icmp --ingress open-sg-db
openstack security group rule create --protocol tcp --dst-port 22:22 open-sg-db
openstack security group rule create --protocol tcp --dst-port 3306 open-sg-db

KeyPair 생략

 기존 open-key 사용할 것이므로 생략


Floating IP 생성

# 원하는 아이피로 플로팅 아이피 생성
openstack floating ip create --floating-ip-address 192.168.4.2 external-network

# mysqld 설치 스크립트 만들기
vi mysqld.file
//
#!/bin/bash
apt update
apt install -y mariadb-server
//

# 서버 생성
openstack server create --flavor m1.micro --image ubuntu --security-group open-sg-db \
--network internal-network --boot-from-volume 10 --key-name open-key --user-data mysqld.file dbserver

# 플로팅 아이피 연결
openstack server add floating ip dbserver 192.168.4.2

# 서버 확인
openstack server list

# 접속
ssh -i .ssh/id_rsa ubuntu@192.168.4.2

MariaDB 설치 

# 설치
sudo mysql_secure_installation

# MariaDB 설정
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
// bind-address 앞에 '#' 주석처리
#bind-address            = 127.0.0.1
//

# 재기동
sudo systemctl restart mysql

# wpuser 유저 (비밀번호: wppass) 생성
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';

# wordpress 데이터베이스가 없으면 생성
CREATE DATABASE IF NOT EXISTS wordpress;

# wpuser에게 wordpress에 대한 모든 권한 부여
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';

# 나가기
quit

CLI로 WebServer - 워드프레스 설치

 워드프레스 설치

# webserver 접속
ssh -i .ssh/id_rsa centos@192.168.4.1

# 필요한 패키지들 설치
sudo yum install -y httpd php php-mysql php-gd php-mbstring wget unzip

# 워드프레스 압축파일 다운로드
wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip

# html 폴더로 이동
cd /var/www/html

# 압축해제
sudo unzip /home/centos/wordpress-4.8.2-ko_KR.zip

# 압축해제하여 생긴 워드프레스 폴더 안의 파일들을 현재 경로로 모두 이동
sudo mv ./wordpress/* .

# 아파치 사용자와 그룹에게 해당 폴더에 대한 소유권 부여
sudo chown -R apache:apache /var/www/*

# 재기동 및 활성화
sudo systemctl enable --now httpd

# selinux 비활성화
sudo setenforce 0
vi /etc/selinux/config
// 해당 항목 찾아서 disabled로 수정
SELINUX=disabled
//

이제 윈도우의 크롬창으로 webserver의 플로팅 아이피를 입력하면

정상적으로 설치됐다.
dbserver의 아이피 입력
원하는 대로 입력
로그인
성공적으로 설치됐다.

 

admin이 아니라 cli-user로 접속해야한다.

CLI로 삭제

서버 삭제

# 서버 삭제
openstack server delete [서버 이름]
webserver 삭제
dbserver삭제

불륨 삭제

VM 지울 때 연결된 불륨을 삭제를 시킬 수 있으나, 이 옵션을 체크 안했으므로 남아 있다.

그러므로 직접 지워줘야한다.

## 불륨 삭제
# 이름으로 삭제
openstack volume delete [불륨 이름]

# 아이디로 삭제
openstack volume delete [불륨 아이디]

 

이름으로 삭제
아이디로 삭제
모든 불륨을 삭제해주자.

Floating IP 삭제(해제)

# Floating IP 삭제
# openstack floating ip [아이피 주소]
삭제. 모두 다 삭제해주자.

라우터 삭제

제일 먼저 라우터의 인터페이스를 분리해줘야 한다.

# 서브넷 삭제
openstack router remove subnet [라우터 이름] [서브넷 이름]

# 외부 게이트웨이 해제
openstack router unset --external-gateway router

# 라우터 삭제
openstack router delete [라우터 이름]

네트워크 삭제

네트워크의 서브넷 삭제를 먼저 해줘야 한다.

먼저 내부 네트워크를 삭제해보자.

# 서브넷 삭제
openstack subnet delete [서브넷 이름]
internal-network를 삭제할 것이므로 internal-subnet 서브넷 삭제.

# 네트워크 삭제
openstack network delete internal-network
네트워크 삭제.

 이제 외부 네트워크를 삭제할 것이다. 외부 네트워크를 삭제할 것이면 'admin'으로 해야한다.

그 후엔 위 처럼 해주면 된다.

# admin 자격증명
source keystonerc_admin
external-subent 삭제
external-network 삭제

Flavor 삭제

# Flavor 삭제
openstack flavor delete [flavor 아이디]

이미지 삭제

현재 실습에선 삭제는 안하지만 다음과 같이 삭제할 수 있다.

# 이미지 삭제
openstack image delete [이미지 이름]

유저 삭제

# 유저 삭제
openstack user delete [유저 아이디]

프로젝트 삭제 

# 프로젝트 삭제
openstack project delete [프로젝트 이름]

참고로, 스택도 덩달아 사라진다. 

스택도 사라졌다.