본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Manually Install OpenStack

OpenStack Magnum on CentOS (Rocky)

by iamlucia 2020. 10. 7.

 

Magnum : container orchestration service 


매그넘이란, 

컨테이너 클러스터 생성을 도와주는 오픈스택의 api 서비스

오픈스택 클라우드에 접속하는 keystone credential을 사용하여 클러스터 생성 및 관리 가능

클러스터 타입을 선택 가능

Multi-tenancy 솔루션: control plane , data plane 양쪽에서 실행 가능

새로운 클러스터를 쉽고 빠르게 생성 가능 (다중마스터와 같은 진보된 특징을 지닌) 

 

매그넘 관련 용어

1. COE : Container Orchestration Engine

도커 스웜, 쿠버네티스, DC/OS 등

 

2. Magnum Cluster:

작업이 예약된 노드 객체의 모음 (이전에 cluster는 bay라고 불렸음)

오픈스택 매그넘의 API 리소스로서, 노바 인스턴스, 뉴트론 네트워크, 보안 그룹, 
그리고 기타 HEAT STACK을 사용하여 조합되어 있는 자원들로 구성되어 있다. => 이 자원들이 합쳐져서 COE를 실행함 
 


클러스터에서 노드를 추가하거나 삭제함으로써 클러스터의 scale up 또는 down이 가능(HEAT가 스케일링을 지원)

COE가 실행되는 곳 : COE가 직접 컨테이너를 실행시킴 

 

3. Cluster Template :

객체는 새로운 클러스터를 일관되게 생성하는데, 이때 사용되는 클러스터 템플릿 정보를 저장

클러스터 리소스를 생성하는데 사용되는 model
하나의 템플릿으로부터 생성되는 모든 클러스터가 공통의 정보를 갖게 된다.
Each one dms 클러스터 타입을 정의하는 드라이버를 사용한다.

 

4. Native Client:

COE와 함께 배포된 Client (예를 들어, "docker" 및 "kubectl")만약에 도커스웜 클러스터를 생성하면, 
NATIVE Client는 도커 
Tool  native to the COE! 

Native Client는 오픈스택 클라이언트가 아니기 때문에 인증을 위해 TLS 인증을 사용한다.
Openstack cloud에 접근가능한 client와 독립적으로 COE만을 사용하는 consumer가 존재

 

완전히 새로운 기능이 아니라 기존 기능을 wrapping한 것과 유사.
Heat(Orchestration Service)를 통해 리소스를 제어하고 스케줄링

https://wiki.openstack.org/wiki/Magnum

 

매그넘의 차별성

Multi-Tenant Control and Data Planes 

테넌트 간에 호스트 커널을 공유하지 않아서 보안성 좋음

서버 또는 coe를 선택가능

새로운 컨테이너 클러스터를 2분내로 생성할 수 있는 신속성

소프트웨어에서 빠르게 반복가능 (agility)

 

매그넘과 쿠버네티스

쿠버네티스 :  Application Cluster Management 어플리케이션을 배포하고 관리하는 데에 더 초점 

매그넘: Infrastructure Cluster Management  인프라를 관리하는 데에 더 초점 

 

 

 

Install Magnum 


Prerequisites
기본적으로 인증 서비스(Keystone), 이미지 서비스(Glance), 컴퓨트 서비스(Nova), 네트워킹 서비스(Neutron), 블록 스토리지 서비스(Cinder), 오케스트레이션 서비스(Heat) 설치 필요

또한, 도커 스웜이나 쿠버네티스에 대한 접근을 위해 magnum은 TLS인증을 사용하는데,
이 인증서를 저장하기 위해서 키 매니저 서비스(barbican)설치도 필요

공식 문서에서 추가적으로 제시하는 설치 옵션 


🔨 데이터베이스 등록

🟢 mysql 데이터베이스 생성 

 

# mysql -u root -p
> CREATE DATABASE magnum;
> GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'localhost'  IDENTIFIED BY '[magnum db 비밀번호]';
> GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'%'  IDENTIFIED BY '[magnum db 비밀번호]';

 

🟢 admin용 credential 스크립트 실행

 

# . admin-openrc

 

🟢 magnum 서비스 credential 생성 : user 생성 및 role-project 연결

 

# openstack user create --domain default --password-prompt magnum
# openstack role add --project service --user magnum admin

 

🟢 magnum 서비스 credential 생성 : service 생성

 

# openstack service create --name magnum --description "OpenStack Container Infrastructure Management Service" container-infra

 

🟢 magnum 서비스 endpoint 생성 

 

# openstack endpoint create --region RegionOne  container-infra public http://CONTROLLER_IP:9511/v1
# openstack endpoint create --region RegionOne container-infra internal http://CONTROLLER_IP:9511/v1
# openstack endpoint create --region RegionOne  container-infra admin http://CONTROLLER_IP:9511/v1

 

🟢 magnum Domain 생성 :
매그넘 서비스는 COE(클러스터 오케스트레이션 엔진) 클러스터를 관리하기 위해 Identity 서비스에  추가 정보 더 필요 

 

# openstack domain create --description "Owns users and projects  created by magnum" magnum
# openstack user create --domain magnum --password-prompt magnum_domain_admin
# openstack role add --domain magnum --user-domain magnum --user  magnum_domain_admin admin

 


🔨 구성요소 설치   

🟢 magum 관련 패키지 설치 :  

 

# yum install openstack-magnum-api openstack-magnum-conductor python-magnumclient

 

🟢 magum 설정 파일 편집 :  

 

# vi /magnum/magnum.conf

더보기

[api]
...
host = CONTROLLER_IP

[certificates]
...
cert_manager_type = barbican // barbican 미설치 상황이라면, "x509keypair" 입력 

[cinder_client]
...
region_name =RegionOne

[database]
...
connection = mysql+pymysql://magnum:MAGNUM_DBPASS@controller/magnum

[keystone_authtoken]
...
memcached_servers = controller:11211
auth_version = v3
auth_uri = http://controller:5000/v3
project_domain_id = default
project_name = service
user_domain_id = default
password = MAGNUM_PASS
username = magnum
auth_url = http://controller:5000
auth_type = password
admin_user = magnum
admin_password = MAGNUM_PASS
admin_tenant_name = service

[trust]
...
trustee_domain_name = magnum
trustee_domain_admin_name = magnum_domain_admin
trustee_domain_admin_password = DOMAIN_ADMIN_PASS
trustee_keystone_interface = KEYSTONE_INTERFACE   //public또는 internal 중 입력하면 되는데 인스턴스가 개발 환경에서는 인스턴스들이 keystone의 내부용 엔드포인트로 통신이 불가능한 경우가 생길 수 있기 때문에 public을 추천(디폴트값) 

[oslo_messaging_notifications]
...
driver = messaging


[DEFAULT]
...
transport_url = rabbit://openstack:RABBIT_PASS@controller


[oslo_concurrency]
...
lock_path = /var/lib/magnum/tmp

🟢 magum 설정 파일 기반 데이터베이스에 테이블 생성 :

 

# su -s /bin/sh -c "magnum-db-manage upgrade" magnum

  


🔨 치 마무리

🟢 magum 서비스 활성화 및 시작 : 

 

# systemctl enable openstack-magnum-api.service  openstack-magnum-conductor.service
# systemctl start openstack-magnum-api.service  openstack-magnum-conductor.service


📍 Verification 

 

🟢 설치 마무리 확인 

 

# openstack coe service list