Virtualization + Cloud/OpenStack

openstack nova + docker (진행중)

김지밍 2015. 11. 29. 23:39


# 설치환경


OS X Yosemite (ver. 10.10.5)

Intel core i5(2.7GHz)

8GB RAM


Ubuntu 14.04 (Virtual Box) 

DevStack (Kilo)



# 설치진행


* docker는 기본적으로 Host OS위에 새로운  OS를 생성하지 않고 Host OS의 자원을  system call을 사용하여 사용하기 때문에(cgroups, namespace) root 권한이 필요



1. Virtual Machine 생성



- Ubuntu 14.04

- 2 cpus

- 2GB ram

- network 

net 1 : NAT

net 2 : bridge network




2. 설치 후 기본설정

: 네트워크 ip, 패키지다운로드 및 파이썬 모듈을 사용하기 위한 패키지 설치 등등


$ apt-get update

$ sudo apt-get -y install git git-review python-pip python-dev

$ sudo apt-get -y upgrade



3. Docker 설치


> GPG Key 및 docker repo 추가

$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

* 한번씩 서버가 죽는 거 같아 한번은 다른 서버찾아서 했는데.. 잘 모르겠음....



$ sudo vi /etc/apt/sources.list.d/docker.list

deb https://apt.dockerproject.org/repo ubuntu-trusty main    ; on Ubuntu Trusty 14.04 (LTS)




$ sudo apt-get update



> docker 설치 사전 확인 조치


$ sudo apt-get purge lxc-docker



$ apt-cache policy docker-engine




> 추가 권장


대상 : Ubuntu 14.04 Trusty (LTS), 15.04 Vivid, 15.10 Wily

내용 : "linux-image-extra" kernel package 설치

이유 : "aufs" storage driver 지원

*aufs 참고 url : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/docker/aufs


$ sudo apt-get install linux-image-extra-$(uname -r)


 


> docker 설치 진행


$ sudo apt-get install docker-engine




> 확인 


$ sudo service docker start

$ sudo docker run hello-world

sudo service docker restart




> 옵션 사항


sudo usermod -aG docker user


* docker daemon은 TCP port 대신에 UNIX socket에 바인드 함

UNIX Socket은 sudo 권한을 가져야 하기때문에 docker daemon은 항상 root 권한으로 실행되어야 함 

> docker 커맨드에서 sudo를 사용하지 않기 위해서 "docker"라는 Unix Group과 user를 등록.

docker daemon이 실행될 때, docker group에 Unix의 R/W 가능한 권한을 부여함


$ sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX="cgroup_enale=memory swapaccount=1"


WARNING: Your kernel does not support cgroup swap limit. WARNING: Your

kernel does not support swap limit capabilities. Limitation discarded.

이런 메시지가 나온 경우, 메모리 스왑부분 설정




sudo update-grub



$ sudo reboot now



> docker 설치 확인


$ docker --version





4. OpenStack(Devstack, nova-docker plusgin) 설치


> nova-docker plugin 설치 진행


$ git clone -b stable/kilo https://github.com/stackforge/nova-docker.git

$ cd nova-docker

/nova-docker$ sudo pip install .






> nova-docker plugin 설치 확인


$ sudo pip list | grep nova-docker




> OpenStack Devstack 설치


$ git clone -b stable/kilo https://github.com/openstack-dev/devstack.git





$ cd devstack

/devstack$ vi local.conf



local.conf는 여기서 복사해서 사용했음.

https://github.com/smakam/openstack/blob/master/docker/local.conf_novadocker

* novnc 기능의 사용을 위해 "enable_service n-novnc"를 추가 

* public network gateway 지정하기



/devstack$ ./stack.sh


> 설치완료



> nova rootwrap filter 설정

$ sudo cp nova-docker/etc/nova/rootwrap.d/docker.filters /etc/nova/rootwrap.d/ 


* openstack rootwrap : https://wiki.openstack.org/wiki/Rootwrap




5. nova with docker 


> Openstack 사용권한


$ cd devstack

/devstack $ . openrc admin


* demo는 . openrc demo


=> . openrc admin를 수했했는데, glance 이미지랑 인스턴스가 demo tenant로 생성되길래 환경변수 뿌려보니..

tenant name이 demo 였음


OS_TENANT_NAME="demo"

OS_USERNAME="admin"



> docker 이미지 생성


$ docker pull nginx    ; 받아오기


* 검색 : docker search ubuntu





$ docker images    ; 확인




$ docker save nginx | glance image-create --is-public=True --container-format=docker --disk-format=raw --name nginx    ; glance image로 등록




$ glance image-list    ; 확인




$ nova boot --flavor m1.small --image nginx nginxtest    ; 인스턴스 생성




$ docker ps    ; docker 동작 process 확인



$ nova list    ; instacne 확인




6. dashboard









# Ubuntu 컨테이너 기반의 인스턴스 생성


> search 명령어 사용




> ubuntu 이미지 pulling



* 버전 명시는 저런식으로 가능



> docker 이미지 저장 후 glance 이미지로 등록





> Dashboard 확인




> 인스턴스 생성




vnc 접속이 안되서 해당 옵션 주고 다시 시도...

devstack은 서비스가 아닌 screen기반이라고 함(정확히 뭔지는 모르겠지만)

nova.conf를 수정한 후 screen update를 수행해 적용할 수 있음


네트워크 설정해야함