Joonas' Note

Joonas' Note

[번역] Docker - OpenStack (2/4) 본문

개발/Docker

[번역] Docker - OpenStack (2/4)

2018. 10. 29. 23:22 joonas

    원문: https://wiki.openstack.org/wiki/Docker

    [번역] Docker - OpenStack (1/4)

    [번역] Docker - OpenStack (2/4)

    [번역] Docker - OpenStack (3/4)

    [번역] Docker - OpenStack (4/4)

    2. 도커를 사용하기 위한 기존 오픈스택 설치 설정


    2.1. 오픈스택을 위한 도커 설치

    첫 번째 요구 사항은, 내 컴퓨팅 호스트에 도커를 설치하는 것입니다.

    로컬 소켓을 통해 도커와 Nova가 통신하려면, nova 사용자를 docker 그룹에 추가한 후 변경 사항을 적용하기 위해 컴퓨팅 서비스를 재시작합니다.

    usermod -aG docker nova
    service openstack-nova-compute restart

    드라이버도 설치해야 합니다.

    pip install -e git+https://github.com/stackforge/nova-docker#egg=novadocker

    필요한 모듈들도 설치해야 합니다.

    cd src/novadocker/
    python setup.py install

    이를 위해 운영 체제 패키지를 작성하거나, 별도의 배포를 위해서 적당한 다른 설치 메소드를 사용해도 됩니다.

    2.2. Nova 설정

    Nova는 도커 가상 드라이버를 사용하기 위한 설정이 필요합니다.

    설정 파일인 /etc/nova/nova.conf 에 적힌 옵션을 아래와 같이 수정합니다.

    [DEFAULT]
    compute_driver = novadocker.virt.docker.DockerDriver

    /etc/nova/rootwrap.d 디렉토리 파일을 만듭니다. 그리고 그 안에 docker.filters 라는 파일을 만든 후 다음과 같이 작성합니다.

    # nova-rootwrap command filters for setting up network in the docker driver
    # This file should be owned by (and only-writeable by) the root user

    [Filters]
    # nova/virt/docker/driver.py: 'ln', '-sf', '/var/run/netns/.*'
    ln: CommandFilter, /bin/ln, root

    2.3. Glance 설정

    Glance가 컨테이너 포맷으로 "docker"를 지원할 수 있도록 설정이 필요합니다. 기존에 설치된 glance를 깨지지 않게 하려면, 기존 설정을 그대로 유지하는 걸 명심하세요.

    [DEFAULT]
    container_formats = ami,ari,aki,bare,ovf,docker

    2.4. Nova-Docker 사용하기

    도커 드라이버를 써서 Nova를 설정해보셨다면, 흐름은 다른 드라이버와 같습니다.

    $ glance image-list
    +----------------+---------------------------------+-------------+------------------+----------+--------+
    | ID             | Name                            | Disk Format | Container Format | Size     | Status |
    +----------------+---------------------------------+-------------+------------------+----------+--------+
    | f5049d8b-93... | cirros-0.3.1-x86_64-uec         | ami         | ami              | 25165824 | active |
    | 0f1ec86c-15... | cirros-0.3.1-x86_64-uec-kernel  | aki         | aki              | 4955792  | active |
    | 03a54807-2e... | cirros-0.3.1-x86_64-uec-ramdisk | ari         | ari              | 3714968  | active |
    | 77083f3c-d3... | docker-busybox:latest           | raw         | docker           | 2271596  | active |
    +----------------+---------------------------------+-------------+------------------+----------+--------+

    컨테이너 포맷이 "docker"인 이미지만 부팅이 가능합니다. 이미지는 기본적으로 컨테이너 파일 시스템의 tarball을 포함합니다.

    도커를 사용해서 Glance에 새 이미지를 추가하는 것을 권장합니다. 예를 들어, 다음과 같이 퍼블릭 레지스트리에서 이미지를 가져오고, Nova 인스턴스를 부팅하기 위해 Glance로 등록할 수도 있습니다.

    $ docker search hipache
    Found 3 results matching your query ("hipache")
    NAME                             DESCRIPTIONsamalba/hipache                  https://github.com/dotcloud/hipache

    그리고 이미지를 도커로부터 pull 한 후, 도커에서 Glance로 push 합니다.

    $ docker pull samalba/hipache
    $ docker save samalba/hipache | glance image-create --is-public=True --container-format=docker --disk-format=raw --name samalba/hipache

    NOTE: Glance에서의 이름은 도커에서의 이미지 이름과 반드시 일치해야 합니다.

    $ glance image-list
    +----------------+---------------------------------+-------------+------------------+----------+--------+
    | ID             | Name                            | Disk Format | Container Format | Size     | Status |
    +----------------+---------------------------------+-------------+------------------+----------+--------+
    | f5049d8b-93... | cirros-0.3.1-x86_64-uec         | ami         | ami              | 25165824 | active |
    | 0f1ec86c-15... | cirros-0.3.1-x86_64-uec-kernel  | aki         | aki              | 4955792  | active |
    | 03a54807-2e... | cirros-0.3.1-x86_64-uec-ramdisk | ari         | ari              | 3714968  | active |
    | 77083f3c-d3... | docker-busybox:latest           | raw         | docker           | 2271596  | active |
    | 998f52ba-fe... | samalba/hipache                 | raw         | docker           | 486      | active |
    +----------------+---------------------------------+-------------+------------------+----------+--------+

    이제 Nova CLI로 인스턴스들을 부팅할 수 있습니다.

    $ nova boot --image "samalba/hipache" --flavor m1.tiny test
    +--------------------------------------+--------------------------------------+
    | Property                             | Value                                |
    +--------------------------------------+--------------------------------------+
    | OS-EXT-STS:task_state                | scheduling                           |
    | image                                | samalba/hipache                      |
    | OS-EXT-STS:vm_state                  | building                             |
    | OS-EXT-SRV-ATTR:instance_name        | instance-0000002d                    |
    | OS-SRV-USG:launched_at               | None                                 |
    | flavor                               | m1.micro                             |
    | id                                   | 31086c50-f937-4f80-9790-045096ecb32c |
    | security_groups                      | [{u'name': u'default'}]              |
    | user_id                              | 1a3eed38d1344e869dd019b3636db12b     |
    | OS-DCF:diskConfig                    | MANUAL                               |
    | accessIPv4                           |                                      |
    | accessIPv6                           |                                      |
    | progress                             | 0                                    |
    | OS-EXT-STS:power_state               | 0                                    |
    | OS-EXT-AZ:availability_zone          | nova                                 |
    | config_drive                         |                                      |
    | status                               | BUILD                                |
    | updated                              | 2013-08-25T00:22:32Z                 |
    | hostId                               |                                      |
    | OS-EXT-SRV-ATTR:host                 | None                                 |
    | OS-SRV-USG:terminated_at             | None                                 |
    | key_name                             | None                                 |
    | OS-EXT-SRV-ATTR:hypervisor_hostname  | None                                 |
    | name                                 | test                                 |
    | adminPass                            | QwczSPAAT6Mm                         |
    | tenant_id                            | 183a9b7ed7c6465f97387458d693ca4c     |
    | created                              | 2013-08-25T00:22:31Z                 |
    | os-extended-volumes:volumes_attached | []                                   |
    | metadata                             | {}                                   |
    +--------------------------------------+--------------------------------------+

    인스턴스가 부팅되고 나면 다음과 같습니다.

    $ nova list
    +--------------------------------------+------+--------+------------+-------------+------------------+
    | ID                                   | Name | Status | Task State | Power State | Networks         |
    +--------------------------------------+------+--------+------------+-------------+------------------+
    | 31086c50-f937-4f80-9790-045096ecb32c | test | ACTIVE | None       | Running     | private=10.0.0.2 |
    +--------------------------------------+------+--------+------------+-------------+------------------+

    도커에서도 해당 컨테이너를 볼 수 있습니다.

    $ docker ps
    ID            IMAGE             COMMAND  CREATED          STATUS         PORTS
    f337c7fec5ff  samalba/hipache   sh       10 seconds ago   Up 10 seconds

    여기서는 이미지 안에 설정된 커맨드를 사용했습니다. 각 컨테이너 이미지는 실행을 위한 명령을 가질 수 있고, 드라이버는 보통 이걸 오버라이딩 하진 않습니다. Dockerfile로 이미지를 제대로 작성한다면, 아파치 인스턴스를 부팅하는 이미지를 만들어 아파치 프로세스를 시작시킬 수 있습니다.



    옮긴이 말

    (2020. 04. 16 추가)

    파이썬 모듈을 아래와 같이 설치하는 중에, 오류가 있으신 분은 참고하시길 바랍니다.

    pip install -e git+https://github.com/stackforge/nova-docker#egg=novadocker

    위에서 사용된 링크는 Archived 되어서 사용하지 못합니다.

    옮겨진 repo의 주소로 변경했습니다. 아래 커맨드를 사용해보세요.

    pip install -e git+https://opendev.org/openstack/zun#egg=novadocker


    아니면 소스 코드를 가져와 직접 설치하시는 방법도 있습니다.

    이 부분은 https://jiming.tistory.com/m/208 에서 4. OpenStack(Devstack, nova-docker plusgin) 설치 부분을 확인해보세요.

    Comments