220523

HyeonKi Jo·2022년 5월 23일
0
post-thumbnail

새로운 OpenStack 생성

VMware 초기화 및 새로 생성

  • 기존 가상머신들을 manage -> Delete from Disk 로 지운다.
  • OS는 CentOS-Stream-8-x86_64-latest-boot 를 사용한다.

VM 사양

  • CPU : 4C
  • RAM : 12GB(12288MB)
  • OS : CentOS8 - String.iso
  • NET : Bridged
  • SEC : ?

Openstack VM 최소사양

  • CPU : 4C (시스템 8C)
  • RAM : 8GB (시스템 16GB)

Openstack 권장사양

  • CPU : 24C
  • TAM : 24GB

CentOS8 설치

  • 가상머신을 작동시킨다.
  • Language: English English
  • Time & Date : Seoul
  • Root Password 정의
  • Installation Destination (Partitioning)
    • Storage Configuration : Custom -> Done
    • Click hear ... 파란색 링크 클릭
      • /home 삭제
      • swap 공간은 메모리가 꽉차서 메모리가 부족하다면 디스크 공간을 잡아서 여기서 처리해준다는 개념이다.
        • 이를 12GB로 잡으면 기존 12Gb + 12Gb해서 Openstack RAM 권장사양인 24Gb처럼 동작하게 될 것이다.
        • swap을 12Gb로 만든다.
      • 나머지 공간은 /에 몰아준다.
  • Network&Host : off를 on으로 만들면 IP가 출력된다.
  • Software Selection
    • Network&Host로 랜카드를 설정해야 SOFTWARE파트 설정을 할 수 있다.
    • Minimal Install을 선택
  • Begin Installation
  • 설치가 완료되면 Reboot System 해준다.

Openstack 싱글 노드 설치

잡담

  • Openstack 설치시, localhost의 이름을 바꾸면 안된다.
    • 에러가 생길 수 있다. 또, 중간에 @를 넣으면 인식이 안된다고 한다.

설치

  • vi /etc/sysconfig/network-scripts/ifcfg-ens160
    • 랜카드의 이름을 설정, IP를 고정하고, IP를 정의한다.
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.0.131
NETMASK=255.255.240.0
GATEWAY=192.168.0.1
DNS1=192.168.0.66
DNS2=8.8.4.4
  • vi /etc/selinux/config
    SELINUX=disabled
  • dnf install network-scripts -y :dnf패키지로 network-scripts를 설치한다. (랜카드 설정하는 network-scripts가 현재 OS는 기본설치가 안되어있다.)
  • systemctl disable firewalld : firewalld를 disable해준다. 아직 살아있지만 reboot하면 꺼질 것이다.
  • systemctl disable NetworkManager : 네트워크매니저도 종료해준다.
  • systemctl enable network : 네트워크는 시작 설정해준다.
  • systemctl start network : enable후 reboot할 것이라 현재는 필요 없다.
  • reboot
  • dnf update -y
  • dnf config-manager --enable powertools : powertools를 이용해 openstack yoga를 설치할 것이다.
  • dnf install -y centos-release-openstack-yoga : 원래 openstack은 설치가 매우 까다롭지만, 실습용으로 만든 자동화 설치 패키지를 사용한다.
  • dnf update -y : 이 업데이트는 Centos업데이트와 동시에 Openstack yoga를 위한 업데이트라 할 수 있다.
  • dnf install -y openstack-packstack : 아래 answers.txt를 통해서 하나하나 할 작업들을 스크립트에 모아서 한번에 설치할 수 있도록 필요한 도구이다.
  • packstack --gen-answer-file /root/answers.txt
    • 위 작업 후, ls를 입력하면 answers.txt이 생성되어있다.
    • 또, .ssh폴더가 생겼고, SSH 키와 pub키가 생성되어있다.
    • 위 openstack(Cloud Management System)에서 우리가 할 작업들을 한번에 자동으로 생성해 준것을 볼 수 있다.

answer.txt 설정

  • vi /root/answers.txt
    • 아래 비밀번호와 Volumes_size 등 여러가지를 설정한다.
    • CONFIG_DEFAULT_PASSWORD은 기본 패스워드이다.
    • CONFIG_KEYSTONE_ADMIN_PW는 CLI에서 접근시에 패스워드??이다.
      CONFIG_DEFAULT_PASSWORD=[비밀번호]
      CONFIG_KEYSTONE_ADMIN_PW=[비밀번호]
      CONFIG_CINDER_VOLUMES_SIZE=90G #블록스토리지 서비스 (CINDER), 여기가 부족하면 VM이 생성이 되지 않는다. 심지어 에러도 나오지 않을 것이다.
      //
      CONFIG_NTP_SERVERS=0.kr.pool.ntp.org # (네트워크 타임 프로토콜)
      CONFIG_HEAT_INSTALL=y # HEAT를 사용설정한다. 더 무거워지지만 (IAC, Infrastruct as a Code)
      CONFIG_CEILOMETER_INSTALL=n
      CONFIG_AODH_INSTALL=n
      CONFIG_NEUTRON_L2_AGENT=openvswitch #가상스위치(L2)를 구성하기 위해, 이를 담당하는 NEUTRON을 사용하는데, 이중 openvswitch를 사용할 것이다. 다루기 가장 쉽기 때문이다.
      CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan,flat # flat은 외부네트워크를 맡아주는 네트워크이다. vxlan은 내부네트워크를 맡아주는 소프트웨어다. 우리는 만들고 이름만 만들어주면 되는데, vxlan이라는 드라이버를 설치하여 여기서 작업해준 것이다. vlan이 기본형인데, 네트워크 개수등 확장버전이 vxlan이다.

CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan #예전버전에서는 프로젝트를 TENANT라고 했었다. 즉, 인터널 네트워크, 내부 사용자들이 사용사는 네트워크 타입을 정해주는 것이다.
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=extnet:br-ex #openstack안쪽에서 실제 네트워크라고 생각하는 네트워크를 매핑해주는 것이다. extnet의 이름을 바꿀 수 있지만 이 이름을 꼭 기억해서 모두 수정해줘야 한다. 안그러면 핑이 안나간다.
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:ens160 #br-ex는 방금 정의를 했지만, ens160는 언제든지 바뀔 수 있고, 바뀔때마다 넣어줘야 하기 때문에 미리 정의가 안되어있고 비어있다.

  • 위 br-ex가 이 ens160랜카드의 IP주소를 뺏어서, 랜카드는 그저 전기신호를 전송하기만 하게된다. br-ex가 openstack에서 Floating IP를 만들어 줄 수 있게된다.
    CONFIG_PROVISION_DEMO=n #데모버전이라 네트워크가 이미 정해져있고, 수정할 수 없다. 우리는 네트워크를 직접 꾸밀 것이다. #시험용으로 생성되는 것이다.
  • packstack --answer-file /root/answers.txt

Core Service

1. Compute Service(CPU, RAM)

  • Nova
  • EC2(Elastic Compute cloud)

2. Storage Service(SSD, 구글드라이브, NFS, NAS(Network Attach Service))

  • CINDER (Block Storage)
  • EBS (Elastic Block store)
  • Swift (Object Storage)
  • S3 (Simple Storage Service)
  • Manilla (File Storage Service) : NFS와 똑같이 꾸며 놓은 것.
  • EFS (Elastic File System) : EFS에서 FS의 의미는 NFS를 뜻한다.
  • 대부분 메이저급 클라우드서비스에서는 세가지 스토리지가 존재한다.
    • Block, Object, File 스토리지
    • object : URL을 사용하여 파일에 접근 가능, Webshare

3. Network Service (IP, Subnet)

  • Neutron (OpenStack)
  • VPC (Virtual Private Cloud, AWS) : Private=격리된(isolated)

4. Image Service(OS) : Glance, AMI(Amazone Machine Image)

  • AMI : 인스톨이 끝난 이미지를 가져와서 내가 꾸며놓은 스토리지에 붙이면 그걸 실행시키는 형태. 인스톨이 끝난 이미지로 실행만 시키면 하나의 VM을 생성할 수 있다.

5. Identify Service (User(ID/PW), GROUP, Role)

  • Keysonte, IAM (Identity Access Management)

Optional Service (선택적 서비스)

Orchestaration Service

  • IaC (Infra as a Code) : heat
  • CloudFormation : AWS(head와 똑같지만, 더 잘되어있다.)

관리자가 해야할 일

프로젝트 생성

  • 인증 -> 프로젝트 -> 프로젝트 생성

사용자 생성

  • 전체 클라우드 서비스 내에서, 아래 heat, cinder, neutron, nova 등.. 모든 서비스들이 각각 사용자의 형태로 들어가있다. 서비스들도 일종의 서비스가 된다.
  • 위 설정으로 사용자를 생성한다. 아래 역할에는 Openstack이 권한설정에 약간 문제가 있어 MEMBER를 유지할 것이다.

네트워크 설정

  • 네트워크 - 네트워크 (External 네트워크 생성)
  • 프로젝트는 기본설정인 ADMIN으로 하고, 아까 설정한 외부 네트워크인 FLAT을 사용한다. 또, 물리적인 네트워크는 extnet을 사용한다. 실제 물리네트워크는 아니지만, 설정에서 extnet을 물리적 네트워크로 매핑하였다.
  • 192.168까지는 고정이고, 세번째 자리부터 0~15번을 사용할 것이다.
  • DHCP사용 체크 해제
  • Pools 할당에서 강의실에서 정해진 IP주소 범위를 사용한다.
    • 범위는 시작IP와 끝IP사이에 ,로 구분하고 공백을 주지 않는다.

Flavor 생성

  • 관리 -> Compute -> Flavor
  • m1.micro를 생성한다.
  • ID 를 auto로 생성하면 의미없는 매우 긴 ID가 생성되니 다른 Flavor의 규칙을 맞춰서 정수로 넣어준다.
  • VCPUs : 1
  • RAM(MB) : 1024
  • Root 디스크(GB) : 10
  • Flavor를 생성한다.

Web-user로 접속

  • 이제 web-user계정으로 접속한다.

내부 네트워크 생성

  • 네트워크를 생성하여 이름은 Internal-Network로 한다.
  • 서브넷도 이름을 Internal-Subnet으로 해서 생성해준다.
    • 네트워크 주소는 강의실에서 부여받은 범위의 네트워크 주소로 작성한다.
  • 네트워크 토폴로지를 확인하면 External-Network와 Internal-Network가 생겼다.

라우터 생성

  • 프로젝트 -> 네트워크 -> 라우터에 들어가서 라우터를 생성해준다.
  • CLI에서는
    • Openstack router create Router
    • Openstack router set --external-gatewal External-Network
    • openstack router add subnet Router Internal-Subnet
    • 이 세 명령어로 생성, 외부네트워크 연결, 내부네트워크 추가 가 이루어 진다.
  • 라우터 클릭 -> 인터페이스 생성
  • 인터페이스를 생성해 준다.
  • 네트워크 토폴로지를 보면 잘 연결되어있다.

Floating IP 할당

  • 프로젝트 -> 네트워크 -> Floating IP 에서 IP를 할당받는다.

보안그룹

  • 보안그룹에서 한 규칙에대해 한번 생성하면 수정할 수 없다.
  • 그러나 생성이 어렵지 않아 삭제하고 수정하면 된다.

SG-WEB

  • 프로넥트 -> 네트워크 -> 보안그룹 (디폴트는 사용하지 않는다.)
  • 보안그룹은 기본적으로 모든 접근을 막는다. 그래서 규칙을 추가하여 접근을 허용해야 한다.
    • ALL ICMP : Ping 허용
    • HTTP : HTTP (80) 허용
    • SSH 접근 : SSH(Secure shell)

SG-DB

  • DB용 보안그룹 추가
    • MYSQL (3306) 허용
    • SSH (22) 허용

KeyPairs 생성

  • 프로젝트 -> compute -> 키페어

Images 생성

  • CentOS-7-x86_64-GenericCloud Qxow2 이미지 파일로 CentOS7이미지 파일을 올린다.
  • bionic-server이미지 파일로 Ubuntu18이미지를 올린다.

컨테이너 (WordPress 파일올리기)

인스턴스 생성

  • 인스턴스 이름 : webserver
  • 소스 : 새로운 볼륨 생성(예), 인스턴스 삭제시 볼륨삭제 (아니오), 볼륨크기 10GB, CentOS7
  • Flavor : m1.micro
  • 네트워크는 External네트워크를 볼 권한이 없어 Internal-Network밖에 사용하지 못한다.
  • 네트워크 포트 스킵
  • 보안그룹 : default를 내리고, SG-WEB을 올린다.
  • Key Pair : web-key 사용
  • 구성
    • 사용자 정의 스크립트
      // 웹서버 설치
      !/bin/bash 	// 인스턴스 시작에서 사용자 정의 스크립트를 사용하기위해 시작하는 명령어
      	   		// 이때 root사용자로 입력되기 때문에 sudo를 사용할 필요가 없다. 
      setenforce 0
      sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config	//sed명령어는 s/^ (바꾼다.) //SELINUX=enforcing 을 
      // $/ ~~로 ,SELINUX=disabled /로
      // /etx/selinux/config에 있는
      yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
      cd /home/centos
      wget http://192.168.0.131:8080/v1/AUTH_ea4ee8f33bef44ebae768ca5a017cfb9/Files/wordpress-4.8.2-ko_KR.zip
      cd /var/www/html
      unzip /home/centos/wordpress-4.8.2-ko_KR.zip
      chown -R apache:apache /var/www/*
      systemctl enable --now httpd

  • 인스턴스 시작버튼을 누른다.

인스턴스 작동 확인

  • IP주소로 접근해본다.
    • wordpress로 들어가지나?
  • 들어가졌다.

템플릿 생성기

  • 템플릿을 VM설정을 미리 저장하여 코드로 만들어준다.
  • 이후 새로 만들때 쉽게 똑같은 VM을 만들 수 있다.
  • 이 템플릿은 오토스케일링에서 사용된다.
  • 미리 지정된 스케일의 VM을 템플릿으로 저장해놨다가, STACK에서 Codebased로 (IAC, Infrastrucrue as a Code)이다.
    • 이 기능이 아까 설치할때 설정했던 heat의 기능이다.
  • 프로젝트 -> Orchestration -> 템플릿생성기
  • 템플릿 생성기로 VM을 만들어볼 것이다.

  • 이 템플릿으로 DBSERVER를 생성할 것이다.
  • 데이터베이스 보안그룹을 설정해 준다.
  • 이 템플릿을 다운로드하여 이후에 쉽게 새로 만들 수 있다.
  • 여기서 flavor, template등 수정할 내용만 조금씩 바꿔서 맞춰 VM을 만들 수 있다.

스택

  • 위 템플릿 화면에서 오른쪽 아래 STACK 생성으로 VM을 생성할 수 있다.

  • 스택이 작업을 시작하면서 인스턴스로 가서 인스턴스가 생성된다.
  • 이 스택에서 작업이 끝나면 역시 프로젝트->Compute->인스턴스에서 DBSERVER가 생성된다.

만약 Wordpress 웹서버 키를 분실했다면?

현재 운영중인 서버를 복제하는 방법

  • Webserver가 운영중인데, 키를 분실하여 관리가 불가능한 상황이라면
    • 스냅샷 생성 클릭
    • 스냅샷이 이미지 화면에 올라와있다.

  • 스냅샷의 실행 버튼을 누르면 인스턴스 시작 화면이 나온다.

  • 이후 과정은 기존 인스턴스 생성과 동일하게 설정한다.
  • 운영중인 서버를 스냅샷을 가지고 새롭게 서버를 만들었다.
  • 인스턴스에 복구 서버가 생겼지만, 이때, 기존 서버의 유동 IP를 내리고 그 IP를 복구 서버에 올려야 한다. 이동안 서버가 다운되게 된다. 이슈가 되겠지만, 복구를 위해 어쩔 수 없다. 때문에 키를 읽어버리지 않는것이 좋다.
  • 서버가 잘 복구된 것을 볼 수 있다.

잡담

  • 우리가 VM을 구성하면서, 한줄한줄 커맨드를 입력해 나가는 것을 ad-hoc이라고 한다.
profile
Talking Potato

0개의 댓글