1 学习openstack 目标
使用OpenStack 构建企业私有云,本教程偏重于动手实操能力,主要用于帮助那些 OpenStack 初学者能更加熟练地使用OpenStack,同时也适用于刚刚从事 Linux 运维/开发的童鞋,去更加了解 OpenStack。本教程全是个人工作实践经验分享,若需了解
OpenStack 安装组件较多,配置文件也多,尤其是
1、环境说明:
a:生产环境尽量要选配置高一些的服务器,如配置:双 CPU 2.4GHz 24cores*2/64GB*8/600GB SAS*2 或者更高主频的 CPU,网络至少是
b:实验环境规划及说明
宿主机硬件配置:i7-10750H / 32GB / TOSHIBA 500G SSD / WD 1TB SSD
宿主机操作系统:Windows 10 64 位专业版
OpenStack 版本:Train
Ceph 版本:
虚拟机规划见下表:
其中,template 主机在完成系统安装以及相关参数设置后,就可以关闭,后面仅用作模板克隆用,使用模板的目的是保证所有主机软件包及参数一致。生产环境一般是使用 cobbler 或
创建虚拟机存放目录
E:\virtual_system\openstack> md cpeh01 cpeh02 ceph03 yum01 controller compute01 compute02 template
学习思维导图
2 系统安装及设置
2.1 系统安装
1、制作主机模板
在
- 删除不用硬件设备,例如 打印机、声卡。vxlan 和
- 操作系统镜像:CentOS-7-x86_64-DVD-2009.iso
- 时区修改为:Asia/Shanghai
- 语言勾选支持:中文
- 软件包选择:Development and Create Workstation
- Addiional Development
- Compatibility Libraries
- Development Tools
- Hardware Monitoring Utilities
- Large Systems Performance
- Legacy X Windows System Compatibility
- Platform Development
- System Administration Tools
磁盘分区,先使用
开始安装系统,安装过程中大概持续 5-10mins,此时可以为
安装完成后,进行系统初始化参数设置
2.2 系统初始化参数设置
1、设置主机名及hosts
# hostnamectl set-hostname template
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 # openstack
192.168.59.20 controller
192.168.59.31 compute01
192.168.59.32 compute02
# cpeh-public
192.168.59.11 ceph01
192.168.59.12 ceph02
192.168.59.13 ceph03
# ceph-cluster
20.168.59.11 ceph01-cluster
20.168.59.12 ceph02-cluster
20.168.59.13 ceph03-cluster
# yum
192.168.59.250 yum01
2、配置IP 地址并且关闭NetworkMnanager
各主机第一块网卡按规划用作 Provider IP (使用
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV6INIT=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
# ip 地址,不同主机修改成不同
IPADDR=192.168.59.251
NETMASK=255.255.255.0
GATEWAY=192.168.59.2
DNS1=223.5.5.5
EOF
# 如何查看 vmNet8 网段的网关,可通过
# systemctl restart network
# systemctl stop NetworkManager && systemctl disable NetworkManager
3、关闭防火墙和selinux
# systemctl stop firewalld && systemctl disable firewalld
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
上述
4、设置内核参数及文件句柄等资源限制参数
# cat <<EOF >> /etc/sysctl.conf
## default 1
net.ipv4.tcp_syncookies = 1
## default 0
net.ipv4.tcp_tw_reuse = 1
## default 0
net.ipv4.tcp_tw_recycle = 1
## default 60
net.ipv4.tcp_fin_timeout = 30
## default 256
net.ipv4.tcp_max_syn_backlog = 4096
## default 32768 60999
net.ipv4.ip_local_port_range = 1024 65535
## default 129=8
net.core.somaxconn = 32768
EOF
# cat <<EOF >> /etc/security/limits.conf
* hard nofile 655360
* soft nofile 655360
* hard nproc 655360
* soft nproc 655360
* soft core 655360
* hard core 655360
EOF
# sed -i 's/4096/unlimited/g' /etc/security/limits.d/20-nproc.conf
# cat /etc/security/limits.d/20-nproc.conf
* soft nproc unlimited
root soft nproc unlimited
5、设置CPU 嵌套虚拟化,让虚拟机中再支持虚拟化
# cat /sys/module/kvm_intel/parameters/nested
/*
说明:如果是 N,表示未开启。如果连/sys/module 目录都没有,说明主机没有开启虚拟化(vmware workstation 是主机创建时没有勾选
或
*/
# cat <<EOF > /etc/modprobe.d/kvm-nested.conf
options kvm_intel nested=1 ept=0 unrestricted_guest=0
EOF
即时生效
# rmmod kvm_intel // 需要所有虚拟机是停止状态才能执行卸载
# modprobe kvm-intel ept=0 unrestricted_guest=0
# cat /sys/module/kvm_intel/parameters/nested //开启后状态为Y。
/*
说明:ept=0 用于关闭Intel EPT 硬件辅助虚拟化,可有效解决
*/
2.3 克隆第1 台虚拟机
完成系统初始化参数设置后,克隆第 1 台虚拟机用作离线 yum 源服务端,然后 template 模板虚拟机使用离线
右键点击模板主机,选择“管理”-->“克隆”
勾选“虚拟机中的当前状态”,勾选“创建完整克隆”
输入克隆后的虚拟机名称以及虚拟机系统保存位置。
完成克隆后,编辑虚拟机,调整下内存以及 CPU 配置,用作
3 制作离线yum 源
3.1 配置离线yum 源服务端
在上一节视频有 2 处错误,第 1 处是设置/boot 分区时,本意是设置成 2GB,但在设置 VG 名时,大小还原成了 1024MB,然后就是设置 yum01 的
使用了追加,本意是覆盖,所以重新制作了虚拟机模板。
1、启动克隆好的虚拟机,改hostname、ip
# hostnamectl set-hostname yum01
# sed -i 's/59.251/59.250/g' /etc/sysconfig/network-scripts/ifcfg-ens33
# systemctl restart network
# ping www.baidu.com
再次检查一下
2、从阿里云下载yum 配置文件
# cd /etc/yum.repos.d && mkdir backup && mv *.repo backup/
# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
# yum -y install centos-release-openstack-train
添加
vim /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64
enabled=1
gpgcheck=0
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=0
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=0
3、安装相关软件包
# yum -y install createrepo yum-utils httpd reposync
# systemctl enable httpd && systemctl start httpd
4、创建仓库目录
# mkdir -p /var/www/html/yumrepos
4、根据CentOS-Base.repo 同步阿里云软件包到本地
# reposync -p /var/www/html/yumrepos/
如果只想同步CentOS-Base.repo 中指定块[section]中的rpm 包,可以指定名称同步
# reposync -n --repoid=base --repoid=updates -p /var/www/html/yumrepos/
# reposync -n --repoid=ceph --repoid=ceph-noarch -p /var/www/html/yumrepos/
# reposync -n --repoid=centos-openstack-train -p /var/www/html/yumrepos/
# reposync -n --repoid=centos-qemu-ev -p /var/www/html/yumrepos/
说明:以上仓库必须同步到本地此处再以
安装 zabbix-4.0 的
# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
安装好
# cat /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://repo.zabbix.com/zabbix/4.0/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[zabbix-debuginfo]
name=Zabbix Official Repository debuginfo - $basearch
baseurl=http://repo.zabbix.com/zabbix/4.0/rhel/7/$basearch/debuginfo/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
gpgcheck=1
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
只同步[zabbix]块中的rpm 包到本地
# reposync -n --repoid=zabbix -p /var/www/html/yumrepos/
5、使用createrepo命令创建本地yum源,即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据
进到
# cd /var/www/html/yumrepos/base
# createrepo .
6、定期更新
# reposync -n --repoid=base -p /var/www/html/yumrepos/
# cd /var/www/html/yumrepos/base
# createrepo --update . // 或者使用命令 createrepo --update /var/www/html/yumrepos/base
按上述方法,将openstack所依赖的rpm包全部下载到本地
3.2 使用离线yum 源
1、在template 模板主机上执行
# cd /etc/yum.repos.d/ && mkdir backup && mv *.repo backup/
# wget http://yum01/private.repo -O /etc/yum.repos.d/private.repo
yum 客户端在执行
处理方法:根据提示卸载对应包,再执行
# yum erase PyQt4-4.10.1-13.el7.x86_64 sip-4.14.6-4.el7.x86_64 -y
# yum update -y
/*
说明:系统更新完成后, 在/etc/yum.repos.d/目录下会重新生成缺省的
*/
安装
yum -y install python-openstackclient
完成更新后,重启一下系统,确保没有问题。
关闭 template 虚拟机,基于更新后的 template 虚拟机进行克隆,需克隆 6 台主机,包括
/*
Private.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://yum01/yumrepos/base/
gpgcheck=0
enabled=1
[epel]
name=CentOS-$releasever - epel
baseurl=http://yum01/yumrepos/epel/
gpgcheck=0
enabled=1
[docker-ce-stable]
name=CentOS-$releasever - docker-ce-stable
baseurl=http://yum01/yumrepos/docker-ce-stable/
gpgcheck=0
enabled=1
[updates]
name=CentOS-$releasever - Updates
baseurl=http://yum01/yumrepos/updates/
gpgcheck=0
enabled=1
[extras]
name=CentOS-$releasever - Extras
baseurl=http://yum01/yumrepos/extras/
gpgcheck=0
enabled=1
[centos-openstack-train]
name=CentOS-7 - OpenStack train
baseurl=http://yum01/yumrepos/centos-openstack-train/
gpgcheck=0
enabled=1
[centos-qemu-ev]
name=CentOS-$releasever - QEMU EV
baseurl=http://yum01/yumrepos/centos-qemu-ev/
gpgcheck=0
enabled=1
[ceph]
name=ceph-Nautilus
baseurl=http://yum01/yumrepos/ceph/
gpgcheck=0
enabled=1
[ceph-noarch]
name=ceph-noarch Nautilus
baseurl=http://yum01/yumrepos/ceph-noarch/
gpgcheck=0
enabled=1
[centos-nfs-ganesha28]
name=CentOS-7 - NFS Ganesha 2.8
baseurl=http://yum01/yumrepos/centos-nfs-ganesha28/
gpgcheck=0
enabled=1
[openresty]
name=Official OpenResty Open Source Repository for CentOS
baseurl=http://yum01/yumrepos/openresty/
skip_if_unavailable=False
gpgcheck=0
repo_gpgcheck=0
gpgkey=file:///etc/yum.repos.d/pubkey.gpg
enabled=1
enabled_metadata=1
*/
2、完成克隆后,启动克隆好的虚拟机,修改hostname、IP
在
# hostnamectl set-hostname controller
# sed -i 's/59.251/59.20/g' /etc/sysconfig/network-scripts/ifcfg-ens33
# systemctl restart network
# ping 192.168.59.2
# 关闭主机
# init 0
在
# hostnamectl set-hostname compute01
# sed -i 's/59.251/59.31/g' /etc/sysconfig/network-scripts/ifcfg-ens33
# systemctl restart network
# ping 192.168.59.2
# 关闭主机
# init 0
在
# hostnamectl set-hostname compute02
# sed -i 's/59.251/59.32/g' /etc/sysconfig/network-scripts/ifcfg-ens33
# systemctl restart network
# ping 192.168.59.2
# 关闭主机
# init 0
ceph01/ceph02/ceph03 此处先不修改,等在后面安装
按照规划,为 compute01、compute02 添加硬盘,controller、compute01、compute02 各增加 2 块网卡,此处以 controller 截图为例编辑 controller 虚拟机,添加 网络适配器
添加 Lan 区段,即自定义网段(类似 hub 或网桥),也可以通过添加网络,vmware 全局支持添加
按上述操作完成 compute01 和 compute02 的
compute01、compute02 各增加一块 50G 硬盘(用作 cinder 存储)
以同样方式完成
说明:若在系统运行时添加磁盘,则添加完成后,需要运行命令发现硬盘
检查并完成上述操作后,启动 controller、compute01、compute02,开始进入
完成 controller、compute01、compute02 上的第
在所有节点上分别执行
# dhclient
再使用 ifconfig 获到第 2、3 网卡名称,此处分别为 ens37 和
在controller 节点上执行
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV6INIT=no
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=10.168.59.20
NETMASK=255.255.255.0
EOF
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens38
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV6INIT=no
NAME=ens38
DEVICE=ens38
ONBOOT=yes
IPADDR=20.168.59.20
NETMASK=255.255.255.0
EOF
# systemctl restart network
在compute01 节点上执行
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV6INIT=no
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=10.168.59.31
NETMASK=255.255.255.0
EOF
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens38 TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV6INIT=no
NAME=ens38
DEVICE=ens38
ONBOOT=yes
IPADDR=20.168.59.31
NETMASK=255.255.255.0
EOF
# systemctl restart network
在compute02 节点上执行
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV6INIT=no
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=10.168.59.32
NETMASK=255.255.255.0
EOF
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens38
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV6INIT=no
NAME=ens38
DEVICE=ens38
ONBOOT=yes
IPADDR=20.168.59.32
NETMASK=255.255.255.0
EOF
# systemctl restart network
确认网络配置正常
# ping 10.168.59.31
# ping 10.168.59.32
# ping 20.168.59.31
# ping 20.168.59.32
前期准备工作越充分,后期使用维护就越轻松从容。
4 openstack 基础组件安装
4.1 NTP 安装及配置
1、统一时区,在所有节点(controller、compute01、compute02)上执行
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注:安装时若有选择正确时区,可忽略上述设置
2、在控制节点controller 安装chrony,将控制节点作为NTP 服务端,默认已经安装。
# yum -y install chrony
修改配置
指定时间同步服务器,这里采用阿里云时钟源。如果无外网,则指向本机主机名
# vi /etc/chrony.conf
# server ntp.aliyun.com iburst
# server ntp1.aliyun.com iburst
#server controller iburst
...
...
allow 192.168.59.0/24
allow 10.168.59.0/24
allow 20.168.59.0/24
local stratum 10
3、设置开机自启动
# systemctl enable chronyd.service
# systemctl start chronyd.service
4、在ntp 服务器上启用NTP 同步。
# timedatectl set-ntp yes
# timedatectl status
5、在所有计算节点(compute01、compute02)安装chrony,默认已安装
# yum -y install chrony
然后,修改配置/etc/chrony.conf 中服务器为 controller,即
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#server controller iburst
设置开机自启动
# systemctl enable chronyd
# systemctl start chronyd
验证时间同步:
# chronyc sources
4.2 MariaDB 安装及配置
1、安装与配置数据库
在控制节点(controller)执行以下操作。
# yum -y install mariadb mariadb-server python2-PyMySQL
2、配置数据库。
创建并编辑文件/etc/my.cnf.d/openstack.cnf
vim /etc/my.cnf.d/openstack.cnf
[mysqld]
# 此处可只 bind 为内网管理 IP,限制外部访问
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 8192
collation-server = utf8_general_ci
character-set-server = utf8
修改“/usr/lib/systemd/system/mariadb.service”文件,在文件[Service]下添加如下内容:
# vim /usr/lib/systemd/system/mariadb.service
LimitNOFILE=65535
LimitNPROC=65535
注:不修改此配置,max_connections 参数不会生效
3、设置开机自启动
# systemctl daemon-reload
# systemctl enable mariadb.service
# systemctl start mariadb.service
4、数据库初始化设置(可选设置)。
# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here.
Enter current password for root (enter for none): #按回车键
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.
Set root password? [Y/n] Y
New password: #密码我设置的是 mysql
Re-enter new password:
Password updated successfully! Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n
... skipping.
By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success! Cleaning up...
All done! If you've completed all of the above steps, your MariaDB installation should now be secure.
Thanks for using MariaDB!
设置 root 密码为:mysql 或者其他复杂密码,允许 root 登录,不管在 Disallow root login remotely 选择了 N 还是 Y,都只允许在本机登录。可以使用以下 sql 进行
update user set Host='%' where User='root' and Host='localhost' and user='root';
flush privileges;
5、登录验证
# mysql -uroot -pmysql
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 15
Server version: 10.3.20-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> exit
4.3 RabbitMQ 安装及配置
1、安装与配置rabbitMQ
在控制节点(controller)执行以下操作
# yum -y install rabbitmq-server
2、配置rabbitmq,修改rabbitmq 默认打开文件句柄数限制
# vi /usr/lib/systemd/system/rabbitmq-server.service
在
[Service]
LimitNOFILE=32768
3、设置开机自启动
# systemctl daemon-reload
# systemctl enable rabbitmq-server.service
# systemctl restart rabbitmq-server.service
4、在rabbitMQ 中添加用于openstack 的用户并授予管理员权限。
# rabbitmqctl add_user openstack openstack
# rabbitmqctl set_user_tags openstack administrator
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
也可在
注:为
5、启用rabbitmq-manager 插件,开启Web 控制台
# rabbitmq-plugins enable rabbitmq_management
6、登录验证
控制台登录:http://controller:15672
guest/guest (缺省账户)
openstack/openstack
/*
注:使用 hosts 访问,需要修改
192.168.59.20 controller
*/
4.4 Memcache 安装及配置
1、安装与配置memcached
在控制节点(controller)执行以下操作
# yum -y install memcached python-memcached
2、修改配置
# vi /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="4096"
CACHESIZE="256"
OPTIONS="-l 0.0.0.0,::1"
注意监听 IP 地址,也可以设置成
3、设置服务开机自启
# systemctl enable memcached.service
# systemctl restart memcached.service
4、验证
# systemctl status memcached
- memcached.service - memcached daemon
Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-12-28 15:59:20 CST; 26s ago
Main PID: 7451 (memcached) Tasks: 10
CGroup: /system.slice/memcached.service
└─7451 /usr/bin/memcached -p 11211 -u memcached -m 64 -c 4096 -l 0.0.0.0,::1 Dec 28 15:59:20 controller systemd[1]: Started memcached daemon.
# netstat -atnp |grep 11211
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 7451/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 7451/memcached
4.5 etcd 安装及配置(可选安装)
1、安装与etcd
在控制节点(controller)执行以下操作
yum -y install etcd
2、配置etcd
# vi /etc/etcd/etcd.conf
修改如下9项参数,其余的全部注释掉。
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.59.20:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.59.20:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.59.20:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.59.20:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.59.20:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
3、设置服务开机自启
# systemctl enable etcd
# systemctl start etcd
4.6 安装openstack 客户端
1、确保所有节点上已经安装了
# yum -y install python-openstackclient
在模板主上就已经安装,此处忽略该安装步骤。
5 openstack 业务组件安装
5.1 安装keystone(控制节点)
keystone 是 OpenStack 的身份认证服务(Identity Service),OpenStack 中的认证、鉴权、角色管理都是由 keystone 来完成,同时还提供服务目录注册功能。keystone 是一个关键服务,同时也是安装
配置 keystone 时,需要为用户创建合适的角色、服务、租户、用户账号和服务
keystone 里有相关概念需要了解。比如,租户、角色、用户。
1、租户对应项目,它有一些资源,包括用户、镜像、实例,还有仅对该项目可见的网络(如果创建网络时没有勾选“共享”)
2、一个用户可隶属于一个或多个项目(租户),并且可以在这些项目间进行切换,部署 Openstack 至少要创建admin 和
3、service 项目是一个特殊的项目,Openstack 自身服务都配置在
4、一个用户可以被指定成多种角色,即一个用户可能会有多个项目,在不同项目中角色不同。例如,user1 同时在project1 和 project2 中,在
的角色是 admin,在
5、openstack 中默认只有 4 种角色,包括
OpenStack keystone 服务托管在
一、在控制节点(controller)安装Keystone
1、登录数据库创建keystone 数据库
MariaDB [(none)]> CREATE DATABASE keystone default character set utf8;
创建并授予keystone 用户完全操作
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'openstack';
/*
说明:
openstack 的账户密码设置中,不支持部分特殊符号,如“#”;openstack 本身对密码的复杂度也没有要求,可以设置为不带特殊字符的密码;若在设置密码时,一定要包含特殊符号,openstack 仅支持如下如下特殊字符:& = $ - _ . + ! * ( )
也可以对照官方文档做实验验证,https://docs.openstack.org/install-guide/environment-security.html
*/
2、安装Keystone 软件包并修改配置文件
# yum -y install openstack-keystone httpd mod_wsgi
/*
说明:
配置文件中能写成主机名的就改成主机名,增强配置文件通用性,便于快速部署。
*/
# cd /etc/keystone/ && mv keystone.conf keystone.conf.source && cat keystone.conf.source |grep -Ev "^#|^$" > keystone.conf && chown root:keystone keystone.conf
# vi /etc/keystone/keystone.conf
在[database]部分添加如下内容:
connection = mysql+pymysql://keystone:openstack@controller/keystone
在[token]部分添加如下内容:
expiration = 86400
# 令牌提供者为 fernet,即生成令牌方式
配置可直接参考
3、同步Identity 服务的初始数据到keystone 库
# su -s /bin/sh -c "keystone-manage db_sync" keystone
4、初始化Fernet 密钥存储库
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
5、执行身份引导服务(会创建endpoint)。
# keystone-manage bootstrap --bootstrap-password openstack2022 \
--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
/*
说明:
i、OpenStack 中每一个服务都运行在一个特定的URL 和端口上,即有一个 API 地址,通常称之为 API 服务端点,当一个客户端访问 openstack 时,keystone身份认证服务负责向其返回 openstack 环境中各个服务的 API 地址,以便客户端使用这些服务。所以配置每一个服务时都需要向 keystone 注册其API 地址。Openstack 中可以定义多个区域,可以把不同的区域理解成不同的数据中心,它们有各自同不的 URL 或 IP 地址,在 Openstack 身份认证服务里,可以为每一个区域分别定义 API。默认只有一个区域,且标识为
ii、修改--bootstrap-password 后为用户 admin 的密码,此处设置为
iii、执行身份引导服务后,就不需要再手功创建 identity 的 API,即以下 3 条命令不需要执行
每个服务的API 都会有 3 个 API 地址,公共(面向终端用户)、内部(仅在本地局域网内)、管理员(可以被有管理员权限的用户使用),通过配置在不同的
*/
二、在控制节点(controller)配置Apache 服务
1、修改apache 配置文件
# vi /etc/httpd/conf/httpd.conf
在
ServerName controller:80
2、创建软链接。
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
3、启动Apache HTTP 服务并配置其随系统启动。
# systemctl enable httpd.service
# systemctl restart httpd.service
4、配置管理员帐户,并创建项目、域、用户、角色
cat > /etc/keystone/admin-openrc.sh <<EOF
export OS_USERNAME=admin
export OS_PASSWORD=openstack2022
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
export OS_IMAGE_API_VERSION=2
EOF
说明:admin-openrc.sh 用来定义相关环境变量
# source admin-openrc.sh
5、创建service 项目、user 角色、域,default 域默认已经存在
# openstack domain list
/*
创建新域
# openstack domain create --description "An Example Domain" example
# openstack domain list
创建普通项目
# openstack project create --domain default --description "Demo Project" myproject
创建普通用户 myuser(仅用于测试,可以不创建),密码为 myuser。
# openstack user create --domain default --password-prompt myuser
创建角色(仅用于测试,可以不创建)
# openstack role create myrole
将 myrole 角色添加到 myproject 项目和
# openstack role add --project myproject --user myuser myrole
# openstack role list
*/
一个租户在OpenStack 里就是一个项目,创建用户时必须先要有租户(项目),同时还需要一个能分配给该用户的角色,这样创建的用户才有意义。创建 service 项目(租户),service 项目将作为 OpenStack 的系统项目,所有系统服务都要加入到
# openstack project create --domain default --description "Service Project" service
# openstack project list
创建
# openstack role create user
# openstack role list
6、验证Keystone
# source /etc/keystone/admin-openrc.sh
# openstack token issue
取消环境变量,验证
# 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
输入
5.2 安装placement(控制节点)
Placement 在 Openstack 中主要用于跟踪和监控各种资源的使用情况,例如,在
Placement 服务在 Openstack 14.0.0 Newton 版本中被引入到 nova 库,并在 19.0.0 Stein 版本中被独立到 Placement 库中,即在 stein 版被独立成组件。 Placement 服务提供 REST API 堆栈和数据模型,用于跟踪资源提供者不同类型的资源的库存和使用情况。 资源提供者可以是计算资源、共享存储池、 IP 池等。例如,创建一个实例时会消耗计算节点的CPU、内存,会消耗存储节点的存储;同时还会消耗网络节点的 IP 等等,所消耗资源的类型被跟踪为类。Placement 提供了一组标准资源类(例如 DISK_GB、MEMORY_MB 和
placement 服务托管在httpd 上,修改配置需重启
一、在控制节点(controller)安装Placement
1、登录数据库创建placement 数据库
MariaDB [(none)]> CREATE DATABASE placement default character set utf8;
创建并授予placement 用户完全操作
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'openstack';
2、创建用户和API 服务端点
# source /etc/keystone/admin-openrc.sh
# openstack user create --domain default --password-prompt placement
密码设置为:openstack2022
将 placement 加入到 service 项目以及
# 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://controller:8778
# openstack endpoint create --region RegionOne placement internal http://controller:8778
# openstack endpoint create --region RegionOne placement admin http://controller:8778
3、安装配置Placement
# yum -y install openstack-placement-api
注:https://docs.openstack.org/api-ref/placement/?expanded=
修改配置文件
# cd /etc/placement/ && mv placement.conf placement.conf.source && cat placement.conf.source |grep -Ev "^#|^$" > placement.conf && chown root:placement placement.conf
# vi /etc/placement/placement.conf
在[placement_database]部分,配置数据库访问
[placement_database]
connection = mysql+pymysql://placement:openstack@controller/placement
在[api]和[keystone_authtoken]部分,配置身份认证服务。
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = placement
password = openstack2022
修改配置文件/etc/httpd/conf.d/00-placement-api.conf
# vi /etc/httpd/conf.d/00-placement-api.conf
在
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
4、同步placement 数据库
# su -s /bin/sh -c "placement-manage db sync" placement
/*
说明:忽略同步数据时报的
*/
5、重启 httpd 服务并验证
# systemctl restart httpd
执行
# placement-status upgrade check
安装 pip(如果无外网则跳过该设置,使用离线安装)
yum install -y epel-release
yum install -y python-pip
rm -rf /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo
配置国内
cat > /etc/pip.conf <<EOF
[global]
index-url = https://pypi.douban.com/simple/
[install]
trusted-host = https://pypi.douban.com
EOF
安装
# pip install osc-placement==2.2.0
离线安装
在 yum01 主机上通过
# yum install -y python-pip
# wget http://yum01/yumrepos/pip/osc-placement-2.2.0.tar.gz
# pip install osc-placement-2.2.0.tar.gz
列出可用的资源类和特征。
# openstack --os-placement-api-version 1.2 resource class list --sort-column name
# openstack --os-placement-api-version 1.6 trait list --sort-column name
5.3 安装配置并验证Glance(控制节点)
OpenStack 镜像服务就是 Glance,可以让用户上传、导出、修改、删除虚拟机镜像。另外,openstack 镜像服务支持将镜像文件存储在各种类型的存储中,如本地文件系统、Openstack 对象存储服务
OpenStack 镜像服务包括 glance-api、glance-registry 两个子服务。glance-api 对外提供通信接口,与其他服务交互;glance-registry 用于管理存储在硬盘或
修改好配置后,需要重启 openstack-glance-api.service 或
一、在控制节点(controller)安装Glance 1、登录数据库创建glance 数据库
MariaDB [(none)]> CREATE DATABASE glance default character set utf8;
创建并授予 glance 用户完全操作
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'openstack';
2、创建用户和API 服务端点
# source /etc/keystone/admin-openrc.sh
创建
# openstack user create --domain default --password openstack2022 glance
将
# 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://controller:9292
# openstack endpoint create --region RegionOne image internal http://controller:9292
# openstack endpoint create --region RegionOne image admin http://controller:9292
3、安装配置Glance
# yum -y install openstack-glance
修改/etc/glance/glance-api.conf
# cd /etc/glance/ && mv glance-api.conf glance-api.conf.source && cat glance-api.conf.source |grep -Ev "^#|^$" > glance-api.conf && chown root:glance glance-api.conf
# vi /etc/glance/glance-api.conf
在[DEFAULT]部分,增加
[DEFAULT]
show_image_direct_url = True
transport_url = rabbit://openstack:openstack@controller
在[database]部分中,配置数据库访问。
[database]
connection = mysql+pymysql://glance:openstack@controller/glance
在[keystone_authtoken]和[paste_deploy]部分中,配置身份认证服务
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = openstack2022
[paste_deploy]
flavor = keystone
在该[glance_store]部分,配置镜像使用哪种存储来存储镜像,默认使用文件系统存储,路径为
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
修改/etc/glance/glance-registry.conf
# cd /etc/glance/ && mv glance-registry.conf glance-registry.conf.source && cat glance-registry.conf.source |grep -Ev "^#|^$" > glance-registry.conf && chown root:glance glance-registry.conf
# vi /etc/glance/glance-registry.conf
在该[database]部分中,配置数据库访问。
[database]
connection = mysql+pymysql://glance:openstack@controller/glance
在[keystone_authtoken]和[paste_deploy]部分中,配置身份服务访问。
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = openstack2022
[paste_deploy]
flavor = keystone
4、同步Glance 数据库
su -s /bin/sh -c "glance-manage db_sync" glance
输出Database is synced successfully.
5、启动Glance 服务并设置成开机自启动
# systemctl enable openstack-glance-api.service openstack-glance-registry.service && systemctl start openstack-glance-api.service openstack-glance-registry.service
#systemctl status openstack-glance-api.service openstack-glance-registry.service
6、验证Glance 服务
# source /etc/keystone/admin-openrc.sh
下载测试镜像
# wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
使用本地
# wget http://yum01/yumrepos/cirros-0.4.0-x86_64-disk.img
说明:cirros 是一个裁剪过的镜像,用于
上传镜像到glance。
# openstack image create "cirros-0.4.0-x86_64" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public
上传的镜像分私有镜像和公有镜像。私有镜像只有上传者才拥有权限使用;如果要设置成公有镜像,则只需要加上--public 参数即可。确认上传的镜像和属性。
# openstack image list
或
# glance image-list
# openstack image show ${image_id}
或
# glance image-show ${image_id}
设置镜像为公有镜像
# openstack image set cirros-0.4.0-x86_64 --public
删除镜像
# openstack image delete ${image_name}
5.4 安装配置Neutron(控制节点)
OpenStack 网络使用的是一个 SDN(Software Defined Networking)组件,即
前期规划,将 ens33 网口作为外部网络(在 Openstack 术语中,外部网络常被称之为Provider 网络),同时也用作管理网络,便于测试访问,生产环境建议分开;ens37 网络作为租户网络,即vxlan 网络;ens38 作为
OpenStack 网络部署方式可选的有 OVS 和 LinuxBridge。此处选择 LinuxBridge 模式,部署大同小异。在控制节点上要启动的服务
neutron-server.service
neutron-linuxbridge-agent.service
neutron-dhcp-agent.service
neutron-metadata-agent.service
neutron-l3-agent.service
一、在控制节点(controller)安装Neutron 服务,同时配置支持vxlan 1、登录数据库创建neutron 数据库
MariaDB [(none)]> CREATE DATABASE neutron default character set utf8;
创建并授予 neutron 用户完全操作
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'openstack';
2、创建用户和API 服务端点
# source /etc/keystone/admin-openrc.sh
创建 Neutron 用户,密码设置为
openstack user create --domain default --password openstack2022 neutron
/*
说明:使用 --password openstack2022 neutron 是非交互式方式,而 --password-prompt 是交互式,需要在窗口输入
*/
将
# openstack role add --project service --user neutron admin
创建
# openstack service create --name neutron --description "OpenStack Networking" network
创建
# openstack endpoint create --region RegionOne network public http://controller:9696
# openstack endpoint create --region RegionOne network internal http://controller:9696
# openstack endpoint create --region RegionOne network admin http://controller:9696
3、安装配置Neutron
采用
# yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
修改配置文件/etc/neutron/neutron.conf
# cd /etc/neutron/ && mv neutron.conf neutron.conf.source && cat neutron.conf.source |grep -Ev "^#|^$" > neutron.conf && chown root:neutron neutron.conf
# vi /etc/neutron/neutron.conf
修改[DEFAULT]部分,增加如下配置
[DEFAULT]
# 启用 Modular Layer 2 (ML2)插件
core_plugin = ml2
# service_plugins 默认为空,如果值是 router 表示支持路由模式,即
service_plugins = router
transport_url = rabbit://openstack:openstack@controller
# 设置验证策略
auth_strategy = keystone
# 通知计算节点的网络拓扑变化
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
allow_overlapping_ips = true
修改[database]部分,配置数据库访问。
[database]
connection = mysql+pymysql://neutron:openstack@controller/neutron
修改[keystone_authtoken]部分,配置身份认证
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = openstack2022
token_cache_time=3600
增加[nova]部分,通知计算节点网络拓扑变化
[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = openstack2022
说明:配置文件中默认没有该模块,需要新增
修改[oslo_concurrency]部分,配置锁定路径。
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
修改ML2 插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-controller-install-option2.html
# cd /etc/neutron/plugins/ml2 && mv ml2_conf.ini ml2_conf.ini.source && cat ml2_conf.ini.source |grep -Ev "^#|^$" > ml2_conf.ini && chown root:neutron ml2_conf.ini
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
启用 flat 和 vlan、vxlan 网络,需要新增加
增加[ml2]部分,配置支持
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
增加[ml2_type_flat]部分,将 provider 配置为
[ml2_type_flat]
flat_networks = provider
增加[ml2_type_vlan]部分,将
[ml2_type_vlan]
network_vlan_ranges = provider
增加[ml2_type_vxlan]部分,配置
[ml2_type_vxlan]
# 取值范围
vni_ranges = 1:3000
增加[securitygroup]部分,启用
[securitygroup]
enable_ipset = true
修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件,配置Linux 桥代理
# cd /etc/neutron/plugins/ml2 && mv linuxbridge_agent.ini linuxbridge_agent.ini.source && cat linuxbridge_agent.ini.source |grep -Ev "^#|^$" > linuxbridge_agent.ini && chown root:neutron linuxbridge_agent.ini
# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
增加[linux_bridge]部分,将Provider 虚拟网络映射到物理网络(能与外网通信的网段)
[linux_bridge]
physical_interface_mappings = provider:ens33
增加[vxlan]部分,启用
[vxlan]
# 如果要禁用 vxlan,则设置为 false,同时注释 local_ip 和
enable_vxlan = true
# 每个(控制和计算)节点都要添加一个网卡,给 vxlan 专用,并且要配置 IP 地址(不需要配置网关,配置 IP 后,各节点可以使用对应
local_ip = 10.168.59.20
l2_population = true
增加[securitygroup]部分,启用安全组并配置
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
/*
说明:local_ip 要修改成控制节点/计算节点实际用于
provider 网络使用的是 ens33 网口,部署时根据实际情况调整,provider 网络可以理解为能与外部互联网相通的网络,后面在创建
--provider-physical-network 要指定是provider。
*/
修改内核配置文件/etc/sysctl.conf,确保系统内核支持网桥过滤器
# vi /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
执行以下命令,添加网桥过滤器,并设置开机加载
# modprobe br_netfilter
# sysctl -p
# sed -i '$amodprobe br_netfilter' /etc/rc.local
# chmod +x /etc/rc.d/rc.local
修改/etc/neutron/dhcp_agent.ini 文件,配置DHCP 代理
# cd /etc/neutron/ && mv dhcp_agent.ini dhcp_agent.ini.source && cat dhcp_agent.ini.source |grep -Ev "^#|^$" > dhcp_agent.ini && chown root:neutron dhcp_agent.ini
# vi /etc/neutron//dhcp_agent.ini
在[DEFAULT]部分,配置
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
修改/etc/neutron/metadata_agent.ini 文件,配置元数据代理
# cd /etc/neutron/ && mv metadata_agent.ini metadata_agent.ini.source && cat metadata_agent.ini.source |grep -Ev "^#|^$" > metadata_agent.ini && chown root:neutron metadata_agent.ini
# vi /etc/neutron/metadata_agent.ini
在[DEFAULT]部分,配置元数据主机和共享秘钥
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = openstack2022
修改/etc/neutron/l3_agent.ini 文件,配置layer-3 代理
# cd /etc/neutron/ && mv l3_agent.ini l3_agent.ini.source && cat l3_agent.ini.source |grep -Ev "^#|^$" > l3_agent.ini && chown root:neutron l3_agent.ini
# vi /etc/neutron/l3_agent.ini
在[DEFAULT]部分,配置
[DEFAULT]
interface_driver = linuxbridge
external_network_bridge =
配置计算服务以使用Neutron 网络(此步可以放到安装并配置nova)
(前提:已经安装了nova 服务yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy
openstack-nova-scheduler)
# cd /etc/nova/ && mv nova.conf nova.conf.source && cat nova.conf.source |grep -Ev "^#|^$" > nova.conf && chown root:nova nova.conf
# vi /etc/nova/nova.conf
在[neutron]部分,配置访问参数
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack2022
service_metadata_proxy = true
metadata_proxy_shared_secret = openstack2022
4、初始化创建网络
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
5、同步neutron 数据库
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
6、启动neutron 各服务并设置为开机自启动
# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
# systemctl restart neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
# systemctl status neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
二、在计算节点(compute01、compute02)安装Neutron 服务,同时配置支持vxlan
说明:如果想把 controller 节点也作为计算节点,在
1、安装组件,由于neutron 和nova 之间有相互调用配置,此处将计算服务一并安装
# yum -y install openstack-nova-compute
# yum -y install openstack-neutron-linuxbridge ebtables ipset
2、修改配置文件/etc/neutron/neutron.conf
# cd /etc/neutron/ && mv neutron.conf neutron.conf.source && cat neutron.conf.source |grep -Ev "^#|^$" > neutron.conf && chown root:neutron neutron.conf
# vi /etc/neutron/neutron.conf
在[DEFAULT]部分,配置
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
在[DEFAULT]部分,配置身份认证服务
[DEFAULT]
auth_strategy = keystone
在[keystone_authtoken]部分,配置身份认证服务
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = openstack2022
token_cache_time=3600
在[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
3、修改配置文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini
为实例建立layer-2 虚拟网络并且处理安全组规则,并将Flat 网络和外部物理业务网络接口对应起来
# cd /etc/neutron/plugins/ml2 && mv linuxbridge_agent.ini linuxbridge_agent.ini.source && cat linuxbridge_agent.ini.source |grep -Ev "^#|^$" > linuxbridge_agent.ini && chown root:neutron linuxbridge_agent.ini
# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens33
[vxlan]
enable_vxlan = true
local_ip = 10.168.59.31
l2_population = true
[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
enable_security_group = True
说明:local_ip 要修改成计算节点实际用于
provider 网络使用的是 ens33 网口,部署时根据实际情况调整,provider 网络可以理解为能与外部互联网相通的网络,后面在创建 Flat 类型网络时物理网络 --provider-physical-network 要指定是
4、修改内核配置文件/etc/sysctl.conf,确保系统内核支持网桥过滤器
# vi /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
执行以下命令,添加网桥过滤器,并设置开机加载
# modprobe br_netfilter
# sysctl -p
# sed -i '$amodprobe br_netfilter' /etc/rc.local
# chmod +x /etc/rc.d/rc.local
5、启动neutron-linuxbridge-agent 服务并设置开机自启动
# systemctl enable neutron-linuxbridge-agent.service && systemctl restart neutron-linuxbridge-agent.service
# systemctl status neutron-linuxbridge-agent.service
6、将上述1-5 步在计算节点compute02 上执行一次或者使用以下步骤
a、安装组件
# yum -y install openstack-nova-compute
# yum -y install openstack-neutron-linuxbridge ebtables ipset
b、在计算节点 compute01 上直接拷贝配置文件到
# scp /etc/neutron/neutron.conf root@compute02:/etc/neutron/
# scp /etc/neutron/plugins/ml2/linuxbridge_agent.ini root@compute02:/etc/neutron/plugins/ml2/
# scp /etc/sysctl.conf root@compute02:/etc
c、在
# sed -i 's/59.31/59.32/g' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
# modprobe br_netfilter
# sysctl -p
# sed -i '$amodprobe br_netfilter' /etc/rc.local
# chmod +x /etc/rc.d/rc.local
d、启动
# systemctl enable neutron-linuxbridge-agent.service
# systemctl restart neutron-linuxbridge-agent.service
三、验证Neutron
在控制节点执行以下操作进行验证。
# source /etc/keystone/admin-openrc.sh
1、列出成功启动的
# openstack network agent list
+ + + + + + + +
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+ + + + + + + +
| 1334a7b0-5436-4041-bc36-95f194a140f0 | Linux bridge agent | compute01 | None | :-) | UP | neutron-linuxbridge-agent |
| 5667c78a-19dd-40b1-a2df-5f361e5a04c4 | Linux bridge agent | compute02 | None | :-) | UP | neutron-linuxbridge-agent |
| d314afcc-2604-4b56-a4eb-4b9076de017f | DHCP agent | controller | nova | :-) | UP | neutron-dhcp-agent |
| d93948d3-3e1b-488f-9e58-5c8d53e626a1 | Linux bridge agent | controller | None | :-) | UP | neutron-linuxbridge-agent |
| f7927a9f-da78-4a38-8f59-9e78382dd26c | Metadata agent | controller | None | :-) | UP | neutron-metadata-agent |
+ + + + + + + +
/*
说明:上面agent list 中没有L3 agent,说明
*/
2、创建一个
# openstack network create --share --external --provider-network-type flat public --provider-physical-network provider
说明:在 linuxbridge_agent.ini 文件中的 physical_interface_mappings = provider:ens33,所以当前创建的
--provider-physical-network 要指定为
创建子网
在类型为
# openstack subnet create --network public \
--allocation-pool start=192.168.59.100,end=192.168.59.240 \
--dns-nameserver 223.5.5.5 \
--gateway 192.168.59.2 \
--subnet-range 192.168.59.0/24 subnet_192.168.59
创建网络接口
# openstack port create --network public --fixed-ip subnet=subnet_192.168.59 ip-address=192.168.59.110
查看网络
# openstack network list
查看子网
# openstack subnet list
查看网络接口
# openstack port list
删除网络
# openstack port delete ip-address=192.168.59.110
# openstack subnet delete subnet_192.168.59
# openstack network delete public
说明:删除网络前,要先后顺序删除,即先要删除子网下的网络接口-->删除子网-->删除网络
# openstack network create --share --external --provider-network-type flat public --provider-physical-network provider
# openstack subnet create --network public \
--allocation-pool start=192.168.59.100,end=192.168.59.240 \
--dns-nameserver 223.5.5.5 \
--gateway 192.168.59.2 \
--subnet-range 192.168.59.0/24 subnet_192.168.59
5.5 安装并验证Nova(计算节点+控制节点)
Nova 是 OpenStack 中的计算服务。OpenStack 中虚拟机实例(instance)生命周期都是由
nova 服务包含一系列组件,其中有
nova-scheduler:把 nova-api 调用请求映射为 OpenStack 将要调度哪个服务器来响应运行实例的请求,会根据诸如
nova-api:对外提供
nova-conductor:nova-compute 和数据库之间的一个组件,nova-conductor 建立的初衷是基于安全考虑,避免
nova-novncproxy:提供控制台服务,允许最终用户以 vnc 方式访问实例控制台,后续如果使用 spice-server,需要停止。
综合对上面组件的介绍,可以看出
一、在控制节点(controller)安装nova 服务
1、登录数据库创建nova,nova_api,nova_cell0 数据库
MariaDB [(none)]> CREATE DATABASE nova_api default character set utf8;
MariaDB [(none)]> CREATE DATABASE nova default character set utf8;
MariaDB [(none)]> CREATE DATABASE nova_cell0 default character set utf8;
创建并授予 nova 用户完全操作
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
/*
说明:OpenStack Rocky 版本需添加 Placement 数据库,在
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'openstack';
*/
2、创建用户和API 服务端点
# source /etc/keystone/admin-openrc.sh
# openstack user create --domain default --password-prompt nova
密码: openstack2022
将 nova 加入到 service 项目以及
# 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://controller:8774/v2.1
# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
使用命令查看
# openstack endpoint list
/*
说明:OpenStack Rocky 版本需添加 placement 用户,Stein 版本已在单独的 Placement 组件添加,请忽略以下操作(可以使用
创建用户
openstack user create --domain default --password-prompt placement
添加角色。
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://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778
*/
3、安装配置Nova
安装组件
# yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
/*
说明:
OpenStack Rocky 版本需在这里安装 placement,Stein 版本之后已在单独的
yum -y install openstack-nova-placement-api
*/
修改配置文件/etc/nova/nova.conf
说明:在配置 neutron 时已经配置过 nova.conf,所以此处直接修改
在[DEFAULT]部分,开启计算和元数据
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:openstack@controller
my_ip = 192.168.59.20
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
allow_resize_to_same_host = true
说明:my_ip 为控制节点的管理
在[api_database]部分,配置数据库访问
[api_database]
connection = mysql+pymysql://nova:openstack@controller/nova_api
在[database]部分,配置数据库访问
[database]
connection = mysql+pymysql://nova:openstack@controller/nova
在[api]部分,配置身份认证服务
[api]
auth_strategy = keystone
token_cache_time=3600
在[keystone_authtoken]部分,配置身份认证信息
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack2022
token_cache_time=3600
在[neutron]部分,启用元数据代理并配置密码
说明:此部分在安装配置
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack2022
service_metadata_proxy = true
metadata_proxy_shared_secret = openstack2022
在[vnc]部分,配置 VNC 代理以使用控制器节点的管理接口
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
novncproxy_host=0.0.0.0
novncproxy_port=6080
novncproxy_base_url=http://controller:6080/vnc_auto.html
说明:访问者本地要写 hosts,将 controller 的 IP 写到本地
在[glance]部分,配置 glance 服务
[glance]
api_servers = http://controller:9292
在[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
在[placement]部分,配置对
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = openstack2022
在[scheduler]部分,配置周期性发现计算节点间隔
[scheduler]
discover_hosts_in_cells_interval = 180
说明:如果未加上述参数,则在控制节点需要执行以下命令:nova-manage cell_v2 discover_hosts
修改配置文件/etc/neutron/metadata_agent.ini
说明:此部分在安装配置
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = openstack2022
4、同步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
说明:忽略
验证 cell0 和
# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
6、启动nova 服务并设置为开机自启动
# systemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl status openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
二、在计算节点(compute01、compute02)安装配置Nova
在计算节点执行以下操作
1、安装组件
# yum -y install openstack-nova-compute
2、修改配置文件/etc/nova/nova.conf
# cd /etc/nova/ && mv nova.conf nova.conf.source && cat nova.conf.source |grep -Ev "^#|^$" > nova.conf && chown nova:root nova.conf
# vi /etc/nova/nova.conf
在[DEFAULT]部分,配置计算和元数据
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:openstack@controller
my_ip = 192.168.59.31
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
说明:
此处的 my_ip 设置为 计算节点的管理
在[api]部分,配置身份认证服务
[api]
auth_strategy = keystone
在[keystone_authtoken]部分,配置身份认证服务
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack2022
token_cache_time=3600
在 [neutron]部分,配置访问参数
[neutron]
url = http://controller:9696
auth_url = http://controller:5000/v3
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack2022
在[vnc]部分,启用并配置远程访问控制台。
[vnc]
enabled = true
# 此处监听 ip 不能写当前计算节点 ip,因为如果要做实例迁移,迁移后实例
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
vncserver_proxyclient_address = $my_ip
在[glance]部分,配置 glance 服务
[glance]
api_servers = http://controller:9292
在[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
在[placement]部分,配置
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = openstack2022
在[scheduler]部分,配置周期性发现计算节点间隔
[scheduler]
discover_hosts_in_cells_interval = 180
在[libvirt]部分,配置虚拟化类型。
# 虚拟机模拟 openstack 可能需要将 virt_type 设置为qemu,否则创建虚拟机后,一直停在
[libvirt]
# virt_type = qemu
virt_type = kvm
num_pcie_ports=10
说明:num_pcie_ports 为虚拟机的 pci 数量,最多支持设置
3、安装并配置kvm 组件
# yum -y install qemu-kvm-common-ev qemu-kvm-tools qemu-kvm-ev libvirt-daemon-kvm qemu-guest-agent qemu-img-ev
修改配置文件/etc/libvirt/libvirtd.conf
# cat libvirtd.conf |grep -v "^#" |grep -v "^$"
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
# 计算节点 compute02 上要修改成
listen_addr = "192.168.59.31"
auth_tcp = "none"
修改/etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
4、启动libvirtd、nova-compute 服务,并设置成开机自启动
# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl restart libvirtd.service openstack-nova-compute.service
# systemctl status libvirtd.service openstack-nova-compute.service
# netstat -atnp |grep 16509
# virsh version
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0
Running hypervisor: QEMU 2.12.0
三、验证Nova
在控制节点执行以下操作进行验证。
# source /etc/keystone/admin-openrc.sh
查看计算服务组件状态
# openstack compute service list
查看已注册的计算节点
# openstack compute service list --service nova-compute
/*
说明:执行 openstack compute service list --service nova-compute 可能会遇到以下报错:
[23:35:07]The server is currently unavailable. Please try again at a later time.<br /><br />
[23:35:07]The Keystone service is temporarily unavailable.
原因是在创建
没有给 nova 用户授予
openstack role add --project service --user nova admin
在增加新的计算节点时,需要在控制器节点手动执行以下命令,用于发现新计算节点
# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
如果已经配置了 discover_hosts_in_cells_interval = 180,则会周期性注册新增的计算节点,不需要手动执行上述命令
[scheduler]
discover_hosts_in_cells_interval = 180
*/
列出 keystone 服务中的 API 端点以验证与
# openstack catalog list
创建指定规格的
# openstack flavor create n1.nano --vcpus 1 --ram 128 --disk 1
创建虚拟机实例
# openstack server create --flavor n1.nano \
--image cirros-0.4.0-x86_64 \
--nic net-id=public \
--security-group default vm01
查看所有实例
# openstack server list
查看某一个实例的详细信息
# openstack server show d032241e-0bed-412c-a901-5a1b824e792f
登录实例
# virsh console instance-00000001
说明:使用cirros 镜像创建的实例没有 ssh 服务,所以要到对应的计算节点(compute02)上使用virsh console 命令进行登录
说明:使用virsh console 登录实例后如何退出实例:直接按
# openstack server stop vm01
启动实例
# openstack server start vm01
删除所选的实例
# openstack server delete vm01
5.6 安装配置Horizon
OpenStack Dashboard 就是 Horizon,提供了基于 Web 控制台,是一个运行在
一、在控制节点(controller)安装Horizon 服务
1、安装软件
# yum -y install openstack-dashboard
2、修改配置文件/etc/openstack-dashboard/local_settings
# vi /etc/openstack-dashboard/local_settings
a、配置WEBROOT 路径和会话超时时间
WEBROOT = '/dashboard/'
# https://docs.openstack.org/horizon/ussuri/configuration/settings.html
SESSION_TIMEOUT = 86400
b、更改 OPENSTACK_HOST 值为"controller",若为
OPENSTACK_HOST = "controller"
c、允许所有主机访问,注意格式,逗号后面有一个空格。
ALLOWED_HOSTS = ['*', ]
d、配置
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
e、配置API 版本。
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 3,
}
f、使用
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
g、启用对多域的支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
h、配置
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
i、配置user 为通过
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
j、开启对第
OPENSTACK_NEUTRON_NETWORK = {
'enable_router': True,
'enable_quotas': True,
'enable_rbac_policy': True,
'enable_distributed_router': False,
'enable_ha_router': False,
'enable_ipv6': False,
'enable_lb': False,
'enable_firewall': False,
'enable_vpn': False,
'enable_fip_topology_check': True,
'default_dns_nameservers': [],
'supported_provider_types': ['*'],
'segmentation_id_range': {},
'extra_provider_types': {},
'supported_vnic_types': ['*'],
'physical_networks': [],
}
k、开启卷备份特性,需要后端存储类型为 swift 或
OPENSTACK_CINDER_FEATURES = {
'enable_backup': True,
}
l、配置时区:上海。
TIME_ZONE = "Asia/Shanghai"
3、修改配置文件/etc/httpd/conf.d/openstack-dashboard.conf
# vi /etc/httpd/conf.d/openstack-dashboard.conf
在第
WSGIApplicationGroup %{GLOBAL}
4、修改/usr/share/openstack-dashboard/ 文件夹属组、属主为apache
# chown -R apache:apache /usr/share/openstack-dashboard/
5、重新启动httpd 服务器和Memcache 服务
# systemctl restart httpd.service memcached.service
登录
http://controller/dashboard/
域:Default
账号:admin
密码:openstack2022
5.7 安装并验证cinder
块存储服务(Block Storage Service)cinder,作为 OpenStack 的块存储服务,为 Instance 提供虚拟磁盘,其类似 AWS 的 EBS(Elastic Block Storage),它们之间的区别在于存储卷暴露给虚拟机实例的方式。在 OpenStack 中,通过 iSCSI 暴露 LVM 卷组(VG)对卷进行管理,所以使用 cinder 的存储节点都会有
cinder 在控制节点上需要安装openstack-cinder,对应要启动的服务有:cinder-api、cinder-scheduler。修改好配置后,需要启动:
cinder 在存储节点上需要安装openstack-cinder lvm2 device-mapper-persistent-data openstack-cinder targetcli python-keystone
cinder 在存储节点上运行的服务是:cinder-volume,当然还需启动其依赖的
openstack-cinder-volume.service target.service
/*
说明:cinder-api 用来接收api 请求,然后将请求消息加工后放到 MQ 里,cinder-scheduler 从 MQ 中消费消息,通过调度算法选择相应的存储节点,然后将消息放到 MQ 里,cinder-volume 收到
没有安装
控制节点和存储节点的 cinder.conf 配置可以相同,前提是当控制节点不具备对应的 VG 时,不要启动 openstack-cinder-volume.service,否则会报错找不到
*/
一、在控制节点(controller)安装配置Cinder 块存储服务
1、登录数据库创建cinder 数据库
MariaDB [(none)]> CREATE DATABASE cinder default character set utf8;
创建并授予 cinder 用户完全操作
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'openstack';
2、创建用户和API 服务端点
# source /etc/keystone/admin-openrc.sh
创建
# openstack user create --domain default --password openstack2022 cinder
密码:openstack2022
将 cinder 加入到 service 项目以及
# openstack role add --project service --user cinder admin
创建 cinderv2 和
# 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://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
3、安装cinder 软件包并修改配置文件
# yum -y install openstack-cinder
修改配置文件/etc/cinder/cinder.conf
# cd /etc/cinder/ && mv cinder.conf cinder.conf.source && cat cinder.conf.source |grep -Ev "^#|^$" > cinder.conf && chown cinder:root cinder.conf
# vi /etc/cinder/cinder.conf
在[DEFAULT]部分,配置认证信息
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
auth_strategy = keystone
# 配置 my_ip 选项以使用控制器节点的管理接口
my_ip = 192.168.59.20
# 指定存储类型,否则在创建卷时,类型为 DEFAULT
default_volume_type = hdd
在[database]部分,配置数据库
[database]
connection = mysql+pymysql://cinder:openstack@controller/cinder
在[keystone_authtoken]部分,配置认证信息
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = openstack2022
在[oslo_concurrency]配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
修改配置文件 /etc/nova/nova.conf,让计算服务支持块存储
# vi /etc/nova/nova.conf
在[cinder]部分,增加如下配置
[cinder]
os_region_name = RegionOne
4、同步cinder 数据库
# su -s /bin/sh -c "cinder-manage db sync" cinder
说明:忽略带有“Deprecated: Option...” 输出
5、重启服务并设置成开机自启动
重启
# systemctl restart openstack-nova-api.service
启动
# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
# systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service
# systemctl status openstack-cinder-api.service openstack-cinder-scheduler.service
6、验证控制节点cinder-scheduler,状态为up 即正常
# openstack volume service list
二、在存储节点(compute01、compute02)安装配置Cinder 服务
cinder 在存储节点上运行的服务是:cinder-volume,当然其依赖
修改好配置后,需要启动的服务有:lvm2-lvmetad.service、openstack-cinder-volume.service target.service
1、在存储节点安装和配置LVM 并设置为开机自启动
# yum -y install lvm2 device-mapper-persistent-data
# systemctl enable lvm2-lvmetad.service
# systemctl start lvm2-lvmetad.service
/*
说明:系统安装时就采用的
*/
2、计算节点compute01、compute02 分别规划了1 个50GB 的硬盘用作虚机存储,在系统上对应是/dev/sdb
创建
# pvcreate /dev/sdb
创建 VG,VG 名称定义为
# vgcreate cinder-volumes /dev/sdb
/*
说明:不同存储节点上相同用途的 VG 名称设置成相同,因为 cinder.conf 中需要指定 volume_group,另外
*/
3、修改配置文件/etc/lvm/lvm.conf
# vi /etc/lvm/lvm.conf
在
devices {
# 在
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
说明:filter 过滤器阵列中的每个项目开头为“a”或者“r”,用于接受或用于拒绝某个设备,如果存储节点在操作系统磁盘上使用 LVM,则还必须将关联的系统盘设备添加到过滤器。同样,如果计算节点在操作系统磁盘上使用
参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/cinder-storage-install.html
4、安装和配置存储节点
/*
说明:存储节点的 cinder.conf 包含了控制节点的 cinder.conf,如果控制节点即是存储节点,可以直接用存储节点的
*/
安装软件包
# yum -y install openstack-cinder targetcli python-keystone
修改配置文件/etc/cinder/cinder.conf
# cd /etc/cinder/ && mv cinder.conf cinder.conf.source && cat cinder.conf.source |grep -Ev "^#|^$" > cinder.conf && chown cinder:root cinder.conf
# vi /etc/cinder/cinder.conf
在[DEFAULT]部分,配置 RabbitMQ 消息队列
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
auth_strategy = keystone
#配置 my_ip 为为存储节点上管理网络接口的 IP 地址,compute01 为 31,compute02 为
my_ip = 192.168.59.31
#启用 LVM 后端,这里的
enabled_backends = lvm
#配置 Image 服务
glance_api_servers = http://controller:9292
在[database]部分,配置数据库访问
[database]
connection = mysql+pymysql://cinder:openstack@controller/cinder
在[keystone_authtoken]部分,配置身份认证服务信息
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = openstack2022
新增[lvm]部分,使用 LVM 驱动程序,cinder-volumes 卷组,iSCSI 协议和相应的 iSCSI 服务配置
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
# volume_group 对应前面创建的
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = lioadm
volume_backend_name = cinder-volumes
在[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
5、启动cinder-volume、target 服务,并设置开机自启动
# systemctl enable openstack-cinder-volume.service target.service
# systemctl restart openstack-cinder-volume.service target.service
同步compute01 上的cinder.conf 到compute02 上,然后在compute02 上只需要修改cinder.conf 中的my_ip 为32,重启cinder-volume、target 并设置为开机自启动即可
在compute02 上操作
# scp -rp root@192.168.59.31:/etc/cinder/cinder.conf* /etc/cinder/
# sed -i 's/59.31/59.32/g' /etc/cinder/cinder.conf
# systemctl enable openstack-cinder-volume.service target.service
# systemctl restart openstack-cinder-volume.service target.service
三、在控制节点(controller)进行验证
1、列出存储服务组件,若状态均为
# source /etc/keystone/admin-openrc.sh
# openstack volume service list
Cinder 常用命令
a、创建存储卷
# openstack volume create --size 1 volume01
说明:创建一个卷名为 volume01 大小为
b、查看存储卷列表
# openstack volume list
c、为存储卷创建快照
# openstack volume snapshot create --volume volume01 snap-volume01
说明:为卷volume01 创建一个名为
d、查看快照列表
# openstack volume snapshot list
e、挂载卷到实例
# nova volume-attach vm01 ead55f47-a0f3-4eb9-854e-9dff638ff534 /dev/vdb
说明:挂载卷时,要指定卷 id,此处要指定卷 volume01 的 id,然后是连接到实例
虚拟机卸载卷
# nova volume-detach vm01 ead55f47-a0f3-4eb9-854e-9dff638ff534
说明:卸载卷时,请先在操作系统层停止正在使用要卸载的应用,umount 掉,然后再执行
删除所选存储卷
# openstack volume snapshot delete snap-volume01
# openstack volume delete volume01
说明:删除卷要具备
# openstack volume show volume01
# 禁用存储节点
# openstack volume service set --disable compute02@lvm cinder-volume
# 启用存储节点
# openstack volume service set --enable compute02@lvm cinder-volume
6 Horizon 使用
6.1 Horizon 功能介绍
镜像管理、规格管理、网络管理、密钥管理、实例管理、安全组管理、卷管理以及集成ceph 等操作
未完待续...
转自 itcooking 转自 itcooking