1 简介
OpenStack 是一套开源 IaaS(基础设施即服务)云平台,由 NASA 与 Rackspace 联合发起,采用 Python 开发,采用模块化松耦合架构,用来把多台物理服务器的 CPU、内存、硬盘、网络统一池化,搭建私有云、混合云环境腾讯云。
它本身不做虚拟化,底层依托 KVM 等 Hypervisor 生成虚拟机;对外提供 API 与 Web 页面,实现云主机、云硬盘、虚拟网络的自助创建、调度与生命周期管理。
- 核心组件
- Keystone(身份认证):整个云平台的认证中心,负责用户、角色、令牌、服务端点管理,所有服务请求都要经过它鉴权。
- Glance(镜像服务):镜像仓库,存放 qcow2 系统镜像,Nova 创建云主机时从此处读取镜像模板。
- Nova(计算服务):管理虚拟机生命周期,接收请求,调度虚拟机运行到合适的计算节点。
- Neutron(网络服务):软件定义网络,管理虚拟网络、子网、路由器、DHCP,实现云主机网络隔离与互通。
- Cinder(块存储):提供云硬盘,可以挂载给云主机做持久化存储。
- Horizon(仪表盘):Web 图形管理界面,可视化操作全部云资源。
- 底层依赖:
- MariaDB:数据库,存储各个组件元数据;
- RabbitMQ 消息队列:各个组件之间异步消息通信,实现跨节点服务调用。
- 节点角色
- 控制节点 Controller:运行 API、调度、数据库、消息队列,负责接收请求、做调度决策。
- 计算节点 Compute:真正运行虚拟机实例,安装 nova‑compute,调用 KVM 生成虚拟机。
- 用户创建云主机简要流程
- 用户登录 Horizon 或者调用 API,请求创建云主机;
- Keystone 校验用户身份,返回访问令牌;
- Nova 接收请求,调度器挑选一台空闲的计算节点;
- Nova 向 Glance 获取操作系统镜像;向 Neutron 申请虚拟网卡;向 Cinder 申请云硬盘;
- 计算节点调用 KVM,拉起虚拟机实例;
- Neutron 配置网络,云主机启动完成。
2 控制节点配置
此次部署参考官方文档https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/
2.1 初始化
开一个全新的虚拟机,添加第二块网卡
OpenStack 环境一般不使用 NetworkManager 管理网卡,关闭服务并禁止开机自启,给 eth0 配置静态 IP,eth1 不设置IP
[root@localhost ~]# systemctl disable --now NetworkManager[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
重启 network 服务生效
[root@localhost ~]# systemctl restart network主机名设为 controller,在解析文件里加入计算节点和块存储节点
[root@localhost ~]# hostnamectl set-hostname controller[root@localhost ~]# vim /etc/hosts[root@localhost ~]# logout重连后生效,确认环境正常,包括解析、时间同步、防火墙等
配置 openstack 库
[root@controller ~]# tar xf mitaka.tar -C /opt/[root@controller ~]# vim /etc/yum.repos.d/openstack.repo
升级包,重启后生效
[root@controller ~]# yum upgrade[root@controller ~]# reboot[root@controller ~]# yum repolist2.2 SQL数据库
安装软件包并编辑配置文件
[root@controller ~]# yum install python-openstackclient[root@controller ~]# yum install mariadb mariadb-server python2-PyMySQL[root@controller ~]# vim /etc/my.cnf.d/openstack.cnf
启动数据库服务,并对其进行初始化
[root@controller ~]# systemctl enable --now mariadb.service[root@controller ~]# mysql_secure_installation2.3 消息队列
下载安装包,启动消息队列服务并将其配置为自启动
[root@controller ~]# yum install rabbitmq-server[root@controller ~]# systemctl enable --now rabbitmq-server.service添加 openstack 用户,密码与用户名设置为相同,并给openstack用户配置写和读权限
因涉及密码较多,此后所有的密码都设置为与用户名相同
[root@controller ~]# rabbitmqctl add_user openstack openstack[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"测试,非必要
[root@controller ~]# rabbitmq-plugins enable rabbitmq_management[root@controller ~]# rabbitmqctl set_user_tags openstack administrator[root@controller ~]# rabbitmqctl list_users[root@controller ~]# systemctl restart rabbitmq-server2.4 Memcached
安装软件包,设置开机自启
[root@controller ~]# yum install memcached python-memcached[root@controller ~]# vim /etc/sysconfig/memcached[root@controller ~]# systemctl enable --now memcached.service2.5 认证服务
在配置 OpenStack 身份认证服务前,必须创建一个数据库和管理员令牌
[root@controller ~]# mysql -u root -p123456MariaDB[(none)]>CREATE DATABASE keystone;MariaDB[(none)]>GRANT ALL PRIVILEGES ON keystone.* TO'keystone'@'localhost'IDENTIFIED BY'keystone';MariaDB[(none)]>GRANT ALL PRIVILEGES ON keystone.* TO'keystone'@'%'IDENTIFIED BY'keystone';MariaDB[(none)]>quit
Keystone 身份认证组件配置
[root@controller ~]# yum install openstack-keystone httpd mod_wsgi[root@controller ~]# openssl rand -hex 10# 生成一个随机值在初始的配置中作为管理员的令牌[root@controller ~]# vim /etc/keystone/keystone.conf
初始化身份认证服务的数据库和 Fernet keys
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone2.6 配置 Apache HTTP 服务器
[root@controller ~]# vim /etc/httpd/conf/httpd.conf[root@controller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf
测试
启动服务并设置为开机自启
[root@controller ~]# systemctl enable --now httpd.service2.7 创建服务实体和API端点
[root@controller ~]# export OS_TOKEN=19a89d65122bba5ccc97# 配置认证令牌[root@controller ~]# export OS_URL=http://controller:35357/v3# 配置端点URL[root@controller ~]# export OS_IDENTITY_API_VERSION=3# 配置认证 API 版本创建服务实体和身份认证服务
[root@controller ~]# openstack service create --name keystone --description "OpenStack Identity" identity
创建认证服务的 API 端点
[root@controller ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3[root@controller ~]# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3[root@controller ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3[root@controller ~]# openstack endpoint list[root@controller ~]# openstack service list2.8 创建域、项目、用户和角色
创建域default
[root@controller ~]# openstack domain create --description "Default Domain" default
创建 admin 项目
[root@controller ~]# openstack project create --domain default --description "Admin Project" admin
创建 admin 用户
[root@controller ~]# openstack user create --domain default --password admin admin
创建 admin 角色
[root@controller ~]# openstack role create admin
添加admin角色到 admin 项目和用户上
[root@controller ~]# openstack role add --project admin --user admin admin创建service项目
[root@controller ~]# openstack project create --domain default --description "Service Project" service
常规(非管理)任务应该使用无特权的项目和用户
创建 demo 项目和用户
创建demo项目
[root@controller ~]# openstack project create --domain default --description "Demo Project" demo
创建demo用户
[root@controller ~]# openstack user create --domain default --password demo demo
创建 user 角色
[root@controller ~]# openstack role create user
添加 user角色到demo 项目和用户
[root@controller ~]# openstack role add --project demo --user demo user2.9 验证操作
重置OS_TOKEN和OS_URL环境变量,作为 admin 用户,请求认证令牌
[root@controller ~]# unset OS_TOKEN OS_URL[root@controller ~]# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
作为demo用户,请求认证令牌
[root@controller ~]# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue2.10 创建 OpenStack 客户端环境脚本
编写admin‑openrc环境变量文件,定义 Keystone 认证地址、admin 项目、管理员用户与密码等认证参数,后续加载该文件可自动带入管理员身份执行 openstack 命令
[root@controller ~]# vim admin-openrc
编写demo‑openrc环境变量文件,定义 Keystone 认证地址、demo 项目、普通用户与密码等认证参数,后续加载该文件可自动带入普通租户身份执行 openstack 命令
[root@controller ~]# vim demo-openrc
添加执行权限
[root@controller ~]# chmod +x admin-openrc demo-openrc加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书
[root@controller ~]# . admin-openrc[root@controller ~]# openstack user list
加载demo‑openrc文件来身份认证服务的环境变量位置和demo项目和用户证书
[root@controller ~]# . demo-openrc[root@controller ~]# openstack user list
退出重连,再测试脚本
[root@controller ~]# logout脚本失效,需要重新加载
[root@controller ~]# . admin-openrc[root@controller ~]# openstack user list[root@controller ~]# openstack role list[root@controller ~]# openstack service list[root@controller ~]# openstack endpoint list[root@controller ~]# openstack project list[root@controller ~]# openstack domain list