Intro
Написано по мотивам недавней статьи: Особенности национальной виртуализации на SharxBase
и Большое тестирование российских систем виртуализации
Оставим критику этих замечательных продуктов для тех кому с ними приходится работать. Ребята стараются и это уже не плохо.
Такие проекты как OpenStack стоят достаточно дорого в обслуживании, если ваша компания не облачный провайдер или интегратор, а возможностей Proxmox не хватает для строительства IaaS.
К счастью есть такой проект как Сloudstack который отвечает всем современным требованиям: API, готовые модули terraform и ansible, поддержка Kubernetes и встроенный мониторинг.
Когда-то эта платформа принадлежала Citrix, но сейчас кодовая база распространяется свободно. Некоторые российские компании используют его для предоставления облачных услуг.
Важное отличие – это не гипервизор, а «managment panel»: middleware и frontend который управляет хостами виртуализации. Вы подключаете хосты с виртализаций на базе QEMU/KVM, Xen и ESXI к control plane и дальше управляете ими через CloudStack. Не хватает только биллинга, но это можно исправить.
Ниже приведена инструкция по установке control plane CloudStack на centos.
Это ознакомительная установка – для прода процесс отличается и включает в себя дополнительные шаги.
Обновляем систему:
yum -y upgrade
Устанавливаем приреквизиты:
yum install bridge-utils net-tools -y
SELINUX
Отключаем SELINUX:
sed -i 's/^[[:blank:]]*SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
cat /etc/selinux/config
setenforce 0
chrony
Устанавливаем chrony:
yum install chrony
Убедится в том, что служба chrony работает:
systemctl start chronyd
systemctl enable chronyd
Разкомментировать следующую строчку в файле /etc/chrony.conf
:
#local stratum 10
Перезапустить службу chrony:
systemctl restart chronyd
Repo
Добавить репозиторий Cloudstack:
/etc/yum.repos.d/cloudstack.repo
:
[cloudstack]
name=cloudstack
baseurl=http://download.cloudstack.org/centos/$releasever/4.18/
enabled=1
gpgcheck=0
NFS
Установить NFS:
yum -y install nfs-utils
Создать две директории для NFS шар:
mkdir -p /export/primary
mkdir /export/secondary
Добавить в /etc/exports
:
/export/primary 185.149.240.25(rw,sync,no_root_squash,no_subtree_check)
/export/secondary 185.149.240.25(rw,sync,no_root_squash,no_subtree_check)
exportfs -r
Проверяем запущена ли служба NFS сервера:
systemctl status rpcbind nfs-server
Проеряем шары NFS:
exportfs
/export/primary
185.149.240.25
/export/secondary
185.149.240.25
Проверяем запущена ли служба rpcbind:
systemctl start rpcbind
systemctl enable rpcbind
firewalld
Выключите firewalld:
systemctl stop firewalld
systemctl disable firewalld
Сервисы
Добавите в автозапуск и стартуйте следующие службы:
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start nfs-server
systemctl start rpcbind
systemctl daemon-reload
MySQL
Скачиваем репозиторий mysql:
https://dev.mysql.com/downloads/repo/yum
Устанавливаем репозиторий:
rpm -Uvh mysql80-community-release-el9-1.noarch.rpm
Устанавливаем mysql:
yum install mysql-community-server
Содержимое конфига /etc/my.cnf
:
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
Active: active (running) since Sat 2023-07-01 15:26:14 MSK; 7s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 36794 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 36873 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 306975)
Memory: 487.8M
CPU: 9.679s
CGroup: /system.slice/mysqld.service
└─36873 /usr/sbin/mysqld
Jul 01 15:24:58 Pythagoras systemd[1]: Starting MySQL Server...
Jul 01 15:26:14 Pythagoras systemd[1]: Started MySQL Server.
Перезапускаем службу mysql:
systemctl stop mysqld
systemctl start mysqld
Временный пароль mysql:
grep 'temporary password' /var/log/mysqld.log
Используем скрипт mysql:
mysql_secure_installation
Должен появится следующий запрос:
Estimated strength of the password: 100
Change the password for root ? (Press y|Y for Yes, any other key for No) :
Проверяем доступ:
mysqladmin -u root -p version
MySQL connector
Устанавливаем коннектор для mysql:
yum install mysql-connector-python3
Cloudstack-management
Устанавливаем панель управления Cloudstack:
yum install cloudstack-management
Cloudstack-agent
Устанавливаем Agent Cloudstack:
yum install cloudstack-agent
QEMU & Libvirt
На хосте нужно будет установить QEMU и Libvirt.
QEMU VNC нужно расомментировать /etc/libvirt/qemu.conf
:
#vnc_listen = "0.0.0.0"
Libvirt
В конфиг Libvirt добавить следующие строчки /etc/libvirt/libvirtd.conf
:
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0
Юнит-файл systemd Libvirt /usr/lib/systemd/system/libvirtd.service
systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket
Для компонента cloudstack-agent необходимо создать пустой файл в директории /etc/sysconfig/
:
touch /etc/sysconfig/libvirtd
Перезапустить демон libvirt:
systemctl restart libvirtd
Ссылки:
https://libvirt.org/manpages/libvirtd.html#system-socket-activation
Networking
Включаем IP Forwarding
Нужно будет обязательно включить на хосте (в нашем случае это одна машина) IP Forwarding.
Добавить в файл /etc/sysctl.d/cloudstack.conf следующие строчки:
net.ipv4.ip_forward=1
Удостоверится в том, что IP Forwarding включен:
sysctl net.ipv4.ip_forward
Сначала настраиваем eth0 /etc/sysconfig/network-scripts/ifcfg-eth0
:
DEVICE=eth0
HWADDR=00:04:xx:xx:xx:xx
ONBOOT=yes
HOTPLUG=no
BOOTPROTO=none
TYPE=Ethernet
BRIDGE=cloudbr0
И затем два бриджа - cloudbr0:
DEVICE=cloudbr0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
DELAY=5
IPADDR=192.168.42.11
GATEWAY=192.168.42.1
NETMASK=255.255.255.0
STP=yes
cloudbr1 /etc/sysconfig/network-scripts/ifcfg-cloudbr1
:
DEVICE=cloudbr1
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
DELAY=5
STP=yes
Запускаем скрипт cloudstack-setup-databases:
cloudstack-setup-databases cloud:<PASSWORD>@localhost --deploy-as=root
Планируемый результат:
Mysql user name:cloud [ OK ]
Mysql user password:****** [ OK ]
Mysql server ip:localhost [ OK ]
Mysql server port:3306 [ OK ]
Mysql root user name:root [ OK ]
Mysql root user password:****** [ OK ]
Checking Cloud database files ... [ OK ]
Checking local machine hostname ... [ OK ]
Checking SELinux setup ... [ OK ]
Detected local IP address as 185.149.240.25, will use as cluster management server node IP[ OK ]
Preparing /etc/cloudstack/management/db.properties [ OK ]
Applying /usr/share/cloudstack-management/setup/create-database.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/create-schema.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/create-database-premium.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/create-schema-premium.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/server-setup.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/templates.sql [ OK ]
Processing encryption ... [ OK ]
Finalizing setup ... [ OK ]
CloudStack has successfully initialized database, you can check your database configuration in /etc/cloudstack/management/db.properties
sudoers
Для компонента cloudstack-agent необходимо добавить следующие строчки в /etc/sudoers
:
cloudstack ALL=NOPASSWD: /usr/bin/cloudstack-setup-agent
defaults:cloudstack !requiretty
End
Запуск cloudstack-setup-management:
Starting to configure CloudStack Management Server:
Configure CloudStack Management Server ...[OK]
CloudStack Management Server setup is Done!
Please ensure ports 8080, 8250, 8443, and 9090 are opened and not firewalled for the management server and not in use by other processes on this host.
Запуск агента Cloudstack:
systemctl enable cloudstack-agent
systemctl start cloudstack-agent
systemctl status cloudstack-agent
UI
Теперь можно использовать WebUI CloudStack:
http://:8080/client
Учетные данные по умолчанию:
admin
password
https://cloudstack.apache.org/kubernetes.html