Lưu ý: Thực hiện các bước cấu hình trên node controller01
Update các gói phần mềm và cài đặt các gói cơ bản cho controller01
dnf update -y
dnf config-manager --set-enabled PowerTools
dnf install -y wget git vim
dnf install -y network-scripts
Thiết lập hostname cho controller01
hostnamectl set-hostname controller01
Khai báo file /etc/hosts
echo "127.0.0.1 localhost `hostname`" > /etc/hosts
echo "192.168.98.81 controller01" >> /etc/hosts
echo "192.168.98.91 network01" >> /etc/hosts
echo "192.168.98.101 compute01" >> /etc/hosts
Thiết lập IP theo phân hoạch cho controller01
nmcli con modify eth0 ipv4.addresses 192.168.98.81/24
nmcli con modify eth0 ipv4.gateway 192.168.98.1
nmcli con modify eth0 ipv4.dns 8.8.8.8
nmcli con modify eth0 ipv4.method manual
nmcli con modify eth0 connection.autoconnect yes
nmcli con modify eth1 ipv4.addresses 192.168.64.81/24
nmcli con modify eth1 ipv4.method manual
nmcli con modify eth1 connection.autoconnect yes
nmcli con modify eth2 ipv4.addresses 192.168.61.81/24
nmcli con modify eth2 ipv4.method manual
nmcli con modify eth2 connection.autoconnect yes
nmcli con modify eth3 ipv4.addresses 192.168.62.81/24
nmcli con modify eth3 ipv4.method manual
nmcli con modify eth3 connection.autoconnect yes
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo systemctl disable firewalld
sudo systemctl stop firewalld
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl enable network
sudo systemctl start network
init 6
Cấu hình cơ bản cho node network01
Update các gói phần mềm và cài đặt các gói cơ bản
dnf update -y
dnf config-manager --set-enabled PowerTools
dnf install -y wget git vim
dnf install -y network-scripts
Thiết lập hostname
hostnamectl set-hostname network01
Khai báo file /etc/hosts
echo "127.0.0.1 localhost `hostname`" > /etc/hosts
echo "192.168.98.81 controller01" >> /etc/hosts
echo "192.168.98.91 network01" >> /etc/hosts
echo "192.168.98.101 compute01" >> /etc/hosts
Thiết lập IP theo phân hoạch
nmcli con modify eth0 ipv4.addresses 192.168.98.91/24
nmcli con modify eth0 ipv4.gateway 192.168.98.1
nmcli con modify eth0 ipv4.dns 8.8.8.8
nmcli con modify eth0 ipv4.method manual
nmcli con modify eth0 connection.autoconnect yes
nmcli con modify eth1 ipv4.addresses 192.168.64.91/24
nmcli con modify eth1 ipv4.method manual
nmcli con modify eth1 connection.autoconnect yes
nmcli con modify eth2 ipv4.addresses 192.168.61.91/24
nmcli con modify eth2 ipv4.method manual
nmcli con modify eth2 connection.autoconnect yes
nmcli con modify eth3 ipv4.addresses 192.168.62.91/24
nmcli con modify eth3 ipv4.method manual
nmcli con modify eth3 connection.autoconnect yes
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo systemctl disable firewalld
sudo systemctl stop firewalld
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl enable network
sudo systemctl start network
init 6
Cấu hình cơ bản cho node compute01
Update các gói phần mềm và cài đặt các gói cơ bản
dnf update -y
dnf config-manager --set-enabled PowerTools
dnf install -y wget git vim
dnf install -y network-scripts
Thiết lập hostname
hostnamectl set-hostname compute01
Khai báo file /etc/hosts
echo "127.0.0.1 localhost `hostname`" > /etc/hosts
echo "192.168.98.81 controller01" >> /etc/hosts
echo "192.168.98.91 network01" >> /etc/hosts
echo "192.168.98.101 compute01" >> /etc/hosts
Thiết lập IP theo phân hoạch
nmcli con modify eth0 ipv4.addresses 192.168.98.101/24
nmcli con modify eth0 ipv4.gateway 192.168.98.1
nmcli con modify eth0 ipv4.dns 8.8.8.8
nmcli con modify eth0 ipv4.method manual
nmcli con modify eth0 connection.autoconnect yes
nmcli con modify eth1 ipv4.addresses 192.168.64.101/24
nmcli con modify eth1 ipv4.method manual
nmcli con modify eth1 connection.autoconnect yes
nmcli con modify eth2 ipv4.addresses 192.168.61.101/24
nmcli con modify eth2 ipv4.method manual
nmcli con modify eth2 connection.autoconnect yes
nmcli con modify eth3 ipv4.addresses 192.168.62.101/24
nmcli con modify eth3 ipv4.method manual
nmcli con modify eth3 connection.autoconnect yes
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo systemctl disable firewalld
sudo systemctl stop firewalld
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl enable network
sudo systemctl start network
init 6
- Ping ra internet bằng IP và domain name.
- Ping ra gateway của các interface
- Ping tới các IP của các node trong topo.
Thực hiện cài đặt các gói trên OpenStack
Khai báo repo cho OpenStack Victoria trên cả tất cả các node.
dnf -y install centos-release-openstack-victoria
dnf -y upgrade
dnf -y install crudini wget vim
dnf -y install openstack-selinux python3-openstackclient
dnf -y update
Cài đặt đồng bộ thời gian cho controller01
. Trong hướng dẫn này sử dụng chrony để làm NTP.
dnf -y install chrony
Sao lưu file cấu hình của NTP
cp /etc/chrony.conf /etc/chrony.conf.orig
Máy controller sẽ cập nhật thời gian từ internet hoặc máy chủ NTP của bạn. Các máy compute còn lại sẽ đồng bộ thời gian từ máy controller này. Trong hướng dẫn này sẽ sử dụng địa chỉ NTP của nội bộ.
Sửa file cấu hình như sau
sed -i s'/0.centos.pool.ntp.org/103.124.92.19/'g /etc/chrony.conf
sed -i s'/server 1.centos.pool.ntp.org iburst/#server 1.centos.pool.ntp.org iburst/'g /etc/chrony.conf
sed -i s'/server 2.centos.pool.ntp.org iburst/#server 2.centos.pool.ntp.org iburst/'g /etc/chrony.conf
sed -i s'/server 3.centos.pool.ntp.org iburst/#server 3.centos.pool.ntp.org iburst/'g /etc/chrony.conf
Khởi động lại chrony sau khi sửa file cấu hình
systemctl restart chronyd
Kiểm tra lại trạng thái của chrony xem đã OK hay chưa.
systemctl status chronyd
Kiểm tra thời gian và trạng thái đồng bộ bằng lệnh timedatectl
. Kết quả như bên dưới là NTP server đã hoạt động.
[root@controller01 ~]# timedatectl
Local time: Wed 2020-11-18 16:48:32 +07
Universal time: Wed 2020-11-18 09:48:32 UTC
RTC time: Wed 2020-11-18 09:48:31
Time zone: Asia/Ho_Chi_Minh (+07, +0700)
System clock synchronized: yes
NTP service: active
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
Kiểm tra lại xem xem đã đồng bộ được hay chưa
chronyc sources
Kết quả như bên dưới là đã đồng bộ được (thể hiện ở dấu *)
[root@controller01 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 103.124.92.19 3 6 17 13 +43us[ +92us] +/- 13ms
Thực hiện bước cài đặt và cấu hình cho network01
Truy cập vào máy network01 và thực hiện cấu hình NTP như sau.
dnf install -y chrony
Sao lưu file cấu hình của NTP
cp /etc/chrony.conf /etc/chrony.conf.orig
Cấu hình chrony, lưu ý thay địa chỉ NTP server cho phù hợp. Trong ví dụ này sử dụng IP NTP trong hệ thống LAB của tôi.
sed -i 's/server 0.centos.pool.ntp.org iburst/server 192.168.98.81 iburst/g' /etc/chrony.conf
sed -i 's/server 1.centos.pool.ntp.org iburst/#/g' /etc/chrony.conf
sed -i 's/server 2.centos.pool.ntp.org iburst/#/g' /etc/chrony.conf
sed -i 's/server 3.centos.pool.ntp.org iburst/#/g' /etc/chrony.conf
sed -i 's/#allow 192.168.0.0\/16/allow 192.168.98.0\/24/g' /etc/chrony.conf
Khởi động lại chrony
systemctl enable chronyd.service
systemctl start chronyd.service
systemctl restart chronyd.service
Kiểm chứng lại xem thời gian được đồng bộ hay chưa. Nếu xuất hiện dấu *
trong kết quả của lênh dưới là đã đồng bộ thành công.
[root@network01 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller01 4 6 377 1 -593ns[ +24us] +/- 12ms
Kiểm tra thời gian và trạng thái đồng bộ bằng lệnh timedatectl
. Kết quả như bên dưới là NTP server đã hoạt động.
[root@network01 ~]# timedatectl
Local time: Wed 2020-11-18 17:10:12 +07
Universal time: Wed 2020-11-18 10:10:12 UTC
RTC time: Wed 2020-11-18 10:10:11
Time zone: Asia/Ho_Chi_Minh (+07, +0700)
System clock synchronized: yes
NTP service: active
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
Thực hiện bước cài đặt và cấu hình cho compute01
Truy cập vào máy compute01 và thực hiện cấu hình NTP như sau.
dnf install -y chrony
Sao lưu file cấu hình của NTP
cp /etc/chrony.conf /etc/chrony.conf.orig
Cấu hình chrony, lưu ý thay địa chỉ NTP server cho phù hợp. Trong ví dụ này sử dụng IP NTP trong hệ thống LAB của tôi.
sed -i 's/server 0.centos.pool.ntp.org iburst/server 192.168.98.81 iburst/g' /etc/chrony.conf
sed -i 's/server 1.centos.pool.ntp.org iburst/#/g' /etc/chrony.conf
sed -i 's/server 2.centos.pool.ntp.org iburst/#/g' /etc/chrony.conf
sed -i 's/server 3.centos.pool.ntp.org iburst/#/g' /etc/chrony.conf
Khởi động lại chrony
systemctl enable chronyd.service
systemctl start chronyd.service
systemctl restart chronyd.service
Kiểm chứng lại xem thời gian được đồng bộ hay chưa. Nếu xuất hiện dấu *
trong kết quả của lênh dưới là đã đồng bộ thành công.
[root@compute01 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller01 4 6 7 0 +6548ns[ +43us] +/- 12ms
Kiểm tra thời gian và trạng thái đồng bộ bằng lệnh timedatectl
. Kết quả như bên dưới là NTP server đã hoạt động.
[root@compute01 ~]# timedatectl
Local time: Wed 2020-11-18 17:11:39 +07
Universal time: Wed 2020-11-18 10:11:39 UTC
RTC time: Wed 2020-11-18 10:11:39
Time zone: Asia/Ho_Chi_Minh (+07, +0700)
System clock synchronized: yes
NTP service: active
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
- Thực hiện cài đặt memcache trên
controller01
Cài đặt memcache
dnf -y install memcached python3-memcached
Sao lưu file cấu hình của memcache
cp /etc/sysconfig/memcached /etc/sysconfig/memcached.orig
Sửa file cấu hình của memcached
sed -i "s/-l 127.0.0.1,::1/-l 127.0.0.1,::1,192.168.98.81/g" /etc/sysconfig/memcached
Khởi động lại memcached
systemctl enable memcached.service
systemctl restart memcached.service
- Thực hiện cài đặt mariađb trên
controller01
Cài đặt MariaDB
dnf module -y install mariadb:10.3
Khai báo file cấu hình của MariaDB dành cho OpenStack
cat <<EOF> /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
EOF
Khởi động lại MariaDB
systemctl enable mariadb.service
systemctl start mariadb.service
Cấu hình mật khẩu cho MariaDB
mysql -uroot
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Welcome123' WITH GRANT OPTION ;FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'Welcome123' WITH GRANT OPTION ;FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'Welcome123' WITH GRANT OPTION ;FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.98.81' IDENTIFIED BY 'Welcome123' WITH GRANT OPTION ;FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'controller01' IDENTIFIED BY 'Welcome123' WITH GRANT OPTION ;FLUSH PRIVILEGES;
DROP USER 'root'@'::1';
exit
- Chỉ cần thực hiện cài đặt rabbitmq trên node controller01
Cài đặt rabbitmq
dnf install rabbitmq-server -y
Khởi động rabbitmq
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
Khai báo plugin cho rabbitmq
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server
Khai báo tài khoản và mật khẩu cho rabbitmq
rabbitmqctl add_user openstack Welcome123
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
rabbitmqctl set_user_tags openstack administrator
Sau đó có thể đăng nhập vào UI của rabbitmq bằng URL http://IP_MANAGER_CONTROLLER:15672
với user và mật khẩu ở trên để kiểm tra
Ta sẽ thấy được giao diện như bên dưới nếu đăng nhập thành công
Chỉ thực hiện bước cài này trên controller01
ETCD là một ứng dụng lưu trữ dữ liệu phân tán theo theo kiểu key-value, nó được các services trong OpenStack sử dụng lưu trữ cấu hình, theo dõi các trạng thái dịch vụ và các tình huống khác.
Cài đặt etcd
dnf install etcd -y
Sao lưu file cấu hình của etcd
cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.orig
Chỉnh sửa file cấu hình của etcd. Lưu ý thay đúng IP và hostname của controller01
đã được thiết lập ở trước đó.
sed -i '/ETCD_DATA_DIR=/cETCD_DATA_DIR="/var/lib/etcd/default.etcd"' /etc/etcd/etcd.conf
sed -i '/ETCD_LISTEN_PEER_URLS=/cETCD_LISTEN_PEER_URLS="http://192.168.98.81:2380"' /etc/etcd/etcd.conf
sed -i '/ETCD_LISTEN_CLIENT_URLS=/cETCD_LISTEN_CLIENT_URLS="http://192.168.98.81:2379"' /etc/etcd/etcd.conf
sed -i '/ETCD_NAME=/cETCD_NAME="controller01"' /etc/etcd/etcd.conf
sed -i '/ETCD_INITIAL_ADVERTISE_PEER_URLS=/cETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.98.81:2380"' /etc/etcd/etcd.conf
sed -i '/ETCD_ADVERTISE_CLIENT_URLS=/cETCD_ADVERTISE_CLIENT_URLS="http://192.168.98.81:2379"' /etc/etcd/etcd.conf
sed -i '/ETCD_INITIAL_CLUSTER=/cETCD_INITIAL_CLUSTER="controller01=http://192.168.98.81:2380"' /etc/etcd/etcd.conf
sed -i '/ETCD_INITIAL_CLUSTER_TOKEN=/cETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"' /etc/etcd/etcd.conf
sed -i '/ETCD_INITIAL_CLUSTER_STATE=/cETCD_INITIAL_CLUSTER_STATE="new"' /etc/etcd/etcd.conf
Kích hoạt và khởi động etcd
systemctl enable etcd
systemctl restart etcd
Kiểm tra trạng thái của etcd
systemctl status etcd
Kết quả như bên dưới là OK.
[root@controller01 ~]# systemctl status etcd
● etcd.service - Etcd Server
Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-11-18 23:38:07 +07; 3s ago
Main PID: 25769 (etcd)
Tasks: 10 (limit: 23977)
Memory: 20.7M
CGroup: /system.slice/etcd.service
└─25769 /usr/bin/etcd --name=controller01 --data-dir=/var/lib/etcd/default.etcd --listen-client-urls>
Nov 18 23:38:07 controller01 etcd[25769]: 9eef34a33104c116 received MsgVoteResp from 9eef34a33104c116 at term 2
Nov 18 23:38:07 controller01 etcd[25769]: 9eef34a33104c116 became leader at term 2
Nov 18 23:38:07 controller01 etcd[25769]: raft.node: 9eef34a33104c116 elected leader 9eef34a33104c116 at term 2
Nov 18 23:38:07 controller01 etcd[25769]: published {Name:controller01 ClientURLs:[http://192.168.98.81:2379]} >
Nov 18 23:38:07 controller01 etcd[25769]: setting up the initial cluster version to 3.2
Nov 18 23:38:07 controller01 etcd[25769]: ready to serve client requests
Nov 18 23:38:07 controller01 etcd[25769]: set the initial cluster version to 3.2
Nov 18 23:38:07 controller01 etcd[25769]: enabled capabilities for version 3.2
Nov 18 23:38:07 controller01 etcd[25769]: serving insecure client requests on 192.168.98.81:2379, this is stron>
Nov 18 23:38:07 controller01 systemd[1]: Started Etcd Server.
Keystone được cài đặt trên controller.
Tạo database, user và phân quyền cho keystone
- Tên database:
keystone
- Tên user của database:
keystone
- Mật khẩu:
Welcome123
mysql -uroot -pWelcome123 -e "CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
Cài đặt keystone
dnf install -y openstack-keystone python3-openstackclient httpd mod_ssl python3-mod_wsgi python3-oauth2client
Sao lưu file cấu hình của keystone
cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.orig
Dùng lệnh crudini
để sửa các dòng cần thiết file keystone
crudini --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:Welcome123@192.168.98.81/keystone
crudini --set /etc/keystone/keystone.conf token provider fernet
Đảm bảo phân đúng quyền cho file cấu hình của keystone
chown root:keystone /etc/keystone/keystone.conf
Đồng bộ để sinh database cho keystone
su -s /bin/sh -c "keystone-manage db_sync" keystone
Sinh các file cho fernet
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
- Sau khi chạy 02 lệnh ở trên, ta sẽ thấy thư mục
/etc/keystone/fernet-keys
được sinh ra và chứa các file key củafernet
Thiết lập boottrap cho keystone
keystone-manage bootstrap --bootstrap-password Welcome123 \
--bootstrap-admin-url http://192.168.98.81:5000/v3/ \
--bootstrap-internal-url http://192.168.98.81:5000/v3/ \
--bootstrap-public-url http://192.168.98.81:5000/v3/ \
--bootstrap-region-id RegionOne
Keystone sẽ sử dụng httpd để chạy service, các request vào keystone sẽ thông qua httpd. Do vậy cần cấu hình httpd để keystone sử dụng.
Sửa cấu hình httpd
, thay dòng #ServerName www.example.com:80
bằng dòng ServerName controller01
sed -i 's/#ServerName www.example.com:80/ServerName controller01/g' /etc/httpd/conf/httpd.conf
Tạo liên kết cho file /usr/share/keystone/wsgi-keystone.conf
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
Khởi động và kích hoạt httpd
systemctl enable httpd.service
systemctl start httpd.service
Kiểm tra lại service của httpd
systemctl status httpd.service
Tạo file biến môi trường cho keystone
cat << EOF > /root/admin-openrc
export OS_USERNAME=admin
export OS_PASSWORD=Welcome123
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.98.81:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_VOLUME_API_VERSION=3
EOF
Thực thi biến môi trường
source /root/admin-openrc
Kiểm tra lại hoạt động của keystone
openstack token issue
Màn hình xuất hiện như bên dưới là OK.
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires | 2019-12-25T16:43:13+0000 |
| id | gAAAAABeA4ORd78Vb5Jer3Az0abr8zmtAGXW9a1NFCWfcBsfpN6s_luQY_xuqnq1rBZFKPL8OczctBFovNVWYUwCQ57tS5NK6u0hBTqX-BDrxfDFHL_X0WOqzajAN0IJLajlxnHvf-6Dw7dzr9PluoPIBvHHqsRM0qC_tBboD0tOEi7rGCwn--8 |
| project_id | aa07f75951d24fd398db6cf7d1a87fca |
| user_id | c62a745c236f4310a1588f578e87113f |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Khai báo user demo, project demo
openstack project create service --domain default --description "Service Project"
openstack project create demo --domain default --description "Demo Project"
openstack user create demo --domain default --password Welcome123
openstack role create user
openstack role add --project demo --user demo user
Kết thúc bước cài đặt keystone. Chuyển sang bước cài đặt tiếp theo.
Tạo database cho glance
mysql -uroot -pWelcome123 -e "CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
Khai báo user cho service glance
Thực thi biến môi trường để sử dụng được CLI của OpenStack
source /root/admin-openrc
Tạo user, project cho glance
openstack user create glance --domain default --password Welcome123
openstack role add --project service --user glance admin
openstack service create --name glance --description "OpenStack Image" image
openstack endpoint create --region RegionOne image public http://192.168.98.81:9292
openstack endpoint create --region RegionOne image internal http://192.168.98.81:9292
openstack endpoint create --region RegionOne image admin http://192.168.98.81:9292
Cài đặt glance
Cài đặt glance và các gói cần thiết.
dnf install -y openstack-glance
Sao lưu file cấu hình glance
cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.orig
Cấu hình glance
crudini --set /etc/glance/glance-api.conf DEFAULT connection bind_host 0.0.0.0
crudini --set /etc/glance/glance-api.conf database connection mysql+pymysql://glance:Welcome123@192.168.98.81/glance
crudini --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://192.168.98.81:5000
crudini --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name Default
crudini --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name Default
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_name service
crudini --set /etc/glance/glance-api.conf keystone_authtoken username glance
crudini --set /etc/glance/glance-api.conf keystone_authtoken password Welcome123
crudini --set /etc/glance/glance-api.conf paste_deploy flavor keystone
crudini --set /etc/glance/glance-api.conf glance_store stores file,http
crudini --set /etc/glance/glance-api.conf glance_store default_store file
crudini --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/
Đồng bộ database cho glance
su -s /bin/sh -c "glance-manage db_sync" glance
Khởi động và kích hoạt glance
systemctl enable openstack-glance-api.service
systemctl start openstack-glance-api.service
Tải image và import vào glance
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public
Kiểm tra lại xem image đã được up hay chưa
Kiểm tra danh sách các imange đang có
openstack image list
Kết quả image vừa up lên được liệt kê ra
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| ac4f1f7a-7995-45eb-9727-733f9f059ad5 | cirros | active |
+--------------------------------------+--------+--------+
Thực hiện tạo database, user, mật khẩu cho placement.
mysql -uroot -pWelcome123 -e "CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
Khai báo endpoint, service cho placement
Tạo service, gán quyền, enpoint cho placement.
openstack user create placement --domain default --password Welcome123
openstack role add --project service --user placement admin
openstack service create --name placement --description "Placement API" placement
openstack endpoint create --region RegionOne placement public http://192.168.98.81:8778
openstack endpoint create --region RegionOne placement internal http://192.168.98.81:8778
openstack endpoint create --region RegionOne placement admin http://192.168.98.81:8778
Cài đặt placement
dnf install -y openstack-placement-api
Sao lưu file cấu hình của placement
cp /etc/placement/placement.conf /etc/placement/placement.conf.orig
Cấu hình placement
crudini --set /etc/placement/placement.conf placement_database connection mysql+pymysql://placement:Welcome123@192.168.98.81/placement
crudini --set /etc/placement/placement.conf api auth_strategy keystone
crudini --set /etc/placement/placement.conf keystone_authtoken auth_url http://192.168.98.81:5000/v3
crudini --set /etc/placement/placement.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/placement/placement.conf keystone_authtoken auth_type password
crudini --set /etc/placement/placement.conf keystone_authtoken project_domain_name Default
crudini --set /etc/placement/placement.conf keystone_authtoken user_domain_name Default
crudini --set /etc/placement/placement.conf keystone_authtoken project_name service
crudini --set /etc/placement/placement.conf keystone_authtoken username placement
crudini --set /etc/placement/placement.conf keystone_authtoken password Welcome123
Khai báo phân quyền cho placement
cat <<EOF>> /etc/httpd/conf.d/00-nova-placement-api.conf
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
EOF
Tạo các bảng, đồng bộ dữ liệu cho placement
su -s /bin/sh -c "placement-manage db sync" placement
Khởi động lại httpd
systemctl restart httpd
Tạo các database, user, mật khẩu cho services nova
mysql -uroot -pWelcome123 -e "CREATE DATABASE nova_api;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'controller01' IDENTIFIED BY 'Welcome123';
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller01' IDENTIFIED BY 'Welcome123';
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
Tạo endpoint cho nova
openstack user create nova --domain default --password Welcome123
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute
openstack endpoint create --region RegionOne compute public http://192.168.98.81:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://192.168.98.81:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://192.168.98.81:8774/v2.1
Cài đặt các gói cho nova
dnf install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
Sao lưu file cấu hình của nova
cp /etc/nova/nova.conf /etc/nova/nova.conf.orig
Cấu hình cho nova
crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.168.98.81
crudini --set /etc/nova/nova.conf DEFAULT use_neutron true
crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
crudini --set /etc/nova/nova.conf DEFAULT linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:Welcome123@192.168.98.81/nova_api
crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:Welcome123@192.168.98.81/nova
crudini --set /etc/nova/nova.conf api auth_strategy keystone
#crudini --set /etc/nova/nova.conf api connection mysql+pymysql://nova:Welcome123@192.168.98.81/nova
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000/
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://192.168.98.81:5000/
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password Welcome123
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc server_listen \$my_ip
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address \$my_ip
crudini --set /etc/nova/nova.conf glance api_servers http://192.168.98.81:9292
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url http://192.168.98.81:5000/v3
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password Welcome123
crudini --set /etc/nova/nova.conf scheduler discover_hosts_in_cells_interval 300
crudini --set /etc/nova/nova.conf neutron url http://192.168.98.81:9696
crudini --set /etc/nova/nova.conf neutron auth_url http://192.168.98.81:5000
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name Default
crudini --set /etc/nova/nova.conf neutron user_domain_name Default
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password Welcome123
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy True
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret Welcome123
Thực hiện các lệnh để sinh các bảng cho nova
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova
Xác nhận lại xem CELL0 đã được đăng ký hay chưa
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
Màn hình sẽ xuất hiện kết quả
+-------+--------------------------------------+---------------+-----------------------------------------------------+----------+
| Name | UUID | Transport URL | Database Connection | Disabled |
+-------+--------------------------------------+---------------+-----------------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@192.168.98.81/nova_cell0 | False |
| cell1 | d16d0f3c-a3ba-493a-8885-ebae73bd3bf5 | rabbit: | mysql+pymysql://nova:****@192.168.98.81/nova | False |
+-------+--------------------------------------+---------------+-----------------------------------------------------+----------+
Kích hoạt các dịch vụ của nova
systemctl enable \
openstack-nova-api.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
Khởi động các dịch vụ của nova
systemctl start \
openstack-nova-api.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
Kiểm tra lại xem dịch vụ của nova đã hoạt động hay chưa.
openstack compute service list
Kết quả như sau là OK
[root@controller01 ~]# openstack compute service list
+----+----------------+--------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+----------------+--------------+----------+---------+-------+----------------------------+
| 4 | nova-conductor | controller01 | internal | enabled | up | 2020-11-18T20:28:30.000000 |
| 6 | nova-scheduler | controller01 | internal | enabled | up | 2020-11-18T20:28:32.000000 |
+----+----------------+--------------+----------+---------+-------+----------------------------+
Thực hiện các bước này trên máy chủ compute01
Cài đặt các gói của nova
dnf install -y python-openstackclient openstack-selinux
dnf install -y openstack-nova-compute
Sao lưu file cấu hình của nova
cp /etc/nova/nova.conf /etc/nova/nova.conf.orig
Cấu hình nova
crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.168.98.101
crudini --set /etc/nova/nova.conf DEFAULT use_neutron true
crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
crudini --set /etc/nova/nova.conf DEFAULT linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
crudini --set /etc/nova/nova.conf DEFAULT vif_plugging_is_fatal True
crudini --set /etc/nova/nova.conf DEFAULT vif_plugging_timeout 300
crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:Welcome123@192.168.98.81/nova_api
crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:Welcome123@192.168.98.81/nova
crudini --set /etc/nova/nova.conf api auth_strategy keystone
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000/
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://192.168.98.81:5000/
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password Welcome123
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc server_listen 0.0.0.0
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address \$my_ip
crudini --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.98.81:6080/vnc_auto.html
crudini --set /etc/nova/nova.conf glance api_servers http://192.168.98.81:9292
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url http://192.168.98.81:5000/v3
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password Welcome123
crudini --set /etc/nova/nova.conf libvirt virt_type $(count=$(egrep -c '(vmx|svm)' /proc/cpuinfo); if [ $count -eq 0 ];then echo "qemu"; else echo "kvm"; fi)
Khởi động lại nova
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
Truy cập vào máy chủ controller01
để cập nhật việc khai báo compute01
tham gia vào hệ thống.
Login vào máy chủ controller và thực hiện lệnh dưới để kiểm tra xem compute01 đã up hay chưa.
source /root/admin-openrc
openstack compute service list --service nova-compute
Kết quả ta sẽ thấy như bên dưới là ok.
[root@controller01 ~]# openstack compute service list --service nova-compute
+----+--------------+-----------+------+---------+-------+------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+--------------+-----------+------+---------+-------+------------+
| 8 | nova-compute | compute01 | nova | enabled | up | None |
+----+--------------+-----------+------+---------+-------+------------+
Thực hiện add nocde compute vào CELL
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Kết quả màn hình sẽ hiển thị như bên dưới.
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': d16d0f3c-a3ba-493a-8885-ebae73bd3bf5
Checking host mapping for compute host 'compute01': d6c24463-a6f1-4457-848b-e1f83cc2fde8
Creating host mapping for compute host 'compute01': d6c24463-a6f1-4457-848b-e1f83cc2fde8
Found 1 unmapped computes in cell: d16d0f3c-a3ba-493a-8885-ebae73bd3bf5
Kiểm tra dịch vụ nova sau khi hoàn tất bằng lệnh openstack compute service list
, kết quả như sau là OK.
[root@controller01 ~]# openstack compute service list
+----+----------------+--------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+----------------+--------------+----------+---------+-------+----------------------------+
| 4 | nova-conductor | controller01 | internal | enabled | up | 2020-11-18T20:42:30.000000 |
| 6 | nova-scheduler | controller01 | internal | enabled | up | 2020-11-18T20:42:33.000000 |
| 8 | nova-compute | compute01 | nova | enabled | up | 2020-11-18T20:42:33.000000 |
+----+----------------+--------------+----------+---------+-------+----------------------------+
Tạo database cho neutron
mysql -uroot -pWelcome123 -e "CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
Tạo project, user, endpoint cho neutron
openstack user create neutron --domain default --password Welcome123
openstack role add --project service --user neutron admin
openstack service create --name neutron --description "OpenStack Compute" network
openstack endpoint create --region RegionOne network public http://192.168.98.81:9696
openstack endpoint create --region RegionOne network internal http://192.168.98.81:9696
openstack endpoint create --region RegionOne network admin http://192.168.98.81:9696
Cài đặt neutron cho controller
dnf install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch ebtables
Sao lưu các file cấu hình của neutron
cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.orig
cp /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini.orig
cp etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini.orig
cp /etc/neutron/plugins/ml2/openvswitch_agent.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini.orig
cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.orig
cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.orig
cp /etc/neutron/l3_agent.ini /etc/neutron/l3_agent.ini.orig
Cấu hình file /etc/neutron/neutron.conf
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes True
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes True
crudini --set /etc/neutron/neutron.conf DEFAULT dhcp_agent_notification True
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips True
crudini --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:Welcome123@192.168.98.81/neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://192.168.98.81:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password Welcome123
crudini --set /etc/neutron/neutron.conf nova auth_url http://192.168.98.81:5000
crudini --set /etc/neutron/neutron.conf nova auth_type password
crudini --set /etc/neutron/neutron.conf nova project_domain_name Default
crudini --set /etc/neutron/neutron.conf nova user_domain_name Default
crudini --set /etc/neutron/neutron.conf nova region_name RegionOne
crudini --set /etc/neutron/neutron.conf nova project_name service
crudini --set /etc/neutron/neutron.conf nova username nova
crudini --set /etc/neutron/neutron.conf nova password Welcome123
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
Khai báo sysctl
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
modprobe br_netfilter
/sbin/sysctl -p
Khai báo cho file /etc/neutron/metadata_agent.ini
crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host 192.168.98.81
crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret Welcome123
crudini --set /etc/neutron/metadata_agent.ini DEFAULT memcache_servers 192.168.98.81:11211
Sửa file cấu hình của /etc/neutron/plugins/ml2/ml2_conf.ini
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,gre,vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers openvswitch
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks physnet1
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
Sửa file /etc/nova/nova.conf
crudini --set /etc/nova/nova.conf DEFAULT use_neutron True
crudini --set /etc/nova/nova.conf DEFAULT linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
crudini --set /etc/nova/nova.conf neutron url http://192.168.98.81:9696
crudini --set /etc/nova/nova.conf neutron auth_url http://192.168.98.81:5000
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name Default
crudini --set /etc/nova/nova.conf neutron user_domain_name Default
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password Welcome123
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy True
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret Welcome123
Tạo liên kết
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
Thiết lập database
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
Khởi động và kích hoạt dịch vụ neutron
systemctl enable --now neutron-server neutron-metadata-agent
systemctl restart openstack-nova-api
Chuyển sang node network và thực hiện các bước sau
- Cài đặt các gói phần mềm cho node Network
dnf -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch libibverbs
Sao lưu file cấu hình của neutron trên node network
cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.orig
cp /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini.orig
cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini.orig
cp /etc/neutron/plugins/ml2/openvswitch_agent.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini.orig
cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.orig
cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.orig
cp /etc/neutron/l3_agent.ini /etc/neutron/l3_agent.ini.orig
Sửa file cấu hình /etc/neutron/neutron.conf
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips True
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://192.168.98.81:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password Welcome123
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
Sửa file cấu hình /etc/neutron/l3_agent.ini
crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver openvswitch
Sửa file cấu hình /etc/neutron/dhcp_agent.ini
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver openvswitch
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata true
Khai báo cho file /etc/neutron/metadata_agent.ini
crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host 192.168.98.81
crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret Welcome123
crudini --set /etc/neutron/metadata_agent.ini DEFAULT memcache_servers 192.168.98.81:11211
Sửa file cấu hình của /etc/neutron/plugins/ml2/ml2_conf.ini
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,gre,vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers openvswitch
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks physnet1
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
Sửa file cấu hình của /etc/neutron/plugins/ml2/openvswitch_agent.ini
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup firewall_driver openvswitch
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup enable_ipset true
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings physnet1:br-eth1
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip 192.168.98.91
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types vxlan
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent prevent_arp_spoofing True
Tạo liên kết file cho /etc/neutron/plugins/ml2/ml2_conf.ini
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
Kích hoạch openvswitch
systemctl enable --now openvswitch
Tạo bridge
ovs-vsctl add-br br-int
ovs-vsctl add-br br-eth1
ovs-vsctl add-port br-eth1 eth1
Khởi động lại các service của neutron trên node network.
for service in dhcp-agent l3-agent metadata-agent openvswitch-agent; do
systemctl enable --now neutron-$service
done
Cài đặt neutron
dnf -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch
Sao lưu file cấu hình của neutron trên node compute
cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.org
Sửa file cấu hình của neutron /etc/neutron/neutron.conf
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips True
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://192.168.98.81:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password Welcome123
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
Khai báo sysctl
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
modprobe br_netfilter
/sbin/sysctl -p
Sửa file cấu hình của /etc/neutron/plugins/ml2/ml2_conf.ini
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,gre,vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers openvswitch
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks physnet1
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
Sửa file cấu hình của /etc/neutron/plugins/ml2/openvswitch_agent.ini
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup firewall_driver openvswitch
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup enable_ipset true
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings physnet1:br-eth1
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip 192.168.98.101
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types vxlan
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent prevent_arp_spoofing True
Khai báo bổ sung cho nova
crudini --set /etc/nova/nova.conf neutron url http://192.168.98.81:9696
crudini --set /etc/nova/nova.conf neutron auth_url http://192.168.98.81:5000
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name Default
crudini --set /etc/nova/nova.conf neutron user_domain_name Default
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password Welcome123
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy True
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret Welcome123
crudini --set /etc/nova/nova.conf DEFAULT use_neutron True
crudini --set /etc/nova/nova.conf DEFAULT linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
crudini --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
crudini --set /etc/nova/nova.conf DEFAULT vif_plugging_is_fatal True
crudini --set /etc/nova/nova.conf DEFAULT vif_plugging_timeout 300
Khởi động Neutron và restart nova trên compute node
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
systemctl enable --now openvswitch
ovs-vsctl add-br br-int
ovs-vsctl add-br br-eth1
ovs-vsctl add-port br-eth1 eth1
systemctl restart openstack-nova-compute
systemctl enable --now neutron-openvswitch-agent
- Đứng trên controller node và thực hiện lệnh
openstack network agent list
[root@controller01 nova]# openstack network agent list
+--------------------------------------+--------------------+--------------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+--------------+-------------------+-------+-------+---------------------------+
| 4bb0cb83-d81a-40b2-96d2-39afed2fa3d8 | Open vSwitch agent | compute01 | None | :-) | UP | neutron-openvswitch-agent |
| 5ea00245-61b6-4905-8771-595c1811da10 | Metadata agent | network01 | None | :-) | UP | neutron-metadata-agent |
| 675fa996-474d-4fe2-9d07-72e28348ce6f | DHCP agent | network01 | nova | :-) | UP | neutron-dhcp-agent |
| 6be52fd9-e0c7-4210-8012-3fd0e1ea14d4 | Metadata agent | controller01 | None | :-) | UP | neutron-metadata-agent |
| 862b6066-8b7d-409d-9157-5f771f05ed59 | L3 agent | network01 | nova | :-) | UP | neutron-l3-agent |
| aa09d739-7123-473d-9cfa-b094c8b85bbd | Open vSwitch agent | network01 | None | :-) | UP | neutron-openvswitch-agent |
+--------------------------------------+--------------------+--------------+-------------------+-------+-------+---------------------------+
Trong mô hình này thay vì tách node storage dành cho cinder-volume
, chúng ta sẽ cài đặt tất cả các thành phần của cinder gồm: cinder-api, cinder-scheduler, cinder-volume
trên tất cả node controller
Trước tiên cần thiết lập LVM đối với máy controller, trong lab này sẽ cấu hình ổ thứ hai (/dev/vdb) làm LVM để sau này cấp phát các volume
- Thực hiện các bước cài đặt cinder.
dnf -y install lvm2 targetcli lvm2 device-mapper-persistent-data
systemctl enable --now lvm2-lvmetad.service targetcli
- Tạo LVM cho ổ
/dev/vdb
pvcreate /dev/vdb
vgcreate cinder-volumes /dev/vdb
- Cấu hình cho LVM
cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.orig
#sed -r -i 's#(filter = )(\[ "a/\.\*/" \])#\1["a\/sdb\/", "r/\.\*\/"]#g' /etc/lvm/lvm.conf
# fix filter cua lvm tren CentOS 8.2, chen vao dong 146 cua file /etc/lvm/lvm.conf
sed -i '146i\ filter = [ "a/vda/", "a/vdb/", "r/.*/"]' /etc/lvm/lvm.conf
- Tạo database cho cinder
mysql -uroot -pWelcome123 -e "CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
- Tạo endpoint cho cinder
/root/admin-openrc
openstack user create cinder --domain default --password Welcome123
openstack role add --project service --user cinder admin
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
openstack endpoint create --region RegionOne volumev2 public http://192.168.98.81:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev2 internal http://192.168.98.81:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev2 admin http://192.168.98.81:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev3 public http://192.168.98.81:8776/v3/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev3 internal http://192.168.98.81:8776/v3/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev3 admin http://192.168.98.81:8776/v3/%\(tenant_id\)s
- Cài đặt cinder
dnf -y install openstack-cinder
- Sao lưu file cấu hình của cinder
cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.orig
- Cấu hình cho cinder
crudini --set /etc/cinder/cinder.conf DEFAULT rpc_backend rabbit
crudini --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone
crudini --set /etc/cinder/cinder.conf DEFAULT my_ip 192.168.98.81
crudini --set /etc/cinder/cinder.conf DEFAULT control_exchange cinder
crudini --set /etc/cinder/cinder.conf DEFAULT enable_v3_api True
crudini --set /etc/cinder/cinder.conf DEFAULT osapi_volume_listen \$my_ip
crudini --set /etc/cinder/cinder.conf DEFAULT control_exchange cinder
crudini --set /etc/cinder/cinder.conf DEFAULT glance_api_servers http://192.168.98.81:9292
crudini --set /etc/cinder/cinder.conf DEFAULT enabled_backends lvm
crudini --set /etc/cinder/cinder.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/cinder/cinder.conf DEFAULT state_path /var/lib/cinder
crudini --set /etc/cinder/cinder.conf database connection mysql+pymysql://cinder:Welcome123@192.168.98.81/cinder
crudini --set /etc/cinder/cinder.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000
crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_url http://192.168.98.81:5000
crudini --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_type password
crudini --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name Default
crudini --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name Default
crudini --set /etc/cinder/cinder.conf keystone_authtoken project_name service
crudini --set /etc/cinder/cinder.conf keystone_authtoken username cinder
crudini --set /etc/cinder/cinder.conf keystone_authtoken password Welcome123
crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_host 192.168.98.81
crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_port 5672
crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_userid openstack
crudini --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_password Welcome123
crudini --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
crudini --set /etc/cinder/cinder.conf oslo_messaging_notifications driver messagingv2
crudini --set /etc/cinder/cinder.conf lvm volume_driver cinder.volume.drivers.lvm.LVMVolumeDriver
crudini --set /etc/cinder/cinder.conf lvm volume_group cinder-volumes
crudini --set /etc/cinder/cinder.conf lvm target_protocol iscsi
crudini --set /etc/cinder/cinder.conf lvm target_helper lioadm
crudini --set /etc/cinder/cinder.conf lvm volumes_dir \$state_path/volumes
crudini --set /etc/cinder/cinder.conf lvm target_ip_address 192.168.98.81
Chuyển sang node compute và thực hiện các việc tiếp theo để tích hợp nova và cinder, hãy SSH vào node compute và thực hiện theo các hướng dẫn dưới.
dnf -y install targetcli
systemctl enable --now target.service
crudini --set /etc/nova/nova.conf cinder os_region_name RegionOne
- Restart nova-compute sau khi khai báo bổ sung xong nova
systemctl restart openstack-nova-compute
Chuyển sang node controller và thực hiện các việc tiếp theo, hãy SSH vào node controller và thực hiện các lệnh dưới.
- Bổ sung cấu hình cho nova trên node controller để sử dụng cinder.
crudini --set /etc/nova/nova.conf cinder os_region_name RegionOne
- Restart nova-api sau khi khai báo bổ sung xong nova
systemctl restart openstack-nova-api.service
- Đồng bộ DB cho cinder
su -s /bin/sh -c "cinder-manage db sync" cinder
- Khởi động và kích hoạt các dịch vụ của cinder
systemctl enable --now openstack-cinder-api.service openstack-cinder-scheduler.service openstack-cinder-volume.service target.service
- Kiểm tra trạng thái của các dịch vụ cinder sau khi cài đặt xong bằng lệnh
openstack volume service list
, kết quả trả về như bên dưới là ok.
[root@controller01 ~]# openstack volume service list
+------------------+------------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated At |
+------------------+------------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller01 | nova | enabled | up | 2020-11-22T08:29:58.000000 |
| cinder-volume | controller01@lvm | nova | enabled | up | 2020-11-22T08:30:00.000000 |
+------------------+------------------+------+---------+-------+----------------------------+
Tới đây có thể dừng việc cài đặt để chuyển sang bước tạo VM, sau đó thao tác tiếp với các lệnh đối với cinder để kiểm chứng hoạt động của cinder ở các bước tiếp theo.
- Cài đặt package
dnf --enablerepo=centos-openstack-ussuri,PowerTools,epel -y install openstack-dashboard
- Backup file cấu hình
/etc/openstack-dashboard/local_settings
- Chỉnh sửa file cấu hình
vi /etc/openstack-dashboard/local_settings
# line 39: set Hosts you allow to access
# to specify wildcard ['*'], allow all
ALLOWED_HOSTS = ['*', ]
# line 94-99: uncomment and specify Memcache server Host
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '192.168.98.81:11211',
},
}
# line 105: add
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# line 118: set Openstack Host
# line 119: comment out and add a line to specify URL of Keystone Host
OPENSTACK_HOST = "192.168.98.81"
#OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_URL = "http://192.168.98.81:5000/v3"
# line 123: set your timezone
TIME_ZONE = "Asia/Ho_Chi_Minh"
# add to the end
WEBROOT = '/dashboard/'
LOGIN_URL = '/dashboard/auth/login/'
LOGOUT_URL = '/dashboard/auth/logout/'
LOGIN_REDIRECT_URL = '/dashboard/'
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
OPENSTACK_API_VERSIONS = {
"identity": 3,
"volume": 3,
"compute": 2,
}
Thêm vào file /etc/httpd/conf.d/openstack-dashboard.conf
WSGIApplicationGroup %{GLOBAL}
Restart lại httpd
systemctl restart httpd
Truy cập dashboard ở địa chỉ http://192.168.98.81/dashboard/
- Khai báo provider network
openstack network create \
--share \
--provider-physical-network physnet1 \
--provider-network-type flat --external ext_net
- Khai báo subnet cho provider network
openstack subnet create subnet1-ext --network ext_net \
--project 8787620b73564feb972158269edc2f4b --subnet-range 192.168.64.0/24 \
--allocation-pool start=192.168.64.200,end=192.168.64.220 \
--gateway 192.168.64.1 --dns-nameserver 8.8.8.8
- Tạo private network
openstack network create int_net --provider-network-type vxlan
- Tạo subnet cho private network
openstack subnet create subnet1 --network int_net \
--subnet-range 192.168.23.0/24 --gateway 192.168.23.1 \
--dns-nameserver 8.8.8.8
- Tạo router
openstack router create router01
- Gắn private network với router vừa tạo ở trên
openstack router add subnet router01 subnet1
- Gắn provider network với router vừa tạo ở trên
openstack router set router01 --external-gateway ext_net
Tạo securitygroup
openstack security group create secgroup01
openstack security group rule create --protocol icmp --ingress secgroup01
openstack security group rule create --protocol tcp --dst-port 22:22 secgroup01
- Khai báo flavor
openstack flavor create --id 0 --vcpus 1 --ram 512 --disk 5 m1.tiny
netID=$(openstack network list | grep ext_net | awk '{ print $2 }')
openstack server create --flavor m1.tiny --image cirros --security-group secgroup01 --nic net-id=$netID vm01
- Kiểm tra lại danh sách vm
openstack server list
[root@controller01 nova]# openstack server list
+--------------------------------------+------+--------+---------------------------+--------+---------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+------+--------+---------------------------+--------+---------+
| 549d136e-d549-47de-a5df-bc6d56396862 | vm01 | ACTIVE | ext_net=192.168.64.21 | cirros | m1.tiny |
+--------------------------------------+------+--------+---------------------------+--------+---------+
Thực hiện ping và ssh với tài khoản cirros
và mật khẩu gocubsgo
.
- Tạo VM gắn với private network (self-service)
netID=$(openstack network list | grep int_net | awk '{ print $2 }')
openstack server create --flavor m1.tiny --image cirros --security-group secgroup01 --nic net-id=$netID vm02
- Kiểm tra lại xem server vm02 đã tạo được hay chưa, nếu tạo được kết quả tương tự như bên dưới
[root@controller01 ~]# openstack server list
+--------------------------------------+------+--------+------------------------+--------+---------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+------+--------+------------------------+--------+---------+
| d3adc40e-d083-4be8-88e9-292fa74dfcbd | vm02 | ACTIVE | int_net=192.168.23.145 | cirros | m1.tiny |
| 80ec0a88-a624-4ce4-a16f-d9646d30fcaa | vm01 | ACTIVE | ext_net=192.168.64.210 | cirros | m1.tiny |
+--------------------------------------+------+--------+------------------------+--------+---------+
Lưu ý: Lúc này vm02
sẽ nhận IP của dải mạng private được khai báo trước đó là 192.168.23.0/24
, để có thể truy cập vào VM này từ bên ngoài, cần phải thực hiện thao tác floating IP.
- Floating IP.
openstack floating ip create ext_net
Kết quả:
[root@controller01 ~]# openstack floating ip create ext_net
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| created_at | 2020-11-20T02:16:42Z |
| description | |
| dns_domain | None |
| dns_name | None |
| fixed_ip_address | None |
| floating_ip_address | 192.168.64.216 |
| floating_network_id | 82e1e759-394f-46ca-b13f-bbc73505cae9 |
| id | b89b30d0-37c5-43a1-94f8-d4894e01f70e |
| name | 192.168.64.216 |
| port_details | None |
| port_id | None |
| project_id | 56f915778f414f5b81733353121d7027 |
| qos_policy_id | None |
| revision_number | 0 |
| router_id | None |
| status | DOWN |
| subnet_id | None |
| tags | [] |
| updated_at | 2020-11-20T02:16:42Z |
+---------------------+--------------------------------------+
Sau kết quả lệnh trên thì ghi lại IP để sử dụng cho bước bên dưới.
- Găn IP floating với VM02
openstack server add floating ip vm02 192.168.64.216
- Kiểm tra lại kết quả sau khi floating IP bằng lệnh
openstack server list
, ta thấy kết quả như bên dưới là thành công.
[root@controller01 ~]# openstack server list
+--------------------------------------+------+--------+----------------------------------------+--------+---------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+------+--------+----------------------------------------+--------+---------+
| d3adc40e-d083-4be8-88e9-292fa74dfcbd | vm02 | ACTIVE | int_net=192.168.23.145, 192.168.64.216 | cirros | m1.tiny |
| 80ec0a88-a624-4ce4-a16f-d9646d30fcaa | vm01 | ACTIVE | ext_net=192.168.64.210 | cirros | m1.tiny |
+--------------------------------------+------+--------+----------------------------------------+--------+---------+
Ping và ssh thử với tài khoản cirros
, mật khẩu gocubsgo
tới IP floating ở trên (192.168.64.216) để kiểm tra.
C:\Users\congto>ping 192.168.64.216
Pinging 192.168.64.216 with 32 bytes of data:
Reply from 192.168.64.216: bytes=32 time=17ms TTL=62
Reply from 192.168.64.216: bytes=32 time=7ms TTL=62
Reply from 192.168.64.216: bytes=32 time=8ms TTL=62
Reply from 192.168.64.216: bytes=32 time=7ms TTL=62
Ping statistics for 192.168.64.216:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 7ms, Maximum = 17ms, Average = 9ms
- Kết quả SSH: http://prntscr.com/vmpass
Đây là kỹ thuật tạo vm và sử dụng keypair để login vào vm, ta thực hiện các bước sau
- Down image ubuntu 20.04
wget http://cloud-images.ubuntu.com/releases/20.04/release/ubuntu-20.04-server-cloudimg-amd64.img -P /var/kvm/images
- Up image lên hệ thống
openstack image create "Ubuntu2004-Official" --file /var/kvm/images/ubuntu-20.04-server-cloudimg-amd64.img --disk-format qcow2 --container-format bare --public
- Tạo flavor để boot VM là ubuntu
openstack flavor create --id 1 --vcpus 2 --ram 2048 --disk 10 m1.small
- Lấy network ID để gắn máy ảo vào
netID=$(openstack network list | grep ext_net | awk '{ print $2 }')
- Tạo keypair
ssh-keygen -q -N ""
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
- Tạo vm
openstack server create --flavor m1.small --image Ubuntu2004-Official --security-group secgroup01 --key-name mykey --nic net-id=$netID vm0
-
Kiểm tra lại danh sách VM bằng lệnh
openstack server list
-
Đứng từ controller, thực hiện lệnh ssh với tài khoản là ubuntu vào VM vừa tạo (VM có IP 192.168.64.211)
ssh ubuntu@192.168.64.211
Ta không cần dùng mật khẩu dạng clear text vì image này và cách tạo máy ảo này sẽ sử dụng ssh keypair để thực hiện. Kết quả sẽ như bên dưới.
ubuntu@vm03:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:3a:a8:98 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.211/24 brd 192.168.64.255 scope global dynamic ens3
valid_lft 74891sec preferred_lft 74891sec
inet6 fe80::f816:3eff:fe3a:a898/64 scope link
valid_lft forever preferred_lft forever
ubuntu@vm03:~$
- Tạo volume chính là tạo các ổ cứng để gắn với máy ảo hoặc boot máy ảo từ volume đó.
Trong bước này sẽ thực hiện tạo volume và gắn volume với máy ảo đã có, việc này tương tự như gắn thêm các disk cho các VM.
- Tạo volume với dung lượng 10GB.
openstack volume create --size 10 disk01
- Kiểm tra lại xem volume đã được tạo hay chưa bằng lệnh
openstack volume list
, ta có kết quả như bên dưới.
[root@controller01 ~]# openstack volume list
+--------------------------------------+--------+-----------+------+-------------+
| ID | Name | Status | Size | Attached to |
+--------------------------------------+--------+-----------+------+-------------+
| 7c064c31-0d1f-486d-aa56-3f3ebea964fc | disk01 | available | 10 | |
+--------------------------------------+--------+-----------+------+-------------+
- Gắn volume vào máy ảo đã tồn tại (bước tạo máy ảo phải được thực hiện trước đó)
openstack server add volume vm01 disk01
Kiểm tra xem máy ảo đã gắn được volume hay chưa bằng các cách sau
- Cách kiểm trang bằng lệnh
openstack volume list
, ta sẽ nhìn thấy ở cộtAttached to
[root@controller01 ~]# openstack volume list
+--------------------------------------+--------+--------+------+-------------------------------+
| ID | Name | Status | Size | Attached to |
+--------------------------------------+--------+--------+------+-------------------------------+
| 7c064c31-0d1f-486d-aa56-3f3ebea964fc | disk01 | in-use | 10 | Attached to vm01 on /dev/vdb |
+--------------------------------------+--------+--------+------+-------------------------------+
- Hoặc SSH vào VM01 (VM01 được tạo ở bước trước, có IP là
192.168.64.210
) và kiểm tra bằng lệnhlsblk
, nếu thấy xuất hiện có disk 10GB là OK, để sử dụng disk này cần thực hiện các bước format để mount vào các thư mục và sử dụng.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 5G 0 disk
|-vda1 253:1 0 5G 0 part /
`-vda15 253:15 0 8M 0 part
vdb 253:16 0 10G 0 disk
Đây là tính năng dùng volume để chứa các image của glance và thực hiện boot máy ảo (tưởng tượng giống như các ổ cứng di động hoặc USB có hệ điều hành nhé)
Đang thực hiện
Trên là các bước ở mức độ cơ bản để cài đặt các project core của OpenStack bao gồm: Keystone, Glance, Nova, Neutron, Cinder, Horrizon
. Ở mức độ này, ta đã có một hệ thống cơ bản để cung cấp VM cho hạ tầng.
Trong các ghi chép tiếp theo, chúng ta sẽ cài đặt các project nâng cao của OpenStack để có thể xây dựng hạ tầng hoàn chỉnh hơn, cung cấp được nhiều tài nguyên, dịch vụ hơn cho hạ tầng. Các project sẽ được hướng dẫn tiếp theo bao gồm:
- Heat
- Babican
- Octavia
- Manila
- Magnum
Sau đây hãy thực hiện tiếp các bước của phần cơ bản để có thể cài đặt thêm các project được liệt kê ở trên. Lưu ý: mô hình sẽ được bổ sung các node, các network để có thể đủ điều kiện cài đặt các project.
Thực hiện các bước cài đặt heat trên controller. Lưu ý: Cần đảm bảo các project ở mục 03 và 04 đã hoàn tất, kể cả các network, subnet, router, các image, các security group đã được tạo.
- Tạo database cho heat
mysql -uroot -pWelcome123 -e "CREATE DATABASE heat;
GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
- Tạo user, project, endpoint và phân quyền cho các user, project liên quan tới heat.
source /root/admin-openrc
openstack user create --domain default --project service --password Welcome123 heat
openstack role add --project service --user heat admin
openstack domain create --description "Stack projects and users" heat
openstack role create heat_stack_owner
openstack role create heat_stack_user
openstack role add --project admin --user admin heat_stack_owner
openstack user create --domain heat --password Welcome123 heat_domain_admin
openstack role add --domain heat --user-domain heat --user heat_domain_admin admin
openstack role add --project demo --user demo heat_stack_owner
openstack service create --name heat --description "Orchestration" orchestration
openstack service create --name heat-cfn --description "Orchestration" cloudformation
openstack endpoint create --region RegionOne orchestration public http://192.168.98.81:8004/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne orchestration internal http://192.168.98.81:8004/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne orchestration admin http://192.168.98.81:8004/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne cloudformation public http://192.168.98.81:8000/v1
openstack endpoint create --region RegionOne cloudformation internal http://192.168.98.81:8000/v1
openstack endpoint create --region RegionOne cloudformation admin http://192.168.98.81:8000/v1
Cài đặt và cấu hình heat
- Cài đặt các gói cho heat
dnf -y install openstack-heat-api openstack-heat-api-cfn openstack-heat-engine python3-heatclient openstack-heat-common
- Sao lưu file cấu hình của heat
cp /etc/heat/heat.conf /etc/heat/heat.conf.orig
- Sửa các cấu hình của heat
crudini --set /etc/heat/heat.conf DEFAULT deferred_auth_method trusts
crudini --set /etc/heat/heat.conf DEFAULT trusts_delegated_roles heat_stack_owner
crudini --set /etc/heat/heat.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/heat/heat.conf DEFAULT heat_metadata_server_url http://192.168.98.81:8000
crudini --set /etc/heat/heat.conf DEFAULT heat_waitcondition_server_url http://192.168.98.81:8000/v1/waitcondition
crudini --set /etc/heat/heat.conf DEFAULT heat_watch_server_url http://192.168.98.81:8003
crudini --set /etc/heat/heat.conf DEFAULT heat_stack_user_role heat_stack_user
crudini --set /etc/heat/heat.conf DEFAULT stack_domain_admin heat_domain_admin
crudini --set /etc/heat/heat.conf DEFAULT stack_domain_admin_password Welcome123
crudini --set /etc/heat/heat.conf DEFAULT stack_user_domain_name heat
crudini --set /etc/heat/heat.conf database connection mysql+pymysql://heat:Welcome123@192.168.98.81/heat
crudini --set /etc/heat/heat.conf clients_keystone auth_uri http://192.168.98.81:5000
crudini --set /etc/heat/heat.conf ec2authtoken auth_uri http://192.168.98.81:5000
crudini --set /etc/heat/heat.conf heat_api bind_host 0.0.0.0
crudini --set /etc/heat/heat.conf heat_api bind_port 8004
crudini --set /etc/heat/heat.conf heat_api_cfn bind_host 0.0.0.0
crudini --set /etc/heat/heat.conf heat_api_cfn bind_port 8000
crudini --set /etc/heat/heat.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000
crudini --set /etc/heat/heat.conf keystone_authtoken auth_url http://192.168.98.81:5000
crudini --set /etc/heat/heat.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/heat/heat.conf keystone_authtoken auth_type password
crudini --set /etc/heat/heat.conf keystone_authtoken project_domain_name default
crudini --set /etc/heat/heat.conf keystone_authtoken user_domain_name default
crudini --set /etc/heat/heat.conf keystone_authtoken project_name service
crudini --set /etc/heat/heat.conf keystone_authtoken username heat
crudini --set /etc/heat/heat.conf keystone_authtoken password Welcome123
crudini --set /etc/heat/heat.conf trustee auth_plugin password
crudini --set /etc/heat/heat.conf trustee auth_url http://192.168.98.81:5000
crudini --set /etc/heat/heat.conf trustee username heat
crudini --set /etc/heat/heat.conf trustee password Welcome123
crudini --set /etc/heat/heat.conf trustee user_domain_name default
- Đồng bộ database cho heat
su -s /bin/sh -c "heat-manage db_sync" heat
- Kích hoạt heat
systemctl enable --now openstack-heat-api openstack-heat-api-cfn openstack-heat-engine
Kiểm tra xem heat đã hoạt động hay chưa bằng lệnh openstack orchestration service list
, ta sẽ có kết quả như bên dưới nếu OK.
[root@controller01 ~]# openstack orchestration service list
+--------------+-------------+--------------------------------------+--------------+--------+----------------------------+--------+
| Hostname | Binary | Engine ID | Host | Topic | Updated At | Status |
+--------------+-------------+--------------------------------------+--------------+--------+----------------------------+--------+
| controller01 | heat-engine | bcf62d6e-0097-40d5-8d91-d1030447c859 | controller01 | engine | 2020-11-23T07:49:37.000000 | up |
| controller01 | heat-engine | 1218fd7f-93c5-4fa2-bce2-cc250bceaac1 | controller01 | engine | 2020-11-23T07:49:37.000000 | up |
| controller01 | heat-engine | a9fbcc39-9443-4b3d-ac4e-ba0fd8f80149 | controller01 | engine | 2020-11-23T07:49:37.000000 | up |
| controller01 | heat-engine | d67439ff-103d-485f-b350-204acdb5af99 | controller01 | engine | 2020-11-23T07:49:37.000000 | up |
+--------------+-------------+--------------------------------------+--------------+--------+----------------------------+--------+
Sử dụng heat để tạo các tài nguyên (VM) trong OpenStack
- Kiểm tra xem ta đang có các network nào, trong ví dụ này sẽ lấy ID của private network và lưu vào
Int_Net_ID
Int_Net_ID=$(openstack network list | grep int_net | awk '{ print $2 }')
- Tạo file
sample-stack.yml
theo mẫu dưới, lưu ý tạo đúng định dạng của yaml.
heat_template_version: 2018-08-31
description: Heat Sample Template
parameters:
ImageID:
type: string
description: Image used to boot a server
NetID:
type: string
description: Network ID for the server
resources:
server1:
type: OS::Nova::Server
properties:
name: "Heat_Deployed_Server"
image: { get_param: ImageID }
flavor: "m1.tiny"
security_groups:
- secgroup01
networks:
- network: { get_param: NetID }
outputs:
server1_private_ip:
description: IP address of the server in the private network
value: { get_attr: [ server1, first_address ] }
Trong file trên, ta sử dụng security group có tên là secgroup01
và flavor có lên là: m1.tiny
Thực hiện tạo stack (tạo vm bằng heat), trong lệnh dưới truyền thêm các tham số vào trong lệnh, ví dụ như:
- Sử dụng image là cirros
openstack stack create -t sample-stack.yml --parameter "ImageID=cirros;NetID=$Int_Net_ID" Sample-Stack
- Kiểm tra xem server đã được tạo hay chưa (việc tạo này có thể sẽ lâu hơn cách tạo VM thông thường như trong hướng dẫn trước), lệnh kiểm tra là
openstack stack list
.
[root@controller01 ~]# openstack stack list
+--------------------------------------+--------------+----------------------------------+-----------------+----------------------+--------------+
| ID | Stack Name | Project | Stack Status | Creation Time | Updated Time |
+--------------------------------------+--------------+----------------------------------+-----------------+----------------------+--------------+
| 0450ad15-61c6-407d-aefe-eac8575c4013 | Sample-Stack | 56f915778f414f5b81733353121d7027 | CREATE_COMPLETE | 2020-11-23T07:42:01Z | None |
+--------------------------------------+--------------+----------------------------------+-----------------+----------------------+--------------+
- Kiểm tra xem server tạo thông qua heat đã active hay chưa bằng lệnh
openstack server list
, có thể phải thực hiện lệnh lặp đi lặp lại từ 2 đến 3 lần để thấy trạng thái của VM là Active nếu như các bước cấu hình ổn thỏa.
[root@controller01 ~]# openstack server list
+--------------------------------------+----------------------+--------+----------------------------------------+--------+---------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+----------------------+--------+----------------------------------------+--------+---------+
| 4bb2d206-d8cc-4301-9778-020260236536 | Heat_Deployed_Server | BUILD | | cirros | m1.tiny |
| d3adc40e-d083-4be8-88e9-292fa74dfcbd | vm02 | ACTIVE | int_net=192.168.23.145, 192.168.64.216 | cirros | m1.tiny |
| 80ec0a88-a624-4ce4-a16f-d9646d30fcaa | vm01 | ACTIVE | ext_net=192.168.64.210 | cirros | m1.tiny |
+--------------------------------------+----------------------+--------+----------------------------------------+--------+---------+
- Kiểm tra chi tiết VM được tạo thông qua heat bằng lệnh
openstack server show Heat_Deployed_Server
[root@controller01 ~]# openstack server show Heat_Deployed_Server
+-------------------------------------+----------------------------------------------------------+
| Field | Value |
+-------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-SRV-ATTR:host | compute01 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | compute01 |
| OS-EXT-SRV-ATTR:instance_name | instance-00000007 |
| OS-EXT-STS:power_state | Running |
| OS-EXT-STS:task_state | None |
| OS-EXT-STS:vm_state | active |
| OS-SRV-USG:launched_at | 2020-11-23T07:42:14.000000 |
| OS-SRV-USG:terminated_at | None |
| accessIPv4 | |
| accessIPv6 | |
| addresses | int_net=192.168.23.128 |
| config_drive | |
| created | 2020-11-23T07:42:05Z |
| flavor | m1.tiny (0) |
| hostId | 016193f20246751e6e1113196caa1b52c4af5278e9f50672b6d9277e |
| id | 4bb2d206-d8cc-4301-9778-020260236536 |
| image | cirros (2d85154d-d0ab-44cd-bbea-37c8ec398ba4) |
| key_name | None |
| name | Heat_Deployed_Server |
| progress | 0 |
| project_id | 56f915778f414f5b81733353121d7027 |
| properties | |
| security_groups | name='secgroup01' |
| status | ACTIVE |
| updated | 2020-11-23T07:42:14Z |
| user_id | 69e6fe66393a420d877194471423c5b5 |
| volumes_attached | |
+-------------------------------------+----------------------------------------------------------+
- Xóa stack bằng lệnh
openstack stack delete --yes Sample-Stack
- Sau đó kiểm tra lại bằng lệnh
openstack stack list
ta sẽ không thấy có dòng nào xuất hiện là ok.
- Trong hướng dẫn này sẽ cài đặt toàn bộ các thành phần của manila trên node controller.
Có 02 mô hình sử dụng maniala, bao gồm:
- Sử dụng manila dạng local. Với mô hình này sẽ có node storage (trong hướng dẫn này dùng chung trên controller và sử dụng ổ /dev/vdc được cấu hình LVM) làm backend để cấp ra các volume để share cho các vm sử dụng chung.
- Sử dụng manila dạng VM. Đối với mô hình này sẽ cần điều kiện phải có các project neutron, nova, glance, cinder để sử dụng. Mô hình này sẽ sử dụng image đặc thù để boot một máy ảo có chức năng như NFS.
Trong hướng dẫn này sẽ sử dụng mô hình manila dùng theo kiểu local.
- Tạo database cho manila
mysql -uroot -pWelcome123 -e "CREATE DATABASE manila;
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'localhost' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'%' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'192.168.98.81' IDENTIFIED BY 'Welcome123';
GRANT ALL PRIVILEGES ON manila.* TO 'manila'@'controller01' IDENTIFIED BY 'Welcome123';
FLUSH PRIVILEGES;"
- Tạo user, gán role, tao endpoint cho manila
openstack user create --domain default --project service --password Welcome123 manila
openstack role add --project service --user manila admin
openstack service create --name manila --description "OpenStack Shared Filesystem" share
openstack service create --name manilav2 --description "OpenStack Shared Filesystem V2" sharev2
openstack endpoint create --region RegionOne share public http://192.168.98.81:8786/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne share internal http://192.168.98.81:8786/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne share admin http://192.168.98.81:8786/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne sharev2 public http://192.168.98.81:8786/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne sharev2 internal http://192.168.98.81:8786/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne sharev2 admin http://192.168.98.81:8786/v2/%\(tenant_id\)s
- Cài đặt các gói cần thiết cho manila
dnf -y install openstack-manila python3-manilaclient
- Sao lưu cấu hình file manila
cp /etc/manila/manila.conf /etc/manila/manila.conf.org
- Sửa cấu hình của manila
crudini --set /etc/manila/manila.conf DEFAULT my_ip 192.168.98.81
crudini --set /etc/manila/manila.conf DEFAULT api_paste_config /etc/manila/api-paste.ini
crudini --set /etc/manila/manila.conf DEFAULT rootwrap_config /etc/manila/rootwrap.conf
crudini --set /etc/manila/manila.conf DEFAULT state_path /var/lib/manila
crudini --set /etc/manila/manila.conf DEFAULT auth_strategy keystone
crudini --set /etc/manila/manila.conf DEFAULT default_share_type default_share_type
crudini --set /etc/manila/manila.conf DEFAULT share_name_template share-%s
crudini --set /etc/manila/manila.conf DEFAULT transport_url rabbit://openstack:Welcome123@192.168.98.81
crudini --set /etc/manila/manila.conf database connection mysql+pymysql://manila:Welcome123@192.168.98.81/manila
crudini --set /etc/manila/manila.conf keystone_authtoken www_authenticate_uri http://192.168.98.81:5000
crudini --set /etc/manila/manila.conf keystone_authtoken auth_url http://192.168.98.81:5000
crudini --set /etc/manila/manila.conf keystone_authtoken memcached_servers 192.168.98.81:11211
crudini --set /etc/manila/manila.conf keystone_authtoken auth_type password
crudini --set /etc/manila/manila.conf keystone_authtoken project_domain_name default
crudini --set /etc/manila/manila.conf keystone_authtoken user_domain_name default
crudini --set /etc/manila/manila.conf keystone_authtoken project_name service
crudini --set /etc/manila/manila.conf keystone_authtoken username manila
crudini --set /etc/manila/manila.conf keystone_authtoken password Welcome123
crudini --set /etc/manila/manila.conf oslo_concurrency lock_path \$state_path/tmp
- Đồng bộ DB cho manila
su -s /bin/bash manila -c "manila-manage db sync"
- Kích hoạt các dịch vụ của manila
systemctl enable --now openstack-manila-api openstack-manila-scheduler
Lưu ý: Trong hướng dẫn này thì node storage sử dụng chung với node controller.
- Cài đặt các gói cần thiết
dnf -y install openstack-manila-share python3-manilaclient python3-PyMySQL
- Cấu hình thêm cho file của manila
crudini --set /etc/manila/manila.conf DEFAULT enabled_share_protocols NFS,CIFS
- Khởi động lại cấu hình của manila
systemctl restart openstack-manila-api openstack-manila-scheduler
- Khai báo phân vùng để tạo volume cho manila
pvcreate /dev/vdc
vgcreate manila-volumes /dev/vdc
- Bổ sung cấu hình của manila
crudini --set /etc/manila/manila.conf DEFAULT enabled_share_backends lvm
crudini --set /etc/manila/manila.conf lvm share_backend_name LVM
crudini --set /etc/manila/manila.conf lvm share_driver manila.share.drivers.lvm.LVMShareDriver
crudini --set /etc/manila/manila.conf lvm driver_handles_share_servers False
crudini --set /etc/manila/manila.conf lvm lvm_share_volume_group manila-volumes
crudini --set /etc/manila/manila.conf lvm lvm_share_export_ips 192.168.98.81
- Kích hoạt manila và backend
systemctl enable --now openstack-manila-share nfs-server
Thực hiện các khai báo tiếp theo để sử dụng manila, các bước này làm trên node controller
- Thực hiện tạo default share type cho manila.
manila type-create default_share_type False
- Kiểm lại type của manila
manila type-list
- Tạo một phân vùng để share NFS có tên là share01 với dung lượng 10GB.
manila create NFS 10 --name share01
manila create NFS 10 --name share02
- Kiểm tra lại dung lượng của các phân vùng share bằng lệnh
manila list
, ta có kết quả như sau
[root@controller01 ~]# manila list
+--------------------------------------+---------+------+-------------+-----------+-----------+--------------------+----------------------------------+-------------------+
| ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |
+--------------------------------------+---------+------+-------------+-----------+-----------+--------------------+----------------------------------+-------------------+
| 19517cfa-1ff3-49aa-9232-be18ed5c635b | share02 | 10 | NFS | available | False | default_share_type | controller01@lvm#lvm-single-pool | nova |
| 16fbca6b-6fdc-4328-93e0-049a7746d98c | share01 | 10 | NFS | available | False | default_share_type | controller01@lvm#lvm-single-pool | nova |
+--------------------------------------+---------+------+-------------+-----------+-----------+--------------------+----------------------------------+-------------------+
- Phân quyền để phân vùng share này cho các network cần thiết
manila access-allow share01 ip 192.168.64.0/24 --access-level rw
manila access-allow share01 ip 192.168.98.0/24 --access-level rw
- Kiểm tra lại việc phân quyền share bằng lệnh
manila access-list share01
ta có kết quả như sau:
[root@controller01 ~]# manila access-list share01
+--------------------------------------+-------------+-----------------+--------------+--------+------------+----------------------------+------------+
| id | access_type | access_to | access_level | state | access_key | created_at | updated_at |
+--------------------------------------+-------------+-----------------+--------------+--------+------------+----------------------------+------------+
| 0e6c9072-5198-4024-822b-28500b06ff15 | ip | 192.168.64.0/24 | rw | active | None | 2020-11-24T16:23:12.000000 | None |
| 85b08cd2-9264-4f68-9d83-a2c5dddd007e | ip | 192.168.98.0/24 | rw | active | None | 2020-11-24T16:23:17.000000 | None |
+--------------------------------------+-------------+-----------------+--------------+--------+------------+----------------------------+------------+
- Lấy đường dẫn của thư mục share bằng lệnh
manila show share01
sau đó tìm dòng có chứa đường dẫn của phân vùng share hoặc sử dụng lệnh đưới để lấy nhanh đường dẫnmanila show share01 | grep path | cut -d'|' -f3
, ta sẽ có kết quả như sau:
[root@controller01 ~]# manila show share01 | grep path | cut -d'|' -f3
path = 192.168.98.81:/var/lib/manila/mnt/share-17473438-fe7e-4e50-b632-b28e7202cb36
- Khai báo để VM sử dụng phân vùng share, trong hướng dẫn này sẽ gắn với VM03. Cần tạo ra các VM có hệ điều hành là Ubuntu hoặc CentOS để thực hiện lệnh mount thay vì sử dụng hệ điều hành
cirros
vì sẽ thiếu gói.
openstack server list
[root@controller01 ~]# openstack server list
+--------------------------------------+----------------------+--------+----------------------------------------+---------------------+----------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+----------------------+--------+----------------------------------------+---------------------+----------+
| f05f0823-697d-4b22-9ed8-eceb95e5695c | vm03 | ACTIVE | ext_net=192.168.64.211 | Ubuntu2004-Official | m1.small |
| b3acb579-2e3d-4ece-ba2b-abf6b06350ec | Heat_Deployed_Server | ACTIVE | int_net=192.168.23.99 | cirros | m1.tiny |
| d3adc40e-d083-4be8-88e9-292fa74dfcbd | vm02 | ACTIVE | int_net=192.168.23.145, 192.168.64.216 | cirros | m1.tiny |
| 80ec0a88-a624-4ce4-a16f-d9646d30fcaa | vm01 | ACTIVE | ext_net=192.168.64.210 | cirros | m1.tiny |
+--------------------------------------+----------------------+--------+----------------------------------------+---------------------+----------+
- Trong hướng dẫn này sử dụng
vm03
để thực hiện mount, ssh vàovm03
này và thực hiện lệnh mount.
sudo mount -vvvv -t nfs 192.168.98.81:/var/lib/manila/mnt/share-17473438-fe7e-4e50-b632-b28e7202cb36 /mnt
Đối với việc mount khác range (mount qua NAT) ta sẽ gặp lỗi sau
root@vm03:~# sudo mount -vvvv -t nfs 192.168.98.81:/var/lib/manila/mnt/share-17473438-fe7e-4e50-b632-b28e7202cb36 /mnt
mount.nfs: timeout set for Tue Nov 24 10:07:25 2020
mount.nfs: trying text-based options 'vers=4.2,addr=192.168.98.81,clientaddr=192.168.64.211'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'addr=192.168.98.81'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.98.81 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 192.168.98.81 prog 100005 vers 3 prot UDP port 20048
Cách xử lý là mở file /etc/exports
trên controller ( hoặc node storage), thay các từ secure
thành insecure
. Lý do là trong port mà nfs sử dụng để thiết lập mount có giá trị lớn hơn 1024, do vậy nếu khác range giữa client và server thì sẽ bị từ chối, tham khảo (https://blog.bigon.be/2013/02/08/mount-nfs-export-for-machine-behind-a-nat/). Trong hướng dẫn này sửa như sau:
/var/lib/manila/mnt/share-17473438-fe7e-4e50-b632-b28e7202cb36 192.168.64.0/24(rw,sync,wdelay,hide,nocrossmnt,insecure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,insecure,no_root_squash,no_all_squash)
/var/lib/manila/mnt/share-17473438-fe7e-4e50-b632-b28e7202cb36 192.168.98.0/24(rw,sync,wdelay,hide,nocrossmnt,insecure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,insecure,no_root_squash,no_all_squash)
Sau đó khởi động lại nfs và manila-share bằng lệnh systemctl restart openstack-manila-share nfs-server
.
Quay sang client và thực hiện lệnh mount (login vào VM và thực hiện lệnh dưới)
sudo mount -vvvv -t nfs 192.168.98.81:/var/lib/manila/mnt/share-17473438-fe7e-4e50-b632-b28e7202cb36 /mnt
- Kiểm tra xem đã mount được hay chưa bằng lệnh
df -hT
root@vm03:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 978M 0 978M 0% /dev
tmpfs tmpfs 199M 976K 198M 1% /run
/dev/vda1 ext4 9.6G 1.4G 8.2G 15% /
tmpfs tmpfs 994M 0 994M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/vda15 vfat 105M 3.9M 101M 4% /boot/efi
/dev/loop0 squashfs 56M 56M 0 100% /snap/core18/1932
/dev/loop1 squashfs 68M 68M 0 100% /snap/lxd/18150
/dev/loop2 squashfs 31M 31M 0 100% /snap/snapd/9721
tmpfs tmpfs 199M 0 199M 0% /run/user/1000
192.168.98.81:/var/lib/manila/mnt/share-17473438-fe7e-4e50-b632-b28e7202cb36 nfs4 9.8G 36M 9.3G 1% /mnt
root@vm03:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:3a:a8:98 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.211/24 brd 192.168.64.255 scope global dynamic ens3
valid_lft 83133sec preferred_lft 83133sec
inet6 fe80::f816:3eff:fe3a:a898/64 scope link
valid_lft forever preferred_lft forever
Lưu ý: Client sẽ mất đường dẫn mount sau khi reboot, google để biết cách gắn mount mỗi khi OS reboot nhé.
===