Thank you for reading this post, don't forget to subscribe!
Подготовка управляющей ноды на centos 7.4
Настроить сетевые адаптеры, например:
192.168.10.1 - управляющая сеть
192.168.11.1 - основная сеть
Hастройка etc/hosts
1 |
<span lang="EN-US">nano /etc/hosts</span> |
1 |
<span lang="EN-US"># controller</span> |
1 |
<span lang="EN-US">192.168.10.1 controller</span> |
1 |
<span lang="EN-US"># compute1</span> |
1 |
<span lang="EN-US">192.168.10.2 node1</span> |
также рекомендуется закомментировать записи localhost, 127.0.0.1 и ::1
Hастройка NTP
установка chrony
1 |
<span lang="EN-US">yum install chrony</span> |
1 |
<span lang="EN-US">nano /etc/chrony.conf</span> |
1 |
<span lang="EN-US">server 0.ru.pool.ntp.org iburst</span> |
1 |
allow 192.168.10.0/24 |
добавляем в автозагрузку и включаем сервис
1 |
<span lang="EN-US">systemctl enable chronyd.service</span> |
1 |
<span lang="EN-US">systemctl start chronyd.service</span> |
проверяем
1 |
clock |
Добавление репозитария openstack
Добавим репозитарий установив пакет
1 |
<span lang="EN-US">yum install centos-release-openstack-queens</span> |
обновим пакеты
1 |
yum upgrade |
установка openstack клиента
1 |
<span lang="EN-US">yum install python-openstackclient</span> |
установка openstack SELinux
1 |
<span lang="EN-US">yum install openstack-selinux</span> |
Установка SQL
устанавливаем пакеты mariadb
1 |
<span lang="EN-US">yum install mariadb mariadb-server python2-PyMySQL</span> |
настройка файла конфигурации подключения
1 |
cd /etc/my.cnf.d/ |
1 |
<span lang="EN-US">touch openstack.cnf</span> |
1 |
<span lang="EN-US">nano openstack.cnf</span> |
1 |
<span lang="EN-US">[mysqld]</span> |
1 |
<span lang="EN-US">bind-address = 192.168.10.1</span> |
1 |
<span lang="EN-US">default-storage-engine = innodb</span> |
1 |
<span lang="EN-US">innodb_file_per_table = on</span> |
1 |
<span lang="EN-US">max_connections = 4096</span> |
1 |
<span lang="EN-US">collation-server = utf8_general_ci</span> |
1 |
<span lang="EN-US">character-set-server = utf8</span> |
добавляем в автозагрузку и включаем сервис
1 |
<span lang="EN-US">systemctl enable mariadb.service</span> |
1 |
<span lang="EN-US">systemctl start mariadb.service</span> |
настройка mariadb (пароль пароль)
1 |
<span lang="EN-US">mysql_secure_installation</span> |
Установка RabbitMQ
установим службу очередей сообщений
1 |
<span lang="EN-US">yum install rabbitmq-server</span> |
1 |
<span lang="EN-US">systemctl enable rabbitmq-server.service</span> |
1 |
<span lang="EN-US">systemctl start rabbitmq-server.service</span> |
добавить пароль для пользователя openstack
1 |
rabbitmqctl add_user openstack пароль |
выставляем полные права для пользователя openstack
1 |
<span lang="EN-US">rabbitmqctl set_permissions openstack ".*" ".*" ".*"</span> |
Установка Memcached
Установим сервис кэширования данных
1 |
<span lang="EN-US">yum install memcached python-memcached</span> |
редактируем файл конфигурации
1 |
<span lang="EN-US">nano /etc/sysconfig/memcached</span> |
1 |
OPTIONS="-l 192.168.10.1" |
добавляем в автозагрузку и включаем сервис
1 |
<span lang="EN-US">systemctl enable memcached.service</span> |
1 |
<span lang="EN-US">systemctl start memcached.service</span> |
проверяем работу
1 |
netstat -anp | grep 11211 |
если нет прослушивателя то запускаем как демон
1 |
memcached -d -u nobody |
тут проблема с запуском из под root, поэтому после перезагрузки служба не поднимается автоматом
Установка Etcd
устанавливаем распределенное хранилище ключей-значений
1 |
yum install etcd |
редактируем файл конфигурации
1 |
nano /etc/etcd/etcd.conf |
и привести блоки member и clustering к следующему виду
1 |
<span lang="EN-US">#[Member]</span> |
1 |
<span lang="EN-US">ETCD_DATA_DIR="/var/lib/etcd/default.etcd"</span> |
1 |
<span lang="EN-US">ETCD_LISTEN_PEER_URLS="http://192.168.10.1:2380"</span> |
1 |
<span lang="EN-US">ETCD_LISTEN_CLIENT_URLS="http://192.168.10.1:2379"</span> |
1 |
<span lang="EN-US">ETCD_NAME="controller"</span> |
1 |
<span lang="EN-US">#[Clustering]</span> |
1 |
<span lang="EN-US">ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.1:2380"</span> |
1 |
<span lang="EN-US">ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.1:2379"</span> |
1 |
<span lang="EN-US">ETCD_INITIAL_CLUSTER="controller=http://192.168.10.1:2380"</span> |
1 |
<span lang="EN-US">ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"</span> |
1 |
<span lang="EN-US">ETCD_INITIAL_CLUSTER_STATE="new"</span> |
добавляем в автозагрузку и включаем сервис
1 |
<span lang="EN-US">systemctl enable etcd</span> |
1 |
<span lang="EN-US">systemctl start etcd</span> |
Установка службы keystone
Keystone - это служба идентификации, используемая OpenStack для аутентификации и авторизации
создание БД и пользователя keystone
1 |
<span lang="EN-US">mysql -u root -p</span> |
1 |
<span lang="EN-US">CREATE DATABASE keystone;</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \</span> |
1 |
<span lang="EN-US">IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \</span> |
1 |
<span lang="EN-US">IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
<span lang="EN-US">exit</span> |
установка пакетов для keystone
1 |
<span lang="EN-US">yum install openstack-keystone httpd mod_wsgi</span> |
редактируем в файле конфигурации /etc/keystone/keystone.conf следующие строки
1 |
<span lang="EN-US">[database]</span> |
1 |
<span lang="EN-US">connection = mysql+pymysql://keystone:</span>пароль<span lang="EN-US">@controller/keystone</span> |
1 |
<span lang="EN-US">[token]</span> |
1 |
<span lang="EN-US">provider = fernet</span> |
Запуск заполнения базы keystone
1 |
<span lang="EN-US">su -s /bin/sh -c "keystone-manage db_sync" keystone</span> |
Инициализация ключей Fernet
Загрузка служб keystone
1 |
<span lang="EN-US">keystone-manage bootstrap --bootstrap-password </span>пароль<span lang="EN-US"> \</span> |
1 |
<span lang="EN-US">--bootstrap-admin-url http://192.168.10.1:5000/v3/ \</span> |
1 |
<span lang="EN-US">--bootstrap-internal-url http://192.168.10.1:5000/v3/ \</span> |
1 |
<span lang="EN-US">--bootstrap-public-url http://192.168.10.1:5000/v3/ \</span> |
1 |
<span lang="EN-US">--bootstrap-region-id RegionOne</span> |
редактируем файл веб сервера /etc/httpd/conf/httpd.conf
1 |
<span lang="EN-US">ServerName controller</span> |
создаем ярлык
1 |
<span lang="EN-US">ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/</span> |
добавляем httpd в автозагрузку и запускаем apache
1 |
<span lang="EN-US">systemctl enable httpd.service</span> |
1 |
<span lang="EN-US">systemctl start httpd.service</span> |
добавим переменные
1 |
<span lang="EN-US">export OS_USERNAME=admin</span> |
1 |
<span lang="EN-US">export OS_PASSWORD=</span>пароль |
1 |
<span lang="EN-US">export OS_PROJECT_NAME=admin</span> |
1 |
<span lang="EN-US">export OS_USER_DOMAIN_NAME=Default</span> |
1 |
<span lang="EN-US">export OS_PROJECT_DOMAIN_NAME=Default</span> |
1 |
<span lang="EN-US">export OS_AUTH_URL=http://controller:35357/v3</span> |
1 |
<span lang="EN-US">export OS_IDENTITY_API_VERSION=3</span> |
создадим домен в openstack
1 |
<span lang="EN-US">openstack domain create --description "An Example Domain" example</span> |
создадим проект service и demo
1 |
<span lang="EN-US">openstack project create --domain default --description "Service Project" service</span> |
1 |
<span lang="EN-US">openstack project create --domain default --description "Demo Project" demo</span> |
создадим demo пользователя
1 |
<span lang="EN-US">openstack user create --domain default --password-prompt demo</span> |
создадим роль user
1 |
<span lang="EN-US">openstack role create user</span> |
добавим пользователю demo роль user в проекте demo
1 |
<span lang="EN-US">openstack role add --project demo --user demo user</span> |
Проверяем работу службы идентификации прежде, чем устанавливать другие службы:
отключим временные переменные среды OS_AUTH_URL и OS_PASSWORD
1 |
<span lang="EN-US">unset OS_AUTH_URL OS_PASSWORD</span> |
как пользователь admin запросим токен аутентификации
1 |
<span lang="EN-US">openstack --os-auth-url http://192.168.10.1:35357/v3 openstack --os-auth-url http://192.168.10.1:35357/v \</span> |
1 |
<span lang="EN-US"> --os-project-domain-name Default --os-user-domain-name Default \</span> |
1 |
<span lang="EN-US"> --os-project-name admin --os-username admin token issue</span> |
как пользователь demo запросим токен аутентификации
1 |
<span lang="EN-US">openstack --os-auth-url http://192.168.10.1:5000/v3 \</span> |
1 |
<span lang="EN-US"> --os-project-domain-name Default --os-user-domain-name Default \</span> |
1 |
<span lang="EN-US"> --os-project-name demo --os-username demo token issue</span> |
Создание сценариев клиентской среды OpenStack:
Файлы сценариев хранят пароли пользователя, поэтому должны хранится в недоступном месте, например в домашнем каталоге пользователя root
1 |
cd ~ |
1 |
touch admin-openrc.sh |
создадим и отредактируем файл скрипта admin-openrc
1 |
<span lang="EN-US">export OS_PROJECT_DOMAIN_NAME=Default</span> |
1 |
<span lang="EN-US">export OS_USER_DOMAIN_NAME=Default</span> |
1 |
<span lang="EN-US">export OS_PROJECT_NAME=admin</span> |
1 |
<span lang="EN-US">export OS_USERNAME=admin</span> |
1 |
<span lang="EN-US">export OS_PASSWORD=</span>пароль |
1 |
<span lang="EN-US">export OS_AUTH_URL=http://192.168.10.1:35357/v3</span> |
1 |
<span lang="EN-US">export OS_IDENTITY_API_VERSION=3</span> |
1 |
<span lang="EN-US">export OS_IMAGE_API_VERSION=2</span> |
создадим и отредактируем файл скрипта demo-openrc
1 |
<span lang="EN-US">cd ~</span> |
1 |
<span lang="EN-US">touch demo-openrc.sh</span> |
1 |
<span lang="EN-US">export OS_PROJECT_DOMAIN_NAME=Default</span> |
1 |
<span lang="EN-US">export OS_USER_DOMAIN_NAME=Default</span> |
1 |
<span lang="EN-US">export OS_PROJECT_NAME=demo</span> |
1 |
<span lang="EN-US">export OS_USERNAME=demo</span> |
1 |
<span lang="EN-US">export OS_PASSWORD=demo</span> |
1 |
<span lang="EN-US">export OS_AUTH_URL=http://192.168.10.1:5000/v3</span> |
1 |
<span lang="EN-US">export OS_IDENTITY_API_VERSION=3</span> |
1 |
<span lang="EN-US">export OS_IMAGE_API_VERSION=2</span> |
Чтобы запускать клиентов в качестве конкретного проекта и пользователя, вы можете просто загрузить связанный сценарий клиентской среды перед их запуском. Например:
запустим скрипт admin-openrc
1 |
. admin-openrc.sh |
теперь запросим токен аутентификации
1 |
openstack token issue |
проверить текущие переменные можно командой
1 |
env |
Установка службы образов - Glance
Служба образов glance необходима для обнаружения, регистрации и извлечения образов виртуальных машин.
Подготовка к установке
Создадим базу данных и предоставим права
1 |
<span lang="EN-US">mysql -u root -p</span> |
1 |
<span lang="EN-US">CREATE DATABASE glance;</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
exit |
Запустим скрипт с переменными
1 |
. admin-openrc.sh |
создадим пользователя glance в openstack
1 |
<span lang="EN-US">openstack user create --domain default --password-prompt glance</span> |
Добавим роль admin пользователю glance и проекту service
1 |
<span lang="EN-US">openstack role add --project service --user glance admin</span> |
создадим сервис glance
1 |
<span lang="EN-US">openstack service create --name glance \</span> |
1 |
<span lang="EN-US"> </span>--description "OpenStack Image" image |
Создадим конечные точки API для сервиса управления образами
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne \</span> |
1 |
<span lang="EN-US"> image public http://controller:9292</span> |
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne \</span> |
1 |
<span lang="EN-US"> image internal http://controller:9292</span> |
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne \</span> |
1 |
<span lang="EN-US"> image admin http://controller:9292</span> |
установим пакет glance
1 |
<span lang="EN-US">yum install openstack-glance</span> |
отредактируем конфигурационный файл API
1 |
<span lang="EN-US">nano /etc/glance/glance-api.conf</span> |
1 |
<span lang="EN-US">[database]</span> |
1 |
<span lang="EN-US">connection = mysql+pymysql://glance:</span>пароль<span lang="EN-US">@controller/glance</span> |
1 |
<span lang="EN-US">[keystone_authtoken]</span> |
1 |
<span lang="EN-US">auth_uri = http://controller:5000</span> |
1 |
<span lang="EN-US">auth_url = http://controller:35357</span> |
1 |
<span lang="EN-US">memcached_servers = controller:11211</span> |
1 |
<span lang="EN-US">auth_type = password</span> |
1 |
<span lang="EN-US">project_domain_name = Default</span> |
1 |
<span lang="EN-US">user_domain_name = Default</span> |
1 |
<span lang="EN-US">project_name = service</span> |
1 |
<span lang="EN-US">username = glance</span> |
1 |
<span lang="EN-US">password = </span>пароль |
1 |
<span lang="EN-US">[paste_deploy]</span> |
1 |
<span lang="EN-US">flavor = keystone</span> |
1 |
<span lang="EN-US">[glance_store]</span> |
1 |
<span lang="EN-US">stores = file,http</span> |
1 |
<span lang="EN-US">default_store = file</span> |
1 |
<span lang="EN-US">filesystem_store_datadir = /var/lib/glance/images/</span> |
отредактируем еще один конфигурационный файл
1 |
<span lang="EN-US">nano /etc/glance/glance-registry.conf</span> |
1 |
<span lang="EN-US">[database]</span> |
1 |
<span lang="EN-US">connection = mysql+pymysql://glance:</span>пароль<span lang="EN-US">@controller/glance</span> |
1 |
<span lang="EN-US">[keystone_authtoken]</span> |
1 |
<span lang="EN-US">auth_uri = http://controller:5000</span> |
1 |
<span lang="EN-US">auth_url = http://controller:35357</span> |
1 |
<span lang="EN-US">memcached_servers = controller:11211</span> |
1 |
<span lang="EN-US">auth_type = password</span> |
1 |
<span lang="EN-US">project_domain_name = Default</span> |
1 |
<span lang="EN-US">user_domain_name = Default</span> |
1 |
<span lang="EN-US">project_name = service</span> |
1 |
<span lang="EN-US">username = glance</span> |
1 |
<span lang="EN-US">password = </span>пароль |
1 |
<span lang="EN-US">[paste_deploy]</span> |
1 |
<span lang="EN-US">flavor = keystone</span> |
Запуск заполнения базы glance
1 |
<span lang="EN-US">su -s /bin/sh -c "glance-manage db_sync" glance</span> |
добавляем в автозагрузку и включаем сервис
1 |
<span lang="EN-US">systemctl enable openstack-glance-api.service \</span> |
1 |
<span lang="EN-US"> openstack-glance-registry.service</span> |
1 |
<span lang="EN-US">systemctl start openstack-glance-api.service \</span> |
1 |
<span lang="EN-US"> openstack-glance-registry.service</span> |
1 |
<span lang="EN-US"> </span> |
Установка службы вычислений - Nova
Nova - основная служба вычислений, которая позволяет запускать образы виртуальных машин.
Подготовка к установке
Создадим три базы данных и предоставим права
1 |
<span lang="EN-US">mysql -u root -p</span> |
1 |
<span lang="EN-US">CREATE DATABASE nova_api;</span> |
1 |
<span lang="EN-US">CREATE DATABASE nova;</span> |
1 |
<span lang="EN-US">CREATE DATABASE nova_cell0;</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY 'NOVA_DBPASS';</span> |
1 |
<span lang="EN-US">GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \</span> |
1 |
<span lang="EN-US"> IDENTIFIED BY '</span>пароль<span lang="EN-US">';</span> |
1 |
exit |
Запустим скрипт с переменными
1 |
. admin-openrc.sh |
создадим пользователя nova в openstack
1 |
<span lang="EN-US">openstack user create --domain default --password-prompt nova</span> |
Добавим роль admin
1 |
<span lang="EN-US">openstack role add --project service --user nova admin</span> |
создадим сервис nova
1 |
<span lang="EN-US">openstack service create --name nova \</span> |
1 |
<span lang="EN-US"> --description "OpenStack Compute" compute</span> |
Создадим конечные точки API для сервиса вычислений
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne \</span> |
1 |
<span lang="EN-US"> compute public http://controller:8774/v2.1</span> |
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne \</span> |
1 |
<span lang="EN-US"> compute internal http://controller:8774/v2.1</span> |
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne \</span> |
1 |
<span lang="EN-US"> compute admin http://controller:8774/v2.1</span> |
создадим пользователя placement в openstack
1 |
<span lang="EN-US">openstack user create --domain default --password-prompt placement</span> |
Добавим роль admin пользователю placement
1 |
<span lang="EN-US">openstack role add --project service --user placement admin</span> |
создадим сервис placement
1 |
<span lang="EN-US"> openstack service create --name placement --description "Placement API" placement</span> |
Создадим конечные точки API для сервиса placement
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne placement public http://controller:8778</span> |
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne placement internal http://controller:8778</span> |
1 |
<span lang="EN-US">openstack endpoint create --region RegionOne placement admin http://controller:8778</span> |
установим пакеты nova
1 |
<span lang="EN-US"> yum install openstack-nova-api openstack-nova-conductor \</span> |
1 |
<span lang="EN-US"> openstack-nova-console openstack-nova-novncproxy \</span> |
1 |
<span lang="EN-US"> openstack-nova-scheduler openstack-nova-placement-api</span> |
отредактируем конфигурационный файл