OpenStack
Cloud compute(Nova)과 Cloud Object Storage(Swift)를 제공하는 OpenStack을 정리한다.
- 홈페이지 : http://www.openstack.org/, stephen.spector(골뱅이)openstack.org
- 매뉴얼 : http://docs.openstack.org/, http://docs.openstack.org/developer
- Openstack Blog
- OpenStack 한국 커뮤니티, 2010.12.28 한국 커뮤니티 사이트 오픈
- 한국 커뮤니티 위키
- Korea OpenStack Community
- 다운로드 : http://git.openstack.org/, https://github.com/openstack
- 라이선스 : Apache 2.0
- 플랫폼 : python
목차
OpenStack 개요
OpenStack Architecture
History
OpenStack은 Rackspace에서 Cloud Files과 Cloud Server 기술을 기증하고 NASA에서 Nebula를 기증하여 2010년 7월부터 시작된 오픈소스로 기업의 데이터와 애플리케이션을 하나의 클라우드에서 다른 클라우드로 더 쉽게 이전할 수 있도록 하는 것을 목표로 하고 있다. OpenStack은 Xen, KVM, QEMU 등을 지원하고 있다.
- OpenStack History
- 2010.03 : Rackspace가 자사의 클라우드 스토리지를 오픈소스화 (IaaS 분야 2위 사업자)
- 2010.05 : NASA가 Nebula 플랫폼을 오픈소스화 (Nebula. 서버 가상화 플랫폼)
- 2010.06 : Rackspace와 NASA가 OpenStack 설립
- 2010.10 : Austin release
- 2011.02 : Bexar release, 35 이상의 파트너
- 2011.02 : OpenStack 한국 커뮤니티 구축 <- KT (OpenStack 공식 파트너) 지원
- 2011.04 : Cactus release
- KT : 2011.3 ~ 2011.6, OpenStack Object Storage 기반 크라우드 스토리지 서비스 상용화 (ucloud SS)
- 2011.07 : Diablo release
- 2014.10.16 : Juno release
- OpenStack 버전 : Essex (2012.4.5) -> Folsom (2012.9.27) -> Grizzly (2013.4.4) -> Havana (2013.10.17) -> IceHouse (2014.4.17, 9번째 release) -> Juno (2014.10.16) -> Kilo (2015.04.30) -> Liberity (2015.10)
Nova 개요
Nova는 Cloud Computing에서 서버상의 가상 머신을 운용, 관리하기 위한 소프트웨어로 호스트 머신의 가상화 메카니즘을 구동하기 위한 드라이버를 정의하고 웹을 통해 서비스를 제공 한다.
- Nova : OpenStack Compute
- REST-based API 제공
- Amazon EC2 호환 API 및 자체 API 제공
- 지원하는 가상 머신
- KVM, Xen, XenServer, UML, Hyper-V, QEMU
- Ubuntu 10.04, Python 2.6 / MySQL, PostgreSQL, SQLite
- 소스 : https://launchpad.net/nova
- Nova Software 구조
- API Server : 명령/제어 요청을 받음, HTTP
- Scheduler Node : 요청된 리소스를 제공할 노드 선택 및 VM 관리 지시 (Round-Robin, Random 방식 지원)
- Object Storage Server : 이미지나 템플릿 저장을 위한 스토리지 제공
- Compute Node : VM 관리
- Network Node : Network 관리 (Flat, Flat DHCP, VLAN 모드 지원)
- Flat : VM에 고정 IP 할당
- Flat DHCP : VM에 DHCP에서 제공된 IP 할당
- VLAN DHCP : Default, 각 프로젝트의 VM에 VPN (OpenVPN) 제공
- Volume Node : Disk 관리
- 출처 : Nova 개념 및 소개
Swift 개요
대표적인 클라우드 스토리지 서비스 업체인 Rackspace의 핵심 기술을 오픈소스화하여 Amazon의 S3 서비스와 유사한 오브젝트 스토리지 서비스를 제공한다.
- Swift : OpenStack Object Storage
- Highly available, distributed, eventually consistent object/blob-store
- REST-based API 제공
- Authentication API
- Storage Account/Container/Object API
- GET, PUT, DELETE, COPY 등의 서비스 제공
- Swift 구조
- Auth middle : 사용자 생성 및 로그인, 인증 토큰을 생성하고 관리
- Proxy Server : 사용자의 요청에 따라 알맞은 서버에 연결하여 서비스 제공
- Account Server : 사용자 계정 관리 및 계정별 컨테이너 조회
- Container Server : 사용자 계정의 컨테이너를 관리, 컨테이너가 가진 오브젝트를 조회
- Object Server : 컨테이너 내의 오프젝트(Blob)를 관리
사용 문법 : http://swift.test.com/v1/account/container/object Account : http://swift.test.com/v1/AUTH_474747 (474747은 token을 의미함) Container : http://swift.test.com/v1/AUTH_474747/TESTCONTAINER Object : http://swift.test.com/v1/AUTH_474747/TESTCONTAINER/TESTFILE.txt
- Ring : 데이터의 논리적 위치와 물리적 위치간의 매핑 정보 제공
- Proxy server에서만 접근
- 종류 : Account ring, Container ring, Object ring
- ID, Zone number, IP, Port, Device Name, Weight, Meta
- Replication : Zone을 사용하여 replication 처리 가능
- Updaters : 실패한 작업(update)를 저장하고 다시 실행
- Auditors : account, container, object의 무결성을 검사하고 이상 발생시 replication으로 대체
Glance 개요
- Glance : OpenStack Imaging Service
Virtual machine 이미지를 관리하는 서비스로 저장소로 Open Stack Object Store 또는 Amazon S3를 이용 한다.
OpenStack 설치
CentOS에서 OpenStack 설치
Ubuntu에서 OpenStack 설치
관리자 가이드
keystone 관리자 가이드
- Keystone 설정 스크립트 샘플
- 주요 concepts
- Users, Tenants, Roles
- Services, Endpoints
- Folder
- /etc/keystone/
- keystone.conf, policy.json, default_catalog.templates, logging.conf
- /var/lib/keystone/
- /var/log/keystone/keystone.log
- /usr/bin/keystone, keystone-manage, keystone-all
- User 생성
keystone user-create --name=alice --pass=~ --email=~ keystone user-list
- Tenant 생성
keystone tenant-create --name=~ keystone tenant-list
- Role 생성
keystone role-create --name=~ keystone role-list
- vi /etc/keystone/policy.json
- vi /etc/nova/policy.json
{ "권한" : [["role:~"], ["user_id":~]], //--- 권한을 role과 user에 할당 }
- vi /etc/glance/policy.json
- User를 tenant와 role에 할당
keystone user-role-add --user-id=~ --role-id=~ --tenant-id=~
- /etc/$serviceCodeName/policy.json 파일에 퍼미션 설정 저장
- vi /etc/keystone/policy.json
- vi /etc/glance/policy.json
- keystone 서비스 생성
keystone --token --endpoint http://192.~/v2.0/ service-create -name=keystone --type=identity --description="~" keystone --token --endpoint http://192.~/v2.0/ endpoint-create --region RegionOne --service_id=~ --publicurl=http://~:5000/v2.0 --internalurl=http://~:5000/v2.0 --adminurl=http://~:35357/v2.0
- 다른 서비스에 접속 가능한 token 생성
keystone -os-username=admin --os-password=~ --os-auth-url=http://~:35357/v2.0 token-get
- openstack-db
glance 관리자 가이드
- Folder
- /etc/glance
- /var/lib/glance
- /var/log/glance/api.log, registry.log
- /usr/bin/glance, glance-api, glance-registry, glance-manage, ...
- 이미지 업로드
- format : aki (커널), ari (램디스크), ami (이미지)
glance --os_username=adminUser --os_password=~ --os_tenant=~ --os_auth_url=http://~:50000/v2.0 add name="aName" disk_format=aki container_format=aki < fileName glance --os_username=adminUser --os_password=~ os_tenant=~ --os_auth_url=http://~:50000/v2.0 index
Swift 구성 요소 및 설치
Swift 구성 요소
- Account -> Container -> Object
- Container
- Storage compartment
- "/"가 포함되지 않은 문자열로 URLEncoding 후 256 bytes 이하
- Object
- Basic storage entity
- Object name : URLEncoding 후 1024 bytes 이하
- key/value : 90개 이내, 총 4096 bytes 이하
- Storage object : 0 byte ~ 5 GB
- Segmented Objects : 몇개의 Object를 하나의 Object 처럼 처리 (5GB 이상 다운로드 가능)
- Open API
- Rest web service API
- Python 2.4+
- PHP 5.x /w cURL, FileInfo, mbstring
- Java 1.5+
- Ruby 1.8+
- C#/.NET /w .NET Framework 3.5
curl -H 'X-Auth-Token: <token>' [http:// http://]<storage_url>/container/myobject
Ubuntu에서 Swift 설치
- System 요구 사항
- Disk : RAID 5 or 6
- Ubuntu Server 10.04 LTS, 1GB Network, SQLite
- Swift 설치
apt-get install python-software-properties add-apt-repository ppa:swift-core/ppa apt-get update apt-get install swift openssh-server mkdir -p /etc/swift chown -R swift:swift /etc/swift/ vi /etc/swift/swift.conf [swift-hash] swift_hash_path_suffix = Swift_서버_ID //--- 절대 변하지 않을 임의의 문자열로 아이디 지정
- Swift Proxy Node 설치
apt-get install swift-proxy memcached vi /etc/memcached.conf -l 127.0.0.1 //--- 이 부분을 아래와 같이 변경 -l PROXY_LOCAL_NET_IP //--- 사설 IP 설정 service memcached restart cd /etc/swift openssl req -new -x509 -nodes -out cert.crt -keyout cert.key vi /etc/swift/proxy-server.conf [DEFAULT] cert_file = /etc/swift/cert.crt key_file = /etc/swift/cert.key bind_port = 8080 workers = 8 user = swift [pipeline:main] pipeline = healthcheck cache auth proxy-server [app:proxy-server] use = egg:swift#proxy allow_account_management = true [filter:auth] use = egg:swift#auth ssl = true [filter:healthcheck] use = egg:swift#healthcheck [filter:cache] use = egg:swift#memcache memcache_servers = <PROXY_LOCAL_NET_IP>:11211 ###--- 10.1.2.3:11211,10.1.2.4:11211 cd /etc/swift swift-ring-builder account.builder create 18 3 1 swift-ring-builder container.builder create 18 3 1 swift-ring-builder object.builder create 18 3 1 swift-ring-builder account.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> 100 swift-ring-builder container.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> 100 swift-ring-builder object.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6000/<DEVICE> 100 swift-ring-builder account.builder swift-ring-builder container.builder swift-ring-builder object.builder swift-ring-builder account.builder rebalance swift-ring-builder container.builder rebalance swift-ring-builder object.builder rebalance //--- account.ring.gz, container.ring.gz, and object.ring.gz을 /etc/swift/에 있는 Proxy and Storage nodes로 복사 chown -R swift:swift /etc/swift swift-init proxy start
- Swift Auth Node 설치
apt-get install swift-auth vi /etc/swift/auth-server.conf [DEFAULT] cert_file = /etc/swift/cert.crt key_file = /etc/swift/cert.key user = swift [pipeline:main] pipeline = auth-server [app:auth-server] use = egg:swift#auth default_cluster_url = [https:// https://]<PROXY_HOSTNAME>:8080/v1 super_admin_key = devauth //--- devauth는 다른 것으로 변경할 것 swift-init auth start chown swift:swift /etc/swift/auth.db swift-init auth restart
- Swift Storage Node 설치
apt-get install swift-account swift-container swift-object xfsprogs fdisk /dev/sdb (set up a single partition) mkfs.xfs -i size=1024 /dev/sdb1 echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab mkdir -p /srv/node/sdb1 mount /srv/node/sdb1 chown -R swift:swift /srv/node vi /etc/rsyncd.conf uid = swift gid = swift log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid address = <STORAGE_LOCAL_NET_IP> [account] max connections = 2 path = /srv/node/ read only = false lock file = /var/lock/account.lock [container] max connections = 2 path = /srv/node/ read only = false lock file = /var/lock/container.lock [object] max connections = 2 path = /srv/node/ read only = false lock file = /var/lock/object.lock vi /etc/default/rsync RSYNC_ENABLE = true service rsync start vi /etc/swift/account-server.conf [DEFAULT] bind_ip = <STORAGE_LOCAL_NET_IP> workers = 2 [pipeline:main] pipeline = account-server [app:account-server] use = egg:swift#account [account-replicator] [account-auditor] [account-reaper] vi /etc/swift/container-server.conf [DEFAULT] bind_ip = <STORAGE_LOCAL_NET_IP> workers = 2 [pipeline:main] pipeline = container-server [app:container-server] use = egg:swift#container [container-replicator] [container-updater] [container-auditor] vi /etc/swift/object-server.conf [DEFAULT] bind_ip = <STORAGE_LOCAL_NET_IP> workers = 2 [pipeline:main] pipeline = object-server [app:object-server] use = egg:swift#object [object-replicator] [object-updater] [object-auditor] swift-init object-server start swift-init object-replicator start swift-init object-updater start swift-init object-auditor start swift-init container-server start swift-init container-replicator start swift-init container-updater start swift-init container-auditor start swift-init account-server start swift-init account-replicator start swift-init account-auditor start
- 관리자 계정 생성
swift-auth-add-user -K devauth -a system root testpass curl -k -v -H 'X-Storage-User: system:root' -H 'X-Storage-Pass: testpass' [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 curl -k -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-x-storage-url-above> st -A [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass stat st -A [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass upload myfiles bigfile1.tgz st -A [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass upload myfiles bigfile2.tgz st -A [https:// https://]<AUTH_HOSTNAME>:11000/v1.0 -U system:root -K testpass download myfiles
Heat
참고 문헌
참고 문헌
- Getting Started
- Installing OpenStack
- Running OpenStack
- Developing OpenStack
- Command Line Interface(CLI)
- API
- Glossary
- OpenStack Operations Guide
- OpenStack Manuals : API Documentation
- OpenStack Manuals : Developer Documentation
- OpenStack 한국 커뮤니티
- OpenStack Wiki
- OpenStack 한글 Wiki
- OpenStack 설치 참고 문헌
- CentOS 6.x에 OpenStack 설치하기, 2012.10
- OpenStack Install and Deploy Manual - Red Hat, 2012.11
- OpenStack Compute Starter Guide, 2012.05
- http://en.m.wikipedia.org/wiki/OpenStack?wasRedirected=true
- KT에서 Swift 상용 서비스 추진중
- 마이크로소프트, 하이퍼-V와 오픈스택 호환성 작업 참여
- 블로터닷넷