开篇先强调一下,如果使用virtual box部署,需要网卡混杂模式为全部允许,不然可能会与外网无法打通
三台物理主机,主机名分别为controller(两个网卡),compute(两个网卡)和block1(两个网卡),安装系统为Ubuntu Server 20.04,下面开始部署。
1. Controller,Compute和Block-Storage节点的公共配置
添加hosts
sudo vim /etc/hosts
注掉
#127.0.1.1 节点主机名
添加如下内容(三个节点都要添加相同的内容)
# controller
10.0.0.211 controller
# compute1
10.0.0.213 compute
# block1
10.0.0.216 block1
保存后ping一下相应的域名试一下,注意看目标地址安装openstack客户端
添加源
sudo add-apt-repository cloud-archive:wallaby
Controller节点上安装客户端
sudo apt-get install python3-openstackclient
2. 节点间时间同步
在Controller节点运行
sudo apt-get install chrony
编辑/etc/chrony.conf文件
sudo vim /etc/chrony/chrony.conf
添加一行,加入阿里云NTP服务
server ntp.aliyun.com iburst
加入一行,允许其他节点访问
allow 10.0.0.0/21
保存后重启服务
sudo systemctl restart chrony
sudo systemctl enable chrony
其他节点上安装chrony
sudo apt-get install chrony
编辑/etc/chrony.conf文件
sudo vim /etc/chrony/chrony.conf
添加一行,加入controller服务
server controller iburst
保存后重启服务
sudo systemctl restart chrony
sudo systemctl enable chrony
在所有节点上运行
chronyc sources
验证服务是否正常
3. 部署Controller的环境
安装mariadb
sudo apt-get install mariadb-server python3-pymysql
编辑配置文件
sudo vim /etc/mysql/mariadb.conf.d/99-openstack.cnf
加入配置
[mysqld]
bind-address = 10.0.0.211
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
重启服务
sudo systemctl restart mysql
配置root用户密码
sudo mysql_secure_installation
运行mysql,修改一下密码(注意替换PASSWORD)
sudo mysql
mysql > use mysql;
mysql > set password for 'root'@'localhost' = password('PASSWORD');
mysql > quit
安装RabbitMQ
sudo apt-get install rabbitmq-server
添加openstack用户(注意替换USER_PASS)
sudo rabbitmqctl add_user openstack USER_PASS
为openstack用户添加权限
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
启动服务开启开机自启
sudo systemctl restart rabbitmq-server.service
sudo systemctl enable rabbitmq-server.service
安装memcached
sudo apt-get install memcached python3-memcache
编辑配置文件
sudo vim /etc/memcached.conf
注释原来的-l 127.0.0.1,添加一行,允许其他节点访问
-l 10.0.0.211
重启服务
sudo systemctl restart memcached
sudo systemctl enable memcached
安装etcd
sudo apt-get install etcd
编辑配置文件
sudo vim /etc/default/etcd
修改一下环境变量的值
ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.211:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.211:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.211:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.211:2379"
重启etcd
sudo systemctl restart etcd
sudo systemctl enable etcd
4. 安装Keystone(Controller节点)
运行mysql
sudo mysql -u root -p
建表
CREATE DATABASE keystone;
设置keystore库密码(注意替换KEYSTORE_DBPASS)
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
安装keystore
sudo apt-get install keystone
修改配置文件
sudo vim /etc/keystone/keystone.conf
修改数据库connection(注意修改KEYSTORE_DBPASS)
[database]
# ...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
修改token,解除注释
[token]
# ...
provider = fernet
保存退出,构建数据库
sudo su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化key仓库
sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
启动服务(注意替换ADMIN_PASS)
sudo keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
修改apache配置
sudo vim /etc/apache2/apache2.conf
添加或修改
ServerName controller
重启apache
sudo systemctl restart apache2
sudo systemctl enable apache2
设置环境变量(注意替换ADMIN_PASS)
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
创建admin project
openstack project create --domain default \
--description "Service Project" service
创建非admin project
openstack project create --domain default \
--description "Common Project" commonproject
创建普通用户
openstack user create --domain default \
--password-prompt commonuser
创建普通角色
openstack role create commonrole
关联用户角色
openstack role add --project commonproject --user commonuser commonrole
验证部署
unset OS_AUTH_URL OS_PASSWORD
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name commonproject --os-username commonuser token issue
创建环境变量,admin环境变量admin_openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
common环境变量common_openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=commonproject
export OS_USERNAME=commonuser
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
两个文件均执行
chmod +x 文件名
以后使用相关的环境时加载对应的环境变量文件即可,例如
. common_openrc
openstack token issue