DevStack은 빠르고 쉽게 오픈스택의 핵심 컴포넌트를 구축하기 위한 스크립트
주요 구성 요소
DevStack을 이용하면 다음과 같은 구성요소들을 쉽게 구성할 수 있다.
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
위의 명령어들은 Linux 환경에서 스왑 파일을 생성하고 활성화하는 일련의 작업을 수행한다. 이러한 작업은 주로 시스템에 추가 메모리를 제공하거나 메모리 부족 상황에서 시스템의 안정성을 유지하기 위해 수행된다.
sudo fallocate -l 8G /swapfile
/swapfile이라는 이름의 스왑 파일을 생성하고 크기를 8GB로 할당한다.
스왑 파일은 메모리의 일부를 대체로 사용하는 가상 메모리의 일종이다.
sudo chmod 600 /swapfile
/swapfile에 대한 액세스 권한을 변경하여, 해당 파일을 소유한 사용자만 읽고 쓸 수 있도록 한다.
sudo mkswap /swapfile
/swapfile을 스왑 영역으로 사용할 수 있도록 초기화한다.
mkswap 명령은 스왑 파일을 생성하고 초기화하는 데 사용된다.
sudo swapon /swapfile
/swapfile을 활성화하여 스왑 공간으로 사용하도록 한다.
이 명령을 통해 스왑을 활성화하면 메모리 부족 상황에서 시스템이 스왑 영역을 사용하여 추가 메모리를 제공할 수 있다.
이러한 작업은 일반적으로 메모리 부족 상황에서 시스템 안정성을 유지하거나 메모리를 효과적으로 확장하기 위해 수행된다. 그러나 스왑 파일을 사용할 때는 주의해야 하며, 지속적으로 스왑을 사용하는 것은 성능에 영향을 줄 수 있다. 따라서 스왑 사용에 대한 신중한 고려가 필요하다.
sudo useradd -s /bin/bash -d /opt/stack -m stack
sudo chown stack:stack -R /opt/stack/
해당 디렉토리와 파일들을 특정 사용자인 stack으로 소유하고, stack 그룹으로 그룹화
이런 소유권 및 그룹 설정은 파일 시스템의 보안 및 접근 권한 관리에 사용된다.
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
'stack' 사용자에게 sudo 권한을 부여하는 규칙을 생성한다.
| sudo tee /etc/sudoers.d/stack
앞서 생성한 규칙을 /etc/sudoers.d/stack
파일에 쓰는데, 이를 sudo로 실행하고 터미널 출력을 파일에 쓴다.
sudo chmod 755 /opt/stack
/opt/stack 디렉토리의 권한을 755로 변경한다.
이는 stack 사용자에게 읽기와 실행하기 권한을 부여하고, 다른 사용자들에게는 읽기와 실행하기만을 허용한다.
sudo su - stack
stack 사용자로 전환한다.
이 명령을 실행하면 현재 사용자가 stack으로 변경되어 stack 사용자의 환경으로 전환된다.
이제 stack 사용자로 작업을 진행할 수 있다.
사용자가 ubuntu -> stack으로 변경된 것을 볼 수 있다.
git clone받는 것이 끝이기 때문에 별도의 설명은 생략하겠습니다.
sudo apt-get update
sudo apt install git -y
git clone https://opendev.org/openstack/devstack
cd devstack
필요한 버전이 있다면, checkout을 통해 branch를 변경하며 받으면 된다.
각 버전은 stable/$버전명 브랜치로 checkout 을 받아 진행할 수 있다.
ex) stable/2023.2
https://opendev.org/openstack/devstack
여기서 브랜치를 확인하면 된다.
보통 Cloud instance를 생성하면 외부와 통신 가능한 NIC 포트는 하나만 제공된다.
그리고 이는 Cloud 제공 업체에서 관리되어진다.
이러한 이유로 Openstack내에서 provider network 대역대를 생성하지 못한다.
해결 방법으로는 인스턴스 내부에서 가상 브릿지를 만들어 그것을 provider network로 제공하는 방법이 있다.
bridge-tuils 패키지 사용
sudo apt install bridge-utils net-tools
sudo brctl addbr mybr0
sudo ifconfig mybr0 192.168.100.1 netmask 255.255.255.0 up
sudo iptables -I FORWARD -j ACCEPT
sudo iptables -t nat -I POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
sudo ip addr add $할당받은_공인_IP/32 dev lo
sudo apt install bridge-utils net-tools
bridge-utils: 브릿지 네트워크 구성을 관리하기 위한 도구
브릿지는 여러 네트워크 인터페이스를 하나로 결합하여 동일한 네트워크 세그먼트에 있는 장치 간에 통신을 허용한다.
net-tools: 네트워크 관리 도구 모음으로, ifconfig 및 다른 네트워크 관련 명령어를 포함한다.
여러 네트워크 인터페이스 카드를 논리적으로 하나로 묶어, 브릿지를 만든다.
sudo brctl addbr mybr0
'mybr0' 이름의 브릿지를 생성한다.
생성된 브릿지를 사용하여 다양한 Network Device를 연결하고, 브릿지를 통해 Device간에 통신이 가능하게 한다.
sudo ifconfig mybr0 192.168.100.1 netmask 255.255.255.0 up
'mybr0' 인터페이스에 192.168.100.1
IP를 할당하고, 서브넷으로 255.255.255.0으로 초기화한다. 이는 해당 네트워크의 하위 네트워크를 나타낸다.
추가로 링크 상태를 활성화한다.
sudo iptables -I FORWARD -j ACCEPT
iptables
를 사용하여, Linux system에서 IP 패킷 포워딩을 허용한다.
-I FORWARD
: FORWARD 체인에 규칙을 삽입하는 옵션
FORWARD 체인은 라우터에서 패킷이 수신되어 다른 네트워크로 전달될 때 사용된다.
-j ACCEPT
: 패킷을 허용하라는 옵션
이 규칙을 만나면 FORWARD 체인의 패킷은 거부되지 않고 허용된다.
이러한 명령어를 사용하여 시스템이 라우터로서 동작하도록 구성된다.
즉, 패킷이 이 시스템을 통과하고, 다른 네트워크로 전달될 때 해당 패킷이 허용되도록한다.
sudo iptables -t nat -I POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
-t nat
: NAT 테이블을 대상으로 하는 옵션
-t는 테이블을 지정하는 옵션이며, nat는 NAT 테이블을 의미
-I POSTROUTING
: POSTROUTING 체인에 규칙을 삽입하는 옵션
POSTROUTING 체인은 패킷이 라우팅되고 소스 주소가 변경되기 직전에 실행
-s 192.168.100.0/24
: 소스 주소를 지정하는 옵션
여기에서는 192.168.100.0/24 네트워크의 주소를 가진 패킷에 대한 규칙을 정의
-j MASQUERADE
: 패킷에 대한 동작을 지정하는 옵션
여기에서는 MASQUERADE를 사용하여 패킷을 변환
MASQUERADE는 소스 주소를 자동으로 변경하여 응답 패킷이 다시 라우팅되는 경우 원래의 소스 주소로 다시 변경하는 것을 의미한다.
이는 주로 내부 네트워크에서 외부로 나가는 패킷에 대해 사용되어, 내부 네트워크의 주소를 감추고 외부에서는 라우터의 공인 IP 주소만 보이도록 하는데 사용된다.
내부 네트워크의 여러 디바이스가 공인 IP 대신에 라우터의 단일 공인 IP를 사용하여 외부와 통신할 수 있도록 한다.
sudo ip addr add $할당받은_공인_IP/32 dev lo
devtack을 설치하면, 기본적으로 OS에 설정된 사설 IP 주소를 사용하여 Horizon 및 기타 API 엔드포인트가 설정된다. 그러나 클라우드 인스턴스에 할당된 IP 주소가 사설 IP 주소이기 때문에, 외부 통신이 필요한 경우 devstack 설정 파일인 local.conf 파일에 공인 IP 주소 정보를 추가하고 해당 주소를 루프백 인터페이스에 바인딩하도록 설정해야 한다.
해당 사진은 다른 Instance에서 브릿지를 생성하고 설정했던 사진이기 때문에 hostname이 다릅니다. 기존에 진행하시던 Instance에서 그대로 진행하시면 됩니다.
devstack에 대한 설정은 local.conf를 통해 이루어진다.
local.conf의 샘플은 devstack/samples에 위치하며, devstack 설치를 진행할 때는 /devstack에 local.conf 파일을 설치하여 진행한다.
[[local|localrc]]
HOST_IP=$할당받은_공인IP
FORCE=yes
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
# Enable Swift
enable_service s-proxy s-object s-container s-account
SWIFT_REPLICAS=1
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
SWIFT_DATA_DIR=/opt/stack/data/swift
# Disable services
disable_service etcd3
disable_service ovn
disable_service ovn-controller
disable_service ovn-northd
disable_service q-ovn-metadata-agent
# Use openvswitch as the ml2 plugin driver
Q_AGENT=openvswitch
# Enable Neutron services neutron-server, neutron-openvswitch-agent,
# neutron-dhcp-agent, neutron-l3-agent and neutron-metadata-agent
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
## Neutron options
#Q_USE_SECGROUP=True
FLOATING_RANGE="192.168.100.0/24"
IPV4_ADDRS_SAFE_TO_USE="10.0.0.0/22"
Q_FLOATING_ALLOCATION_POOL=start=192.168.100.50,end=192.168.100.250
PUBLIC_NETWORK_GATEWAY="192.168.100.1"
PUBLIC_INTERFACE=mybr0 // 설정한 브릿지
# Open vSwitch provider networking configuration
Q_USE_PROVIDERNET_FOR_PUBLIC=True
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex
[[post-config|/$Q_PLUGIN_CONF_FILE]]
[ml2]
type_drivers=flat,gre,vlan,vxlan
tenant_network_types=vxlan
mechanism_drivers=openvswitch,l2population
[agent]
tunnel_types=vxlan,gre
저장 후, stack.sh 스크립트를 실행하여 설치한다.
참고로 20분 정도 소요된다.
다음과 같이 삭제했다가 다시 진행한다.
./clean.sh
./stack.sh
devstack은 openrc라는 스크립트를 제공한다.
이 스크립느는 환경변수를 계정에 맞게 설정해준다.
파일의 위치는 devstack 아래에 있다.
ll ~/devstack/openrc
source openrc $username $project_name
위와 같이 입력하면 username으로 설정한 계정으로 환경변수가 설정되어 CLI를 이용할 수 있다.
다만, 현재 세션에서만 적용되는 로컬 환경변수를 임시적으로 설정하기 때문에 다른 세션으로 연결할 경우 다시 환경변수를 설정해야한다.
환경변수 적용을 확인하기
evn | grep OS_
공인 IP를 주소창에 입력하면 다음과 같은 화면이 나옵니다.
ID : Admin
Password : 설정한 비밀번호를 입력하면 됩니다.
Reference
https://docs.openstack.org/devstack/latest/
https://printf.kr/entry/클라우드-인스턴스에서-devstack-구축하기
오픈스택 생태계에 큰 기여를 하셨네요 석환님^^