me小怪兽

导航

openstack安装(超详细)

 

学习openstack 目标

使用OpenStack 构建企业私有云,本教程偏重于动手实操能力,主要用于帮助那些 OpenStack 初学者能更加熟练地使用OpenStack,同时也适用于刚刚从事 Linux 运维/开发的童鞋,去更加了解 OpenStack。本教程全是个人工作实践经验分享,若需了解 Openstack 理论知识可以查阅官档(https://docs.openstack.org/)。

OpenStack 安装组件较多,配置文件也多,尤其是 Neutron 和Nova 部分,相互之间也有调用,需要有一定的篇幅来讲解安装配置。

 

1、环境说明:

a:生产环境尽量要选配置高一些的服务器,如配置:双 CPU 2.4GHz 24cores*2/64GB*8/600GB SAS*2 或者更高主频的 CPU,网络至少是 10Gb/s,主要还是根据自己实际业务场景去选型。

b:实验环境规划及说明

宿主机硬件配置:i7-10750H / 32GB / TOSHIBA 500G SSD / WD 1TB SSD

宿主机操作系统:Windows 10 64 位专业版 / 版本号:21H2宿主机使用软件:VMware® Workstation 16 Pro

OpenStack 版本:Train

Ceph 版本: 14.2.22(Nautilus)组网方式:

 

虚拟机规划见下表:

 

 

其中,template 主机在完成系统安装以及相关参数设置后,就可以关闭,后面仅用作模板克隆用,使用模板的目的是保证所有主机软件包及参数一致。生产环境一般是使用 cobbler kickstart 无人值守来完成系统安装及参数设置。

创建虚拟机存放目录

E:\virtual_system\openstack> md cpeh01 cpeh02 ceph03 yum01 controller compute01 compute02 template

 学习思维导图

 系统安装及设置

2.1 系统安装

1、制作主机模板 template,后续用到的主机均以此主机为模板进行克隆系统安装要求

 

vmware workstation 中安装,需要勾选对应虚拟化选项

 

 

 

  • 删除不用硬件设备,例如 打印机、声卡。vxlan  ceph 集群网卡可以安装完系统初始化后时再添加
  • 操作系统镜像: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

 

 

 

 

 

 

磁盘分区,先使用 LVM 方式自动分区

 

 

 

 

 

 

 

 

 

 

 

 

 

 

开始安装系统,安装过程中大概持续 5-10mins,此时可以为 root 用户设置密码,并且创建一个管理用户centos

 

 

 

安装完成后,进行系统初始化参数设置

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 (使用 NAT 网络,可出外网)

 

# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

IPV6INIT=no

NAME=ens33

DEVICE=ens33

ONBOOT=yes

# ip 地址,不同主机修改成不同 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

上述 sed 命令用于将/etc/selinux/config 文件中的SELINUX=enforcing 替换成SELINUX=disabled

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 是主机创建时没有勾选 intel VT-x/EPT

AMD-V/RVI)

*/

 

# 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 硬件辅助虚拟化,可有效解决 CPU 型号过旧,导致创建云主机故障的问题

*/

2.3 克隆第 1 台虚拟机

完成系统初始化参数设置后,克隆第台虚拟机用作离线 yum 源服务端,然后 template 模板虚拟机使用离线 yum 源更新系统,再克隆出其他虚拟机。克隆虚拟机操作步骤如下图所示

右键点击模板主机,选择“管理”-->“克隆”

 

 

勾选“虚拟机中的当前状态”,勾选“创建完整克隆”

 

 

输入克隆后的虚拟机名称以及虚拟机系统保存位置。

 

完成克隆后,编辑虚拟机,调整下内存以及 CPU 配置,用作 yum 源服务器配置不需要太高,磁盘空间足够即可。

制作离线 yum 

3.1 配置离线 yum 源服务端

在上一节视频有处错误,第 1 处是设置/boot 分区时,本意是设置成 2GB,但在设置 VG 名时,大小还原成了 1024MB,然后就是设置 yum01  hostname

使用了追加,本意是覆盖,所以重新制作了虚拟机模板。

 

1、启动克隆好的虚拟机,改hostnameip

# 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

再次检查一下 selinux 和防火墙状态,确保在系统初始化设置时就已经关闭。

 

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

添加 ceph-nautilus 源

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 离线源为例

安装 zabbix-4.0  yum 源配置文件

# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm

安装好 zabbix-release-4.0-2.el7.noarch.rpm 会在/etc/yum.repos.d/ 下生成zabbix.repo 文件

# 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 包建立索引,描述各包所需依赖信息,并形成元数据

进到 /var/www/html/yumrepos/ 目录下的每一个目录执行 createrepo . 命令 

# 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 update 时可能会出现如下包冲突情况。

 

 

处理方法:根据提示卸载对应包,再执行 update

# 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/目录下会重新生成缺省的 repo 文件,需要先移除,才能继续下一步。

*/

 

安装 OpenStack 客户端

yum -y install python-openstackclient

 

完成更新后,重启一下系统,确保没有问题。

关闭 template 虚拟机,基于更新后的 template 虚拟机进行克隆,需克隆台主机,包括 controller、compute01、compute02、ceph01、ceph02、ceph03

/*

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、完成克隆后,启动克隆好的虚拟机,修改hostnameIP

controller 主机上修改

# 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

compute01 主机上修改

# 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

compute02 主机上修改

# 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 此处先不修改,等在后面安装 ceph 时再根据规划修改

按照规划,为 compute01、compute02 添加硬盘,controller、compute01、compute02 各增加块网卡,此处以 controller 截图为例编辑 controller 虚拟机,添加 网络适配器

 

添加 Lan 区段,即自定义网段(类似 hub 或网桥),也可以通过添加网络,vmware 全局支持添加 20 个虚拟网络(VMNet0-VMNet19)。

 

 

 

 

 按上述操作完成 compute01  compute02  2 块网卡添加。

compute01、compute02 各增加一块 50G 硬盘(用作 cinder 存储)

 

 

 

 

 

 

 

 

以同样方式完成 compute02 硬盘添加。

说明:若在系统运行时添加磁盘,则添加完成后,需要运行命令发现硬盘 echo "- - -" > /sys/class/scsi_host/host*/scan

检查并完成上述操作后,启动 controller、compute01、compute02,开始进入 openstack 部署环节。

完成 controller、compute01、compute02 上的第 2、3 块网卡IP 配置。

在所有节点上分别执行 dhclient 命令

# dhclient

再使用 ifconfig 获到第 2、3 网卡名称,此处分别为 ens37  ens38。

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

 

前期准备工作越充分,后期使用维护就越轻松从容。

openstack 基础组件安装

 4.1 NTP 安装及配置

1、统一时区,在所有节点(controllercompute01compute02上执行

# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

注:安装时若有选择正确时区,可忽略上述设置

2、在控制节点 controller 安装chrony,将控制节点作为 NTP 服务端,默认已经安装。

# yum -y install chrony

修改配置 /etc/chrony.conf

指定时间同步服务器,这里采用阿里云时钟源。如果无外网,则指向本机主机名

# 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、在所有计算节点(compute01compute02)安装 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 选择了还是 Y,都只允许在本机登录。可以使用以下 sql 进行 update 设置

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 模块下添加如下参数:

[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 ".*" ".*" ".*"

也可在 web 控制台完成用户添加

注:为 openstack 用户设置的密码,密码不要包含字符"#"

5、启用 rabbitmq-manager 插件,开启 Web 控制台

# rabbitmq-plugins enable rabbitmq_management

6、登录验证

控制台登录:http://controller:15672

guest/guest (缺省账户)

openstack/openstack

/*

注:使用 hosts 访问,需要修改 C:\Windows\System32\drivers\etc\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 地址,也可以设置成 192.168.59.20

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、确保所有节点上已经安装了 OpenStack 客户端

# yum -y install python-openstackclient

在模板主上就已经安装,此处忽略该安装步骤。

openstack 业务组件安装

5.1 安装 keystone(控制节点)

keystone OpenStack 的身份认证服务(Identity Service),OpenStack 中的认证、鉴权、角色管理都是由 keystone 来完成,同时还提供服务目录注册功能。keystone 是一个关键服务,同时也是安装 Openstack 时第一个要安装的服务。

配置 keystone 时,需要为用户创建合适的角色、服务、租户、用户账号和服务 API 端点。

keystone 里有相关概念需要了解。比如,租户、角色、用户。

1、租户对应项目,它有一些资源,包括用户、镜像、实例,还有仅对该项目可见的网络(如果创建网络时没有勾选“共享”)

2、一个用户可隶属于一个或多个项目(租户),并且可以在这些项目间进行切换,部署 Openstack 至少要创建admin  service 二个项目。

3、service 项目是一个特殊的项目,Openstack 自身服务都配置在 service 项目中,这样做的目的是提高安全性。

4、一个用户可以被指定成多种角色,即一个用户可能会有多个项目,在不同项目中角色不同。例如,user1 同时在project1  project2 中,在 project1

的角色是 admin,在 project2 的角色是user。

5、openstack 中默认只有 4 种角色,包括 admin(管理云环境)、member(云环境普通用户角色)、reader、user

OpenStack keystone 服务托管在 httpd 上,修改配置后需要重启httpd

一、在控制节点(controller安装 Keystone

1、登录数据库创建keystone 数据库

MariaDB [(none)]> CREATE DATABASE keystone default character set utf8;

创建并授予keystone 用户完全操作 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,即生成令牌方式 provider = fernet

配置可直接参考 keystone.conf

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。默认只有一个区域,且标识为 RegionOne。

ii、修改--bootstrap-password 后为用户 admin 的密码,此处设置为 openstack2022

iii、执行身份引导服务后,就不需要再手功创建 identity  API,即以下条命令不需要执行 openstack endpoint create --region RegionOne identity public http://controller:5000/v3 openstack endpoint create --region RegionOne identity internal http://controller:5000/v3 openstack endpoint create --region RegionOne identity admin http://controller:5000/v3

每个服务的API 都会有 API 地址,公共(面向终端用户)、内部(仅在本地局域网内)、管理员(可以被有管理员权限的用户使用),通过配置在不同的 IP 段上来实现适当隔离。

*/

 二、在控制节点(controller配置 Apache 服务

1、修改 apache 配置文件

# vi /etc/httpd/conf/httpd.conf

96 行增加如下内容

 

 

 

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

 

 

/*

创建新域 example,(仅用于测试,可以不创建)。

# openstack domain create --description "An Example Domain" example

# openstack domain list

创建普通项目 myproject(仅用于测试,可以不创建)。

# 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 项目和 myuser 用户(仅用于测试,可以不创建)。

# openstack role add --project myproject --user myuser myrole

# openstack role list

*/

 

一个租户在OpenStack 里就是一个项目,创建用户时必须先要有租户(项目),同时还需要一个能分配给该用户的角色,这样创建的用户才有意义。创建 service 项目(租户),service 项目将作为 OpenStack 的系统项目,所有系统服务都要加入到 service 项目中。

# openstack project create --domain default --description "Service Project" service

# openstack project list

创建 user 角色

# openstack role create user

# openstack role list

6、验证 Keystone

# source /etc/keystone/admin-openrc.sh

# openstack token issue

 

取消环境变量,验证

# unset OS_AUTH_URL OS_PASSWORD

使用 admin 用户,请求身份验证令牌。

# 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

输入 admin 的密码:openstack2022

 

5.2 安装 placement(控制节点)

Placement  Openstack 中主要用于跟踪和监控各种资源的使用情况,例如,在 Openstack 中包括计算资源、存储资源、网络等各种资源。Placement用来跟踪管理每种资源的当前使用情况。

Placement 服务在 Openstack 14.0.0 Newton 版本中被引入到 nova 库,并在 19.0.0 Stein 版本中被独立到 Placement 库中,即在 stein 版被独立成组件。 Placement 服务提供 REST API 堆栈和数据模型,用于跟踪资源提供者不同类型的资源的库存和使用情况。 资源提供者可以是计算资源、共享存储池、 IP 池等。例如,创建一个实例时会消耗计算节点的CPU、内存,会消耗存储节点的存储;同时还会消耗网络节点的 IP 等等,所消耗资源的类型被跟踪为类。Placement 提供了一组标准资源类(例如 DISK_GB、MEMORY_MB VCPU),并提供了根据需要定义自定义资源类的能力。

placement 服务托管在httpd 上,修改配置需重启 httpd。

一、在控制节点(controller)安装 Placement

1、登录数据库创建placement 数据库

MariaDB [(none)]> CREATE DATABASE placement default character set utf8;

创建并授予placement 用户完全操作 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 项目以及 admin 角色

# openstack role add --project service --user placement admin

创建服务实体

# openstack service create --name placement --description "Placement API" placement

 

创建 Placement API 服务端点

# 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=

修改配置文件 /etc/placement/placement.conf

# 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

ErrorLog /var/log/placement/placement-api.log 下面添加:

 

<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

/*

说明:忽略同步数据时报的 Warning

*/

 

5、重启 httpd 服务并验证 Placement

# systemctl restart httpd

执行 placement-status 命令检查状态

# 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 

 

配置国内 pip 源

cat > /etc/pip.conf <<EOF

[global]

index-url = https://pypi.douban.com/simple/

[install]

trusted-host = https://pypi.douban.com

EOF

安装 osc-placement 插件

# pip install osc-placement==2.2.0

 

离线安装

yum01 主机上通过 pip download osc-placement==2.2.0 下载离线包放入/var/www/html/yumrepos/pip 目录下

# 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 对象存储服务 swift、ceph 等分布式存储中。

OpenStack 镜像服务包括 glance-api、glance-registry 两个子服务。glance-api 对外提供通信接口,与其他服务交互;glance-registry 用于管理存储在硬盘或 glance 数据库中的对象。

修改好配置后,需要重启 openstack-glance-api.service  openstack-glance-registry.service

一、在控制节点(controller安装 Glance 1、登录数据库创建glance 数据库

MariaDB [(none)]> CREATE DATABASE glance default character set utf8;

创建并授予 glance 用户完全操作 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

创建 glance 用户,密码设置为:openstack2022

# openstack user create --domain default --password openstack2022 glance

 

glance 加入到service 项目以及admin 角色

# openstack role add --project service --user glance admin

 

创建 glance 服务实体

openstack service create --name glance --description "OpenStack Image" image

 

创建 Glance API 服务端点

# 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]部分,增加 rabbitmq 配置

[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]部分,配置镜像使用哪种存储来存储镜像,默认使用文件系统存储,路径为 /var/lib/glance/images/。也支持swift、ceph、GlusterFS

[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

 

下载测试镜像 cirros 上传到Glance

# wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

 

使用本地 yum 源下载地址

# wget http://yum01/yumrepos/cirros-0.4.0-x86_64-disk.img

说明:cirros 是一个裁剪过的镜像,用于 Openstack 故障检测和测试。

 

上传镜像到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)组件,即 Neutron,SDN 是一个可插拔的架构,支持插入交换机、防火墙、负载均衡器等,这些都定义在软件中,从而实现对整个云基础设施的精细化管控。

前期规划,将 ens33 网口作为外部网络( Openstack 术语中,外部网络常被称之为Provider 网络),同时也用作管理网络,便于测试访问,生产环境建议分开;ens37 网络作为租户网络,即vxlan 网络;ens38 作为 ceph 集群网络。

 

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 用户完全操作 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 用户,密码设置为 openstack2022

openstack user create --domain default --password openstack2022 neutron

 

/*

说明:使用 --password openstack2022 neutron 是非交互式方式,而 --password-prompt 是交互式,需要在窗口输入 2 次密码确认

*/

 

neutron 加入到service 项目以及admin 角色

# openstack role add --project service --user neutron admin

 

创建 Neutron 服务实体。

# openstack service create --name neutron --description "OpenStack Networking" network

 

创建 Neutron API 服务端点。

# 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

采用 Provider-LinuxBridge 模式

# 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 表示支持路由模式,即 vxlan

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_flat]、[ml2_type_vxlan]和[securitygroup]配置

增加[ml2]部分,配置支持 vxlan

[ml2]

type_drivers = flat,vlan,vxlan

tenant_network_types = vxlan

mechanism_drivers = linuxbridge,l2population

extension_drivers = port_security

 

增加[ml2_type_flat]部分,将 provider 配置为 flat 网络

[ml2_type_flat]

flat_networks = provider

 

增加[ml2_type_vlan]部分,将 vlan 配置为flat 网络

[ml2_type_vlan]

network_vlan_ranges = provider

 

增加[ml2_type_vxlan]部分,配置 vxlan 网络识别的网络范围

[ml2_type_vxlan]

# 取值范围 1-16777215

vni_ranges = 1:3000

 

增加[securitygroup]部分,启用 ipset 提高安全效率。

[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]

# 如果要禁用 vxlan,则设置为 false,同时注释 local_ip  l2_population

enable_vxlan = true

# 每个(控制和计算)节点都要添加一个网卡,给 vxlan 专用,并且要配置 IP 地址(不需要配置网关,配置 IP 后,各节点可以使用对应 IP ping 通)

local_ip = 10.168.59.20

l2_population = true

增加[securitygroup]部分,启用安全组并配置 LinuxBridge iptables 驱动。

[securitygroup]

enable_security_group = true

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

 

/*

说明:local_ip 要修改成控制节点/计算节点实际用于 vxlan IP。

provider 网络使用的是 ens33 网口,部署时根据实际情况调整,provider 网络可以理解为能与外部互联网相通的网络,后面在创建 Flat 类型网络时

--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]部分,配置 Linuxbridge 驱动接口,DHCP 驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据

[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]部分,配置 Linuxbridge 接口驱动和外部网络网桥

[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

 

二、在计算节点(compute01compute02安装 Neutron 服务,同时配置支持vxlan

说明:如果想把 controller 节点也作为计算节点,在 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]部分,配置 RabbitMQ 消息队列访问。

[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

为实例建立 layer2 虚拟网络并且处理安全组规则,并将 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 要修改成计算节点实际用于 vxlan IP。

provider 网络使用的是 ens33 网口,部署时根据实际情况调整,provider 网络可以理解为能与外部互联网相通的网络,后面在创建 Flat 类型网络时物理网络 --provider-physical-network 要指定是 provider。

 

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 上直接拷贝配置文件到 compute02 上

# 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、在 compute02 上操作

# 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、启动 neutron-linuxbridge-agent 服务并设置开机自启动

# systemctl enable neutron-linuxbridge-agent.service

# systemctl restart neutron-linuxbridge-agent.service

 

三、验证Neutron

在控制节点执行以下操作进行验证。

# source /etc/keystone/admin-openrc.sh

1、列出成功启动的 Neutron 代理

# 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,说明 neutron-l3-agent.service 没有启动

*/

2、创建一个 Flat 网络

# openstack network create --share --external --provider-network-type flat public --provider-physical-network provider

说明:在 linuxbridge_agent.ini 文件中的 physical_interface_mappings = provider:ens33,所以当前创建的 flat 类型的物理网络

--provider-physical-network 要指定为 provider

 

创建子网

在类型为 Flat 名称为public 网络下创建子网

# 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 服务包含一系列组件,其中有 nova-api、nova-conductor、nova-scheduler、nova-novncproxy 、nova-compute

nova-scheduler:把 nova-api 调用请求映射为 OpenStack 将要调度哪个服务器来响应运行实例的请求,会根据诸如 CPU 构架、可用域、内存、负载等作出调度决策。

nova-api:对外提供 API 接口来管理内部基础设施,例如启动停止实例。

nova-conductor:nova-compute 和数据库之间的一个组件,nova-conductor 建立的初衷是基于安全考虑,避免 nova-compute 直接访问数据库。

nova-novncproxy:提供控制台服务,允许最终用户以 vnc 方式访问实例控制台,后续如果使用 spice-server,需要停止。 nova-compute:用于管理实例生命周期。通过消息队列接收请求,并承担操作工作。

综合对上面组件的介绍,可以看出 Nova 也是一个非常重要的核心组件,且对应子模块非常多,配置也会变得杂。

一、在控制节点(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 用户完全操作 nova,nova_api,nova_cell0 库权限

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 数据库,在 Stein 版本之后已在单独的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 项目以及 admin 角色

# openstack role add --project service --user nova admin

创建 nova 服务实体

# openstack service create --name nova --description "OpenStack Compute" compute

创建 nova API 服务端点。

# 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 endpoint list 查看)。

创建用户 placement 并设置密码。

openstack user create --domain default --password-prompt placement

添加角色。

openstack role add --project service --user placement admin

创建 Placement API 用户和服务端点。

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 版本之后已在单独的 placement 组件安装,请忽略。

yum -y install openstack-nova-placement-api

*/

 

修改配置文件/etc/nova/nova.conf

说明:在配置 neutron 时已经配置过 nova.conf,所以此处直接修改 nova.conf

在[DEFAULT]部分,开启计算和元数据 API,配置RabbitMQ 消息队列访问以及启用网络服务的支持

[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 为控制节点的管理 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 时已经配置,只需检查确认。

 

[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 代理以使用控制器节点的管理接口 IP 地址

[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 写到本地 hosts 文件中

 

在[glance]部分,配置 glance 服务 API 地址

[glance]

api_servers = http://controller:9292

 

在[oslo_concurrency]部分,配置锁定路径

[oslo_concurrency]

lock_path = /var/lib/nova/tmp

 

在[placement]部分,配置对 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

说明:此部分在安装配置 neutron 时已经配置,只需检查确认。

[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

 

说明:忽略 Warning

 

验证 cell0  cell1 是否正确注册。

# 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

 

二、在计算节点(compute01compute02安装配置 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]部分,配置计算和元数据 API、RabbitMQ 消息队列

[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 设置为 计算节点的管理 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,因为如果要做实例迁移,迁移后实例 vnc 地址会发生变化

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 服务 API

[glance]

api_servers = http://controller:9292

 

在[oslo_concurrency]部分,配置锁定路径

[oslo_concurrency]

lock_path = /var/lib/nova/tmp

 

在[placement]部分,配置 Placement API

[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,否则创建虚拟机后,一直停在 GRUB Loading stage2

[libvirt]

# virt_type = qemu

virt_type = kvm

num_pcie_ports=10

 

说明:num_pcie_ports 为虚拟机的 pci 数量,最多支持设置 28 个

 

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 上要修改成 192.168.59.32

listen_addr = "192.168.59.31"

auth_tcp = "none"

 

修改 /etc/sysconfig/libvirtd

LIBVIRTD_ARGS="--listen"

 

4、启动 libvirtdnova-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 用户时少执行了一步操作:

没有给 nova 用户授予 admin 角色。

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 端点以验证与 Identity 服务的连接。

# openstack catalog list

 

 

 

 

创建指定规格的 flavor

# 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 登录实例后如何退出实例:直接按 Ctrl + ] 组合键关闭实例

# openstack server stop vm01

 

启动实例

# openstack server start vm01

 

删除所选的实例

# openstack server delete vm01

 

5.6 安装配置 Horizon

OpenStack Dashboard 就是 Horizon,提供了基于 Web 控制台,是一个运行在 httpd 服务器上的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",若为 127.0.0.1 则只能在当前主机访问

OPENSTACK_HOST = "controller"

 

c、允许所有主机访问,注意格式,逗号后面有一个空格。

ALLOWED_HOSTS = ['*', ]

 

d、配置 memcached 会话存储服务,请注释掉任何其他会话存储配置,请注意格式。

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、使用 keystone API v3 版本。

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

 

g、启用对多域的支持

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

 

h、配置 Default 域为通过dashboard 创建的用户的默认域。

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

 

i、配置user 为通过 dashboard 创建的用户的默认角色。

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

 

j、开启对第 3 层网络服务的支持。

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  ceph 等支持分布式对象存储

 

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

 

在第 4 行添加以下内容:

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

 

登录 Openstack 控制台

 

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 的存储节点都会 VG。

cinder 在控制节点上需要安装openstack-cinder,对应要启动的服务有:cinder-api、cinder-scheduler。修改好配置后,需要启动: openstack-cinder-api.service openstack-cinder-scheduler.service

 

cinder 在存储节点上需要安装openstack-cinder lvm2 device-mapper-persistent-data openstack-cinder targetcli python-keystone

cinder 在存储节点上运行的服务是:cinder-volume,当然还需启动其依赖的 LVM、target 服务。修改好配置后,需要启动:lvm2-lvmetad.service、

openstack-cinder-volume.service target.service

 

/*

说明:cinder-api 用来接收api 请求,然后将请求消息加工后放到 MQ 里,cinder-scheduler  MQ 中消费消息,通过调度算法选择相应的存储节点,然后将消息放到 MQ 里,cinder-volume 收到 scheduler 消息后,开始对卷进行操作。cinder-volume 用来管理卷volume 生命令周期,cinder-volume 是运行在存储节点上。

没有安装 cinder 服务时,Openstack Dashboard 是不能对外提供卷服务操作的

控制节点和存储节点的 cinder.conf 配置可以相同,前提是当控制节点不具备对应的 VG 时,不要启动 openstack-cinder-volume.service,否则会报错找不到 VG。

*/

 

一、在控制节点(controller安装配置 Cinder 块存储服务

 

1、登录数据库创建 cinder 数据库

 

MariaDB [(none)]> CREATE DATABASE cinder default character set utf8;

创建并授予 cinder 用户完全操作 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

 

创建 cinder 用户,密码设置为:openstack2022

# openstack user create --domain default --password openstack2022 cinder

 

密码:openstack2022

 

cinder 加入到 service 项目以及 admin 角色

# openstack role add --project service --user cinder admin

 

创建 cinderv2  cinderv3 服务实体

# openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3

 

创建 Block Storage API 服务端点

# 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 选项以使用控制器节点的管理接口 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、重启服务并设置成开机自启动

重启 nova-api 服务

# systemctl restart openstack-nova-api.service

 

启动 cinder-api、cinder-scheduler 服务并将其设置为开机自启动。

 

# 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

 

 

 

二、在存储节点(compute01compute02安装配置 Cinder 服务

cinder 在存储节点上运行的服务是:cinder-volume,当然其依赖 LVM、target 服务。

 

修改好配置后,需要启动的服务有: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

 

/*

说明:系统安装时就采用的 lvm,所以操作可以忽略

*/

 

2、计算节点 compute01compute02 分别规划了 1  50GB 的硬盘用作虚机存储,在系统上对应是/dev/sdb

创建 PV

# pvcreate /dev/sdb

创建 VG,VG 名称定义为 cinder-volumes

# vgcreate cinder-volumes /dev/sdb

 

/*

说明:不同存储节点上相同用途的 VG 名称设置成相同,因为 cinder.conf 中需要指定 volume_group,另外 volume_backend_name 也可以设置成相同

*/

 

3、修改配置文件/etc/lvm/lvm.conf

# vi /etc/lvm/lvm.conf

devices 部分中,添加一个接受/dev/sdb 设备的过滤器并拒绝所有其他设备。

 

devices {

# 130 行下方插入以下记录

filter = [ "a/sda/", "a/sdb/", "r/.*/"]

 

说明:filter 过滤器阵列中的每个项目开头为“a”或者“r”,用于接受或用于拒绝某个设备,如果存储节点在操作系统磁盘上使用 LVM,则还必须将关联的系统盘设备添加到过滤器。同样,如果计算节点在操作系统磁盘上使用 LVM,也需要修改这些节点上“/etc/lvm/lvm.conf”文件中的过滤器以包括操作系统磁盘。例如,如果“/dev/sda”设备包含操作系统,则需要将“sda”添加到过滤器。

参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/cinder-storage-install.html

 

4、安装和配置存储节点

/*

说明:存储节点的 cinder.conf 包含了控制节点的 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 消息队列 URL 和身份证等信息

[DEFAULT]

transport_url = rabbit://openstack:openstack@controller

auth_strategy = keystone

#配置 my_ip 为为存储节点上管理网络接口的 IP 地址,compute01  31,compute02  32

my_ip = 192.168.59.31

#启用 LVM 后端,这里的 lvm 对应下方的[lvm]块名称

enabled_backends = lvm

#配置 Image 服务 API 的位置

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 后端。

[lvm]

volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

# volume_group 对应前面创建的 VG 名字

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、列出存储服务组件,若状态均为 up 即正常

# source /etc/keystone/admin-openrc.sh

# openstack volume service list

 

 

 

Cinder 常用命令

a、创建存储卷

# openstack volume create --size 1 volume01

说明:创建一个卷名为 volume01 大小为 1GB 的卷

 

b、查看存储卷列表

# openstack volume list

 

c、为存储卷创建快照

# openstack volume snapshot create --volume volume01 snap-volume01

说明:为卷volume01 创建一个名为 snap-volume01 的快照

 

d、查看快照列表

# openstack volume snapshot list

 

e、挂载卷到实例

# nova volume-attach vm01 ead55f47-a0f3-4eb9-854e-9dff638ff534 /dev/vdb

说明:挂载卷时,要指定卷 id,此处要指定卷 volume01  id,然后是连接到实例 vm01 的/dev/vdb 上

 

虚拟机卸载卷

# nova volume-detach vm01 ead55f47-a0f3-4eb9-854e-9dff638ff534

说明:卸载卷时,请先在操作系统层停止正在使用要卸载的应用,umount 掉,然后再执行 volume-detach

 

删除所选存储卷

# openstack volume snapshot delete snap-volume01

# openstack volume delete volume01

说明:删除卷要具备 2 个条件,第一个是卷状态是可用(available)或其他而非使用中;第二个就是要删除的卷上没有快照,如果有要先删除快照。

 

# openstack volume show volume01

 

# 禁用存储节点

# openstack volume service set --disable compute02@lvm cinder-volume

# 启用存储节点

# openstack volume service set --enable compute02@lvm cinder-volume

 

 

Horizon 使用

6.1 Horizon 功能介绍

镜像管理、规格管理、网络管理、密钥管理、实例管理、安全组管理、卷管理以及集成 ceph 等操作

未完待续...

 

转自  itcooking   转自  itcooking

posted on 2022-12-05 00:04  me小怪兽  阅读(8689)  评论(3编辑  收藏  举报