OpenStack Essentials - 4

SangYeon Min·2025년 1월 20일

STUDY-OPENSTACK

목록 보기
4/5
post-thumbnail

Working w/i Horizon Dashboard

  • 여러개의 부서로 이루어진 조직에서 일을 하는 상황이라고 가정
  • 현재 나의 역할은 조직 전체에 Openstack Cloud를 제공하는 것을 총괄하는 것
  • Engineering 부서에서 새로운 프로젝트가 시작됨
  • 따라서 해당 부서에서 사용할 VM과 리소스를 제공하는 상황이라고 가정

Launcing an Instance

  • Mandatory
    • Image (Glance)
    • Network (Neutron)
    • Size of the instance (Nova, flavor)
  • Optional
    • Security Setting
      • ACLs (Neutron)
      • Key pair (Nova)
    • Persistent storage (Cinder)

Instance를 만들기 위해서는 단순히 부팅하는 것 뿐 아니라 위 요소들을 모두 준비해야 한다.

Network Configuration

개념적인 Network Topology는 위와 같으며

이후 Horizon을 통해 Optional한 요소들까지 세팅을 완료한 이후 위와 같은 Network Topology를 생성하였다.

external_network가 기존의 개념적인 토폴로지와 다른 이유는 현재 VM이 NAT Network Interface를 통해 Host 머신의 네트워크와 연결되어 있기 때문이다.

또한 위와 같이 새로운 인스턴스에 Floating IP를 연결해주었다.


Scaling Openstack

Openstack은 --all-in-one 파라미터와 같이 단일 Node에서 모두 구동될 수도 있고, 여러 노드 (Controller, Compute, Network etc.)로 구동될 수도 있다.

Scaling Methods

  • Horizontal Scaling (Scale out)

    • 리소스 풀에 더 많은 머신을 추가하여 확장
    • 시스템의 여러 인스턴스를 병렬로 추가하여 성능 향상
  • Vertical Scaling (Scale up)

    • 기존 머신에 CPU, RAM 등의 성능을 추가하여 확장
    • 단일 시스템의 처리 능력을 높이는 방식으로 실행

Openstack Component Scale

  • RESTful Web Services의 몇 가지 특징:

    • Client-Server 기반 통신

    • 클라이언트의 각 요청은 서버가 요청을 처리하는 데 필요한 모든 정보를 포함해야 함

    • REST API는 로드 밸런서를 통해 네이티브 확장이 가능하며, 하나의 API 엔드포인트가 이를 대표해야 함

  • 일부 구성 요소는 자연적으로 확장되지 않음:

    • 데이터베이스는 클러스터링이 필요함
      (ex. Galera cluster)

    • 메시지 큐는 자체 클러스터링 방법을 가짐
      (ex.RabbitMQ, Qpid, ZeroMQ)

    • Non-API 구성 요소는 확장을 위한 내장 지원 기능을 제공함
      (ex. Neutron, Swift proxy)

Compute Node

  • Compute Node는 OpenStack에서 가상 머신(VM)을 호스팅하는 핵심 컴포넌트

  • 확장성을 극대화하기 위해 여러 개의 노드로 분산 배치를 수행할 수 있음

  • Compute Node는 수평 확장이 용이한 구조를 가짐

  • 새로운 Compute Node를 추가함으로써 클러스터의 전체 용량과 가상 머신 호스팅 기능을 쉽게 확장 가능

  • 네트워크 연결은 Neutron과 OVS를 통해 관리되므로, 확장 시 네트워크 아키텍처가 병목 현상을 최소화하도록 설계해야 함

Storage for Instances

  • Non-compute node 기반 Shared File System

    • 실행 중인 인스턴스를 저장하는 디스크는 Compute Node 외부의 서버에 호스팅됨
    • Compute Node가 상태를 유지하지 않으므로 노드 장애 발생 시 인스턴스를 쉽게 복구 가능
  • Compute node 스토리지 - Shared File System

    • 각 Compute Node는 상당한 디스크 공간이 필요함
    • 분산 파일 시스템이 각 Compute Node의 디스크를 하나의 마운트로 묶음
    • 데이터 지역성(Data locality)이 손실됨
    • 인스턴스 복구가 복잡함
  • Compute node 스토리지 - nonShared File System

    • Compute Node의 로컬 디스크를 사용
    • 한 Compute Node에서 발생하는 높은 I/O 사용량이 다른 Compute Node의 인스턴스에 영향을 미치지 않음
    • 노드를 잃게 되면 해당 노드의 데이터도 손실됨
    • 인스턴스 마이그레이션이 복잡함

Network Node

  • 클라우드 사용자들의 가상 네트워킹 요구 사항 처리

    • Routing
    • NAT/Floating IPs
    • 인스턴스 게이트웨이로서 Logical Routers 생성
    • 네임스페이스를 생성하고 관리
  • L4-L7 고급 서비스:

    • Load Balancer as a Service
    • Firewall as a Service
  • DVR (Distributed Virtual Router)은 Network Node의 부하를 분산할 수 있음

    • DVR는 라우팅 기능을 각 Compute Node로 분산하여 중앙 네트워크 노드의 병목 현상을 완화함

L3 Agent HA

  • 라우팅 및 네트워크 고가용성을 보장하기 위한 메커니즘

  • 각 L3 Agent가 가상 라우터를 호스팅하며, 이를 통해 네트워크 트래픽을 라우팅

  • Keepalived 사용

    • L3 Agent HA는 VRRP(Virtual Router Redundancy Protocol)를 구현하는 Keepalived를 활용
    • 가상 IP(VIP)를 통해 Active-Standby 구성을 제공하여 하나의 L3 Agent에 장애가 발생하면 자동으로 다른 Agent로 failover
  • 고가용성 라우팅

    • 라우팅 및 NAT(Network Address Translation) 작업을 수행하는 L3 Agent가 항상 최소한 하나는 동작 상태를 유지
    • Virtual Router 상태를 지속적으로 모니터링하며 장애 발생 시 즉각 대체 Agent가 동작
  • 분산 처리

    • L3 Agent HA는 고가용성뿐만 아니라 네트워크 라우팅의 부하를 여러 L3 Agent로 분산하여 처리할 수 있음
    • 이는 단일 장애 지점을 제거하고 확장성을 향상시킴
  • Virtual Router
    • 장애 발생 시 네트워크 라우팅 서비스를 중단 없이 지속할 수 있도록 설계
  • VIP (Virtual IP)
    • 가상 IP를 통해 외부 네트워크와의 통신을 보장
    • Keepalived에 의해 관리되며 활성 Agent로 라우팅됨
  • Failover
    • 활성 L3 Agent의 장애 시 Standby Agent로 자동 전환하여 중단 없는 서비스를 보장

Storage Node

  • Storage Services (Block/Object)

    • OpenStack Cinder(Block)와 Swift(Object)를 사용하여 데이터 저장소를 제공
    • Cinder는 VM의 영구 디스크로 사용되며, Swift는 대규모 데이터의 비구조적 저장에 적합
  • Overlay Networks

    • 스토리지 노드 간 데이터를 효율적으로 전송하기 위해 오버레이 네트워크를 사용
    • 데이터 전송의 가상화를 통해 네트워크 성능 최적화
  • Storage API

    • 스토리지 노드와 상호작용하기 위한 API 제공
    • Cinder API와 Swift API를 통해 블록 및 오브젝트 스토리지 요청을 처리
  • Physical Infrastructure Resources

    • 물리적 디스크, 네트워크 인터페이스 등 하드웨어 자원을 기반으로 스토리지 서비스를 구성

Controller Node

  • OpenStack Services

  • Networking Services

    • 가상 스위치와 분산 스위치를 관리하여 네트워크 트래픽을 제어
  • Installer 및 Monitoring Services

    • OpenStack 설치 및 배포를 위한 관리 도구 제공
    • 클라우드 환경 모니터링 및 알림 기능 수행
  • Additional Services

    • 로드 밸런싱, 보안, DNS, NTP와 같은 추가 기능 제공
    • 컨테이너 서비스와 연계 가능 (ex. Kubernetes)
  • Virtualization API

    • 가상화와 물리적 리소스를 추상화하여 API를 통해 서비스 요청을 처리
    • Compute Node, Storage Node, Network Node와 상호작용
  • Operating System and Hypervisor Kernel

    • Controller Node에서 가상화 계층 및 OS 커널 관리
  • Physical Infrastructure Resources

    • 데이터베이스, RabbitMQ, Memcached 등 물리적 리소스와 연계하여 서비스 간의 데이터와 메시징 관리

Multi Node Deployment

  1. Scalability

    • 클라우드 환경에서 워크로드가 증가함에 따라 노드를 추가하여 성능과 용량을 확장 가능
    • 단일 노드로 운영 시 리소스가 제한되므로, Multi Node 환경은 대규모 사용자와 서비스 지원에 필수적임
  2. High Availability

    • 단일 노드 환경은 장애 발생 시 전체 클라우드 서비스가 중단될 위험이 있음
    • Multi Node Deployment는 Controller Node, Compute Node, Storage Node 등을 중복 구성하여 장애 발생 시 서비스 지속 가능
  3. Resource Isolation

    • 서로 다른 유형의 작업(예: 컴퓨팅, 네트워킹, 스토리지)을 분리하여 효율적인 자원 사용 가능
    • 예: Controller Node는 관리 작업, Compute Node는 VM 실행, Storage Node는 데이터 저장에 집중
  4. Load Balancing

    • API 요청, 네트워크 트래픽, 데이터 저장 등 다양한 부하를 여러 노드에 분산하여 성능 최적화
    • 사용자 요청 처리 속도를 개선하고 병목 현상을 방지
  5. Performance Improvement

    • 컴퓨팅, 네트워크, 스토리지 작업이 분산되므로 성능이 향상됨
    • 다중 노드를 활용하여 고성능 클라우드 서비스를 제공 가능
  6. Fault Tolerance

    • 하나의 노드에 장애가 발생하더라도 다른 노드가 작업을 이어받아 서비스 중단을 최소화
    • 클러스터링 및 로드 밸런싱을 통해 안정성을 높임
  7. Flexibility

    • 요구에 따라 노드를 추가하거나 제거하여 환경을 동적으로 조정 가능
    • 특정 리소스(ex. 스토리지 또는 네트워크)만 확장 가능
  8. Operational Stability

    • 장애가 특정 노드에 국한되므로 전체 클라우드 환경이 영향을 받지 않음
    • 정기 유지보수나 업그레이드 작업 시에도 서비스 가용성을 유지 가능
  9. Support for Large-Scale Environments

    • 다양한 데이터 센터와 워크로드를 지원할 수 있는 구조로, 대기업이나 대규모 서비스를 제공하는 클라우드에 적합

Node Requirements

https://docs.openstack.org/newton/install-guide-rdo/overview.html


Logs in Openstack

OpenStack 서비스는 표준 로깅 레벨을 사용하며

TRACE, DEBUG, INFO, AUDIT, WARNING, ERROR, and CRITICAL

심각도에 따라 위와 같이

  • Neutron

    • 파일 수정: /etc/neutron/neutron.conf
    • 설정: debug=true
  • Nova

    • 파일 수정: /etc/nova/nova.conf
    • 설정: debug=true
  • Keystone

    • 파일 수정: /etc/keystone/logging.conf
    • 조정 섹션: logger_roothandler_file
  • Horizon

    • 파일 수정: /etc/openstack_dashboard/local_settings.py
  • Cinder

    • Cinder 역할이 있는 각 노드에서 설정 파일 수정
  • Glance

    • 두 개의 구성 파일 수정:
      • /etc/glance/glance-api.conf
      • /etc/glance/glance-registry.conf
Node TypeServiceLog Location
Cloud Controllernova-*/var/log/nova
Cloud Controllerglance-*/var/log/glance
Cloud Controllercinder-*/var/log/cinder
Cloud Controllerkeystone-*/var/log/keystone
Cloud Controllerneutron-*/var/log/neutron
Cloud Controllerhorizon/var/log/apache2/
All Nodesmisc (swift, dnsmasq)/var/log/syslog
Compute Nodeslibvirt/var/log/libvirt/libvirtd.log
Compute NodesConsole (boot up messages for VM instances)/var/lib/nova/instances/instance-<instance_id>/console.log
Block Storage Nodescinder-volume/var/log/cinder/cinder-volume.log

0개의 댓글