OpenStack

  • OpenStack简介
  • OpenStack重要集成组件
  • OpenStack平台部署
  • 部署环境
  • 建立虚拟机
  • 配置时间同步
  • 安装OpenStack
  • 安装 RabbitMQ 消息队列服务
  • Memcached缓存令牌的安装
  • 安装和配置OpenStack身份认证服务
  • 配置keystone
  • 配置 Apache HTTP 服务器
  • 创建服务实体和API端点
  • 创建域、项目、用户和角色
  • 在控制节点上安装和配置镜像服务(glance)
  • 在控制节点上安装和配置 Compute 服务
  • 安装和配置计算节点
  • 安装并配置网络服务(neutron)
  • 启动一个实例(启动一个云主机)
  • 创建提供者网络
  • 创建m1.nano规格的主机
  • 生成一个键值对
  • 增加安全组规则
  • 启动实例
  • 使用虚拟控制台访问实例


OpenStack简介

OpenStack是一个云操作系统,它控制整个数据中心的计算、存储和网络资源的大型池,所有这些都通过具有通用身份验证机制的api进行管理和配置。

还提供了一个仪表板,允许管理员控制,同时允许用户通过web界面提供资源。

除了标准的基础设施即服务功能外,其他组件还提供编排、故障管理和服务管理等服务,以确保用户应用程序的高可用性。

Openstack是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作。Openstack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。

Openstack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。

Openstack包括两个主要模块:Nova和 Swift。前者是NASA开发的虚拟服务器部署和业务计算模块;后者是 Backpack开发的分布式云存储模块,两者可以一起用,也可以分开单独用。

Open Stack的各个服务之间通过统一的REST风格的API调用,实现系统的松耦合。它内部组件的工作过程是一个有序的整体。诸如计算资源分配、控制调度、网络通信等都通过AMQP实现。 Open Stack的上层用户是程序员、一般用户和 Horizon界面等模块。这三者都是采用 Open Stack各个组件提供的API接口进行交互,而它们之间则是通过AMQP进行互相调用,它们共同利用底层的虚拟资源为上层用户和程序提供云计算服务。

OpenStack重要集成组件

整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。
openstack重要集成组件:

  • Nova - 计算服务
  • Neutron-网络服务
  • Swift - 对象存储服务
  • Cinder-块存储服务
  • Glance - 镜像服务
  • Keystone - 认证服务
  • Horizon - UI服务
  • Ceilometer-监控服务
  • Heat-集群服务

OpenStack平台部署

基本步骤可以参考官方文档,但需要注意的细节较多:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/common/conventions.html

部署环境

需要两台虚拟机,一个做控制节点,一个做计算节点
ops1(controller):192.168.122.11
ops2(compute1):192.168.122.12

最低配置:
控制节点: 1 处理器, 4 GB 内存, 及5 GB 存储
计算节点: 1 处理器, 2 GB 内存, 及10 GB 存储

建立虚拟机

内存给4G

开源openstack搭建 openstack搭建云平台_运维


CPU设置如下,模块那儿没有该选项,直接手敲

开源openstack搭建 openstack搭建云平台_linux_02


需要两块网卡,剩下的随意

开源openstack搭建 openstack搭建云平台_运维开发_03


更改网络配置文件

cd /etc/sysconfig/network-scripts

内容如下

开源openstack搭建 openstack搭建云平台_linux_04


让eth1网卡up

[root@server1 network-scripts]# ifup eth1
[root@server1 network-scripts]# ip addr

如下设置成功

开源openstack搭建 openstack搭建云平台_开源openstack搭建_05

配置时间同步

在真机编辑配置文件,使用阿里云的ntp服务

[root@lucky ~]# vim /etc/chrony.conf

#pool 2.rhel.pool.ntp.org iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst

开源openstack搭建 openstack搭建云平台_openstack_06

允许别的主机同步真机的时间

开源openstack搭建 openstack搭建云平台_运维开发_07

访问阿里云的ntp服务没有问题

开源openstack搭建 openstack搭建云平台_运维开发_08


下载时间同步工具,编辑配置文件,设置同步真机的时间,不允许别人同步自己的时间,然后启动NTP服务

[root@server1 network-scripts]# yum install -y chrony
[root@server1 ~]# vim /etc/chrony.conf
[root@server1 ~]# systemctl enable --now chronyd	#启动 NTP 服务并将其配置为随系统启动

开源openstack搭建 openstack搭建云平台_开源openstack搭建_09


开源openstack搭建 openstack搭建云平台_开源openstack搭建_10

如下已经检测到同步的主机

[root@server1 ~]# date
Tue Aug 17 10:52:19 CST 2021
[root@server1 ~]# chronyc sources -v

开源openstack搭建 openstack搭建云平台_运维_11

安装OpenStack

配置OpenStack源

[root@server1 ~]# vim /etc/yum.repos.d/openstack.repo
[openstack]
name=openstack
baseurl=http://192.168.122.1/mitaka		#真机的离线安装包地址
gpgcheck=0

开源openstack搭建 openstack搭建云平台_linux_12


先升级再下载

[root@server1 ~]# yum upgrade
[root@server1 ~]# yum install python-openstackclient -y		#安装 OpenStack 客户端,2.3.0版本
[root@server1 ~]# yum install mariadb-server -y				#安装mysql
[root@server1 ~]# vim /etc/my.cnf.d/openstack.cnf			#编辑配置文件,内容如下
[mysqld]
bind-address = 192.168.122.11		#写的是本机ip
default-storage-engine  =  innodb 
innodb_file_per_table 
max_connections  =  4096 
collat<200b><200b>ion-server  =  utf8_general_ci 
character-set-server  =  utf8
[root@server1 ~]# systemctl enable --now mariadb.service	#启动数据库

开源openstack搭建 openstack搭建云平台_linux_13


为了保证数据库服务的安全性,进行安全初始化

[root@server1 ~]# mysql_secure_installation
##密码我设置的为root

开源openstack搭建 openstack搭建云平台_开源openstack搭建_14

安装 RabbitMQ 消息队列服务

OpenStack 使用 message queue (消息队列:将请求从客户端传递至合适的工作器并在工作完成后将输出返回至客户端)协调操作和各服务的状态信息。消息队列服务一般运行在控制节点上。OpenStack支持好几种消息队列服务包括 RabbitMQ, Qpid, 和 ZeroMQ。
队列: 一个在守护进程间传递消息的中央集线器

首先要改主机名,因为RabbitMQ是根据主机名字配置的,重新改主机名可能会使之后创建的用户消失导致之后的服务无法启动

开源openstack搭建 openstack搭建云平台_linux_15

域名解析也要更改

[root@controller ~]# vim /etc/hosts

开源openstack搭建 openstack搭建云平台_运维开发_16

安装rabbitmq-server并启动

[root@server1 ~]# yum install rabbitmq-server -y
[root@server1 ~]# systemctl enable --now rabbitmq-server.service	#启动消息队列服务并将其配置为随系统启动:
[root@server1 ~]# rabbitmq-plugins enable rabbitmq_management		#启动插件

开源openstack搭建 openstack搭建云平台_openstack_17


添加 openstack 用户,并给openstack用户配置写和读权限

[root@controller ~]# rabbitmqctl add_user openstack openstack
Creating user "openstack" ...
[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"

RabbitMQ服务端口正常

开源openstack搭建 openstack搭建云平台_运维_18


浏览器访问成功

开源openstack搭建 openstack搭建云平台_运维开发_19


如下是登录进去的页面

开源openstack搭建 openstack搭建云平台_运维_20

Memcached缓存令牌的安装

认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在控制节点。在生产部署中,我们推荐联合启用防火墙、认证和加密保证它的安全。

下载并启动

[root@server1 ~]# yum install memcached python-memcached -y
[root@server1 ~]# systemctl enable --now memcached.service

服务端口11211处于监听状态

开源openstack搭建 openstack搭建云平台_运维_21


修改配置文件重新启动

[root@server1 ~]# vim /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#OPTIONS="-l 127.0.0.1,::1"			#这一行注释掉
[root@server1 ~]# systemctl restart memcached.service

开源openstack搭建 openstack搭建云平台_linux_22

安装和配置OpenStack身份认证服务

在控制节点上安装和配置OpenStack身份认证服务,代码名称keystone。出于性能原因,这个配置部署Fernet令牌和Apache HTTP服务处理请求。
使用带有mod_wsgi的Apache HTTP服务器来服务认证服务请求,端口为5000和35357。

在配置 OpenStack 身份认证服务前,必须创建一个数据库和管理员令牌

[root@controller ~]# mysql -proot		#登录mysql

MariaDB [(none)]> create database keystone;		#创建 keystone 数据库
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost'\
    ->   IDENTIFIED BY 'keystone';			#对keystone数据库授予本地的权限
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
    ->   IDENTIFIED BY 'keystone';			#对keystone数据库授予远程登录的权限
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

开源openstack搭建 openstack搭建云平台_运维_23


用keystone用户身份登录成功

开源openstack搭建 openstack搭建云平台_linux_24


下载keystone和httpd

[root@controller ~]# yum install openstack-keystone httpd mod_wsgi -y
[root@controller ~]# grep -v ^# /etc/keystone/keystone.conf | uniq		#筛选看有哪些模块

开源openstack搭建 openstack搭建云平台_运维_25

配置keystone

定义初始管理令牌的值,用openssl命令生成的值写入(随即的)

[root@controller ~]# openssl rand -hex 10
dfbde0d6f3ec912e368a
[root@controller ~]# vim /etc/keystone/keystone.conf

对文件做如下图更改

开源openstack搭建 openstack搭建云平台_linux_26


配置数据库访问

开源openstack搭建 openstack搭建云平台_运维开发_27

配置Fernet UUID令牌的提供者

开源openstack搭建 openstack搭建云平台_linux_28

初始化身份认证服务的数据库

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@controller ~]# mysql -ukeystone -pkeystone

开源openstack搭建 openstack搭建云平台_开源openstack搭建_29


初始化Fernet keys

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

开源openstack搭建 openstack搭建云平台_openstack_30

配置 Apache HTTP 服务器

[root@controller keystone]# vim /etc/httpd/conf/httpd.conf

更改内容如下

开源openstack搭建 openstack搭建云平台_linux_31


创建文件并写入以下内容

[root@controller keystone]# vim /etc/httpd/conf.d/wsgi-keystone.conf

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

[root@controller keystone]# systemctl enable --now httpd.service	#启动apache服务

查看端口,正常监听服务开启成功

开源openstack搭建 openstack搭建云平台_运维_32

创建服务实体和API端点

每个添加到OpenStack环境中的服务在目录中需要一个 service 实体和一些 API endpoints 。
在Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。
身份认证服务管理了一个与环境相关的 API 端点的目录。服务使用这个目录来决定如何与环境中的其他服务进行通信。
OpenStack使用三个API端点变种代表每种服务:admin,internal和public。默认情况下,管理API端点允许修改用户和租户而公共和内部APIs不允许这些操作。

[root@controller keystone]# export OS_TOKEN=dfbde0d6f3ec912e368a	#配置认证令牌,这个token就是上面生成的那个
[root@controller keystone]# export OS_URL=http://controller:35357/v3	#配置端点URL
[root@controller keystone]# export OS_IDENTITY_API_VERSION=3	#配置认证 API 版本

每个添加到OpenStack环境中的服务要求一个或多个服务实体和三个认证服务中的API 端点变种。

[root@controller keystone]# openstack service create \
>   --name keystone --description "OpenStack Identity" identity		#创建服务实体和身份认证服务

[root@controller keystone]# openstack endpoint create --region RegionOne \
>   identity public http://controller:5000/v3		#创建认证服务的 API 端点

[root@controller keystone]# openstack endpoint create --region RegionOne \
>   identity internal http://controller:5000/v3		#创建认证服务的 API 端点

[root@controller keystone]# openstack endpoint create --region RegionOne \
>   identity admin http://controller:35357/v3		#创建认证服务的 API 端点

开源openstack搭建 openstack搭建云平台_运维开发_33

创建域、项目、用户和角色

身份认证服务为每个OpenStack服务提供认证服务。认证服务使用 T domains, projects (tenants), :term:users<user>和 :term:roles<role>的组合

创建域default

[root@controller keystone]# openstack domain create --description "Default Domain" default

在环境中,为进行管理操作,创建管理的项目、用户和角色

[root@controller keystone]# openstack project create --domain default \
> --description "Admin Project" admin		#项目
[root@controller keystone]# openstack user create --domain default \
> --password admin admin			#用户
[root@controller keystone]# openstack role create admin		#角色
[root@controller keystone]# openstack role add --project admin --user admin admin	#添加admin角色到admin项目和用户上

同上创建service项目和常规(非管理)任务应该使用无特权的项目和用户demo

[root@controller keystone]# openstack project create --domain default \
> --description "Service Project" service
[root@controller keystone]# openstack project create --domain default \
> --description "Demo Project" demo
[root@controller keystone]# openstack user create --domain default \
> --password demo demo
[root@controller keystone]# openstack role create user
[root@controller keystone]# openstack role add --project demo --user demo user

重置OS_TOKENOS_URL 环境变量,作为 admin 用户,请求认证令牌

[root@controller keystone]# unset OS_TOKEN OS_URL
[root@controller keystone]# 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

开源openstack搭建 openstack搭建云平台_运维_34


作为demo 用户,请求认证令牌

[root@controller keystone]# 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 issue

开源openstack搭建 openstack搭建云平台_linux_35


创建 admin 和 demo项目和用户创建客户端环境变量脚本。

[root@controller ~]# vim admin-openrc

export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

开源openstack搭建 openstack搭建云平台_运维开发_36

[root@controller ~]# vim demo-openrc

export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

开源openstack搭建 openstack搭建云平台_运维_37

加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书:

[root@controller ~]# source admin-openrc

开源openstack搭建 openstack搭建云平台_运维开发_38

在控制节点上安装和配置镜像服务(glance)

镜像服务 (glance) 允许用户发现、注册和获取虚拟机镜像。它提供了一个 REST API,允许查询虚拟机镜像的 metadata 并获取一个现存的镜像。可以将虚拟机镜像存储到各种位置,从简单的文件系统到对象存储系统—-例如 OpenStack 对象存储, 并通过镜像服务使用。
OpenStack镜像服务包括以下组件:
glance-api:
接收镜像API的调用,诸如镜像发现、恢复、存储。
glance-registry:
存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。
数据库
存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。
镜像文件的存储仓库
支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块设备、HTTP、以及亚马逊S3。记住,其中一些仓库仅支持只读方式使用。
元数据定义服务
通用的API,是用于为厂商,管理员,服务,以及用户自定义元数据。这种元数据可用于不同的资源,例如镜像,工件,卷,配额以及集合。一个定义包括了新属性的键,描述,约束以及可以与之关联的资源的类型。

安装和配置镜像服务之前,必须创建创建一个数据库、服务凭证和API端点。

[root@controller ~]# mysql -u root -proot

MariaDB [(none)]> CREATE DATABASE glance;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
    ->   IDENTIFIED BY 'glance';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
    ->   IDENTIFIED BY 'glance';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

开源openstack搭建 openstack搭建云平台_运维开发_39


创建 glance 用户,添加 admin 角色到 glance 用户和 service 项目上。

[root@controller ~]# openstack user create --domain default --password glance glance
[root@controller ~]# openstack role add --project service --user glance admin

创建glance服务实体,创建镜像服务的 API 端点

[root@controller ~]# openstack service create --name glance \
>   --description "OpenStack Image" image
[root@controller ~]# openstack endpoint create --region RegionOne \
>   image public http://controller:9292
[root@controller ~]# openstack endpoint create --region RegionOne \
>   image internal http://controller:9292
[root@controller ~]# openstack endpoint create --region RegionOne \
>   image admin http://controller:9292

安装glance服务并配置

[root@controller ~]# yum install openstack-glance -y
[root@controller ~]# vim /etc/glance/glance-api.conf

[database]
connection = mysql+pymysql://glance:glance@controller/glance

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]
flavor = keystone

[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

编辑文件 /etc/glance/glance-registry.conf并完成如下动作:

[root@controller ~]# vim /etc/glance/glance-registry.conf

[database]
connection = mysql+pymysql://glance:glance@controller/glance

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]
flavor = keystone

[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance		#写入镜像服务数据库

开源openstack搭建 openstack搭建云平台_运维开发_40


进入数据库查看数据写入成功

开源openstack搭建 openstack搭建云平台_开源openstack搭建_41


启动镜像服务、配置他们随机启动

[root@controller ~]# systemctl enable --now openstack-glance-api.service \
>   openstack-glance-registry.service

开源openstack搭建 openstack搭建云平台_openstack_42


下载源镜像:wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img,使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它

[root@controller ~]# openstack image create "cirros" \
>   --file cirros-0.5.1-x86_64-disk.img \
>   --disk-format qcow2 --container-format bare \
>   --public

开源openstack搭建 openstack搭建云平台_运维开发_43

确认镜像的上传并验证属性

开源openstack搭建 openstack搭建云平台_开源openstack搭建_44

在控制节点上安装和配置 Compute 服务

使用OpenStack计算服务来托管和管理云计算系统。OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现。
OpenStack计算组件请求OpenStack Identity服务进行认证;请求OpenStack Image服务提供磁盘镜像;为OpenStack dashboard提供用户与管理员接口。磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定(例如,每个项目下可以创建多少实例)。OpenStack组件可以在标准硬件上水平大规模扩展,并且下载磁盘镜像启动虚拟机实例。
更多内容请参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/common/get_started_compute.html

在安装和配置 Compute 服务前,必须创建数据库服务的凭据以及 API endpoints

[root@controller images]# mysql -u root -proot

MariaDB [(none)]> CREATE DATABASE nova_api;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE DATABASE nova;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
    ->   IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
    ->   IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
    ->   IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
    ->   IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

要创建服务证书,完成这些步骤

[root@controller images]# openstack user create --domain default \
>   --password nova nova
[root@controller images]# openstack role add --project service --user nova admin
[root@controller images]# openstack service create --name nova \
>   --description "OpenStack Compute" compute
[root@controller images]# openstack endpoint create --region RegionOne \
>   compute public http://controller:8774/v2.1/%\(tenant_id\)s
[root@controller images]# openstack endpoint create --region RegionOne \
>   compute internal http://controller:8774/v2.1/%\(tenant_id\)s
[root@controller images]# openstack endpoint create --region RegionOne \
>   compute admin http://controller:8774/v2.1/%\(tenant_id\)s

安装软件包

[root@controller images]# yum install openstack-nova-api openstack-nova-conductor \
  openstack-nova-console openstack-nova-novncproxy \
  openstack-nova-scheduler
编辑``/etc/nova/nova.conf``文件并完成下面的操作:
具体更改参照官网:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/nova-controller-install.html

同步Compute 数据库

# su -s /bin/sh -c "nova-manage api_db sync" nova
# su -s /bin/sh -c "nova-manage db sync" nova

开源openstack搭建 openstack搭建云平台_运维_45


启动 Compute 服务并将其设置为随系统启动

# systemctl enable --now openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service

安装和配置计算节点

虚拟机配置和controller除了内存外都一样,内存为1.2G,网卡都是两个,时间同步也做了。

更改主机名并加解析

[root@server1 ~]# hostnamectl set-hostname compute1
[root@compute1 ~]# vim /etc/hosts

开源openstack搭建 openstack搭建云平台_linux_46


配置openstsck的源

开源openstack搭建 openstack搭建云平台_运维_47


先升级再安装软件包,然后修改配置

[root@compute1 ~]# yum uograde
[root@compute1 ~]# yum install openstack-nova-compute -y
[root@compute1 ~]# vim /etc/nova/nova.conf
照着这个链接改文件即可https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/nova-compute-install.html
下图ip要改成自己的主机

开源openstack搭建 openstack搭建云平台_运维开发_48


看自己的计算节点是否支持虚拟机的硬件加速

[root@compute1 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
0	#0就是不支持,需做修改
#如果返回非0数值则不用做下图修改
[root@compute1 ~]# vim /etc/nova/nova.conf

我的不支持kvm,所以改为qemu

开源openstack搭建 openstack搭建云平台_linux_49


启动计算服务及其依赖,并将其配置为随系统自动启动

[root@compute1 ~]# systemctl enable --now libvirtd.service openstack-nova-compute.service
#如果出现ERROR nova AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN. For details see the broker logfile.错误
#是rabbitmq用户openstack的问题,改主机名就会发生如下错误
#我启动时就报了这种错,重新建立了一遍rabbitmq用户openstack就好了

列出服务组件,以验证是否成功启动并注册了每个进程

[root@controller ~]# openstack compute service list

开源openstack搭建 openstack搭建云平台_运维_50

安装并配置网络服务(neutron)

OpenStack Networking(neutron),允许创建、插入接口设备,这些设备由其他的OpenStack服务管理。插件式的实现可以容纳不同的网络设备和软件,为OpenStack架构与部署提供了灵活性。
OpenStack网络主要和OpenStack计算交互,以提供网络连接到它的实例。
对于任意一个给定的网络都必须包含至少一个外部网络。不像其他的网络那样,外部网络不仅仅是一个定义的虚拟网络。相反,它代表了一种OpenStack安装之外的能从物理的,外部的网络访问的视图。外部网络上的IP地址可供外部网络上的任意的物理设备所访问
外部网络之外,任何 Networking 设置拥有一个或多个内部网络。这些软件定义的网络直接连接到虚拟机。仅仅在给定网络上的虚拟机,或那些在通过接口连接到相近路由的子网上的虚拟机,能直接访问连接到那个网络上的虚拟机。
如果外部网络想要访问实例或者相反实例想要访问外部网络,那么网络之间的路由就是必要的了。每一个路由都配有一个网关用于连接到外部网络,以及一个或多个连接到内部网络的接口。就像一个物理路由一样,子网可以访问同一个路由上其他子网中的机器,并且机器也可以访问路由的网关访问外部网络。
更多内容参照官网:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/common/get_started_networking.html

在配置OpenStack网络(neutron)服务之前,你必须为其创建一个数据库,服务凭证和API端点

[root@controller ~]# mysql -u root -proot

CREATE DATABASE neutron;

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'NEUTRON_DBPASS';

要创建服务证书,完成这些步骤

[root@controller ~]# openstack user create --domain default --password neutron neutron
[root@controller ~]# openstack role add --project service --user neutron admin

创建neutron服务实体
[root@controller ~]# openstack service create --name neutron \
>   --description "OpenStack Networking" network

创建网络服务API端点
[root@controller ~]# openstack endpoint create --region RegionOne \
>   network public http://controller:9696
[root@controller ~]# openstack endpoint create --region RegionOne \
>   network internal http://controller:9696
[root@controller ~]# openstack endpoint create --region RegionOne \
>   network admin http://controller:9696

配置公共网络,Networking 服务器组件的配置包括数据库、认证机制、消息队列、拓扑变化通知和插件。

[root@controller ~]# yum install openstack-neutron openstack-neutron-ml2 \
>   openstack-neutron-linuxbridge ebtables -y
[root@controller ~]# vim /etc/neutron/neutron.conf
#照着这个链接改文件即可https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-controller-install-option1.html
#密码要和用户名一样

配置 Modular Layer 2 (ML2) 插件、配置Linuxbridge代理、配置DHCP代理

[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[root@controller ~]# vim /etc/neutron/dhcp_agent.ini
#照着这个链接改文件即可
#https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-controller-install-option1.html

neutron-controller-install-option1.html文件需要注意的地方

开源openstack搭建 openstack搭建云平台_开源openstack搭建_51


配置元数据代理

[root@controller ~]# vim /etc/neutron/metadata_agent.ini

开源openstack搭建 openstack搭建云平台_运维开发_52


配置网络服务

[root@controller ~]# vim /etc/nova/nova.conf

开源openstack搭建 openstack搭建云平台_运维开发_53


网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini。如果超链接不存在,使用下面的命令创建它,然后同步数据库

[root@controller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
[root@controller ~]# 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

开源openstack搭建 openstack搭建云平台_运维_54


重启计算API 服务

[root@controller ~]# systemctl restart openstack-nova-api.service

计算节点:
安装组件修改配置

[root@compute1 ~]# yum install openstack-neutron-linuxbridge ebtables ipset -y
[root@compute1 ~]# vim /etc/neutron/neutron.conf
#照着这个链接改文件即可
#https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-compute-install.html
#密码和用户名一样

配置Linuxbridge代理

[root@compute1 ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
#照着这个链接改文件即可
#https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-compute-install-option1.html

开源openstack搭建 openstack搭建云平台_运维开发_55

[root@compute1 ~]# vim /etc/nova/nova.conf
#照着这个链接改文件即可
#https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-compute-install.html
#密码和用户名一样

重启计算服务,启动Linuxbridge代理并配置它开机自启动

[root@compute1 ~]# systemctl restart openstack-nova-compute.service
[root@compute1 ~]# systemctl enable --now neutron-linuxbridge-agent.service

在控制节点列出加载的扩展来验证neutron-server进程是否正常启动

开源openstack搭建 openstack搭建云平台_开源openstack搭建_56


列出代理以验证启动 neutron 代理是否成功,如下图成功啦

#输出结果应该包括控制节点上的四个代理和每个计算节点上的一个代理。

开源openstack搭建 openstack搭建云平台_运维开发_57

至此openstack平台已初步搭建好,只不过功能较简单

启动一个实例(启动一个云主机)

创建提供者网络

用管理员的身份创建一个网络

[root@controller ~]# neutron net-create --shared --provider:physical_network provider \
>   --provider:network_type flat provider

创建子网
[root@controller ~]# neutron subnet-create --name provider \
> --allocation-pool start=192.168.122.100,end=192.168.122.200 \
> --dns-nameserver 114.114.114.114 --gateway 192.168.122.1 \
> provider 192.168.122.0/24

开源openstack搭建 openstack搭建云平台_运维_58


查看自带的云主机类型

开源openstack搭建 openstack搭建云平台_openstack_59

创建m1.nano规格的主机

可以自己创建云主机类型

[root@controller ~]# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

云主机只会调度到计算器上,不会调度到控制器上

开源openstack搭建 openstack搭建云平台_linux_60

生成一个键值对

[root@controller ~]# source demo-openrc
[root@controller ~]# ssh-keygen -q -N ""
[root@controller ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
[root@controller ~]# openstack keypair list

公钥在云主机启动时会自动注入公钥,私钥自己拿着以后可以ssh免密连接

开源openstack搭建 openstack搭建云平台_开源openstack搭建_61

增加安全组规则

允许ping和ssh(本地的安全策略)

[root@controller ~]# openstack security group rule create --proto icmp default
[root@controller ~]# openstack security group rule create --proto tcp --dst-port 22 default

开源openstack搭建 openstack搭建云平台_运维_62

启动实例

构建一个云主机服务

[root@controller ~]# openstack server create --flavor m1.nano --image cirros \
> --nic net-id=616093b3-f09d-435a-b866-c86e44cdea07 --security-group default --key-name mykey provider-instance

开源openstack搭建 openstack搭建云平台_运维开发_63


检查实例的状态

开源openstack搭建 openstack搭建云平台_运维_64

使用虚拟控制台访问实例

查看vnc地址(vnc:用于远程控制台访问虚机的开源GUI和CLI工具。被计算服务支持。)

开源openstack搭建 openstack搭建云平台_开源openstack搭建_65


想要访问vnc真机必须有解析,因为浏览器用的是真机的

开源openstack搭建 openstack搭建云平台_运维开发_66

用真机的浏览器输入上边获得的vnc地址访问,访问后的页面如下,但可以看到是有错误的。初步判断是镜像的问题,换一个镜像试试

开源openstack搭建 openstack搭建云平台_运维开发_67


删除云主机和之前的镜像

开源openstack搭建 openstack搭建云平台_openstack_68


更换镜像

开源openstack搭建 openstack搭建云平台_运维开发_69


重新创建云主机

开源openstack搭建 openstack搭建云平台_运维开发_70


获取vnc地址

开源openstack搭建 openstack搭建云平台_linux_71


访问成功!只要计算节点可以上网那么该云主机就可以上网

开源openstack搭建 openstack搭建云平台_运维_72


在计算节点下载虚拟机管理工具(云主机就相当于是计算节点上的一个虚拟机)

[root@compute1 ~]# yum install -y libvirt-client
[root@compute1 ~]# virsh list

开源openstack搭建 openstack搭建云平台_linux_73


eth1下面的就是虚拟云主机的网络接口

开源openstack搭建 openstack搭建云平台_运维开发_74


可以ssh连接,云主机不允许用超户身份登录,只能以普通用户身份登录

开源openstack搭建 openstack搭建云平台_linux_75

因为本地持有私钥所以可以直接免密连接

开源openstack搭建 openstack搭建云平台_开源openstack搭建_76