[http://nova.openstack.org/ Cloud compute(Nova)]과 Cloud Object Storage(Swift)를 제공하는 OpenStack을 정리한다.


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
- *[https://wiki.openstack.org/wiki/ReleaseNotes/Juno/ko](https://wiki.openstack.org/wiki/ReleaseNotes/Juno/ko)

- 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](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 관리

http://www.openstack.or.kr/wiki/images/a/a2/Untitled1.jpg
출처 : [Nova 개념 및 소개](http://www.openstack.or.kr/wiki/index.php/Nova_%EA%B0%9C%EB%85%90_%EB%B0%8F_%EC%86%8C%EA%B0%9C)

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](http://swift.test.com/v1/account/container/object) Account  : [http://swift.test.com/v1/AUTH_474747](http://swift.test.com/v1/AUTH_474747) (474747은 token을 의미함) Container : [http://swift.test.com/v1/AUTH_474747/TESTCONTAINER](http://swift.test.com/v1/AUTH_474747/TESTCONTAINER) Object  : [http://swift.test.com/v1/AUTH_474747/TESTCONTAINER/TESTFILE.txt](http://swift.test.com/v1/AUTH_474747/TESTCONTAINER/TESTFILE.txt) ```
http://docs.openstack.org/openstack-object-storage/admin/content/figures/swift_install_arch.png
- 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 설치


[OpenStack 설치 - CentOS](OpenStack 설치 - CentOS.md)

Ubuntu에서 OpenStack 설치


[OpenStack 설치 - Ubuntu](OpenStack 설치 - Ubuntu.md)

관리자 가이드




keystone 관리자 가이드


- Keystone 설정 스크립트 샘플

- [https://github.com/openstack/keystone/blob/master/tools/sample_data.sh](https://github.com/openstack/keystone/blob/master/tools/sample_data.sh)

- 주요 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_id":~.md), //--- 권한을 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/](http://192.~/v2.0/) service-create -name=keystone --type=identity --description="~" keystone --token --endpoint [http://192.~/v2.0/ http://192.~/v2.0/] endpoint-create --region RegionOne --service_id=~ --publicurl=[http://~:5000/v2.0 http://~:5000/v2.0] --internalurl=[http://~:5000/v2.0 http://~:5000/v2.0] --adminurl=[http://~:35357/v2.0](http://~:35357/v2.0) ```
- 다른 서비스에 접속 가능한 token 생성

``` keystone -os-username=admin --os-password=~ --os-auth-url=[http://~:35357/v2.0](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](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](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: ' [http://](http://)/container/myobject ```

Ubuntu에서 Swift 설치


- System 요구 사항

- Disk : [RAID 5 or 6](Storage.md#RAID 구성.md)
- Ubuntu Server 10.04 LTS, 1GB Network, [SQLite](SQLite.md)

- 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 = :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-:6002/ 100 swift-ring-builder container.builder add z-:6001/ 100 swift-ring-builder object.builder add z-:6000/ 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://: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 =

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 = 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 = 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 = 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://:11000/v1.0 curl -k -v -H 'X-Auth-Token: '

st -A https://:11000/v1.0 -U system:root -K testpass stat st -A https://:11000/v1.0 -U system:root -K testpass upload myfiles bigfile1.tgz st -A https://:11000/v1.0 -U system:root -K testpass upload myfiles bigfile2.tgz st -A https://:11000/v1.0 -U system:root -K testpass download myfiles

```


Heat



참고 문헌
- http://www.slideshare.net/corestack/orchestration-across-multiple-cloud-platforms-using-heat


참고 문헌



- 오픈스택
- *[오픈스택 : 이론편 - 오픈스택이란 무엇인가?](http://blog.naver.com/love_tolty/220231856481)
- *[오픈스택 - OpenStack Network 완전정복 (Neutron과 Nova-Network)](http://blog.naver.com/PostThumbnailView.nhn?blogId=love_tolty&logNo=220237750951&categoryNo=21&parentCategoryNo=)
- *[오픈스택 - IP와 Subnet 정리](http://blog.naver.com/PostThumbnailView.nhn?blogId=love_tolty&logNo=220239198961&categoryNo=21&parentCategoryNo=)
- *[오픈스택 - Floating IP와 Fixed IP](http://blog.naver.com/PostThumbnailView.nhn?blogId=love_tolty&logNo=220239364180&categoryNo=21&parentCategoryNo=)
- *[오픈스택 : 설치편 - Ubuntu 14.04에 Nova-Network 환경 OpenStack Icehouse 설치하기](http://blog.naver.com/PostThumbnailView.nhn?blogId=love_tolty&logNo=220312783624&categoryNo=21&parentCategoryNo=)
- *[오픈스택 : 활용편 - 실제 인스턴스 생성 및 Nova-Network를 이용한 네트워크 설정하기](http://blog.naver.com/PostThumbnailView.nhn?blogId=love_tolty&logNo=220352681395&categoryNo=21&parentCategoryNo=)
- [오픈스택 온라인 강좌](http://swacademy.co.kr/index.php/openstack/)
- [CloudStack](CloudStack.md)
- [Eucalyptus](Eucalyptus.md)

- [블로그 - Your wish is my command](http://blog.woosum.net/)

- [http://docs.openstack.org/ OpenStack Document], [Grizzly Document](http://docs.openstack.org/grizzly/)

- [Getting Started](http://www.openstack.org/software/start/)
- Installing OpenStack
- Running OpenStack
- Developing OpenStack
- Command Line Interface(CLI)
- API
- Glossary
- OpenStack Operations Guide

- [OpenStack Roadmap](http://status.openstack.org/release/)

- [Nalee의 IT 이야기](http://naleejang.tistory.com/)

- [OpenStack Manuals : Administration Guides](http://docs.openstack.org/essex/)

- [OpenStack Compute Administration Manual](http://docs.openstack.org/essex/openstack-compute/admin/content/)
- [OpenStack Object Storage Administration Manual](http://docs.openstack.org/essex/openstack-object-storage/admin/content/)
- [OpenStack Install and Deploy Manual](http://docs.openstack.org/essex/openstack-compute/install/apt/content/)
- [OpenStack Install and Deploy Manual for CentOS](http://docs.openstack.org/essex/openstack-compute/install/yum/content/)

- [OpenStack Manuals : API Documentation](http://docs.openstack.org/api/)
- [OpenStack Manuals : Developer Documentation](http://docs.openstack.org/developer/)
- [OpenStack 한국 커뮤니티](http://www.openstack.or.kr/)
- [OpenStack Wiki](http://en.wikipedia.org/wiki/OpenStack)
- [OpenStack 한글 Wiki](http://wiki.openstack.or.kr/index.php/OpenStack)

- OpenStack 설치 참고 문헌

- [CentOS 6.x에 OpenStack 설치하기, 2012.10](http://guni.tistory.com/archive/20121008)
- [http://openstack.redhat.com/Quickstart](http://openstack.redhat.com/Quickstart)
- [http://webcache.googleusercontent.com/search?q=cache:ftp://vinhlg.vcomtech.net/pub/linux/VCOM/6/updates/openstack/docs/openstack-install-guide-yum-trunk.pdf](http://webcache.googleusercontent.com/search?q=cache:ftp://vinhlg.vcomtech.net/pub/linux/VCOM/6/updates/openstack/docs/openstack-install-guide-yum-trunk.pdf)
- [https://wiki.ubuntu.com/ServerTeam/OpenStackHA](https://wiki.ubuntu.com/ServerTeam/OpenStackHA)

- [OpenStack 지원 Hypervisor](https://wiki.openstack.org/wiki/HypervisorSupportMatrix)

- [CentOS 6.x에 OpenStack 설치하기, 2012.10](http://guni.tistory.com/archive/20121008)
- [OpenStack Install and Deploy Manual - Red Hat, 2012.11](http://docs.openstack.org/folsom/openstack-compute/install/yum/content/)
- [OpenStack Compute Starter Guide, 2012.05](http://docs.openstack.org/essex/openstack-compute/starter/content/)

- [http://en.m.wikipedia.org/wiki/OpenStack?wasRedirected=true](http://en.m.wikipedia.org/wiki/OpenStack?wasRedirected=true)
- KT에서 Swift 상용 서비스 추진중
- [마이크로소프트, 하이퍼-V와 오픈스택 호환성 작업 참여](http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=62947&parentCategoryCode=0100&categoryCode=0000)

- 블로터닷넷

- [블로터TV 테크포럼: ③오픈스택이 뭐에요](http://www.bloter.net/archives/84941)
- [블로터TV 테크포럼: ④오픈스택-NOVA 알아보기](http://www.bloter.net/archives/86917)
- [블로터TV 테크포럼: ⑤오픈스택-스위프트 알아보기](http://www.bloter.net/archives/88882)

- [오픈스택 '에섹스', 무엇이 달라졌나, 2012.4](http://www.zdnet.co.kr/news/news_view.asp?artice_id=20120407175331)

- [공개SW 활용 성공사례 3: SK C&C ‘마이클라우드’, 공개SW 기반 클라우드 인프라 구현, 2011.08](http://www.oss.kr/?mid=oss_repository10&page=10&document_srl=18913)
- [KT_uCloud 서비스 구축, 2011.06](http://www.oss.kr/?mid=oss_repository10&page=12&document_srl=8175)

- [http://www.slideshare.net/kingcrab/ss-32579693?related=1](http://www.slideshare.net/kingcrab/ss-32579693?related=1)
- [http://www.zdnet.co.kr/news/news_view.asp?artice_id=20141017095319](http://www.zdnet.co.kr/news/news_view.asp?artice_id=20141017095319)
- [http://pds26.egloos.com/pds/201407/18/69/DeepDive_Openstack_02.pdf](http://pds26.egloos.com/pds/201407/18/69/DeepDive_Openstack_02.pdf)
- [http://kcsa.or.kr/archives/4806](http://kcsa.or.kr/archives/4806)





[[Category:오픈소스|Category:오픈소스]]
[[Category:Cloud|Category:Cloud]]
분류: [OpenStack](분류_OpenStack.md)
공유하기