- 尚硅谷Linux虚拟化教程(OpenStack)
- 1 云计算概述
- 2 OpenStack
- 2.1 OpenStack 当前版本的核心组件
- 2.2 安装结构说明
- 2.3 OpenStack 基础环境搭建
- 2.4 KeyStone -认证服务
- 2.5 Glance 组件说明
- 2.6 Nova Compute 组件说明
- 2.7 网络基础说明
- 2.8 Neutron 网络说明
- 2.9 Neutron 代码构建
- 2.9.1
安装并配置 controller 节点
- 2.9.2 配置先决条件
- 2.9.3 安装网络服务组件
- 2.9.4 配置网络服务组件
- 2.9.5 配置Modular Layer 2(ML2) plugin
- 2.9.6 配置计算服务使用 Neutron
- 2.9.7 完成配置
- 2.9.8 验证
- 2.9.9
安装并配置 network 节点
- 2.9.10 配置先决条件
- 2.9.11 安装网络组件
- 2.9.12 配置网络通用组件
- 2.9.13 配置Modular Layer 2(ML2) plugin
- 2.9.14 配置 Layer-3(L3) agent
- 2.9.15 配置DHCP agent
- 2.9.16 配置 metadata agent
- 2.9.17 配置 Open vSwitch(OVS)服务
- 2.9.18 完成安装
- 2.9.19 验证(在Controller 节点执行下列命令)
- 2.9.20
安装并配置 computer1 节点
- 2.9.21 配置先决条件
- 2.9.22 安装网络组件
- 2.9.23 配置网络通用组件
- 2.9.24 配置Modular Layer 2(ML2) plugin
- 2.9.25 配置Open vSwitch(OVS)Service
- 2.9.26 配置计算服务使用网络
- 2.9.27 完成安装
- 2.9.28 验证(在Controller节点执行下列命令)
- 2.9.29 创建第一个网络
- 2.9.30 配置外部网络(在Controller节点执行下列命令)
- 2.9.31 创建一个外部网络
- 2.9.32 创建一个外部网络的子网
- 2.9.33 配置租户网络(在Controller节点执行下列命令)
- 2.9.34 创建租户网络
- 2.9.35 创建租户网络的子网
- 2.9.36 在租户网络创建一个路由器,用来连接外部网和租户网
- 2.9.37 确认连接
- 2.9.1
- 2.10 Horizon - 仪表盘套件
- 2.11 Cinder 块存储
- 2.12 实例创建
- 3 构建实验:OpenStack-rocky 安装
- 尚硅谷Linux虚拟化教程(OpenStack)
- 1 云计算概述
- 2 OpenStack
- 2.1 OpenStack 当前版本的核心组件
- 2.2 安装结构说明
- 2.3 OpenStack 基础环境搭建
- 2.4 KeyStone -认证服务
- 2.5 Glance 组件说明
- 2.6 Nova Compute 组件说明
- 2.7 网络基础说明
- 2.8 Neutron 网络说明
- 2.9 Neutron 代码构建
- 2.9.1
安装并配置 controller 节点
- 2.9.2 配置先决条件
- 2.9.3 安装网络服务组件
- 2.9.4 配置网络服务组件
- 2.9.5 配置Modular Layer 2(ML2) plugin
- 2.9.6 配置计算服务使用 Neutron
- 2.9.7 完成配置
- 2.9.8 验证
- 2.9.9
安装并配置 network 节点
- 2.9.10 配置先决条件
- 2.9.11 安装网络组件
- 2.9.12 配置网络通用组件
- 2.9.13 配置Modular Layer 2(ML2) plugin
- 2.9.14 配置 Layer-3(L3) agent
- 2.9.15 配置DHCP agent
- 2.9.16 配置 metadata agent
- 2.9.17 配置 Open vSwitch(OVS)服务
- 2.9.18 完成安装
- 2.9.19 验证(在Controller 节点执行下列命令)
- 2.9.20
安装并配置 computer1 节点
- 2.9.21 配置先决条件
- 2.9.22 安装网络组件
- 2.9.23 配置网络通用组件
- 2.9.24 配置Modular Layer 2(ML2) plugin
- 2.9.25 配置Open vSwitch(OVS)Service
- 2.9.26 配置计算服务使用网络
- 2.9.27 完成安装
- 2.9.28 验证(在Controller节点执行下列命令)
- 2.9.29 创建第一个网络
- 2.9.30 配置外部网络(在Controller节点执行下列命令)
- 2.9.31 创建一个外部网络
- 2.9.32 创建一个外部网络的子网
- 2.9.33 配置租户网络(在Controller节点执行下列命令)
- 2.9.34 创建租户网络
- 2.9.35 创建租户网络的子网
- 2.9.36 在租户网络创建一个路由器,用来连接外部网和租户网
- 2.9.37 确认连接
- 2.9.1
- 2.10 Horizon - 仪表盘套件
- 2.11 Cinder 块存储
- 2.12 实例创建
- 3 构建实验:OpenStack-rocky 安装
尚硅谷Linux虚拟化教程(OpenStack)
1 云计算概述
1.1 为何需要云计算这种 “新事物”
云计算基础是虚拟化,前身是网格计算;
虚拟化就是在物理主机上虚拟出多个不同的主机。
- 证点
Oracle 版本发布时间表
- 技术需求的变迁-1
单主机多用户
- 技术需求的变迁-2
单主机多虚拟机
- 技术需求的变迁-3
多主机多虚拟机
- 实现目标
云的愿景:使用计算资源使用网络资源向使用自来水意义按需自由有偿
时间 | 版本号 |
---|---|
1998.09 | 8i |
2001.06 | 9i |
2003.09 | 10g |
2007.07 | 11g |
2013.06 | 12C |
- 资源依赖
- 互相影响
- 无隔离
优点:
- 资源共享
- 互相隔离
缺点:
- 申请资源时间长
- 适合业务的密集度低
- 资源调度
- 特性扩展
- 云计算的定义
美国国家标准与技术研究院(NIST)定义:云计算是一种
按使用量付费的模式
,这种模式提供可用的,便捷的,按需的
网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速的提供,只需投入很少的管理工作,或者与服务供应商进行很少的交互。
1.2 云计算的分类
架构设计
供给方式
- IAAS:基础设施即服务,例如阿里云,华为云,AWS(亚马逊云)
- PAAS:平台即服务,例如新浪云
- SAAS:软件即服务,例如微软云 Office365
- KAAS:Kubernetes 即服务
- DAAS:容器即服务
1.3 OpenStack
代表厂家:
选择标准
各大厂家支持
发展迅速
- cloudstack
- openNebula
- openstack
- API 接口的广泛性
- 使用何种的开源协议进行编写
- 平台的成熟度
厂商的支持
- 有超过200家厂家加入 OpenStack 项目,包括:
- AMD,Brocade Communications Systems,Canonical
- Cisco,Dell,EMC,Ericsson,Groupe Bull,HP,IBM,Inktank
- Intel,NEC,Rackspace Hosting,
- Red Hat,SUSE Linux,VMware and Yahoo!
OpenStack ?
- OpenStack 是一个美国国家航天局和 RackSpace 合作研发的,以 Apache 许可证授权的,并且是一个自由软件
- OpenStack 是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些工作
- OpenStack 通过一个通过 web 界面提供资源管理,通过一个仪表盘管理整个数据中心的计算存储网络资源等(提供一个B/S架构)
OpenStack 特性
- API 对接 亚马逊云平台
- 使用 Apache 协议进行开源
- 最火爆的开源项目
- 一个框架
- 使用 Python 进行开发
- 混合云
2 OpenStack
2.1 OpenStack 当前版本的核心组件
- Compute(
Nova
):计算服务,OpenStack的核心所在(Client CLI -> Nova -> libvirt -> KVM),与虚拟化进行交互的组件- Image Service(
Glance
):镜像服务,OpenStack 的操作系统镜像供给- Object Storage(
Swift
):对象存储,OpenStack 分布式存储- Block Storage(
Cinder
):块存储,底层使用iSCSI技术- Networking(
Neutron
):网络服务,华为,Cisco牵头的Neuturn组件- Dashboard(
Horizon
):仪表板,B/S的提供者- Identity Service(
KeyStone
):认证服务,用户的认证登录入口以及OpenStack的组件的认证体系- Orchestration(Heat):编排,跟着用户创建 YAML 文件创建虚拟机
- Telemetry(
Ceilometer
):监控,OpenStack 虚拟机的计算资源- Database Service(Trove):数据库服务,OpenStack 统一的数据库的接入的标准
- Data Processing(Sahara):数据处理
2.2 安装结构说明
大致情况
- 操作系统:CentOS 7
- OpenStack 版本:JUNO
- 关闭防火墙和SLINUX
- Controller Node:1 processor,2GB Memory,and 5 GB storage
- Network Node:1 processor,512 MB Memory,and 5 GB storage
- Computer Node:1 processor,2GB Memory,and 10 GB storage
IP 地址规划参考
- Controller
- M:192.168.222.5
- Network
- M:192.168.222.6
- I:172.16.0.6
- E:100.100.100.10
- Computer
- M:192.168.222.10
- I:172.16.0.10
- Block
- M:192.168.222.20
Management Network:管理网络,OpenStack 组件之间的数据交换
Instance Tunnels Network:实例网络,OpenStack 虚拟机与虚拟机之间的通信
External Network:外部网络,OpenStack 虚拟机需要跟公网进行通信
2.3 OpenStack 基础环境搭建
2.3.1 先决条件
# Step 1:关闭 Network Manager
systemctl stop NetworkManager
systemctl disable NetworkManager
# Step 2:关闭防火墙和SELINUX
systemctl stop firewalld
systemctl disable firewalld
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# Step 3:设置主机名
hostnamectl set-hostname xx.xx.xx
# Step 4:配置各个机器的IP地址
2.3.2 配置 DNS 服务器或者使用 hosts 进行主机名的 IP 对应
controller.nice.com 192.168.x.5
network.nice.com 192.168.x.6
computer1.nice.com 192.168.x.10
computer2.nice.com 192.168.x.11
block1.nice.com 192.168.x.20
block2.nice.com 192.168.x.21
object.nice.com 192.168.x.30
object.nice.com 192.168.x.31
范例:
$ vim /etc/hosts
10.0.0.21 controller.nice.com
10.0.0.22 computer1.nice.com
10.0.0.23 block1.nice.com
10.0.0.24 network.nice.com
2.3.3 配置时间同步服务器以及安装 OpenStack 预备包
# 配置时间同步服务器
controller.nice.com ntp server controller
other server ntp client
# 安装 OpenStack 预备包
# 1.安装 yum-plugin-priorities 包,防止高优先级软件被低优先级软件覆盖
yum install -y yum-plugin-priorities
# 2.安装 Base YUM,epel扩展YUM源
curl -k -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 3.安装 OpenStack YUM 源
# yum install -y http://rdo.fedorapeople.org/openstack-juno/rdo-release-juno.rpm
tee > /etc/yum.repos.d/CentOS-OpenStack.repo <<-'EOF'
# [openstack-queens]
# name=openstack-queens
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-queens/
# enabled=1
# gpgcheck=0
# [openstack-stein]
# name=openstack-stein
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-stein
# enabled=1
# gpgcheck=0
# [openstack-train]
# name=openstack-train
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-train
# enabled=1
# gpgcheck=0
[openstack-rocky]
name=openstack-rocky
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-rocky/
enabled=1
gpgcheck=0
[qume-kvm]
name=qemu-kvm
baseurl= https://mirrors.aliyun.com/centos/7/virt/x86_64/kvm-common/
enabled=1
gpgcheck=0
EOF
# 4.更新操作系统
yum upgrade -y
# 5.安装 OpenStack-selinux 自动管理 SElinux
yum install -y openstack-selinux
2.4 KeyStone -认证服务
2.4.1 组件说明
KeyStone 存在的意义
一、什么是 KeyStone
KeyStone 是 OpenStack Identity Service 的项目名称,是一个负责身份管理与授权的组件
主要功能:
实验用户的身份认证,基于角色(权限的集合)的权限管理
,及OpenStack 其他组件的访问地址和安全策略管理
二、为什么需要 KeyStone
KeyStone 项目的主要目的是给整个 OpenStack 的各个组件(nova,cinder,glance......)提供一个统一的验证方式
。
因为整个 OpenStack 是一个框架,是一组项目,而不是单个项目,我们需要给这一组项目提供一个统一的验证方式。KeyStone 的功能
- 用户管理(3A服务)
- Account 账号
- Authentication 身份认证
- Authorization 授权
- 服务目录管理
- KeyStone 将当前所有的服务功能展现出来
认证服务中的关键字
- User(用户)
一个人,系统或者服务
在 OpenStack 中的数字表示。已经登录的用户分配令牌环(是一组字符串)以访问资源
。用户可以直接分配给特定的租户,就像隶属于每个组- Credentials(凭证)
用于确认用户身份的数据
。例如:用户名和密码,用户名和API key,或者由认证服务提供的身份验证令牌- Authentication(验证)
确认用户身份的过程
- Token(令牌)
一个用于访问 OpenStack API 和资源的字母数字字符串。一个令牌可以随时撤销,并且持续一段时间有效
。- Tenant(租户)一个组织或者孤立资源的容器。租户和可以组织或者隔离认证对象。根据服务运营的要求,一个租户可以映射到客户,账户,组织或者项目
- Service(服务)OpenStack 服务,例如计算服务(Nova),对象存储服务(Swift),或者镜像服务(Glance)。它提供了一个或者多个端点,供用户访问资源和执行操作。
- Endpoint(端点)
一个用于某个服务的可以通过网络进行访问的地址,通常是一个 URL 地址
。一个端点可以有多个URL,一个URL只能有一个端点。- Role(角色)定制化的包含特定用户权限和特权的权限集合
- KeyStone Client(KeyStone 命令行工具)KeyStone 的命令行工具。通过该工具可以创建用户,角色,服务和端点等……
名词解释
用户 - 张三
凭证 - 身份证
验证 - 验证身份证
令牌 - 房卡
租户/项目 - 宾馆
服务 - 住宿,餐饮
端点 - 路径
角色 - VIP等级
2.4.2 组件之间沟通方式
2.4.2.1 用户认证过程
2.4.2.2 组件之间的交互过程
2.4.2.3 用户 - 角色 - 服务 交互图
2.4.3 构建实验:OpenStack-Juno 安装
- 所有节点安装时间同步软件
$ vim /etc/hosts
# Starting OpenStack Host #
10.0.0.21 controller.nice.com
10.0.0.22 computer1.nice.com
10.0.0.23 block1.nice.com
10.0.0.24 network.nice.com
# End OpenStack Host #
$ yum install -y ntp
$ vim /etc/ntp.conf
restrict 10.0.0.0 mask 255.255.255.0 nomodify notrap
server controller.nice.com
fudge controller.nice.com stratum 10
# 开启时间同步
$ systemctl start ntpd && systemctl enable ntpd
2.4.3.1 controller 节点安装数据库
# Step1:安装 Mariadb 软件包
yum install -y mariadb mariadb-server MySQL-python
# Step2:编辑 /etc/my.cnf 软件,设置绑定IP,默认数据库引擎及默认字符集为UTF-8
[mysqld]
bind-address = 10.0.0.21
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
# Step3:启动数据库并设置为开机自启动
systemctl enable --now mariadb
# Step4:初始化数据库脚本
mysql_secure_installation
## 输入root密码,这里初始化没有root密码
Enter current password for root (enter for none):
OK, successfully used password, moving on...
## 设置root密码
Set root password? [Y/n] y
New password: Admin@h3c
Re-enter new password: Admin@h3c
## 是否移除匿名用户
Remove anonymous users? [Y/n] y
## 是否不允许root进行远程登录
Disallow root login remotely? [Y/n] y
## 是否移除测试的数据库
Remove test database and access to it? [Y/n] y
## 是否现在刷新权限表
Reload privilege tables now? [Y/n] y
2.4.3.2 controller 节点安装 Messaing Server 服务
# 消息队列
# Step1:功能为协调操作和状态信息服务
# Step2:常用的消息代理软件
RabbitMQ
Qpid
ZeroMQ
# Step3:在 controller 节点安装 RabbitMQ
# a.安装 RabbitMQ 软件包
yum install -y rabbitmq-server
# b.启动服务并设置开机自启动
systemctl enable --now rabbitmq-server
# c.RabbitMQ 默认用户名和密码是 guest,可以通过下列命令进行修改
# rabbitmqctl change_password guest guest
rabbitmqctl change_password guest Admin@h3c
2.4.3.3 controller KeyStone 认证服务配置
- 配置先决条件
# Step1:创建认证服务数据库
# a.使用root登录mysql数据库
mysql -uroot -pAdmin@h3c
# b.创建keystone数据库
CREATE DATABASE keystone;
# c.创建keystone数据库用户,使其可以对keystone数据库有完全控制权限
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
# Step2:生成一个随机值作为管理令牌在初始配置
openssl rand -hex 10
# 生成字符串例如:713ce51d5716255c3e78
- 安装并配置认证服务组件
# Step1:安装软件包
yum install -y openstack-keystone python-keystoneclient
# 注意:有可能会出现以下报错
# Error: Package: python2-qpid-proton-0.22.0-1.el7.x86_64 (openstack-rocky)
# 解决方案:yum install -y python2-qpid-proton-0.22.0-1.el7.x86_64
# Step2:编辑/etc/keystone/keystone.conf文件并做下列修改
# a.修改[DEFAULT]小节,定义初始管理令牌
vim /etc/keystone/keystone.conf
[DEFAULT]
...
admin_token = 刚才生成的随机值
admin_token = 713ce51d5716255c3e78
# b.修改[database]小节,配置数据库访问
[database]
...
connection = mysql://keystone:KEYSTONE_DBPASS@controller.nice.com/keystone
# c.修改[token]小节,配置UUID提供者和SQL驱动
[token]
...
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.sql.Token
# d.(可选择)开启详细日志,协助故障排除
[DEFAULT]
...
verbose = True
# Step3:常见通用证书的密钥,并限制相关文件的访问权限
keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
chown -R keystone:keystone /var/log/keystone/
chown -R keystone:keystone /etc/keystone/
chown -R o-rwx /etc/keystone/ssl
# Step4:初始化KeyStone数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
# 查看KeyStone数据库是否初始化
mysql -uroot -pAdmin@h3c
MariaDB [(none)]> use keystone;
MariaDB [keystone]> show tables;
- 完成安装
# Step1:启动 identity 服务并设置开机启动
systemctl enable openstack-keystone.service
systemctl start openstack-keystone.service
# Step2:默认情况下,服务器会无限存储到期的令牌,在资源有限的情况下会严重影响服务器的性能。建议用计划任务,每小时删除过期的令牌
(crontab -l -u keystone 2>&1 | grep -q token_flush) || \
echo '@hourly /usr/bin/keystone-manage token_flush > /var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/keystone
cat /var/spool/cron/keystone
2.4.3.4 创建tenants(租户/项目),users(用户)和roles(角色)
- 配置先决条件
# Step1:配置管理员令牌
export OS_SERVICE_TOKEN=刚才生成的字符串
export OS_SERVICE_TOKEN=713ce51d5716255c3e78
# Step2:配置端点
export OS_SERVICE_ENDPOINT=http://controller.nice.com:35357/v2.0
- 创建租户、用户和角色
# a.创建admin租户
keystone tenant-create --name admin --description "Admin Tenant"
openstack project create --domain default --description "Admin Project" admin
# b.创建admin用户
keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS
openstack user create --domain admin --password demo demo
# c.创建admin角色
keystone role-create --name admin
openstack role create user
# d.添加admin租户和用户到admin角色
keystone user-role-add -tenant admin --user admin --role admin
# e.创建用于dashboard访问的"_member_"角色
keystone role-create --name _member_
# f.添加admin租户和用户到_member_角色
keystone user-role-add --tenant admin --user admin --role _member_
- 创建一个用于演示的demo租户和用户
# a.创建demo租户
keystone tenant-create --name demo --description "Demo Tenant"
# b.创建demo用户
keystone user-create --name demo --pass DEMO_PASS --email EMAIL_ADDRESS
# c.添加demo租户和demo用户到_member_角色
keystone user-role-add --tenant demo --user demo --role _member_
- OpenStack 服务也需要一个租户,用户和角色和其他服务进行交互,因此我们创建一个service的租户。任何一个OpenStack服务都要和它关联
keystone tenant-create --name service --description "Service Tenant"
2.4.3.5 创建服务实体和API端点
# Step1:在OpenStack 环境中,identity服务管理一个服务目录,并使用这个目录在 OpenStack 环境中定位其他服务。
# 为identity 服务创建一个服务实体
keystone service-create --name keystone --type identity --description "OpenStack Identity"
# Step2:OpenStack环境中,identity服务管理目录以及与服务相关API端点。服务使用这个目录
# OpenStack 为每个服务提供了三个API端点:admin(管理),internal(内部),public(公共)为identity服务创建API端点
keystone endpoint-create \
--service-id ${keystone service-list | awk '/identity /{print $2}'} \
--publicurl http://controller.nice.com:5000/v2.0 \
--internalurl http://controller.nice.com:5000/v2.0 \
--adminurl http://controller.nice.com:35357/v2.0 \
--region regionOne
2.4.3.6 确认操作
# Step1:删除OS_SERVICE_TOKEN 和 OS_SERVICE_ENDPOINT 临时变量
unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
# Step2:使用admin租户和用户请求认证令牌
keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller.nice.com:35357/v2.0 token-get
# Step3:以admin租户和用户的身份查看租户列表
keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller.nice.com:35357/v2.0 tenant-list
# Step4:以admin租户和用户的身份查看用户列表
keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller.nice.com:35357/v2.0 user-list
2.4.3.7 创建 OpenStack 客户端环境脚本
# 为了方便使用上面的环境变量和命令选项,为admin和demo租户和用户创建环境脚本
# 编辑admin-openrc.sh
vim admin-openrc.sh
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller.nice.com:35357/v2.0
# 编辑demo-openrc.sh
vim demo-openrc.sh
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller.nice.com:5000/v2.0
# 加载客户端环境脚本
source admin-openrc.sh
source demo-openrc.sh
2.5 Glance 组件说明
2.5.1 组件说明
Glance 服务功能
- OpenStack 镜像服务(Glance)使用户能够发现,注册并检索虚拟机镜像(.img文件)
- 它提供了一个 REST API 接口,使用户可以查询虚拟机镜像元数据和检索一个实际的镜像文件
- 不论是简单的文件系统还是 OpenStack 对象存储,都可以通过镜像服务在不同的位置存储虚拟机镜像
- 默认情况下,上传的虚拟机镜像存储路径为 /var/lib/glance/images
Glance 组件说明
- glance-api:一个用来接收镜像发现,检索和存储的 API 接口
- glance-registry:用来存储,处理和检索镜像的元数据。元数据包括对象的大小和类型。glance-registry 是一个 OpenStack 镜像服务使用的内部服务,不要透露给用户
- Database:用于存储镜像的元数据的大小,类型,支持大多数数据库,一般选择 MySQL 或者 SQLite
- Storage repository for image files:镜像文件的存储仓库。支持包括普通文件系统在内的各种存储类型。包括对象存储,块设备,HTTP,Amazon S3,但是有些存储只支持
只读访问
基本概念
- Image Identifiers:就是 Image URL,格式
/images/ 全局唯一 - Image Status 镜像状态:
- Queued:镜像 ID 已经被保留,镜像还没有上传
- Saving:镜像正在被上传
- Active:镜像可以使用了
- Killed:镜像损坏或者不可用
- Deleted:镜像被删除
- Disk Format 磁盘格式:
- Raw:This is unstructured disk image format
磁盘镜像实例(二进制存储的方式),优点:访问速度非常快;缺点:不支持动态扩容,前期耗时比较大- Vhd:VMware、XEN、Microsoft、VirtualBox
Microsoft 公司提出的虚拟化格式- Vmdk:common format
VMware 公司提出的虚拟化格式- Vdi:VirtualBox、QEMU emulator
VirtualBox 公司提出的虚拟化格式- ISO:optical disc
基本的镜像存储类型- Qcow2:QEMU emulator
QEMU 支持的类型- Aki:Amazon Kernel image
亚马逊对于 Kernel 推出的镜像类型- Ari:Amazon ramdisk image
亚马逊对于 Ramdisk 推出的镜像类型- Ami:Amazon machine image
亚马逊对于 Machine 推出的镜像类型
- Container Format 容器格式:
- Bare
- Ovf
- Aki
- Ami
- Ari
组件工作流
2.5.2 构建实验
2.5.2.1 在 controller 节点安装并配置 OpenStack 镜像服务 Glance
- 配置先决条件
- 完成并配置镜像服务组件
- 完成安装
2.5.2.2 安装先决条件
# Step1:创建数据库
# a.以数据库管理员root的身份登录数据库
mysql -uroot -pAdmin@h3c
# b.创建glance数据库
CREATE DATABASE IF NOT EXISTS glance;
# c.创建数据库用户glance,并授予其对glance数据库的管理权限
GRANT ALL PRIVILEGES ON keystone.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
# d.退出数据库连接
exit;
# Step2:启动admin环境脚本
source admin-openrc.sh
# Step3:创建认证服务凭证,完成下列步骤:
# a.创建glance用户
keystone user-create --name glance --pass GLANCE_PASS
# b.将glance用户链接到service租户和admin用户
keystone user-role-add --user glance --tenant service --role admin
# c.创建glance服务
keystone service-create --name glance --type image --description "OpenStack image Service"
# Step4:为OpenStack镜像服务创建认证服务端口
keystone endpoint-create \
--service-id $(keystone service-list | awk '/image / {print $2}') \
--publicurl http://controller.nice.com:9292 \
--internalurl http://controller.nice.com:9292 \
--adminurl http://controller.nice.com:9292 \
--region regionOne
2.5.2.3 安装并配置镜像服务组件
# Step1:安装软件包
yum install -y openstack-glance python-glanceclient
# Step2:编辑/etc/glance/glance-api.conf文件,并完成下列操作
# a.修改[database]小节,配置数据库链接
[database]
...
connection = mysql://glance:GLANCE_DBPASS@controller.nice.com/glance
# b.修改[keystone_authtoken]和[paste_deploy]小节,配置认证服务访问
[keystone_authtoken]
...
auth_url = http://controller.nice.com:5000/v2
identity_url = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = glance
admin_password = GLANCE_PASS
...
[paste_deploy]
...
flavor = keystone
# c.(可选择)在[DEFAULT]小节中配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
# Step3:编辑/etc/glance/glance-registry.conf 文件,并完成下列配置
# a.在[database]小节中配置数据库连接
[database]
...
connection = mysql://glance:GLANCE_DBPASS@controller.nice.com/glance
# b.在[keystone_authtoken]和[paste_deploy]小节中配置日志服务访问
[keystone_authtoken]
...
auth_url = http://controller.nice.com:5000/v2
identity_url = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = glance
admin_password = GLANCE_PASS
...
[paste_deploy]
...
flavor = keystone
# c.在[glance_store]小节中配置本地文件系统存储和镜像文件的存放路径
[glance_store]
...
default_store = file
filesystem_store_datadir = /var/lib/glance/images
# d.(可选择)在[DEFAULT]小节中配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
# Step4:初始化镜像服务的数据库
su -s /bin/sh -c "glance-manager db_sync" glance
# 查看glance数据库信息
mysql -uroot -pAdmin@h3c
> use glance;
> show tables;
2.5.2.4 完成安装
# 启动镜像服务并设置开机自动启动
systemctl enable openstack-glance-api openstack-glance-registry
systemctl start openstack-glance-api openstack-glance-registry
&&
systemctl enable --now openstack-glance-api openstack-glance-registry
2.5.2.5 验证安装
# 本节演示如何使用 CirrOS 验证镜像服务是否安装成功。CirrOS 是一个小 Linux 镜像,可以帮你验证镜像服务
# 1.创建一个临时目录
mkdir -pv /tmp/images
cd /tmp/images
# 2.下载CirrOS镜像文件到临时目录
wget http://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img (真实环境)
wget ftp://ftp服务器IP/cirros-0.3.3-x86_64-disk.img (实验室环境)
# 3.运行admin环境脚本,以便执行管理命令
source admin-openrc.sh
# 4.上传镜像文件到镜像服务器
glance image-create --name "cirros-0.3.3-x86_64" --file cirros-0.3.3-x86_64-disk.img \
--disk-format qcow2 --container-format bare --is-public True --progress
# 5.查看镜像文件上传并验证属性
glance image-list
# 6.删除临时目录
rm -rf /tmp/images
- glance image-create 相关选项含义:
--name <NAME>
镜像名称
-- file <FILE>
要上传文件及路径
--disk-format <DISK_FORMAT>
镜像的磁盘格式。可以支持:ami,aki,vhd,vmdk,raw,qcow2,vdi,iso格式
--container-format <CONTAINER_FORMAT>
镜像容器格式。可以支持:ami,ari,aki,bare,ovf格式
--is-public {True , False}
镜像是否可以被公共访问
--progress
显示上传速度
2.6 Nova Compute 组件说明
2.6.1 Nova 是什么
OpenStack 是由 RackSpace 和 NASA 共同开发的云计算平台(管理底层的虚拟化;提供虚拟化管理服务)
类似于 Amazon EC2 和 S3 的云基础架构服务
Nova 在 OpenStack 中提供云计算服务
超过 140 家企业及 18470 位开发者参与开发
- 参与开发的厂家
现在已经有来自100多个国家的数万名个人和200多家企业参与到OpenStack的开发,如 NASA、华为、谷歌、惠普HP、Intel、IBM、微软、红帽RedHat、新浪微博等。
2.6.2 组件说明 - API
nova-api
service 接收并响应终端用户计算 API 调用。该服务支持 OpenStack 计算 API,Amazon EC2 和特殊的管理特权 API
nova-api-metadata
service 接受从实例元数据发来的请求。该服务通常与 nova-network 服务在安装多主机模式下运行(需要安装在每台 Computer 节点上)
2.6.3 组件说明 - Core
nove-computer
service 一个守护进程,通过虚拟化层API接口创建和终止虚拟机实例。例如:XenAPI for XenServer/XCP,libvirt for KVM or QEMU,VMwareAPI for VMware
nova-scheduler
service 从队列中获取虚拟机实例请求,并确认由哪台计算服务运行该虚拟机
nove-conductor
module 协调 nove-computer 服务和 database 之间的交互数据。避免 nova-compute 服务这直接访问云数据库。不要将该模块部署在 nove-compute 运行的节点上
2.6.4 组件说明 - Networking
nova-network
worker daemon 类似于nova-computer 服务,接收来自队列的网络任务和操控网络。比如这只网卡桥接或者改变iptables 规则
nova-consoleauth
daemon 在控制台代理提供用户授权令牌
nova-novncporxy
daemon 提供了一个通过 VNC 连接来访问运行的虚拟机实例的代理。支持基于浏览器的 novnc 客户端
nova-spicehtml5proxy
daemon 提供一个通过 spice 连接来访问运行的虚拟机实例的代理。支持基于浏览器的 HTML 5 客户端
nova-xvpnvncproxy
daemon 提供了一个通过 VNC 连接来访问运行的虚拟机实例的代理。支持 OpenStack-specific Java 客户端
nova-cert
daemon x509 证书
2.6.5 组件说明 - Other
nova-objectstore
daemon 一个 Amazon S3 接口,用于将 Amazon S3 的镜像注册到 OpenStack euca2ools client 用于兼容于 Amazon E2 接口的命令行工具
nova client
nova 命令行工具The queue 在进程之间传递消息的中心,通常使用
RabbitMQ
SQL database
保存云基础设置建立和运行时的状态信息
2.6.6 组件说明 - 位置顺序
2.6.7 Nova 内部沟通
2.6.8 Nova 同其他组件沟通
2.6.9 虚拟机启动流程
2.6.10 构建实验 - Computer 组件安装
- 在 Computer 节点初始化环境
# Step 1:关闭 Network Manager
systemctl stop NetworkManager
systemctl disable NetworkManager
# Step 2:关闭防火墙和SELINUX
systemctl stop firewalld
systemctl disable firewalld
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# Step 3:设置主机名
hostnamectl set-hostname xx.xx.xx
# Step 4:配置各个机器的IP地址
$ vim /etc/hosts
10.0.0.21 controller.nice.com
10.0.0.22 computer1.nice.com
10.0.0.23 block1.nice.com
10.0.0.24 network.nice.com
# Step 5:配置时间同步服务器
controller.nice.com ntp server controller
other server ntp client
$ yum install -y ntpdate
$ /sbin/ntpdate -u controller.nice.com
$ /sbin/ntpdate -u controller.nice.com &> /dev/null
# 设置定时任务
$ crontab -e
*/1 * * * * /sbin/ntpdate -u controller.nice.com &> /dev/null
$ systemctl enable --now crond
# 安装 OpenStack 预备包
# 1.安装 yum-plugin-priorities 包,防止高优先级软件被低优先级软件覆盖
yum install -y yum-plugin-priorities
# 2.安装 Base YUM,epel扩展YUM源
curl -k -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 3.安装 OpenStack YUM 源
# yum install -y http://rdo.fedorapeople.org/openstack-juno/rdo-release-juno.rpm
tee > /etc/yum.repos.d/CentOS-OpenStack.repo <<-'EOF'
# [openstack-queens]
# name=openstack-queens
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-queens/
# enabled=1
# gpgcheck=0
# [openstack-stein]
# name=openstack-stein
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-stein
# enabled=1
# gpgcheck=0
# [openstack-train]
# name=openstack-train
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-train
# enabled=1
# gpgcheck=0
[openstack-rocky]
name=openstack-rocky
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-rocky/
enabled=1
gpgcheck=0
[qume-kvm]
name=qemu-kvm
baseurl= https://mirrors.aliyun.com/centos/7/virt/x86_64/kvm-common/
enabled=1
gpgcheck=0
EOF
# 4.更新操作系统
yum upgrade -y
# 5.安装 OpenStack-selinux 自动管理 SElinux
yum install -y openstack-selinux
2.6.10.1 安装和配置 controller 节点
- 配置先决条件
- 安装和配置计算控制组件
- 完成安装
2.6.10.2 配置先决条件(在 Controller 节点)
# Step1:创建数据库,完成下列步骤:
# a.使用数据库管理员 root 登录数据库
mysql -uroot -pAdmin@h3c
# b.创建 nova 数据库
CREATE database nova;
# c.创建数据库用户 nova,并授予nova用户对nova数据库的完全控制权限
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
# d.退出数据库连接
exit
# Step2:执行admin环境脚本
# 编辑admin-openrc.sh
vim admin-openrc.sh
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller.nice.com:35357/v2.0
source admin-openrc.sh
# Step3:在认证服务中创建计算服务的认证信息。完成下列步骤:
# a.创建nova 用户
keystone user-create --name nova --pass NOVA_PASS
# b.链接nova 用户到service租户和admin角色
keystone user-role-add --user nova --tenant service --role admin
# c.创建nova 服务
keystone serivce-create --name nova --type compute --description "OpenStack Compute"
# Step4:创建计算服务端点
keystone endpoint-create \
--service-id ${keystone service-list | awk '/ compute / {print $2}'} \
--publicurl http://controller.nice.com:8774/v2/%\(tenant_id\)s \
--internalurl http://controller.nice.com:8774/v2/%\(tenant_id\)s \
--adminurl http://controller.nice.com:8774/v2/%\(tenant_id\)s \
--region regionOne
2.6.10.3 安装和配置计算控制组件
# Step1:安装软件包
yum install -y openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient
# Step2:编辑/etc/nova/nova.conf 文件,完成如下操作:
# a.编辑[database]小节,配置数据库访问:
[database]
...
connection = mysql://nova:NOVA_DBPASS@controller.nice.com/nova
# b.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问:
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller.nice.com
rabbit_password = RABBIT_PASS
# c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri http://controller.nice.com:5000/v2.0
identity_uri = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = nova
admin_password = NOVA_PASS
# d.编辑[DEFAULT]小节,配置my_ip选项为controller节点的管理接口IP
[DEFAULT]
...
my_ip = 10.0.0.21
# e.编辑[DEFAULT]小节,配置VNCdialing服务的使用controller节点的管理接口IP
[DEFAULT]
...
vncserver_listen = 10.0.0.21
vncserver_proxyclient_address = 10.0.0.21
# f.编辑[glance]小节,配置镜像服务器的位置
[glance]
...
host = controller.nice.com
# g.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
# Step3:初始化计算数据库
su -s /bin/sh -c "nova-manage db sync" nova
mysql -uroot -pAdmin@h3c
> use nova;
> show tables
2.6.10.4 完成安装
# 完成计算服务并配置开机自动启动
systemctl start openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl enable openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# 或者使用
systemctl enable --now openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
2.6.10.5 安装配置一个 computer 节点
- 完成并配置计算虚拟化组件
- 完成安装
2.6.10.6 完成并配置计算虚拟化组件
# Step1:安装软件包
yum install -y openstack-nova-computer sysfsutils
# Step2:编辑/etc/nova/nova.conf 文件,完成下列步骤:
# a.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问:
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller.nice.com
rabbit_password = RABBIT_PASS
# b.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri http://controller.nice.com:5000/v2.0
identity_uri = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = nova
admin_password = NOVA_PASS
# c.编辑[DEFAULT]小节,配置my_ip选项为controller节点的管理接口IP
[DEFAULT]
...
my_ip = MANAGREMENT_INTERACE_IP_ADDRESS
# d.编辑[DEFAULT]小节,开启并配置远程控制台访问
[DEFAULT]
...
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = MANAGREMENT_INTERACE_IP_ADDRESS
novncproxy_base_url = http://controller.nice.com:6080/vnc_auto.html
# e.编辑[glance]小节,配置镜像服务器位置
[glance]
...
host = controller.nice.com
# f.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
2.6.10.7 完成安装
# Step1:确认计算节点是否支持硬件虚拟化
$ egrep -c '(vmx|svm)' /proc/cpuinfo
# 如果返回值>=1,则说明你的计算节点硬件支持虚拟化,无需额外配置
# 如果返回值=0,则说明你的计算节点硬件不支持虚拟化,你必须配置libvirt由使用KVM改为QEMU
# 在/etc/nova/nova.conf 文件中编辑[libvirt]小节
[libvirt]
...
virt_type = qemu
# Step2:启动计算服务以及依赖访问,并配置开机自动启动
systemctl enable libvirtd.service openstack-nova-computer.service
systemctl start libvirtd.service openstack-nova-computer.service
# 或者使用
systemctl enable --now libvirtd.service openstack-nova-computer.service
2.6.10.8 在Controller 节点上验证安装
# Step1:启动admin环境脚本
vim admin-openrc.sh
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller.nice.com:35357/v2.0
source admin-openrc.sh
# Step2:列出服务组件确认每一个进程启动成功
nova service-list
# Step3:列出镜像服务中的镜像列表,确认连接认证服务器和镜像服务器成功
nova image-list
2.7 网络基础说明
- OSI 七层模型 & TCP / IP
- 集成网络
- 存在区别
- 工作层次不同
L2(交换机工作在数据链路层) / L3(路由器工作在网络层)
- 数据转发依据对象不同
数据帧(MAC) / 数据包(IP)
- 解决问题不同
同网段互通 / 不同网段互通
- 路由表
route
- 防火墙
ip netns exec router-ns iptables -t nat -nL
- 混杂模式
- 接受所有经过设备的数据包
- 一般用于网络抓包
- Floating IP(浮动IP) 功能实现
- 网络名字命名空间
- 叠加网络
1.一个数据包(或者帧)封装在另一个数据包内;被封装的包转发到隧道端点后再被拆装
2.叠加网络就是使用这种所谓”包内之包”的技术安全的将一个网络隐藏在另一个网络中,然后将网段进行迁移
- Vlan ==> L2 over L2
- GRE ==> L3 over L3 (UDP)
- Vxlan ==> L2 over L3 (UDP)
3.在
Docker
中叠加网络是重新封装数据包只需转发到对应的网卡
中拆封;在OpenStack
中重新封装数据包只需转发到隧道端点
后再被拆装
- GRE SDN 网络优缺点
优点:不用变更底层网络架构重建 L2、L3 通信,实现不同 Host 之间网络互通,方便迁移,支持网络数量扩大
缺点:大规模部署问题,性能问题
- 叠加网络所解决问题
数据中心网络数量限制:
- 1 > 4096 > 1600W
物理网络基础设施限制:
- 不改变物理网络变更 VM 网络拓扑
- VM 迁移
多租户:
- 支持 IP 地址重叠
- Open vswitch
- 网络隔离:Vlan GRE Vxlan
- Qos 配置(流量配置)
- 流量监控
- 数据包分析
2.8 Neutron 网络说明
Nova-network
- FLAT
- FlatDHCP
- Vlan
2.8.1 FLAT
指定一个子网,规定虚拟机能使用的 IP 地址范围
- 创建实例时,从有效 IP 地址池获取一个 IP,为虚拟机实例分配,然后在虚拟机启动的时候注入虚拟机镜像(文件系统)
手动配置好网桥,所有的系统实例都是和同一个网桥连接;网桥连接到网桥的实例组成一个虚拟网络
- 网络控制器对虚拟机实例进行
NAT 转换
,实现与外部的通信 - 目前配置注入
只能对类 UNIX 操作系统
正常工作
2.8.2 FLATDHCP
- 在 FLAT 网络模式下添加了 DHCP 功能
- 网络控制器运行
DNSmasp
作为 DHCP 服务器监听这个网桥
2.8.3 VLAN
- 每个用户分配一个 VLAN,每个用户创建的 网络接口在同一个 VLAN 中
- 每个用户分配一个网段,网络控制器上的 DHCP 服务器为所有的 VLAN 分配地址
- 解决了隔离问题,但是 VLAN 限制为 4096 个,符合私有云
2.8.4 Nova-network 存在的问题
- 传统桥接模式
- 用户不能自定义网络
- 网络隔离
- 大规模不合适
2.8.5 需求
- 基础需求
- 高密度
- 多租户
- 大规模扩展
- 虚拟机的可移动性
- 资源管理自动化
- 低成本实现
- 企业级需求
- 自定义网络
- Qos 保证
- 防火墙
- 监控,审计
2.8.6 Neutron 基本概念
Neutron 网络连接服务
面向租户 API 接口,用于创建虚拟网络,路由器,负载均衡,关联网络接口至指定网络和路由
通过API 接口管理虚拟或者物理交换机
提供 Plugin 架构来支持不同的技术平台
Neutron Private Network - 提供固定私网地址
Neutron Public Network - 提供浮动 IP 地址
2.8.7 Neutron 关键概念
- Network
- 一个 L2 网络单元
- 租户可通过 Neutron API 创建自己的网络
- Subnet
- 一段 IPV4 / IPV6 地址段
- 为 Instance 提供私网或者公网地址
- Router
- 三层路由器(虚拟)
- 为租户的 Instance 提供路由功能
- Port
- 虚拟交换机上的端口
- 管理 Instance 的网卡
概念间的对应关系
2.8.8 Neutron 组件架构
Neutron 是通过插件管理器(Neutron Plugin)去构建的
从Neutron的架构图不难看出Neutron的大体服务构成以及各个服务组件的职能,而它一般的工作流程如下:
- Neutron Server接收用户请求,把请求存放到消息队列中;
- Neutron Plugin从MQ中获得请求,在DB中维护网络的状态信息,然后把请求存放到MQ等待Neutron Agent处理;
- Neutron Agent从MQ中获取Plugin的请求,交由Network Provider处理具体的网络请求;
2.8.9 Neutron Plugin(插件管理器)
Open VSwitch
Linux Bridge
- Ciso NX1000
- Nicira NVP
- Ryu
- NEC OpenFlow
- Floodnight
2.8.10 Neutron + Nova 架构
首先会有Horizon项目中 Dashboard的仪表盘套件,仪表盘套件输入对应的指令会自动工具的整理,通过每个租户的自己的API接口去访问不同的服务。如果是网络服务的访问,会通过 Neutron API 接口接收到后,再通过 Neutron Plugin 去实现。这个实现的过程是需要通过
消息队列 代理(通知)至 Vswitch
中,Vswtich 在当前节点做相应的操作。如果是计算服务的访问,会通过 Nova API 接口接收到,Nova API 如果是创建主机的话,会被Nova scheduler 调度到,然后调度到对应的Nova computer进行代理。Nova computer去触发 libvirt 之后触发 Hypervisor 进行创建 VM
2.8.11 Neutron 组件
Neutron Server
- 实现 Neutron API 和 API 扩展
- 管理 Network、Subnet、Pod
- 管理 Port 的 IP地址
ML2 agent
- 运行在每个计算节点上(实现IP地址通信)
- 连接虚拟机到网络端口
DHCP agent
- 负责 DHCP 配置,为虚拟机分配 IP
- 开始 / 停止 DHCP 服务器以及相关配置
L3-agent
- 负责公网浮动 IP 地址和 NAT
- 负责其他三层特性,例如:负载均衡等
- 每个 Network 对应一个 L3 agent
Metadata-agent
- 提供元数据服务
- ML2
- ML2 构建模式
- Neutron 部署类型
Single FLAT Network
- 类似 Flat manager
- FlatDHCP Manager
- 不支持 Floating IP
Multi FLAT Network
Muliple FLAT Network
- 类似 Flat manager
- FlatDHCP Manager
- 不支持 Floating IP
Mixed FLAT and Private Network
- 类似 Flat manager
- FlatDHCP Manager
- 支持 Floating IP
Provider Routers with Private Network
- 类似 Flat manager
- FlatDHCP Manager
- 支持 Floating IP
- 不同的租户使用的是同一个路由器。
*Per-tenant Routers with Private Network
- 类似 Flat manager
- FlatDHCP Manager
- 支持 Floating IP
- 不同的租户使用的是各自的路由器。一个租户下可以存在多个网段
2.9 Neutron 代码构建
- 在 Neutron 节点初始化环境
# Step 1:关闭 Network Manager
systemctl stop NetworkManager
systemctl disable NetworkManager
# Step 2:关闭防火墙和SELINUX
systemctl stop firewalld
systemctl disable firewalld
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# Step 3:设置主机名
hostnamectl set-hostname xx.xx.xx
# Step 4:配置各个机器的IP地址
$ vim /etc/hosts
10.0.0.21 controller.nice.com
10.0.0.22 computer1.nice.com
10.0.0.23 block1.nice.com
10.0.0.24 network.nice.com
# Step 5:配置时间同步服务器
controller.nice.com ntp server controller
other server ntp client
$ yum install -y ntpdate
$ /sbin/ntpdate -u controller.nice.com
$ /sbin/ntpdate -u controller.nice.com &> /dev/null
# 设置定时任务
$ crontab -e
*/1 * * * * /sbin/ntpdate -u controller.nice.com &> /dev/null
$ systemctl enable --now crond
# 安装 OpenStack 预备包
# 1.安装 yum-plugin-priorities 包,防止高优先级软件被低优先级软件覆盖
yum install -y yum-plugin-priorities
# 2.安装 Base YUM,epel扩展YUM源
curl -k -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 3.安装 OpenStack YUM 源
# yum install -y http://rdo.fedorapeople.org/openstack-juno/rdo-release-juno.rpm
tee > /etc/yum.repos.d/CentOS-OpenStack.repo <<-'EOF'
# [openstack-queens]
# name=openstack-queens
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-queens/
# enabled=1
# gpgcheck=0
# [openstack-stein]
# name=openstack-stein
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-stein
# enabled=1
# gpgcheck=0
# [openstack-train]
# name=openstack-train
# baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-train
# enabled=1
# gpgcheck=0
[openstack-rocky]
name=openstack-rocky
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-rocky/
enabled=1
gpgcheck=0
[qume-kvm]
name=qemu-kvm
baseurl= https://mirrors.aliyun.com/centos/7/virt/x86_64/kvm-common/
enabled=1
gpgcheck=0
EOF
# 4.更新操作系统
yum upgrade -y
# 5.安装 OpenStack-selinux 自动管理 SElinux
yum install -y openstack-selinux
2.9.1 安装并配置 controller 节点
- 配置先决条件
- 安装网络服务组件
- 配置网络服务组件
- 配置Modular Layer2(ML2)插件
- 配置计算服务使用 Neutron
- 完成安装
- 验证
2.9.2 配置先决条件
# Step1:创建数据库,完成下列步骤
# a.使用 root 用户连接mysql数据库
mysql -uroot -pAdmin@h3c
# b.创建neutron 数据库
CREATE DATABASE neutron
# c.创建数据库用户neutron ,并授予neutron 用户对neutron 数据库完全控制权限
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
# d.退出数据库连接
exit
# Step2:执行 admin 环境变量脚本
source admin-openrc.sh
# Step3:在认证服务中创建网络服务的认证信息,完成下列步骤
# a.创建neutron 用户
keystone user-create --name neutron --pass NEUTRON_PASS
# b.连接neutron 用户到 service租户和admin角色
keystone user-role-add --user neutron --tenant service --role admin
# c.创建neutron 服务
keystone service-create --name neutron --type network --descripte "OpenStack Networking"
# d.创建neutron 服务端点
keystone endpoint-create \
--service-id ${keystone service-list | awk '/ network / {print $2}'} \
--publicurl http://controller.nice.com:9696 \
--internalurl http://controller.nice.com:9696 \
--adminurl http://controller.nice.com:9696 \
--region regionOne
2.9.3 安装网络服务组件
yum install -y openstack-neutron openstack-neutron-ml2 python-neutronclient which
2.9.4 配置网络服务组件
# Step1:编辑 /etc/neutron/neutron.conf 文件,并完成下列操作:
# a.编辑[database]小节,配置数据库访问
[database]
...
connection = mysql://neutron:NEUTRON_DBPASS@controller.nice.com/neutron
# b.编辑[DEFAULT],配置RabbitMQ消息队列访问
...
rpc_backend = rabbit
rabbit_host = controller.nice.com
rabbit_password = RABBIT_PASS
# c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri http://controller.nice.com:5000/v2.0
identity_uri = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
# d.编辑[DEFAULT]小节,配置启用Modular Layer(ML2)插件,路由服务和重叠IP地址功能
[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
# e.编辑[DEFAULT]小节,配置当网络拓扑结构发生变化时通知计算服务
[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller.nice.com:8774/v2
nova_admin_auth_url = http://controller.nice.com:35357/v2.0
nova_region_name = regionOne
nova_admin_username = nova
nova_admin_tenant_id = SERVICE_TENANT_ID
nova_admin_password = NOVA_PASS
# 注意:可以通过keystone tenant-get service,获取service 租户的ID
# f.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
2.9.5 配置Modular Layer 2(ML2) plugin
# Step1:编辑/etc/neutron/plugins/ml2/ml2_conf.ini 文件,并完成下列操作:
# a.编辑[ml2]小节,启用flat 和 generic routing encapsulation(GRE)网络类型驱动,配置GRE租户网络和OVS驱动机制
[ml2]
...
type_drivers = flat,gre
tenant_network_types = gre
mechanism_drivers = openswitch
# b.编辑[ml2_type_gre]小节,配置隧道标识范围
[ml2_type_gre]
...
tunnel_id_ranges = 1:1000
# c.编辑[securitygroup]小节,启用安全组,启用ipset并配置 OVS 防火墙驱动
[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables.OVSHybridIptablesFirewallDriver
2.9.6 配置计算服务使用 Neutron
- 默认情况下,计算服务使用的是传统网络,我们需要重新配置。
# 编辑/etc/nova/nova.conf 文件,并完成下列操作:
# a.编辑[DEFAULT]小节,配置 API 接口和驱动程序
[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewalld_driver = nova.virt.firewall.NoopFirewallDriver
# b.编辑[neutron]小节,配置访问参数:
[neutron]
...
url = http://controller.nice.com:9696
auth_strategy = keystone
admin_auth_url = http://controller.nice.com:35357/v2.0
admin_tenant_name = service
admin_username = neutron
admin_password = NEUTRON_PASS
2.9.7 完成配置
# Step1:为ML2插件配置文件创建连接文件
ln -sv /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
# Step2:初始化数据库
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron
# Step3:重新启动计算服务
systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service
# Step4:启动网络服务并配置开机自动启动
systemctl enable neutron-server.service
systemctl start neutron-server.service
2.9.8 验证
# Step1:执行 admin 环境变量脚本
source admin-openrc.sh
# Step2:列出加载的扩展模块,确认成功启动 neutron-server 进程
neutron ext-list
2.9.9 安装并配置 network 节点
- 配置先决条件
- 安装网络组件
- 配置网络通用组件
- 配置Modular Layer 2(ML2) plugin
- 配置 Layer-3(L3) agent
- 配置 DHCP agent
- 配置metadata agent
- 配置 Open vSwitch(OVS)服务
- 完成安装
- 验证
2.9.10 配置先决条件
# Step1:编辑/etc/sysctl.conf 文件,包括下列参数
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
# Step2:使其更改生效
sysctl -p
2.9.11 安装网络组件
yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch
2.9.12 配置网络通用组件
网络通用组件配置包括认证机制,消息队列以及插件
# 编辑 /etc/neutron/neutron.conf 文件并完成下列操作:
# a:编辑[database]小节,注释任何connection 选项,因为network节点不能直接连接数据库
# b:编辑[DEFAULT]小节,配置RabbitMQ消息队列访问
...
rpc_backend = rabbit
rabbit_host = controller.nice.com
rabbit_password = RABBIT_PASS
# c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri http://controller.nice.com:5000/v2.0
identity_uri = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
# d.编辑[DEFAULT]小节,配置启用Modular Layer(ML2)插件,路由服务和重叠IP地址功能
[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
# e.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
2.9.13 配置Modular Layer 2(ML2) plugin
ML2 插件使用Open vSwitch (OVS)机制为虚拟机实例提供网络框架。
# Step1:编辑/etc/neutron/plugins/ml2/ml2_conf.ini 文件,并完成下列操作:
# a.编辑[ml2]小节,启用flat 和 generic routing encapsulation(GRE)网络类型驱动,配置GRE租户网络和OVS驱动机制
[ml2]
...
type_drivers = flat,gre
tenant_network_types = gre
mechanism_drivers = openswitch
# b.编辑[ml2_type_flat]小节,配置外部网络
[ml2_type_flat]
...
flat_networks = external
# c.编辑[ml2_type_gre]小节,配置隧道标识范围
[ml2_type_gre]
...
tunnel_id_ranges = 1:1000
# d.编辑[securitygroup]小节,启用安全组,启用ipset并配置 OVS 防火墙驱动
[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables.OVSHybridIptablesFirewallDriver
# e.编辑[ovs]小节,配置 Open vSwitch(OVS)代理
[ovs]
...
local_ip = INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS(172.16.0.6)
tunnel_type = gre
enable_tunneling = True
bridge_mappings = external:br-ex
2.9.14 配置 Layer-3(L3) agent
# 编辑 /etc/neutron/l3_agent.ini 文件并完成下列配置:
# a.编辑[DEFAULT]小节,配置驱动,启用网络命名空间,配置外部网络桥接
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True
external_network_bridge = br-ex
# b.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
debug = True
2.9.15 配置DHCP agent
# Step1:编辑 /etc/neutron/dhcp_agent.ini 文件并完成下列配置:
# a.编辑[DEFAULT]小节,配置驱动和启用网络命名空间
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True
# b.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
debug = True
# Step2:(可选择)在VMware虚拟机中可能是必要的!配置DHCP选项,将MTU改为1454bytes,以改善网络性能
# a.编辑/etc/neutron/dhcp_agent.ini 文件并完成下列步骤
# 编辑[DEFAULT]小节,启用Dnsmasq配置
[DEFAULT]
...
dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf
# b.创建并编辑 /etc/neutron/dnsmasq-neutron.conf 文件中完成下列的配置:
# 启用 DHCP MTU选项(26)并配置值为1454bytes
dhcp-option-force = 26,1454
user = neutron
group = neutron
# c.终止任何已经存在的 dnsmasq 进行
pkill dnsmasq
2.9.16 配置 metadata agent
# Step1:编辑/etc/neutron/metadata_agent.ini文件并完成下列配置
# a.编辑[DEFAULT]小节,配置访问参数
[DEFAULT]
...
auth_uri http://controller.nice.com:5000/v2.0
auth_region = regionOne
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
# b.编辑[DEFAULT]小节,配置元数据主机
[DEFAULT]
...
nova_metadata_ip = controller.nice.com
# c.编辑[DEFAULT]小节,配置元数据代理共享机密暗号
[DEFAULT]
...
metadata_proxy_shared_secret = METADATA_SECRET
# d.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
debug = True
# Step2:在controller节点,编辑/etc/nova/nova.conf 文件并完成下列配置
# 编辑[neutron]小节,启用元数据代理并配置机密暗号
[neutron]
...
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET
# Step3:在controller节点,重新启动 compute API服务
systemctl restart openstack-nova-api.service
2.9.17 配置 Open vSwitch(OVS)服务
# Step1:启动OVS服务并配置开机自动启动
systemctl enable openvswitch.service
systemctl start openvswitch.service
# Step2:添加外部网桥(external bridge)
ovs-vsctl add-br br-ex
# Step3:添加一个端口到外部网桥,用于连接外部物理网络
ovs-vsctl add-port br-ex INTERFACE_NAME
# 注意:将INTERFACE_NAME换成实际连接外部网卡接口名。如:eth2或者eno50332208
2.9.18 完成安装
# Step1:创建网络服务初始化脚本的符号连接
ln -sv /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lib/systemd/system/neutron-openvswitch-agent.service
# Step2:启动网络服务并设置开机自动启动
systemctl enable neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service
systemctl start neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service
2.9.19 验证(在Controller 节点执行下列命令)
# Step1:执行 admin 环境变量脚本
source admin-openrc.sh
# Step2:列出neutron代理,确认启动neutron agents成功
neutron agent-list
2.9.20 安装并配置 computer1 节点
- 配置先决条件
- 安装网络组件
- 配置网络通用组件
- 配置Modular Layer 2(ML2) plugin
- 配置 Open vSwitch(OVS)service
- 配置计算服务使用网络
- 完成安装
- 验证
2.9.21 配置先决条件
# Step1:编辑/etc/sysctl.conf 文件,使其包括下列参数:
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.default.rp_filter = 0
# Step2:使其更改生效
sysctl -p
2.9.22 安装网络组件
yum install -y openstack-neutron-ml2 openstack-neutron-openvswitch
2.9.23 配置网络通用组件
# 编辑 /etc/neutron/neutron.conf 文件并完成下列操作
# a.编辑[database]小节,注释任何connection 选项,因为计算节点不能直接连接数据库
# b:编辑[DEFAULT]小节,配置RabbitMQ消息队列访问
...
rpc_backend = rabbit
rabbit_host = controller.nice.com
rabbit_password = RABBIT_PASS
# c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri http://controller.nice.com:5000/v2.0
identity_uri = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS
# d.编辑[DEFAULT]小节,配置启用Modular Layer(ML2)插件,路由服务和重叠IP地址功能
[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
# e.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
2.9.24 配置Modular Layer 2(ML2) plugin
# Step1:编辑/etc/neutron/plugins/ml2/ml2_conf.ini 文件,并完成下列操作:
# a.编辑[ml2]小节,启用flat 和 generic routing encapsulation(GRE)网络类型驱动,配置GRE租户网络和OVS驱动机制
[ml2]
...
type_drivers = flat,gre
tenant_network_types = gre
mechanism_drivers = openswitch
# b.编辑[ml2_type_gre]小节,配置隧道标识范围
[ml2_type_gre]
...
tunnel_id_ranges = 1:1000
# c.编辑[securitygroup]小节,启用安全组,启用ipset并配置 OVS 防火墙驱动
[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables.OVSHybridIptablesFirewallDriver
# d.编辑[ovs]小节,配置 Open vSwitch(OVS)代理
[ovs]
...
local_ip = INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS(172.16.0.10)
tunnel_type = gre
enable_tunneling = True
2.9.25 配置Open vSwitch(OVS)Service
# 启动OVS服务并设置开机自动启动
systemctl enable openvswitch.service
systemctl start openvswitch.service
2.9.26 配置计算服务使用网络
# 编辑/etc/nova/nova.conf 文件并完成下列操作
# a.编辑[DEFAULT]小节,配置API接口和驱动
[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewalld_driver = nova.virt.firewall.NoopFirewallDriver
# b.编辑[neutron]小节,配置访问参数:
[neutron]
...
url = http://controller.nice.com:9696
auth_strategy = keystone
admin_auth_url = http://controller.nice.com:35357/v2.0
admin_tenant_name = service
admin_username = neutron
admin_password = NEUTRON_PASS
2.9.27 完成安装
# Step1:创建网络服务初始化脚本的符号连接
ln -sv /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lib/systemd/system/neutron-openvswitch-agent.service
# Step2:启动网络服务并设置开机自动启动
systemctl enable neutron-openvswitch-agent.service
systemctl start neutron-openvswitch-agent.service
2.9.28 验证(在Controller节点执行下列命令)
# Step1:执行 admin 环境变量脚本
source admin-openrc.sh
# Step2:列出加载的扩展模块,确认成功启动 neutron-server 进程
neutron ext-list
2.9.29 创建第一个网络
2.9.30 配置外部网络(在Controller节点执行下列命令)
- 创建一个外部网络
- 创建一个外部网络的子网
2.9.31 创建一个外部网络
# Step1:执行 admin 环境变量脚本
source admin-openrc.sh
# Step2:创建网络
neutron net-create ext-net --shared --router:external True --provider:physical_network external --provider:network_type flat
2.9.32 创建一个外部网络的子网
# Step1:创建子网
neutron subnet-create ext-net --name ext-subnet \
--allocation-pool start=FLOATING_IP_START,end=FLOATING_IP_END \
--disable-dhcp --gateway EXTERNAL_NETWORK_GATEWAY EXTERNAL_NETWORK_CIDR
FLOATING_IP_START :起始IP
FLOATING_IP_END :结束IP
EXTERNAL_NETWORK_GATEWAY:外部网络网关
EXTERNAL_NETWORK_CIDR :外部网络网段
# 例如:外网网段为10.0.0.0/24,浮动地址范围为:10.0.0.100 ~ 10.0.0.200,网关为:10.0.0.1
neutron subnet-create ext-net --name ext-subnet \
--allocation-pool start=10.0.0.100,end=10.0.0.200 \
--disable-dhcp --gateway 10.0.0.1 10.0.0.0/24
2.9.33 配置租户网络(在Controller节点执行下列命令)
- 创建租户网络
- 创建租户网络的子网
- 在租户网络创建一个路由器,用来连接外部网和租户网
2.9.34 创建租户网络
# Step1:执行 admin 环境变量脚本
source admin-openrc.sh
# Step2:创建租户网络
neutron net-create demo-net
2.9.35 创建租户网络的子网
# 创建子网
neutron subnet-create demo-net --name demo-subnet \
--gateway TENANT_NETWORK_GATEWAY TENANT_NETWORK_CIDR
TENANT_NETWORK_GATEWAY:租户网的网关
TENANT_NETWORK_CIDR :租户网的网段
# 例如:租户网的网段为192.168.2.0/24,网关为192.168.2.1(网关通常默认为.1)
neutron subnet-create demo-net --name demo-subnet \
--gateway 192.168.2.1 192.168.2.0/24
2.9.36 在租户网络创建一个路由器,用来连接外部网和租户网
# Step1:创建路由器
neutron router-create demo-router
# Step2:附加路由器到demo租户的子网
neutron router-interface-add demo-router demo-subnet
# Step3:通过设置网关,使得路由器附加的外部网
neutron router-gateway-set demo-router ext-net
2.9.37 确认连接
# Step1:查看路由器获取到的IP
neutron router-list
2.10 Horizon - 仪表盘套件
OpenStack B/S 结构搭建
2.10.1 先决条件
- 安装 OpenStack compute(Nova)和 identity(Keystone)Service
- 安装 Python 2.6 或者 2.7,并必须支持 Django
- 浏览器必须支持 HTML5 并启用 cookies 和 JavaScript 功能
2.10.2 代码构建
# 查看服务是否正常
nova service-list
# neutron 代理端情况
neutron agent-list
2.10.2.1 安装仪表盘组件
yum install -y openstack-dashboard httpd mod_wsgi memcached python-memcached
2.10.2.2 配置仪表盘
# Step1:编辑/etc/openstack-dashboard/local_settings 文件并完成下列配置
# a.配置 dashboard 使用 controller 节点上的OpenStack 服务
OPENSTACK_HOST = "contoller.nice.com"
# b.设置允许来自所有网络的主机访问dashboard
ALLOWED_HOSTS = ['*']
# c.配置memcached会话存储服务(将原有CACHES区域注释)
CHCHES = {
'default': {
'BACKEDN': 'django.core.cache.backends.memcached,MemcachedCache',
'LOCATION': '127.0.0.1:11211'
}
}
# d.(可选择)配置时区
TIME_ZONE = "TIME_ZONE"
# 地球人一般配置成:
TIME_ZONE = "Asia/Shanghai"
2.10.2.3 完成安装
# Step1:在RHEL或者CentOS上,配置SELinux去允许web服务器访问OpenStack服务(如果你每关SELinux)
setsebool -P httpd_can_network_connect on
# Step2:修改相关文件归属,使得dashboard CSS可以被加载
chown -R apache:apache /usr/share/openstack-dashboard/static
# Step3:启动 web 服务和会话保存服务,并设置开机自动启动
systemctl enable httpd.service memcached.service
systemctl start httpd.service memcached.service
2.10.2.4 验证
- 访问 dashboard,在浏览器输入 http://controller.nice.com/dashboard
- 使用 admin 或者 demo 用户登录
2.11 Cinder 块存储
2.11.1 组件说明
- OpenStack 块存储服务为云主机提供块存储设备。支持不同的后端(操作系统类型)
- The Block Storage API 和 Scheduler 服务运行在 controller 节点
- The volume service 运行在一个或者多个存储节点
- 存储节点可以通过本地磁盘,SAN / NAS 等后端设备为云主机提供卷存储
- cinder-api:允许API请求,并路由它们到 cinder-volume
- cinder-volume:直接与块存储服务交互。处理像 cinder-scheduler 这样的服务。通过消息队列相互通信。支持多种存储类型
- cinder-scheduler daemon:选择最优的存储节点创建卷。类似于 novascheduler
- Messagin queue:在块存储进程中传递消息(RabbitMQ)
2.11.2 代码构建
2.11.2 安装并配置 controller 节点
- 配置先决条件
- 安装并配置块存储控制组件
- 完成安装
2.11.2.1 配置先决条件
# Step1:创建数据库,并完成下列步骤:
# a.使用 root 用户连接mysql数据库
mysql -uroot -pAdmin@h3c
# b.cinder 数据库
CREATE DATABASE cinder;
# c.创建数据库用户cinder ,并授予cinder 用户对cinder 数据库完全控制权限
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';
# d.退出数据库连接
exit
# Step2:执行 admin 环境变量脚本
source admin-openrc.sh
# Step3:在认证服务中创建块存储服务的认证信息,完成下列步骤
# a.创建cinder 用户
keystone user-create --name cinder --pass CINDER_DBPASS
# b.连接cinder 用户到 service租户和admin角色
keystone user-role-add --user cinder --tenant service --role admin
# c.创建cinder 服务
keystone service-create --name cinder --type volume --descripte "OpenStack Block Storage"
keystone service-create --name cinderv2 --type volumev2 --descripte "OpenStack Block Storage"
# d.创建块存储 服务端点
keystone endpoint-create \
--service-id ${keystone service-list | awk '/ volume / {print $2}'} \
--publicurl http://controller.nice.com:8776/v1/%\(tenant_id\)s \
--internalurl http://controller.nice.com:8776/v1/%\(tenant_id\)s \
--adminurl http://controller.nice.com:8776/v1/%\(tenant_id\)s \
--region regionOne
keystone endpoint-create \
--service-id ${keystone service-list | awk '/ volumev2 / {print $2}'} \
--publicurl http://controller.nice.com:8776/v2/%\(tenant_id\)s \
--internalurl http://controller.nice.com:8776/v2/%\(tenant_id\)s \
--adminurl http://controller.nice.com:8776/v2/%\(tenant_id\)s \
--region regionOne
2.11.2.2 安装并配置块存储控制组件
# Step1:安装软件包
yum install -y openstack-cinder python-cinderclient python-oslo-db
# Step2:编辑/etc/cinder/cinder.conf 文件并完成下列操作:
# a.编辑[database]小节,配置数据库连接
[database]
...
connection = mysql://cinder:CINDER_DBPASS@controller.nice.com/cinder
# b.编辑[DEFAULT]小节,配置RabbitMQ 消息代理访问:
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller.nice.com
rabbit_password = RABBIT_PASS
# c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri http://controller.nice.com:5000/v2.0
identity_uri = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = cinder
admin_password = CINDER_PASS
# d.(可选择)在[DEFAULT]小节中配置my_ip选项使用 controller 节点的控制端口IP
[DEFAULT]
...
my_ip = 10.0.0.21
# e.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
# Step3:初始化块存储服务数据库
su -s /bin/sh -c "cinder-manage db sync" cinder
2.11.2.3 完成安装
# 启动块存储服务并设置开机自动启动
systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
2.11.3 安装并配置 block1 节点
- 配置先决条件
- 安装并配置块存储卷组件
- 完成安装
2.11.3.1 配置先决条件
# Step1:添加一个新的硬盘(如:sdb),并分将全部空间分成一个主分区
# Step2:配置网卡信息
IP Address:10.0.0.23
Network Mask:255.255.255.0(or /24)
Default Gateway:10.0.0.2
# Step3:设置主机名为block1.nice.com,并添加对应的DNS记录。设置NTP服务
# Step4:安装 LVM 软件包(根据自身情况)
yum install -y lvm2
# Step5:启动LVM服务并在机器开机自动启动(根据自身情况)
systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service
# Step6:创建物理卷/dev/sdb1
pvcreate /dev/sdb1
# Step7:创建卷组cinder-volumes(名字不要改)
vgcreate cinder-volumes /dev/sdb1
# Step8:编辑/etc/lvm/lvm.conf文件,使得系统只扫描启用LVM的磁盘,防止识别其他非LVM磁盘对块存储服务造成影响。
# 编辑devices小节,添加过滤器允许/dev/sdb磁盘,拒绝其他设备
devices {
...
filter = ["a/sdb","r/.*/"]
}
# 警告:如果你的系统磁盘使用了LVM,则必须添加系统盘到过滤器中
filter = ["a/sda","a/sdb","r/.*/"]
# 同样,如果computer节点的系统盘也使用了LVM,则也需要修改/etc/lvm/lvm.conf文件。并到过滤器中
filter = ["a/sda","r/.*/"]
2.11.3.2 安装并配置块存储卷组件
# Step1:安装软件包
yum install -y openstack-cinder targetcli python-oslo-db MySQL-python
# Step2:编辑/etc/cinder/cinder.conf文件并完成下列操作:
# a.编辑[database]小节,配置数据库连接
[database]
...
connection = mysql://cinder:CINDER_DBPASS@controller.nice.com/cinder
# b.编辑[DEFAULT]小节,配置RabbitMQ 消息代理访问:
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller.nice.com
rabbit_password = RABBIT_PASS
# c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri http://controller.nice.com:5000/v2.0
identity_uri = http://controller.nice.com:35357
admin_tenant_name = service
admin_user = cinder
admin_password = CINDER_PASS
# d.编辑在[DEFAULT]小节中配置my_ip选项
[DEFAULT]
...
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS(10.0.0.23)
# e.编辑在[DEFAULT]小节中配置镜像服务器位置
[DEFAULT]
...
glance_host = controller.nice.com
# f.编辑在[DEFAULT]小节中配置块存储服务使用lioadm iSCSI服务
[DEFAULT]
...
iscsi_helper = lioadm
# g.(可选择)在[DEFAULT]小节,配置详细日志输出,方便排错
[DEFAULT]
...
verbose = True
2.11.3.3 完成安装
# 启动块存储volume服务和iSCSI服务并设置开机自动启动
systemctl enable openstack-cinder-volume.service target.service
systemctl start openstack-cinder-volume.service target.service
# 查看块存储情况
cinder list
2.12 实例创建
- 创建密钥对
- 启动一个实例
- 通过虚拟控制台访问你的实例
- 远程访问你的实例
- 为实例添加额外的云硬盘
2.12.1 创建密钥对
大多数云镜像使用公钥认证,这有别于传统的用户名 / 密码认证。在启动一个实例之前,必须使用 ssh-keygen
命令生成一个密钥对,并将公钥添加到OpenStack环境中。
# 在 Controller 节点运行
# Step1:执行 demo 环境变量脚本
source demo-openrc.sh
# Step2:生成密钥对
ssh-keygen
# Step3:添加公钥到 OpenStack 环境
nova keypair-add --pub-key ~/.ssh/id_rsa.pub demo.key
# Step4:验证公钥是否添加成功
nova keypair-list
2.12.2 启动一个实例
要启动一个实例,必须最少指定 flavor( 云主机类型 ),image name( 镜像名 ),network( 网络 ),security group( 安全组 ),key( 密钥 )和instance name( 实例名 )。
- flavor 用来指定一个虚拟的独立分配的资源。包括CPU,内存和存储。
查看可用的 flavor:
nova flavor-list
- 列出可用的镜像
nova image-list
- 列出可用的网络
neutron net-list
- 列出可用的安全组
nova secgroup-list
- 启动实例
nova boot --flavor m1.tiny --image cirros-0.3.3-x86_64 --inc net-id=DEMO_NET_ID --security-group default --key-name demo-key demo-instance1
# 例如:
nova boot --flavor m1.tiny --image cirros-0.3.3-x86_64 --inc net-id=d36f6eb0-e59a-42b9-9209-5547e022484b --security-group default --key-name demo-key demo-instance1
2.12.3 通过虚拟控制台访问你的实例
获取用于访问你的实例的 Virtual Network Computing(VNC) 会话URL,并通过浏览器访问
nova get-vnc-console demo-instance1 novnc
# 确保你的客户端能够解析 controller 节点的FADN名
确认能够连接到 demo-net 租户网络的网关
ping -c 4 192.168.2.1
确认能够连接到 ext-net 外部网络
ping -c 10.0.0.1
2.12.4 远程访问你的实例
- 添加规则到名为 default 的安全组:
# a.允许ICMP协议(ping)
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
# b.允许ssh协议
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
- 在 ext-net 外部网络创建一个浮动IP地址:
neutron floatingip-create ext-net
- 分配浮动IP地址到你的实例
nova floating-ip-associate demo-instance1 10.0.0.110
- 检查你的浮动IP地址状态
nova list
- 从任何一个可以和 ext-net 网络通信的主机测试联通性
ping -c 10.0.0.110
- 从任何一个可以和 ext-net 网络通信的主机上通过ssh访问实例
ssh cirros@10.0.0.110
# 或者私钥文件复制到外部客户端,通过密钥对验证登录
ssh -i id_rsa cirros@10.0.0.110
2.12.5 为实例添加额外的云硬盘
如果你的环境中包含块存储服务,则你可以为你的实例添加云硬盘。
- 执行 demo 环境变量脚本
# Step1:执行 demo 环境变量脚本
source demo-openrc.sh
- 列出卷
nova volume-list
- 附加 demo-instance1 卷到 demo-instance1 实例
nova volume-attach demo-instance1 <云盘的ID号>
- 列出卷
nova volume-list
3 构建实验:OpenStack-rocky 安装
Reference:
查看OpenStack版本列表
OpenStack Releases: OpenStack Releases
官方安装站点:
https://docs.openstack.org/install-guide/
参考地址:
https://blog.51cto.com/liuleis/2094190 (重点:安装OpenStack Queens)
https://blog.csdn.net/qq_38773184/article/details/82391073 (重点:安装OpenStack Rocky)