Первое с чего мы начнем —
это установка Docker и необходимых пакетов.
Обращаю внимание, что этот вариант
установки подходит только для тестовых
сред. Для «боевой установки» следует
собрать rpm-пакет с драйвером Docker и не
устанавливать на вычислительные узлы
средства, применяемые при разработке.
Действия выполняем на вычислительном
узле:
[root@os2 ~]# yum -y install net-tools docker-io python-pip git
Также обратите внимание на
то, что мы устанавливаем пакет net-tools,
который в современных дистрибутивах
при установке по умолчанию заменен на
iproute,а утилиты из его состава имеют
статус устаревших. Нам он понадобится
ради команды ifconfig, которая используется
драйвером Docker.
Теперь забираем с Github исходный код
драйвера и устанавливаем:[root@os2 ~]# git clone https://github.com/stackforge/nova-docker.git
[root@os2 ~]# cd nova-docker
[root@os2 nova-docker]# git checkout -b pre-i18n 9045ca43b645e72751099491bf5f4f9e4bddbb91
[root@os2 nova-docker]# python setup.py install
[root@os2 nova-docker]# pip install pbr
Команду git checkout мы выполняем
до обновления исходного кода, который
«ломает» совместимость с релизом
OpenStack Juno. Следующим шагом запускаем и включаем
сервис Docker и выполняем не очень «чистый»
обходной прием с правами, для того чтоб
в CentOS драйвер получил доступ к Docker:
[root@os2 ~]# systemctl start docker
[root@os2 ~]# systemctl enable docker
[root@os2 ~]# chmod 660 /var/run/docker.sock
Нам необходимо в соответствии
с инструкцией на Github настроить драйвер.
Создаем файл с инструкциями по настройки
сети для Docker:
[root@os2 ~]# mkdir /etc/nova/rootwrap.d
[root@os2 ~]# vi /etc/nova/rootwrap.d/docker.filters
и в файл 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
Наконец на узле Glance добавляем к форматам
контейнеров docker:
[root@os1 ~]# crudini --set /etc/glance/glance-api.conf DEFAULT container_formats ami,ari,aki,bare,ovf,ova,docker
[root@os1 ~]# systemctl restart openstack-glance-api
А на вычислительном узле os2 в качестве драйвера указываем драйвер Docker. Других изменений производить не надо:
[root@os2 ]# crudini --set /etc/nova/nova.conf DEFAULT compute_driver novadocker.virt.docker.DockerDriver
[root@os2 ]# systemctl restart openstack-nova-compute
Теперь тестируем нашу
конфигурацию. Для начала ограничимся
работоспособностью контейнеров Docker.
Попробуем запустить контейнер с
дистрибутивом Fedora:
[root@os2 ~]# docker run -i -t fedora /bin/bash
Unable to find image 'fedora:latest' locally
Trying to pull repository docker.io/fedora ...
...
Status: Downloaded newer image for docker.io/fedora:latest
bash-4.3# cat /etc/redhat-release
Fedora release 21 (Twenty One)
Как мы видим, из репозитория docker.io был скачен последний образ Fedora и запущен. Если посмотреть на список контейнеров, мы также это уведем:
[root@os2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb7b37a3a1b2 fedora:latest "/bin/bash" 9 minutes ago Up 9 minutes heisenberg
Теперь скачаем образ с
минимальным http-сервером thttpd, который
будем использовать для проверки работы:
[root@os2 ~]# docker pull larsks/thttpd
Trying to pull repository docker.io/larsks/thttpd ...
...
Status: Downloaded newer image for docker.io/larsks/thttpd:latest
После этого загрузим его в Glance:
[root@os2 ~]# source keystonerc_admin
[root@os2 ~]# docker save larsks/thttpd | glance image-create --is-public True --container-format docker --disk-format raw --name larsks/thttpd
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | c98dcd00b284eaf35ba8d10e1bff941c |
| container_format | docker |
| created_at | 2015-05-09T19:42:23 |
| deleted | False |
| deleted_at | None |
| disk_format | raw |
| id | 7133ae58-03aa-4d80-af98-adf5e1c02a5e |
| is_public | True |
| name | larsks/thttpd |
| owner | a5c42139ce154b4d945b4ed806cbee81 |
| protected | False |
| size | 1083392 |
| status | active |
| updated_at | 2015-05-09T19:42:25 |
| virtual_size | None |
+------------------+--------------------------------------+
Проверяем список образов:
[root@os2 ~]# glance image-list
+------+---------------------+-------------+------------------+----------+--------+
| ID | Name | Disk Format | Container Format | Size | Status |
+------+---------------------+-------------+------------------+----------+--------+
| bc.. | cirros-0.3.3-x86_64 | qcow2 | bare | 13200896 | active |
| 71.. | larsks/thttpd | raw | docker | 1083392 | active |
+------+---------------------+-------------+------------------+----------+--------+
И в графическом интерфейсе Horizon:
Наконец, можно попробовать создать экземпляр контейнера:
$ source keystonerc_demo
$ nova boot --image larsks/thttpd --flavor m1.small test1
+--------------------------------------+-------------------------------------+
| Property | Value |
+--------------------------------------+-------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| adminPass | Y6htpjH5xe2X |
| created | 2015-05-09T20:05:08Z |
| flavor | m1.small (2) |
| id | 65de57d0-f033-4818-a522-2c3291dc.. |
| image | larsks/thttpd (7133ae58-03aa-4d8..) |
| metadata | {} |
| name | test1 |
| os-extended-volumes:volumes_attached | [] |
| security_groups | default |
| status | BUILD |
| tenant_id | 9c1c71f2c0f243b7a3b1d0d1880820e9 |
| updated | 2015-05-09T20:05:08Z |
| user_id | f3aabe457c2c4fe5912a0f90e569e04d |
+--------------------------------------+-------------------------------------+
Проверяем, что контейнер запущен:
[root@os2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4680097f2cc0 larsks/thttpd:latest "/thttpd -D -l /dev/ 13 minutes ago Up 13 minutes nova-65de57d0-f033-4818-a522-2c3291dc516bВ графическом интерфейсе это выглядит следующим образом:
Для доступа к http-серверу присвоим экземпляру внешний floating IP:
[root@os1 ~]# nova floating-ip-associate test1 10.100.1.101
Проверяем:
[root@os1 ~]# nova list
+------+-------+--------+------------+-------------+-----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+------+-------+--------+------------+-------------+-----------------------+
| 65.. | test1 | ACTIVE | - | Running | demo-net=172.16.0.14, |
| | | | | | 10.100.1.101 |
+------+-------+--------+------------+-------------+-----------------------+
И из тестовой машины со внешней сети пробуем подключится к серверу:
$ curl http://10.100.1.101
____ _ _
_ _
/ ___|___ _ __ __ _ _ __ __ _| |_ _ _| |
__ _| |_(_) ___ _ __ ___
| | / _ \| '_ \ / _` | '__/ _` | __| | | | |/
_` | __| |/ _ \| '_ \/ __|
| |__| (_) | | | | (_| | | | (_| | |_| |_| | |
(_| | |_| | (_) | | | \__ \
\____\___/|_| |_|\__, |_|
\__,_|\__|\__,_|_|\__,_|\__|_|\___/|_| |_|___/
|___/
Все работает, можно наградить себя
чашечкой кофе.
Комментариев нет:
Отправить комментарий