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

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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"

  • 解决网页无法打开检查
[root@controller ~]# vim /etc/httpd/conf.d/openstack-dashboard.conf
WSGISocketPrefix run/wsgi
WSGIApplicationGroup %{GLOBAL}

  • 重新启动Web服务器和会话存储服务
systemctl restart httpd.service memcached.service
systemctl enable httpd.service memcached.service

10. 访问验证Web页面

使用Web浏览器访问仪表板,

网址为 http://192.168.1.10/dashboard

使用admindemo用户和default域凭据进行身份验证


11. 创建虚拟网络并启动实例

官方文档

本部分创建必要的虚拟网络以支持启动实例。网络选项1包括一个提供程序(外部)网络,以及一个使用它的实例。联网选项2包括一个带有一个使用它的实例的提供者网络,以及一个带有一个使用它的实例的自助服务(专用)网络。

这里选择提供商网络

  • 创建网络
source ~/admin-openrc
openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider

#--share 允许所有项目使用虚拟网络
#--external 将虚拟网络定义为外部
#--internal 如果要创建内部网络,则可以使用

  • 在网络上创建一个子网
openstack subnet create --network provider \
  --allocation-pool start=192.168.1.101,end=192.168.1.250 \
  --dns-nameserver 223.5.5.5 --gateway 192.168.1.254 \
  --subnet-range 192.168.1.0/24 provider
  
#提供者网络使用192.168.1.0/24网段,网关位于192.168.1.1。
#DHCP服务器为每个实例分配从192.168.1.101到192.168.1.250的IP地址。
#所有实例都使用223.5.5.5作为DNS解析器。

  • 创建一台1核cpu 1G硬盘的实例类型
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano


  • 创建秘钥对

官方安装文档

[root@controller ~]# source ~/admin-openrc
[root@controller ~]# ssh-keygen -q -N ""
Enter file in which to save the key (/root/.ssh/id_rsa): #回车
[root@controller ~]# openstack keypair create --public-key ~/.ssh/id\_rsa.pub mykey
+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | 62:6a:3f:97:ac:12:2d:90:91:51:01:3d:72:2b:59:ab |
| name        | mykey                                           |
| user_id     | 3dc7ca3b1d3b4755a9662c1038b6241d                |
+-------------+-------------------------------------------------+

  • 验证秘钥对的添加
openstack keypair list

  • 添加安全组规则

默认情况下,default安全组适用于所有实例,并包括拒绝对实例进行远程访问的防火墙规则。对于CirrOS之类的Linux映像,建议至少允许ICMP(ping)和安全Shell(SSH)。

#将规则添加到default安全组
* 许可ICMP协议(ping命令)
openstack security group rule create --proto icmp default
* 允许SSH访问(22端口)
openstack security group rule create --proto tcp --dst-port 22 default

  • 启动一个实例
#要启动实例,必须至少指定实例类型,映像名称,网络,安全组,密钥和实例名称
source admin-openrc
#列出可用的实例类型
openstack flavor list

#列出可用的镜像
openstack image list

#列出可用的网络
openstack network list

#列出可用的安全组
openstack security group list

  • 启动实例
#net-id=<可用的网络的ID>
openstack server create --flavor m1.nano --image cirros   --nic net-id=310645c0-6fb4-43bf-84e3-1349ce7c49b1 --security-group default   name mykey provider-instance

  • 检查实例状态
 openstack server list

  • 使用虚拟控制台访问实例
#从Web浏览器访问
openstack console url show provider-instance

如果Web浏览器在无法解析controller主机名的主机上运行,则可以替换nova.conf的配置文件中的[vnc]模块,将controller为控制器节点上管理接口的IP地址

novncproxy_base_url = http://192.168.1.10:6080/vnc_auto.html

  • 报错 找不到磁盘无法启动的问题

booting from hard disk

#解决方法
将计算节点的nova,conf中
[root@computel ~]# vim /etc/nova/nova.conf
[libvirt]
cpu_mode = none
virt_type = qemu	#因测试中是虚拟机,不是物理机。所以只能修改为qemu

#重启nova计算服务
[root@computel ~]# systemctl restart openstack-nova-compute.service

#重启实例,可在控制节点命令行重启也可在Web网页进行重启
openstack server list
nova reboot 5c2a8b19-68a4-40d3-a55d-a0642e8fe876

  • 验证对网关和互联网的访问

  • 验证远程访问实例的连接性


12. Web界面操作示范
12.1 创建实例

12.2 创建项目

12.3 创建用户

12.4 配置安全组

12.5 手动添加镜像
12.6 ※网络配置※

Neutron是Openstack的网络管理组件,提供网络、子网和路由器的抽象。创建网络必须要创建一个外部网络,可以让外部访问openstack的外部网络,多租户之间共享的网络,外部网络必须由管理员创建,因为外部网络是和物理网络有直接映射关系的虚拟网络。在网络里可以设置一个或多个内部网络,这些内部网络直接连接vm。如果openstack外的网络要访问vm,就必须在网络之间创建路由。接下来,我们就一步一步的去创建openstack的网络。

  • 查看已创建的外部网络和子网情况

  • 创建名为demo_net的私有网络

私有网络中的每个项目的网络是隔离的

因为是私有网络,所以分配地址池可以不用填写,按顺序分配即可

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

M6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xNjk1MjE0OS03Y2I0YzRlYzQyMzEwZTJkLnBuZw?x-oss-process=image/format,png)

12.5 手动添加镜像
12.6 ※网络配置※

Neutron是Openstack的网络管理组件,提供网络、子网和路由器的抽象。创建网络必须要创建一个外部网络,可以让外部访问openstack的外部网络,多租户之间共享的网络,外部网络必须由管理员创建,因为外部网络是和物理网络有直接映射关系的虚拟网络。在网络里可以设置一个或多个内部网络,这些内部网络直接连接vm。如果openstack外的网络要访问vm,就必须在网络之间创建路由。接下来,我们就一步一步的去创建openstack的网络。

  • 查看已创建的外部网络和子网情况

  • 创建名为demo_net的私有网络

私有网络中的每个项目的网络是隔离的

因为是私有网络,所以分配地址池可以不用填写,按顺序分配即可

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-RiSp7akq-1715843537351)]
[外链图片转存中…(img-9nitGYsW-1715843537351)]
[外链图片转存中…(img-eYzhwg94-1715843537352)]
[外链图片转存中…(img-Jbv4VPwT-1715843537352)]
[外链图片转存中…(img-iUv6tcY1-1715843537352)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值