OpenStack R版的原理、部署与使用(1)

[root@computel ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
=========================================================================
^* controller            3   6    17     6  -4061ns[ +163us] +/-   34ms

在安装过程中可以发现,OpenStack项目全程都是用Python开发的。

2.2 启用 OpenStack 存储库

在CentOS上,extras资源库提供 rpm包,以启用OpenStack资源库。CentOS extras默认包含该存储库,因此只需安装该软件包即可启用OpenStack存储库。

  • 所有节点安装最新版openstack-rocky ,安装其他版本修改后缀名即可
yum install centos-release-openstack-rocky -y

  • 所有节点修改yum源到国内清华源
cd /etc/yum.repos.d/
#修改openstack-rocky的源
vim CentOS-OpenStack-rocky.repo
[centos-openstack-rocky]
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/cloud/x86_64/openstack-rocky/
#修改ceph源
vim CentOS-Ceph-Luminous.repo
[centos-ceph-luminous]
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/storage/x86_64/ceph-luminous/

  • 所有节点**安装OpenStack客户端
yum install python-openstackclient -y

2.3 安装 SQL数据库-controller

只在控制节点上运行!根据实际要求使用MariaDB或MySQL;也支持其他数据库。

  • 安装数据库软件包
yum install mariadb mariadb-server python2-PyMySQL -y

  • 创建和编辑/etc/my.cnf.d/openstack.cnf文件
#创建一个[mysqld]部分,并将bind-address 密钥设置为控制器节点的管理IP地址,以允许其他节点通过管理网络进行访问。设置其他键以启用有用的选项和UTF-8字符集:
-----------------------------------------------------
[root@controller ~]# vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.1.10		#监听地址
default-storage-engine = innodb	#默认存储引擎
innodb_file_per_table = on		#独立表空间文件
max_connections = 4096			#最大连接数
collation-server = utf8_general_ci	#默认字符集为UTF8
character-set-server = utf8

  • 启动数据库,并设置开机自启
systemctl restart mariadb.service
systemctl enable mariadb.service

  • 运行mysql_secure_installation安全初始化。为数据库root帐户选择合适的密码
[root@controller ~]# mysql_secure_installation
Enter current password for root (enter for none): <回车>
Set root password? [Y/n] 	<n> 	 	#设数据库密码
Remove anonymous users? [Y/n]	<y>   	#移除匿名用户
Disallow root login remotely? [Y/n]  <y> #禁止root用户远程登录
Remove test database and access to it? [Y/n]  <y> #移除test数据库和访问权限
Reload privilege tables now? [Y/n]  <y>  #重新加载权限表

2.4 安装消息队列服务-controller

消息队列服务通常在控制器节点上运行;OpenStack支持多种消息队列服务,包括RabbitM, Qpid和ZeroMQ

  • 安装软件包
yum install rabbitmq-server -y

  • 启动消息队列,并设置开机自启
systemctl restart rabbitmq-server.service
systemctl enable rabbitmq-server.service

  • 添加OpenStack用户
rabbitmqctl add_user openstack 123456

  • 授权用户的配置写入和读取权限
#三个 ".\*" 表示可读可写可配置
rabbitmqctl set_permissions openstack ".\*" ".\*" ".\*"	

  • 扩展:启用 rabbitmq的管理插件,为了方便日后做监控
#启动后的端口是 15672
systemctl enable rabbitmq-server.service
systemctl restart rabbitmq-server.service
rabbitmq-plugins enable rabbitmq_management	

#插件启动以后会监控两个端口(5672、25672)
[root@controller ~]# netstat -lntup|egrep '5672|25672'
tcp        0      0 0.0.0.0:25672      0.0.0.0:\*        LISTEN      56252/beam.smp 
tcp6       0      0 :::5672            :::\*             LISTEN      56252/beam.smp
tcp        0      0 0.0.0.0:15672      0.0.0.0:\*        LISTEN      56252/beam.smp

  • 浏览器访问

2.5 安装Memcached缓存-controller

memcached服务通常在控制器节点上运行。对于生产部署,建议启用防火墙,身份验证和加密的组合以保护其安全。

  • 安装软件包
yum install memcached python-memcached -y

  • 修改/etc/sysconfig/memcached文件为控制节点IP,也可改为 0.0.0.0
sed -i 's#127.0.0.1#0.0.0.0#g' /etc/sysconfig/memcached

#配置服务以使用控制器节点的管理IP地址。这是为了允许其他节点通过管理网络进行访问
OPTIONS="-l 0.0.0.0,::1"

  • 启动服务,并设置开机自启
systemctl restart memcached.service
systemctl enable memcached.service

2.6 安装 etcd 分布式存储-controller

在控制器节点上运行。etcd是一个分布式,一致的键值存储,用于共享配置和服务发现,特点是,安全,具有可选客户 端证书身份验证的自动TLS;快速,基准测试10,000次/秒;可靠,使用Raft正确分发。

  • 安装软件包
yum install etcd -y

  • 编辑/etc/etcd/etcd.conf文件
[root@controller ~]# vi /etc/etcd/etcd.conf
#[Member]
ETCD\_DATA\_DIR="/var/lib/etcd/default.etcd"
ETCD\_LISTEN\_PEER\_URLS="http://192.168.1.10:2380"
ETCD\_LISTEN\_CLIENT\_URLS="http://192.168.1.10:2379"
ETCD\_NAME="controller"
#[Clustering]
ETCD\_INITIAL\_ADVERTISE\_PEER\_URLS="http://192.168.1.10:2380"
ETCD\_ADVERTISE\_CLIENT\_URLS="http://192.168.1.10:2379"
ETCD\_INITIAL\_CLUSTER="controller=http://192.168.1.10:2380"
ETCD\_INITIAL\_CLUSTER\_TOKEN="etcd-cluster-01"
ETCD\_INITIAL\_CLUSTER\_STATE="new"

  • 启动服务,并设置开机自启
systemctl restart etcd.service
systemctl enable etcd.service 


3. 安装 keystone 认证服务-控制节点

Keystone的详解01

Keystone的详解02

官方R版 Keystone安装文档

keystone是OpenStack的身份服务,暂且可以理解为一个与权限有关’的组件。

Keystone项目的主要目的是为访问openstack的各个组件(nova,cinder,glance…)提供一个统一的验证方式,具体的:

openstack是由众多组件构成的一套系统,该系统的功能是对外提供服务,因而我们可以将其定义为一个庞大的软件,没有软件不考虑安全因素,Keystone对于通常的应用场景所不同的是他要解决分布式环境下的统一认证。

  • 功能:认证管理,授权管理,服务目录
  • 身份验证服务包括以下组件:服务器、驱动、模块

当安装OpenStack自身服务时,用户必须将之注册到其OpenStack安装环境的每个服务。身份服务才可以追踪到哪些OpenStack服务已经安装,以及在网络中定位它们。

  • 创建keystone数据库

每个组件都有自己的数据库,能抗的压力更大

mysql -uroot -p
create database keystone;

  • 对keystone数据库授权
grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456';
grant all privileges on keystone.* to 'keystone'@'%' identified by '123456';
flush privileges;

安装和配置的部件

  • 安装keystone相关的软件包
yum install openstack-keystone httpd mod_wsgi -y

#wsgi:python项目, 类似于php的fastcgi
#相关资料链接 https://www.cnblogs.com/xiaoyuanqujing/articles/11838819.html

  • 编辑/etc/keystine/keystone.conf文件
  • 注意:controller在此示例中,主机必须是可解析的。
#备份原配置文件,过滤出模块名覆盖到配置文件中
cp /etc/keystone/keystone.conf{,.bak}
egrep -v '^$|^#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf

[root@controller ~]# vim /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:123456@controller/keystone	#配置数据库访问
[token]
provider = fernet	#配置Fernet令牌提供者

  • 填充身份服务数据库
su -s /bin/sh -c "keystone-manage db\_sync" keystone
#查看表
mysql keystone -p123456 -e 'show tables'

  • 初始化Fernet密钥存储库
#命令行直接复制执行
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
keystone-manage bootstrap --bootstrap-password 123456 \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne

配置Apache HTTP服务器

  • 编辑 /etc/httpd/conf/httpd.conf 文件
[root@controller ~]# vim /etc/httpd/conf/httpd.conf
ServerName controller	#修改主机名

  • 创建/usr/share/keystone/wsgi-keystone.conf文件的软链接
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

  • 启动Apache HTTP服务,并设置开机自启动
systemctl restart httpd.service
systemctl enable httpd.service

[root@controller ~]# netstat -lntup|grep httpd
tcp6       0   0 :::5000      :::*           LISTEN      17417/httpd         
tcp6       0   0 :::80        :::*           LISTEN      17417/httpd         

  • 设置环境变量
[root@controller ~]# vim admin-openrc
export OS\_USERNAME=admin
export OS\_PASSWORD=123456
export OS\_PROJECT\_NAME=admin
export OS\_USER\_DOMAIN\_NAME=Default
export OS\_PROJECT\_DOMAIN\_NAME=Default
export OS\_AUTH\_URL=http://controller:5000/v3
export OS\_IDENTITY\_API\_VERSION=3
export OS\_IMAGE\_API\_VERSION=2
#使变量脚本生效
[root@controller ~]# source ~/admin-openrc
[root@controller ~]# env|grep OS

  • 创建域、项目用户和角色
#创建域
openstack domain create --description "An Example Domain" example
#创建项目
openstack project create --domain default --description "Service Project" service
#创建平台demo项目
openstack project create --domain default --description "Demo Project" demo
#创建demo用户
openstack user create --domain default --password 123456 demo
#创建user角色
openstack role create user
#将user角色添加到myproject项目和demo用户
openstack role add --project demo --user demo user	//该步骤没有返回值

  • 验证keystone
#取消环境变量
unset OS_AUTH_URL OS_PASSWORD
#admin用户返回的认证token
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue

#demo用户返回的认证token
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

  • 创建变量环境脚本并认证
#再创建一个demo-openrc脚本
[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=123456 
export OS_AUTH_URL=http://controller:5000/v3 
export OS_IDENTITY_API_VERSION=3 
export OS_IMAGE_API_VERSION=2

#使用脚本验证返回值,查看admin用户的token信息
source ~/admin-openrc //使环境变量生效
source ~/demo-openrc
#认证
openstack token issue


4. 安装 Glance 镜像服务-控制节点

官方R版 glance安装文档

OpenStack镜像服务对于基础架构即服务(IaaS)至关重要。它接受来自磁盘或服务器镜像的API请求,以及来自最终用户或OpenStack Compute组件的元数据定义。它还支持在各种存储库类型(包括OpenStack对象存储)上存储磁盘或服务器映像。

OpenStack Image服务上运行许多定期进程以支持缓存。复制服务可确保整个群集的一致性和可用性。其他定期过程包括审核员,更新者和收获者。

OpenStack镜像服务包括以下组件:

  • glance-api

接受用于图像发现,检索和存储的Image API调用。

  • glance-registry(浏览注册表)

存储,处理和检索有关图像的元数据。元数据包括大小和类型等项目。 警告注册表是供OpenStack Image服务使用的私有内部服务。不要将此服务提供给用户。

  • Database(数据库)

存储图像元数据,您可以根据自己的喜好选择数据库。大多数部署使用MySQL或SQLite。

  • Storage repository for image files(图像文件的存储库)

支持各种存储库类型,包括普通文件系统,对象存储,RADOS块设备,HTTP和Amazon S3。请注意,某些存储库将仅支持只读用法。

  • Metadata definition service(元数据定义服务)

供应商,管理员,服务和用户的通用API,可以有意义地定义他们自己的自定义元数据。该元数据可用于不同类型的资源,例如图像,伪像,体积,风味和聚合。定义包括新属性的键,描述,约束以及可以与之关联的资源类型。

4.1 安装与配置
  • 添加数据库

在安装和配置Image服务之前,必须创建数据库,服务凭证和API端点。

#使用数据库访问客户端以root用户身份连接到数据库服务器
mysql -u root -p

#创建glance数据库
create database glance;

#授予对glance数据库的适当访问权限
grant all privileges on glance.* to 'glance'@'localhost' identified by '123456';
grant all privileges on glance.* to 'glance'@'%' identified by '123456';
flush privileges;

  • 获取admin用户的环境变量
source ~/admin-openrc

  • 创建glance用户
openstack user create --domain default --password-prompt glance

  • 将管理员admin用户添加到glance用户和项目中
openstack role add --project service --user glance admin
\\该命令不提供任何输出

  • 创建glance服务
openstack service create --name glance --description "OpenStack Image" image

  • 创建镜像服务API端点

OpenStack使用三种API端点变种代表每种服务:admin、internal、public。

openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292

  • 安装glance包
yum install openstack-glance -y

  • 创建images文件夹,并修改属性
#一定要赋予openstack-glance-api.service服务对存储设备的可写权限
mkdir /var/lib/glance/images 
chown -hR glance:glance /var/lib/glance/

  • 编辑文件 /etc/glance/glance-api.conf
cp /etc/glance/glance-api.conf{,.bak}
egrep -v '^$|^#' /etc/glance/glance-api.conf.bak >/etc/glance/glance-api.conf

[root@controller ~]# vim /etc/glance/glance-api.conf
[database]	 #数据库访问
connection = mysql+pymysql://glance:123456@controller/glance

[keystone_authtoken]	#认证服务访问
www_authenticate_uri  = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = 123456	#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
cp /etc/glance/glance-registry.conf{,.bak}
egrep -v '^$|^#' /etc/glance/glance-registry.conf.bak >/etc/glance/glance-registry.conf

[root@controller ~]# vim /etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:123456@controller/glance

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

[paste_deploy]
flavor = keystone

  • 同步写入镜像数据库
su -s /bin/sh -c "glance-manage db_sync" glance

  • 启动服务
systemctl enable openstack-glance-api.service  openstack-glance-registry.service
systemctl start openstack-glance-api.service   openstack-glance-registry.service

4.2 对镜像服务进行验证

官方R版 glance验证操作文档

  • 获取admin用户的环境变量来获取只有管理员能执行的命令的访问权限,并下载镜像
source ~/admin-openrc
wget http://download.cirros-cloud.net/0.3.6/cirros-0.3.6-x86_64-disk.img
#下载一个小型linux镜像进行测试

  • 上传镜像

使用QCOW2磁盘格式,裸容器格式和公开可见性将图像上传到Image服务,以便所有项目都可以访问它

openstack image create "cirros" --file ~/cirros-0.3.6-x86_64-disk.img --disk-format qcow2 --container-format bare --public

  • 查看上传的镜像
openstack image list

#删除镜像的命令
openstack image delete <ID>


5. 安装 Nova 计算服务-控制节点

官方R版 Nova控制节点安装文档

使用OpenStack计算服务来托管和管理云计算系统。OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现。

OpenStack计算组件请求OpenStack Identity服务进行认证;请求OpenStack Image服务提供磁盘镜像;为OpenStack dashboard提供用户与管理员接口。磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定(例如,每个项目下可以创建多少实例)。OpenStack组件可以在标准硬件上水平大规模扩展,并且下载磁盘镜像启动虚拟机实例。

OpenStack计算服务由下列组件所构成:

  • nova-api服务

接收和响应来自最终用户的计算API请求。此服务支持OpenStack计算服务API,Amazon EC2 API,以及特殊的管理API用于赋予用户做一些管理的操作。它会强制实施一些规则,发起多数的编排活动,例如运行一个实例。

  • nova-api-metadata服务

接受来自虚拟机发送的元数据请求。

  • nova-compute服务

一个持续工作的守护进程,通过Hypervior的API来创建和销毁虚拟机实例。

  • nova-scheduler服务

拿到一个来自队列请求虚拟机实例,然后决定那台计算服务器主机来运行它。

  • nova-conductor模块

媒介作用于nova-compute服务与数据库之间。它排除了由nova-compute服务对云数据库的直接访问。nova-conductor模块可以水平扩展。但是,不要将它部署在运行nova-compute服务的主机节点上

  • nova-cert模块

服务器守护进程向Nova Cert服务提供X509证书。用来为euca-bundle-image生成证书。

  • nova-network worker 守护进程

nova-compute服务类似,从队列中接受网络任务,并且操作网络。执行任务例如创建桥接的接口或者改变IPtables的规则。

  • nova-consoleauth 守护进程

授权控制台代理所提供的用户令牌。

  • nova-novncproxy 守护进程

提供一个代理,用于访问正在运行的实例,通过VNC协议,支持基于浏览器的novnc客户端。

  • nova-spicehtml5proxy 守护进程

提供一个代理,用于访问正在运行的实例,通过 SPICE 协议,支持基于浏览器的 HTML5 客户端。

  • nova-xvpvncproxy 守护进程

提供一个代理,用于访问正在运行的实例,通过VNC协议,支持OpenStack特定的Java客户端。

  • nova-cert 守护进程

X509 证书。

  • nova客户端

用于用户作为租户管理员或最终用户来提交命令。

  • 队列

一个在守护进程间传递消息的中央集线器。

  • SQL数据库

存储构建时和运行时的状态,为云基础设施。理论上,OpenStack计算可以支持任何和SQL-Alchemy所支持的后端数据库,通常使用SQLite3来做测试可开发工作,MySQL和PostgreSQL 作生产环境。

5.1 配置MySQL数据库及授权
  • 创建数据库
mysql -u root -p

#创建nova\_api,nova,nova\_cell0和placement数据库
create database nova_api;
create database nova;
create database nova_cell0;
create database placement;

#对数据库进行正确的授权
grant all privileges on nova_api.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova_api.* to 'nova'@'%' identified by '123456';

grant all privileges on nova.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova.* to 'nova'@'%' identified by '123456';

grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova_cell0.* to 'nova'@'%' identified by '123456';

grant all privileges on placement.* to 'placement'@'localhost' identified by '123456';
grant all privileges on placement.* to 'placement'@'%' identified by '123456';

flush privileges;

5.2 创建nova用户
source ~/admin-openrc	#加载admin环境变量
openstack user create --domain default --password 123456 nova

  • nova 用户添加 admin角色
openstack role add --project service --user nova admin

  • 创建 nova 服务实体:
openstack service create --name nova --description "OpenStack Compute" compute

  • 创建 Compute 服务 API 端点
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

5.3 创建placement用户

例如,一个资源提供者可以是一个计算节点,共享存储池,或一个IP分配池。placement服务跟踪每个供应商的库存和使用情况。例如,在一个计算节点创建一个实例的可消费资源如计算节点的资源提供者的CPU和内存,磁盘从外部共享存储池资源提供商和IP地址从外部IP资源提供者。

  • 创建一个placement服务用户
openstack user create --domain default --password 123456 placement

  • 使用管理员角色将Placement用户添加到服务项目中
openstack role add --project service --user placement admin

  • 在服务目录创建Placement API服务
openstack service create --name placement --description "Placement API" placement

  • 创建Placement API服务端点
openstack endpoint create --region RegionOne placement public http://controller:8778 
openstack endpoint create --region RegionOne placement internal http://controller:8778 
openstack endpoint create --region RegionOne placement admin  http://controller:8778

5.4 安装软件并配置 Nova
  • 安装软件包
yum install openstack-nova-api openstack-nova-conductor openstack-nova-console \
openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api -y

  • 修改nova.conf配置文件
cp /etc/nova/nova.conf{,.bak}
egrep -v '^$|^#' /etc/nova/nova.conf.bak >/etc/nova/nova.conf

[root@controller ~]# vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis=osapi_compute,metadata	#只启用计算和元数据API
transport_url = rabbit://openstack:123456@controller	#配置RabbitMQ消息队列访问
my_ip=192.168.1.10 	#控制节点的IP地址
use_neutron = true	#能够使用Networking服务
firewall_driver = nova.virt.firewall.NoopFirewallDriver	#能够使用Networking服务

[api]
auth_strategy = keystone

[api_database]
connection = mysql+pymysql://nova:123456@controller/nova_api	#配置数据库的连接

[database]
connection = mysql+pymysql://nova:123456@controller/nova	#配置数据库的连接

[keystone_authtoken]	#配置认证服务访问
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = 123456	#nova用户的密码

[glance]	#配置镜像服务API的位置
api_servers = http://controller:9292

[oslo_concurrency]	#配置锁路径
lock_path = /var/lib/nova/tmp

[placement]	#配置对Placement API的访问
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = 123456

[placement_database]
connection = mysql+pymysql://placement:123456@controller/placement

[vnc]	#配置VNC代理 使用控制节点的IP地址
enabled = true
server_listen = $my\_ip
server_proxyclient_address = $my\_ip

5.5 启用placement API访问

由于软件包错误,必须通过将以下配置添加到来启用对 Placement API 的访问

[root@controller ~]# vim /etc/httpd/conf.d/00-nova-placement-api.conf
...
 15   #SSLCertificateKeyFile ...
<Directory /usr/bin>
   <IfVersion >= 2.4>
      Require all granted
   </IfVersion>
   <IfVersion < 2.4>
      Order allow,deny
      Allow from all
   </IfVersion>
</Directory>
 ...
---------------------------------------------------------------------------
#重启httpd
systemctl restart httpd.service

5.6 同步数据库的设置
  • 同步nova-api 数据库
su -s /bin/sh -c "nova-manage api\_db sync" nova

  • 注册cell0数据库
su -s /bin/sh -c "nova-manage cell\_v2 map\_cell0" nova

  • 创建cell1 单元格
su -s /bin/sh -c "nova-manage cell\_v2 create\_cell --name=cell1 --verbose" nova
#2ce1c654-9c08-4313-99be-99e9db53f9c9

  • 同步nova数据库
su -s /bin/sh -c "nova-manage db sync" nova

  • 验证数据库是否注册正确
su -s /bin/sh -c "nova-manage cell\_v2 list\_cells" nova

  • 启动nova服务并设置为开机自启
systemctl enable openstack-nova-api.service openstack-nova-consoleauth openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service

systemctl start openstack-nova-api.service openstack-nova-consoleauth openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service


6. 安装 Nova 计算服务-计算节点

官方R版 Nova计算节点安装文档

[root@computel ~]# cat /etc/hosts
192.168.1.10 controller 
192.168.1.20 compute1

#关闭yum源检查
sed -i 's#gpgcheck=1#gpgcheck=0#g' /etc/yum.repos.d/*.repo

  • 安装软件包
yum install python-openstackclient -y	#测试环境时已安装
yum install openstack-nova-compute -y

  • 编辑配置文件 /etc/nova/nova.conf
cp /etc/nova/nova.conf{,.bak}
egrep -v '^$|^#' /etc/nova/nova.conf.bak >/etc/nova/nova.conf

[root@computel ~]# vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:123456@controller
my_ip = 192.168.1.20
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[api]
auth_strategy = keystone

[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = 123456

[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my\_ip
novncproxy_base_url = http://192.168.1.10:6080/vnc_auto.html
# 这里的vnc网址 http://controller:6080/vnc\_auto.html 需改为 http://192.168.1.10:6080/vnc\_auto.html

[glance]
api_servers = http://controller:9292

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = 123456

  • 确定计算节点是否支持虚拟机的硬件加速
egrep -c '(vmx|svm)' /proc/cpuinfo
2
#如果这个命令返回了one or greater的值,那么你的计算节点支持硬件加速且不需要这步的额外的配置
#如果这个命令返回了zero值,那么你的计算节点不支持硬件加速。你必须配置libvirt来使用QEMU去代替KVM
vim /etc/nova/nova.conf
[libvirt]
virt_type = qemu

  • 启动服务并添加为开机自启动
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl restart libvirtd.service openstack-nova-compute.service
systemctl status libvirtd.service openstack-nova-compute.service


7. 添加 计算节点 到 controller的数据库中-控制节点
  • 验证在数据库中的计算节点
source ~/admin-openrc	#加载环境变量
openstack compute service list --service nova-compute

  • 发现计算节点
su -s /bin/sh -c "nova-manage cell\_v2 discover\_hosts --verbose" nova

  • 注意:添加新的计算节点时,必须在控制器节点上运行以注册这些新的计算节点。另外,可以在中设置适当的时间间隔
vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300

  • 在controller节点验证计算服务操作
source  ~/admin-openrc
openstack compute service list

其输处中有3个服务组件是激活在控制节点,一个服务组件是激活在计算节点

  • 列出身份服务中的API端点以验证与身份服务的连接
openstack catalog list

  • 列出图像服务中的图像以验证与图像服务的连接性
openstack image list

  • 检查单元格和展示位置API是否正常运行
nova-status upgrade check


8. 安装 Neutron 网络虚拟化服务

官方R版 Neutron 网络虚拟化服务安装文档

一篇详细解说Neutron网络虚拟化的文章

Neutron 组件介绍

一般而言,neutron-server和各neutron-plugin部署在控制节点或者网络节点上,而neutron-gent则部署在网络节点上和计算节点上。

8.1 控制节点安装
  • 创建neutron数据库
mysql -uroot -p

create database neutron;

  • 对数据库进行授权
grant all privileges on neutron.* to 'neutron'@'localhost' identified by '123456';
grant all privileges on neutron.* to 'neutron'@'%' identified by '123456';
flush privileges;

  • 创建neutron用户
source ~/admin-openrc
openstack user create --domain default --password 123456 neutron

  • adminneutron用户添加角色
openstack role add --project service --user neutron admin
\\没有任何输出

  • 创建neutron服务实体
openstack service create --name neutron --description "OpenStack Networking" network

  • 创建网络服务API端点
openstack endpoint create --region RegionOne network public http://controller:9696
openstack endpoint create --region RegionOne network internal http://controller:9696
openstack endpoint create --region RegionOne network admin http://controller:9696

配置网络的选项:

可以使用选项1和2表示的两种体系结构之一来部署网络服务

  • 选项1 部署了最简单的架构,该架构仅支持将实例附加到提供程序(外部)网络。没有自助服务(专用)网络,路由器或浮动IP地址。只有admin或其他特权用户可以管理提供商网络。
  • 选项2通过支持将实例附加到自助服务网络的第3层服务增强了选项1。该demo非特权用户或其他非特权用户可以管理自助服务网络,包括在自助服务网络与提供商网络之间提供连接的路由器。此外,浮动IP地址使用自助服务网络从外部网络(例如Internet)提供到实例的连接。

官方文档 联网选项1:提供商网络

官方文档 联网选项2:自助服务网络

官方文档 配置元数据代理

提供商网络

  • 安装需要的组件
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y

  • 编辑/etc/neutron/neutron.conf文件
cp /etc/neutron/neutron.conf{,.bak}
egrep -v '^#|^$' /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf

[root@controller ~]# vim /etc/neutron/neutron.conf
[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:123456@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

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

[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = 123456

[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = 123456

[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

  • 配置模块化层2(ML2)插件

ML2插件使用Linux桥接器机制为实例构建第2层(桥接和交换)虚拟网络基础架构

## 编辑/etc/neutron/plugins/ml2/ml2\_conf.ini文件

cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
egrep -v '^$|^#' /etc/neutron/plugins/ml2/ml2_conf.ini.bak >/etc/neutron/plugins/ml2/ml2_conf.ini

[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2\_conf.ini
[ml2]
#启用flat网络和VLAN网络,
type_drivers = flat,vlan
#禁用自助服务网络
tenant_network_types =
#启用Linux桥接机制
mechanism_drivers = linuxbridge
#启用端口安全扩展驱动程序
extension_drivers = port_security

[ml2_type_flat]
#将提供者的虚拟网络配置为flat网络
flat_networks = provider

[ml2_type_vxlan]
#为自助服务网络配置VXLAN网络标识符范围
vni_ranges = 1:1000

[securitygroup]
#启用ipset以提高安全组规则的效率
enable_ipset = true

flat网络:没有使用任何网络隔离技术,大二层互通。

vlan网络:基于vlan实现的虚拟网络。同一个物理网络中的多个vlan网络是相互隔离的,因此支持多租户这种应用场景。

  • 配置Linux网桥代理

Linux网桥代理为实例构建第2层(桥接和交换)虚拟网络基础结构并处理安全组

## 编辑/etc/neutron/plugins/ml2/linuxbridge\_agent.ini文件

cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}
egrep -v '^$|^#' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak >//etc/neutron/plugins/ml2/linuxbridge_agent.ini

[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge\_agent.ini
[linux_bridge]
#将提供者虚拟网络映射到提供者物理网络接口
physical_interface_mappings = provider:eth0

[securitygroup]
#启用安全组并配置Linux网桥iptables防火墙驱动程序
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

[vxlan]
#禁用VXLAN覆盖网络
enable_vxlan = false

  • 修改linux内核参数设置为1
[root@controller ~]# vim /etc/sysctl.conf
...
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

#要启用网络桥接器支持,需要加载 br\_netfilter 内核模块
modprobe br_netfilter
sysctl -p

  • 配置DHCP代理

DHCP代理为虚拟网络提供DHCP服务

#编辑/etc/neutron/dhcp\_agent.ini文件
#配置Linux桥接口驱动程序Dnsmasq DHCP驱动程序,并启用隔离的元数据,以便提供商网络上的实例可以通过网络访问元数据

[root@controller ~]# vim /etc/neutron/dhcp\_agent.ini
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

  • 配置元数据代理

元数据代理提供配置信息,例如实例的凭据

# 编辑/etc/neutron/metadata\_agent.ini文件
# 配置元数据主机和共享机密

[root@controller ~]# vim /etc/neutron/metadata\_agent.ini
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = 123456 #密码

  • 配置Nova服务使用网络服务
#编辑/etc/nova/nova.conf文件
[root@controller ~]# vim /etc/nova/nova.conf
...
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = 123456 #neutron用户密码
service_metadata_proxy = true
metadata_proxy_shared_secret = 123456	#元数据代理密码

  • 创建 /etc/neutron/plugins/ml2/ml2_conf.ini 文件指向ML2插件配置的软链接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

  • 同步数据库
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

  • 重新启动Nova计算服务的API服务
systemctl restart openstack-nova-api.service

  • 启动网络服务,并配置为开机自启动
systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

对于网络选项2,还启用并启动第3层服务。这里未配置。请点击链接联网选项2:自助服务网络

8.2 计算节点安装

官方文档 Neytron 网络虚拟化服务计算节点安装

  • 安装组件
yum install openstack-neutron-linuxbridge ebtables ipset -y

  • 编辑/etc/neutron/neutron.conf文件
cp /etc/neutron/neutron.conf{,.bak}
egrep -v '^$|^#' /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf

[root@computel ~]# vim /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:123456@controller
auth_strategy = keystone

[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = 123456

[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

  • 配置Linux网桥代理
#编辑/etc/neutron/plugins/ml2/linuxbridge\_agent.ini文件

[root@computel ml2]# vim linuxbridge\_agent.ini 
[linux_bridge]
physical_interface_mappings = provider:eth0

[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

[vxlan]
enable_vxlan = false

  • 修改linux系统内核参数为1
[root@controller ~]# vim /etc/sysctl.conf
...
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

#要启用网络桥接器支持,需要加载 br\_netfilter 内核模块
modprobe br_netfilter
sysctl -p

  • 配置Nova服务使用网络服务
#编辑/etc/nova/nova.conf文件
[root@computel ~]# vim /etc/nova/nova.conf
... 
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = 123456

  • 重新启动计算节点上的Nova服务
systemctl restart openstack-nova-compute.service

  • 启动Linux网桥代理,并将其配置为开机自启动
systemctl enable neutron-linuxbridge-agent.service
systemctl restart neutron-linuxbridge-agent.service

8.3 Neutron网络虚拟化验证-控制节点
  • 列出已加载的扩展,以验证该neutron-server过程是否成功启动
source ~/admin-openrc
openstack extension list --network

  • 列出代理商以验证成功
openstack network agent list


9. 安装 Horizon服务-控制节点
  • 安装软件包
yum install openstack-dashboard -y

  • 编辑 /etc/openstack-dashboard/local_settings文件

[root@controller ~]# vim /etc/openstack-dashboard/local\_settings
#配置仪表盘在controller节点上使用OpenStack服务
OPENSTACK_HOST = "controller"
#启用身份API版本3
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
#配置user为通过仪表板创建的用户的默认角色
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
#允许主机访问仪表板,接受所有主机
ALLOWED_HOSTS = ['\*']

#配置memcached会话存储服务
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}
#启用对域的版本支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
#配置API版本
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
    "compute": 2,
}
#配置Default为通过仪表板创建的用户的默认域
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
#如果选择网络选项1,请禁用对第3层网络服务的支持
OPENSTACK_NEUTRON_NETWORK = {
    'enable\_router': False,
    'enable\_quotas': False,
    'enable\_distributed\_router': False,
    'enable\_ha\_router': False,
    'enable\_lb': False,
    'enable\_firewall': False,
    'enable\_vpn': False,
    'enable\_fip\_topology\_check': False,
#配置时区为亚洲上海
TIME_ZONE = "Asia/Shanghai"


为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**

![](https://img-blog.csdnimg.cn/img_convert/814eb8dea5528a7622eca6949b1cc153.png)

本份面试集锦涵盖了

*   **174 道运维工程师面试题**
*   **128道k8s面试题**
*   **108道shell脚本面试题**
*   **200道Linux面试题**
*   **51道docker面试题**
*   **35道Jenkis面试题**
*   **78道MongoDB面试题**
*   **17道ansible面试题**
*   **60道dubbo面试题**
*   **53道kafka面试**
*   **18道mysql面试题**
*   **40道nginx面试题**
*   **77道redis面试题**
*   **28道zookeeper**

**总计 1000+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

troller节点上使用OpenStack服务
OPENSTACK_HOST = "controller"
#启用身份API版本3
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
#配置user为通过仪表板创建的用户的默认角色
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
#允许主机访问仪表板,接受所有主机
ALLOWED_HOSTS = ['\*']

#配置memcached会话存储服务
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}
#启用对域的版本支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
#配置API版本
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
    "compute": 2,
}
#配置Default为通过仪表板创建的用户的默认域
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
#如果选择网络选项1,请禁用对第3层网络服务的支持
OPENSTACK_NEUTRON_NETWORK = {
    'enable\_router': False,
    'enable\_quotas': False,
    'enable\_distributed\_router': False,
    'enable\_ha\_router': False,
    'enable\_lb': False,
    'enable\_firewall': False,
    'enable\_vpn': False,
    'enable\_fip\_topology\_check': False,
#配置时区为亚洲上海
TIME_ZONE = "Asia/Shanghai"


为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**

[外链图片转存中...(img-zUAwAUra-1719230823693)]

本份面试集锦涵盖了

*   **174 道运维工程师面试题**
*   **128道k8s面试题**
*   **108道shell脚本面试题**
*   **200道Linux面试题**
*   **51道docker面试题**
*   **35道Jenkis面试题**
*   **78道MongoDB面试题**
*   **17道ansible面试题**
*   **60道dubbo面试题**
*   **53道kafka面试**
*   **18道mysql面试题**
*   **40道nginx面试题**
*   **77道redis面试题**
*   **28道zookeeper**

**总计 1000+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

> 17、如何重置mysql root密码?
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值