用OpenStack搭建简单的云平台并启动云主机

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用OpenStack搭建简单的云平台并启动云主机相关的知识,希望对你有一定的参考价值。

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

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

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

更改网络配置文件

cd /etc/sysconfig/network-scripts

内容如下

让eth1网卡up

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

如下设置成功

配置时间同步

在真机编辑配置文件,使用阿里云的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

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

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

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

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


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

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

安装OpenStack

配置OpenStack源

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


先升级再下载

[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	#启动数据库


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

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

安装 RabbitMQ 消息队列服务

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

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

域名解析也要更改

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

安装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用户配置写和读权限

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

RabbitMQ服务端口正常

浏览器访问成功

如下是登录进去的页面

Memcached缓存令牌的安装

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

下载并启动

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

服务端口11211处于监听状态

修改配置文件重新启动

[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身份认证服务,代码名称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


用keystone用户身份登录成功

下载keystone和httpd

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

配置keystone

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

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

对文件做如下图更改

配置数据库访问
配置Fernet UUID令牌的提供者

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

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


初始化Fernet keys

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

配置 Apache HTTP 服务器

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

更改内容如下

创建文件并写入以下内容

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

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

创建服务实体和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服务提供认证服务。认证服务使用 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


作为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


创建 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

[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

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

[root@controller ~]# source admin-openrc

在控制节点上安装和配置镜像服务(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


创建 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		#写入镜像服务数据库


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

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

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


下载源镜像: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

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

在控制节点上安装和配置 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


启动 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


配置openstsck的源

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

[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要改成自己的主机


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

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

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

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

[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用户opensta

以上是关于用OpenStack搭建简单的云平台并启动云主机的主要内容,如果未能解决你的问题,请参考以下文章

OpenStack 多Region

云计算怎么从openstack进入localhost中

OpenStack快照分析:从镜像启动的云主机离线快照分析

Openstack

云基础和openstack架构简介 #yyds干货盘点#

每日分享-开源云计算平台OpenStack入门学习资料