Оглавление

Apache CloudStack 4.21 уже здесь, с более удобным пользовательским интерфейсом и множеством новых функций — сейчас самое время обновиться или развернуть новую версию. В этом руководстве мы шаг за шагом рассмотрим установку последней версии 4.21 с TLS от начала до конца, а также необходимые и настоятельно рекомендуемые инструменты для её уверенной работы в рабочей среде. В предыдущей статье я рассказал о CloudStack. почта, Не стесняйтесь прочитать, прежде чем продолжить. Итак, приступим.

Мы сделаем все вручную и для производительности будем использовать MariaDB, чтобы вы могли понять, как все сделать самостоятельно.

Требования:

  • Поддерживаемые ОС: Ubuntu 24.04
  • Архитектура: amd64, aarch64
  • Блок публичной сети – мин. /28 (важно только для публичного доступа)
  • Установлен пакет Timeshift или альтернативная резервная копия (важно)

Начиная

Примечание: установка iptables-save и netfilter-persistent приведет к сбоям в работе CloudStack Agent, подключающегося к хосту. В другом посте я объясню, как защитить настройку с помощью iptables.

Резервное копирование: Timeshift

Для начала подключимся к нашему серверу по SSH и установим timeshift.

Баш
sudo su
passwd root # Change root password if you haven't already
apt update && apt upgrade -y
apt install -y timeshift
timeshift --rsync --create --comments "Initial snapshot" --tags D

Отлично, теперь мы всегда можем вернуться к нашей резервной копии, если допустим серьезную ошибку, без необходимости перезагрузки системы.

Отключить сон

Сервер не следует переводить в спящий режим, чтобы обеспечить постоянную доступность, предотвратить медленное время запуска, сохранить производительность и избежать потенциальных проблем с оборудованием, вызванных частым включением и выключением питания.

Баш
systemctl status suspend.target

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

sudo mkdir -p /etc/systemd/sleep.conf.d
sudo tee /etc/systemd/sleep.conf.d/no-sleep.conf >/dev/null <<'EOF'
[Sleep]
AllowSuspend=no
AllowHibernation=no
AllowHybridSleep=no
AllowSuspendThenHibernate=no
EOF
Баш
sudo mkdir -p /etc/systemd/logind.conf.d
sudo tee /etc/systemd/logind.conf.d/no-sleep.conf >/dev/null <<'EOF'
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
IdleAction=ignore
EOF

sudo systemctl restart systemd-logind

Нетворкинг

1: Давайте настроим имя хоста
Баш
hostname --fqdn
hostnamectl set-hostname node1.example.com
2. Установите важные инструменты перед началом работы
Баш
apt install -y vim nano wget curl openssh-server sudo htop tar iotop \
  bridge-utils net-tools ipset python3-pip software-properties-common net-tools \
  gnupg2 lsb-release openntpd cpu-checker openjdk-17-jre
3. Настройте SSH для работы с CloudStack
Баш
nano /etc/ssh/sshd_config
# Uncomment and Tweak these lines
PermitRootLogin prohibit-password
StrictModes yes
MaxAuthTries 3
PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
# Do not disable PasswordAuthentication before adding SSH Keys
PasswordAuthentication no
PermitEmptyPasswords no

X11Forwarding no
UsePAM yes
Баш
# Add at the end of the file
KexAlgorithms=+diffie-hellman-group-exchange-sha1
PubkeyAcceptedKeyTypes=+ssh-dss
HostKeyAlgorithms=+ssh-dss
KexAlgorithms=+diffie-hellman-group1-sha1
4: Создайте мост для CloudStack

Это сложная часть, требующая базовых знаний в области сетевых технологий.
Что нам нужно понять:
A: Если у вас несколько подсетей: маршрутизируется ли ваша подсеть или используется NAT? Большинство подсетей маршрутизируются.
B: Является ли ваш сетевой порт транкинговым или нет?
Важно, чтобы коммутатор/маршрутизатор допускал транкинг (802.1Q), чтобы мы могли настроить VLAN, если вы планируете использовать несколько подсетей с публичными IP-адресами.
Мы можем обойти это следующим образом:
4.1: (Для доступа по публичному IP) Настройка 2 портов Ethernet, поскольку к порту одновременно может быть подключен только один активный мост, и мост должен оставаться непомеченным.
4.2: (Для доступа по публичному IP) Весь трафик под одним мостом (Для личного использования) должен быть немаркированным.
Оба варианта будут нетегированными, то есть мы не сможем использовать VLAN, но сможем использовать группы безопасности для изоляции.

Теперь давайте настроим netplan:

Нано
ifconfig
cd /etc/netplan
# Now rename all the files and add .bak to th end of the file names.
# Disable netplan regeneartion.
sudo mkdir -p /etc/cloud/cloud.cfg.d
echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

# Create a new neplan conf
nano /etc/netplan/01-network-manager-all.yaml

Теперь вы можете скопировать и вставить один из этих конфигураций из моего Гитхаб в файл и сохраните.

Баш
netplan try
# if everything is good, apply
netplan generate && netplan apply 
sudo update-initramfs -u && sudo reboot

Модули загрузочного моста

Баш
sudo modprobe bridge 
# Load netfilter modules 
sudo modprobe br_netfilter 
sudo modprobe nf_conntrack 
# Load required modules 
modprobe br_netfilter 2>/dev/null 
modprobe nf_conntrack 2>/dev/null echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf 
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf 
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf 
echo "vm.swappiness=10" >> /etc/sysctl.conf sysctl -p modprobe kvm modprobe kvm-intel 
# or kvm-amd for AMD processors 
echo "kvm" >> /etc/modules 
echo "kvm-intel" >> /etc/modules # or kvm-amd

Настройте NFS-сервер для хранения

Баш
apt install nfs-kernel-server nfs-common -y

mkdir /export
mkdir -m 755 /export/primary
mkdir -m 755 /export/secondary
mkdir -m 755 /mnt/primary # If you have a secondary storage device you wanna use.
mkdir -m 755 /mnt/secondary # If you have a secondary storage device you wanna use.
Баш
# Configure exports
cat > /etc/exports << EOF
/export/primary  10.7.0.0/24(rw,async,no_root_squash,no_subtree_check) 127.0.0.1/24(rw,async,no_root_squash,no_subtree_check)
/export/secondary  10.7.0.0/24(rw,async,no_root_squash,no_subtree_check) 127.0.0.1(rw,async,no_root_squash,no_subtree_check)
EOF

# Now lets modify fstab
nano /etc/fstab 
# Add the following and save for permanent mount.
10.7.0.0:/export/primary    /mnt/primary   nfs defaults,noauto 0 0
10.7.0.0:/export/secondary    /mnt/secondary   nfs defaults,noauto 0 0

Настройте параметры сервера ядра NFS, отредактировав файл конфигурации с помощью следующей команды:

Баш
nano /etc/default/nfs-kernel-server
# Add the following and save.
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020

Сохраните и выйдите. Затем включите и перезапустите NFS-сервер.

Баш
systemctl enable nfs-kernel-server
systemctl restart nfs-kernel-server
# Mount NFS shares and Fstab
systemctl daemon-reload
exportfs -a
mount -a

Установка базы данных MariaDB

CloudStack обычно использует MySQL, но для производства предпочтительнее использовать MariaDB из-за безопасности и производительности.

Баш
sudo apt install -y mariadb-server
Баш
cat | sudo tee /etc/mysql/conf.d/cloudstack.cnf >/dev/null <<'CFG'
[mysqld]
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log_bin=mysql-bin
binlog_format=ROW
bind-address=0.0.0.0 
# I would recommend binding it to 127.0.0.1
# If you plan replication, set a unique server_id
server_id=1
character-set-server = utf8mb4
collation-server     = utf8mb4_unicode_ci
CFG

sudo systemctl restart mariadb
mysql_secure_installation
  • Переключиться на аутентификацию unix_socket Н
  • Хотите ли вы настроить компонент ПРОВЕРКА ПАРОЛЯ? Н
  • Изменить пароль для root? Н # Ваш выбор
  • Удалить анонимных пользователей? Y
  • Запретить удаленный вход в систему под учетной записью root? Y
  • Удалить тестовую базу данных и доступ к ней? Y
  • Перезагрузить таблицы привилегий сейчас? Y

Изменить пароль MySQL

Баш
mysql -u root
CREATE USER IF NOT EXISTS 'root'@'localhost'   IDENTIFIED BY '$mysqlRootPassword';
CREATE USER IF NOT EXISTS 'root'@'127.0.0.1'   IDENTIFIED BY '$mysqlRootPassword';
CREATE USER IF NOT EXISTS 'root'@'%'           IDENTIFIED BY '$mysqlRootPassword';
# Explicitly use mysql_native_password for each
ALTER USER 'root'@'localhost'  IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
ALTER USER 'root'@'127.0.0.1'  IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
ALTER USER 'root'@'%'          IDENTIFIED VIA mysql_native_password USING PASSWORD('$mysqlRootPassword');
FLUSH PRIVILEGES;
EXIT;
Баш
# Create DB/User for CloudStack
mysql -u root -p << EOF
CREATE USER 'cloud'@'localhost' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'cloud'@'localhost' WITH GRANT OPTION;
CREATE USER 'cloud'@'%' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'cloud'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

Добавить Apt Repo & Установить CloudStack

Баш
mkdir -p /etc/apt/keyrings
wget -O- http://packages.shapeblue.com/release.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/cloudstack.gpg > /dev/null

echo deb [signed-by=/etc/apt/keyrings/cloudstack.gpg] http://packages.shapeblue.com/cloudstack/upstream/debian/4.21 / > /etc/apt/sources.list.d/cloudstack.list
Баш
apt update
apt install -y cloudstack-management cloudstack-usage

apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \
qemu-utils genisoimage iproute2 uuid-runtime virtinst cloudstack-agent

usermod -aG libvirt,libvirt-qemu,kvm "$USER"
newgrp libvirt

Далее следует настроить базу данных для CloudStack.

Баш
cloudstack-setup-databases cloud:'StrongPassword!'@localhost \
  --deploy-as=root:'$mysqlRootPassword' \
  -e file \
  -m 'Fill_In_Random_MGMT_SERVER_KEY' \
  -k 'Fill_In_Random_DB_KEY' \
  -i "127.0.0.1"

cloudstack-setup-management

Загрузите шаблоны системных виртуальных машин для CloudStack (важно)

Баш
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
  -m /export/secondary \
  -u https://download.cloudstack.org/systemvm/4.20/systemvmtemplate-4.20.2-x86_64-kvm.qcow2.bz2 \
  -h kvm -F

Установите sudoers, чтобы убедиться, что все работает

Баш
nano /etc/sudoers
# Append the following line to the end of the file
Defaults:cloud !requiretty

Теперь пользовательский интерфейс должен быть доступен по адресу http://public_ip:8080/client, учётные данные: (admin:password). Но это ещё не всё.

Настройте CloudStack Agent, QEMU и услуги

Баш
systemctl enable cloudstack-agent.service
Баш
nano /etc/libvirt/libvirtd.conf
# Find the identifier and uncomment, change or append
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0
Баш
nano /etc/default/libvirtd
# Find the identifier and uncomment, change or append
LIBVIRTD_ARGS="--listen"
Баш
# Mask libvirt for listening
systemctl mask libvirtd.socket libvirtd-ro.socket \
libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socketd
systemctl restart libvirtd

Отключить AppArmor

Баш
ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd
apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper

Теперь базовая настройка завершена, и вы готовы запустить пользовательский интерфейс по адресу http://public_ip:8080/client, Учетные данные: (admin:password).

Дальнейшие шаги:

Чтобы не делать пост длиннее, чем он должен быть, пожалуйста, просмотрите следующий почта для получения информации о дальнейших шагах и о том, как защитить вашу настройку.

Разделено на категории:

Облако, Гиды,