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 配置静态 IPeth1 不设置IP[rootlocalhost ~]# systemctl disable --now NetworkManager[rootlocalhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0[rootlocalhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0重启 network 服务生效[rootlocalhost ~]# systemctl restart network主机名设为 controller在解析文件里加入计算节点和块存储节点[rootlocalhost ~]# hostnamectl set-hostname controller[rootlocalhost ~]# vim /etc/hosts[rootlocalhost ~]# logout重连后生效确认环境正常包括解析、时间同步、防火墙等配置 openstack 库[rootcontroller ~]# tar xf mitaka.tar -C /opt/[rootcontroller ~]# vim /etc/yum.repos.d/openstack.repo升级包重启后生效[rootcontroller ~]# yum upgrade[rootcontroller ~]# reboot[rootcontroller ~]# yum repolist2.2 SQL数据库安装软件包并编辑配置文件[rootcontroller ~]# yum install python-openstackclient[rootcontroller ~]# yum install mariadb mariadb-server python2-PyMySQL[rootcontroller ~]# vim /etc/my.cnf.d/openstack.cnf启动数据库服务并对其进行初始化[rootcontroller ~]# systemctl enable --now mariadb.service[rootcontroller ~]# mysql_secure_installation2.3 消息队列下载安装包启动消息队列服务并将其配置为自启动[rootcontroller ~]# yum install rabbitmq-server[rootcontroller ~]# systemctl enable --now rabbitmq-server.service添加 openstack 用户密码与用户名设置为相同并给openstack用户配置写和读权限因涉及密码较多此后所有的密码都设置为与用户名相同[rootcontroller ~]# rabbitmqctl add_user openstack openstack[rootcontroller ~]# rabbitmqctl set_permissions openstack .* .* .*测试非必要[rootcontroller ~]# rabbitmq-plugins enable rabbitmq_management[rootcontroller ~]# rabbitmqctl set_user_tags openstack administrator[rootcontroller ~]# rabbitmqctl list_users[rootcontroller ~]# systemctl restart rabbitmq-server2.4 Memcached安装软件包设置开机自启[rootcontroller ~]# yum install memcached python-memcached[rootcontroller ~]# vim /etc/sysconfig/memcached[rootcontroller ~]# systemctl enable --now memcached.service2.5 认证服务在配置 OpenStack 身份认证服务前必须创建一个数据库和管理员令牌[rootcontroller ~]# mysql -u root -p123456MariaDB[(none)]CREATE DATABASE keystone;MariaDB[(none)]GRANT ALL PRIVILEGES ON keystone.* TOkeystonelocalhostIDENTIFIED BYkeystone;MariaDB[(none)]GRANT ALL PRIVILEGES ON keystone.* TOkeystone%IDENTIFIED BYkeystone;MariaDB[(none)]quitKeystone 身份认证组件配置[rootcontroller ~]# yum install openstack-keystone httpd mod_wsgi[rootcontroller ~]# openssl rand -hex 10# 生成一个随机值在初始的配置中作为管理员的令牌[rootcontroller ~]# vim /etc/keystone/keystone.conf初始化身份认证服务的数据库和 Fernet keys[rootcontroller ~]# su -s /bin/sh -c keystone-manage db_sync keystone[rootcontroller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone2.6 配置 Apache HTTP 服务器[rootcontroller ~]# vim /etc/httpd/conf/httpd.conf[rootcontroller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf测试启动服务并设置为开机自启[rootcontroller ~]# systemctl enable --now httpd.service2.7 创建服务实体和API端点[rootcontroller ~]# export OS_TOKEN19a89d65122bba5ccc97# 配置认证令牌[rootcontroller ~]# export OS_URLhttp://controller:35357/v3# 配置端点URL[rootcontroller ~]# export OS_IDENTITY_API_VERSION3# 配置认证 API 版本创建服务实体和身份认证服务[rootcontroller ~]# openstack service create --name keystone --description OpenStack Identity identity创建认证服务的 API 端点[rootcontroller ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3[rootcontroller ~]# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3[rootcontroller ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3[rootcontroller ~]# openstack endpoint list[rootcontroller ~]# openstack service list2.8 创建域、项目、用户和角色创建域default[rootcontroller ~]# openstack domain create --description Default Domain default创建 admin 项目[rootcontroller ~]# openstack project create --domain default --description Admin Project admin创建 admin 用户[rootcontroller ~]# openstack user create --domain default --password admin admin创建 admin 角色[rootcontroller ~]# openstack role create admin添加admin角色到 admin 项目和用户上[rootcontroller ~]# openstack role add --project admin --user admin admin创建service项目[rootcontroller ~]# openstack project create --domain default --description Service Project service常规非管理任务应该使用无特权的项目和用户创建 demo 项目和用户创建demo项目[rootcontroller ~]# openstack project create --domain default --description Demo Project demo创建demo用户[rootcontroller ~]# openstack user create --domain default --password demo demo创建 user 角色[rootcontroller ~]# openstack role create user添加 user角色到demo 项目和用户[rootcontroller ~]# openstack role add --project demo --user demo user2.9 验证操作重置OS_TOKEN和OS_URL环境变量作为 admin 用户请求认证令牌[rootcontroller ~]# unset OS_TOKEN OS_URL[rootcontroller ~]# 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用户请求认证令牌[rootcontroller ~]# 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 命令[rootcontroller ~]# vim admin-openrc编写demo‑openrc环境变量文件定义 Keystone 认证地址、demo 项目、普通用户与密码等认证参数后续加载该文件可自动带入普通租户身份执行 openstack 命令[rootcontroller ~]# vim demo-openrc添加执行权限[rootcontroller ~]# chmod x admin-openrc demo-openrc加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书[rootcontroller ~]# . admin-openrc[rootcontroller ~]# openstack user list加载demo‑openrc文件来身份认证服务的环境变量位置和demo项目和用户证书[rootcontroller ~]# . demo-openrc[rootcontroller ~]# openstack user list退出重连再测试脚本[rootcontroller ~]# logout脚本失效需要重新加载[rootcontroller ~]# . admin-openrc[rootcontroller ~]# openstack user list[rootcontroller ~]# openstack role list[rootcontroller ~]# openstack service list[rootcontroller ~]# openstack endpoint list[rootcontroller ~]# openstack project list[rootcontroller ~]# openstack domain list