openstack

时间:2022-02-10 01:18:20

云计算架构

openstack

openstack整体架构

openstack

openstack

openstack身份服务-Keystone

管理层次结构

openstack

Keystone三大组件

服务(Server)

身份(Identity)服务
资源(Resource)服务
分配(Assignment)服务
令牌(Token)服务
目录(Catalog)服务
策略(Policy)服务

驱动(Drivers)

模块(Modules)

Keystone认证流程

openstack

(1)用户向Keystone提供凭证,Keystone验证通过后向用户返回令牌的同时还会返回一个通用目录(Generic Catalog)。
(2)用户使用该令牌向该目录列表中的端点(Endpoint)请求该用户对应的项目(租户)信息,Keystone验证通过后返回用户对应的项目(租户)列表。
(3)用户从列表中选择要访问的项目(租户),再次向Keystone发出请求,Keystone验证通过后返回管理该项目(租户)的服务列表并允许访问该项目(租户)的令牌。
(4)用户会通过这个服务和通用目录映射找到服务的端点,并通过端点找到实际服务组件的位置。
(5)用户再凭借项目(租户)令牌和端点来访问实际上的服务组件。
(6)服务组件会向Keystone提供这个用户项目令牌进行验证,Keystone验证通过后会返回一系列的确认信息和附加信息(用户希望操作的内容)给服务。
(7)服务执行一系列操作。

命令行

管理项目

openstack project list
openstack project create --description ‘my new project’ new-project --domain default
openstack project set 项目名称或ID --enable

管理用户

openstack user list
openstack user create --project new-project --password MYPASSWORD new-user
openstack user set 用户名或ID --enable

管理角色

openstack role list
openstack role create new-role
openstack role add --user demo --project new-project new-role
openstack role assignment list --user 用户名或ID --project 用户名或ID --names
openstack role show 角色名或ID

管理服务

openstack service list
openstack service create --name SERVICE_NAME --description SERVICE_DESCRIPTION SERVICE_TYPE

创建服务用户

(1)创建一个服务用户专用的项目
openstack project create service --domain default
这个项目一般命名为service,也可以选择其他名称。RDO一体化概念云平台中将其命名为services。
(2)为要部署的相关服务创建服务用户例如,创建swfit用户的命令如下。
openstack user create --domain default --password-prompt swift
(3)将admin角色分配给用户-项目对
openstack role add --project service --user 服务用户名 admin

openstack镜像-Glance

镜像状态

openstack

glance架构

openstack

glance-api

glance-api是系统后台运行的服务进程,是进入Glance的入口。它对外提供REST API,负责接收用户的RESTful请求,响应镜像查询、获取和存储的调用

glance-registry

glance-api会把请求转发给glance-registry。glance-registry会解析请求内容,并与数据库交互,存储、处理、检索镜像的元数据

Store Backend

Glance自身并不存储镜像,它将镜像存放在后端存储系统中。镜像本身的数据通过glance_store(Glance的Store模块,用于实现存储后端的框架)存放在各种后端,并可从中获取

命令行

openstack image list
openstack image show CentOS7
openstack image create --disk-format qcow2 --container-format bare --public --file ./centos63.qcow2 centos63-image
openstack image set 镜像名称
openstack image delete <镜像名称或ID>

将镜像与项目关联
openstack image add project [–project-domain 项目所属域] 镜像名或ID 项目名或ID

将镜像与项目解除关联
openstack image remove project [–project-domain 项目所属域] 镜像名或ID 项目名或ID

openstack计算-Nova

openstack

API

用于接收HTTP请求、转换命令、通过oslo.mes-saging队列或HTTP与其他组件通信的Nova组件。

Scheduler

用于决定哪台主机承载计算实例的Nova调度器。

Conductor

处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换。

Compute

管理虚拟机管理器与虚拟机之间通信的Nova计算组件

虚拟机实例化流程

(1)首先用户(可以是OpenStack最终用户,也可以是其他程序)执行Nova Client提供的用于创建虚拟机的命令。
(2)nova-api服务监听到来自Nova Client的HTTP请求,并将这些请求转换为AMQP消息之后加入消息队列。
(3)通过消息队列调用nova-conductor服务。
(4)nova-conductor服务从消息队列中接收虚拟机实例化请求消息后,进行一些准备工作(例如汇总HTTP请求中所需要实例化的虚拟机参数)
(5)nova-conductor服务通过消息队列告诉nova-scheduler服务去选择一个合适的计算节点来创建虚拟机,此时nova-scheduler会读取数据库的内容。
(6)nova-conductor服务从nova-scheduler服务得到了合适的计算节点的信息后,再通过消息队列来通知nova-compute服务实现虚拟机的创建

openstack

openstack

创建虚拟机实例

openstack server create --flavor m1.tiny --image cirros --nic net-id=public --security-group default --key-name demo-key cirros2

 openstack server create     
 (--image <镜像> | --volume <卷>)     
 --flavor <实例类型>    
  [--security-group <安全组>]     
  [--key-name <密钥对>]     
  [--property <服务器属性>]     
  [--file <目的文件名=源文件名>]     
  [--user-data <实例注入文件信息>]    
  [--availability-zone <域名>]    
  [--block-device-mapping <块设备映射>]    
  [--nic <net-id=网络ID,v4-fixed-ip=IP地址,v6-fixed-ip=IPv6地址,port-id=端口UUID,auto,none>]     
  [--network <网络>]     
  [--port <端口>]     
  [--hint <键=值>]     
  [--config-drive <配置驱动器卷>|True]         
  [--min <创建实例最小数量>]     
  [--max <创建实例最大数量>]     
  [--wait]     
  <实例名>

访问虚拟机实例
openstack console url show cirros

管理虚拟机实例

(1)实例列表
openstack server list
管理员可以用以下命令列出所有项目的实例。
openstack server list --all-projects
(2)查看实例详情
openstack server show [–diagnostics] <实例名或ID >
(3)实例启动
openstack server start <实例名或ID> [<实例名或ID > …]
(4)实例暂停及恢复
openstack server pause/unpause <实例名或ID> [<实例名或ID > …]

(5)实例挂起及恢复
openstack server suspend <实例名或ID> [<实例名或ID > …]
挂起的实例需要使用
openstack server resume命令让其恢复。
(6)实例废弃及恢复
openstack server shelve <实例名或ID> [<实例名或ID > …]
废弃的实例会被关闭,实例本身及其相关的数据被保存,但内存中的数据会丢失
openstack server unshelve命令可以恢复被废弃的实例。
(7)实例关闭
openstack server stop <实例名或ID> [<实例名或ID > …]
(8)实例重启
分为软重启和硬重启。软重启是操作系统正常关闭并重启,使用选项–soft;硬重启是模拟断电然后加电启动,使用选项–hard。

openstack server reboot  [--hard | --soft]  [--wait] <实例名或ID>

(9)调整实例大小
这是将实例调整到一个新的实例类型。

openstack server resize [--flavor <flavor> | --confirm | --revert] [--wait] <实例名或ID>

这种操作是通过创建一个新的实例,并将原实例的磁盘的内容复制到新的实例中来实现的。对于用户来说,分两个处理阶段,第一阶段执行调整实例大小;第二阶段确认成功并释放原实例,或者使用选项–revert进行事件回滚,释放新的实例并重启原实例。
(10)实例删除
openstack server delete <实例名或ID> [<实例名或ID > …]
(11)实例修改
openstack server set [–name <新名称>] [–root-password] [–property <键=值>] [–state <状态>] <实例名或ID>选项–root-password用于交互式修改root密码。–property用于添加或修改属性(自定义元数据)。–state用于改变状态,只能取值active(活动)或error(出错)。
openstack server set --root-password Fedora
New password:
Retype new password:
QEMU guest agent is not enabled (HTTP 409) (Request-ID: req-30d54f4f-3b38-479c-a3f1-2aa62c30cb9a)

管理实例类型

openstack flavor list
openstack flavor show FLAVOR_ID
openstack flavor create FLAVOR_NAME --id FLAVOR_ID --ram RAM_IN_MB --disk ROOT_DISK_IN_GB --vcpus NUMBER_OF_VCPUS
openstack flavor create --public m1.extra_tiny --id auto --ram 256 --disk 0 --vcpus 1 --rxtx-factor 1
openstack flavor set命令来修改其参数设置。
openstack flavor set FLAVOR-NAME --property quota:read_bytes_sec=10240000 --property quota:write_bytes_sec=10240000

openstack flavor delete FLAVOR_ID

openstack网络-Neutron

openstack

neutron-server

Neutron仅有一个主要服务进程neutron-server。它运行于控制节点上,对外提供OpenStack网络API作为访问Neutron的入口,收到请求后调用插件(Plugin)进行处理,最终由计算节点和网络节点上的各种代理(Agent)完成请求

Network Provider

网络提供者(Network Provider)是指提供OpenStack网络服务的虚拟或物理网络设备,如Linux Bridge、Open vSwitch,或者其他支持Neutron的物理交换机

openstack

插件是Neutron的一种API的后端实现,目的是增强扩展性。插件按照功能可以分为Core Plugin和Service Plugin两种类型。
Core Plugin提供基础二层虚拟网络支持,实现网络、子网和端口等核心资源的抽象。
Service Plugin是指Core Plugin之外的其他插件,提供路由器、防火墙、安全组、负载均衡等服务支持

插件通过RPC调用相应的代理(Agent)来完成。
代理处理插件转来的请求,负责在网络提供者上真正实现各种网络功能。

命令行

openstack network create
[–project <项目名或ID> [–project-domain <项目所属的域的名称或ID >]]
[–enable | --disable]
[–share | --no-share]
[–description <说明信息>]
[–mtu ]
[–availability-zone-hint <可用域>]
[–enable-port-security | --disable-port-security]
[–external [–default | --no-default] | --internal]
[–provider-network-type <提供者网络类型>]
[–provider-physical-network <提供者物理网络>]
[–provider-segment <提供者网段>]
[–qos-policy <用于此网络的QoS策略名称或ID>]
[–transparent-vlan | --no-transparent-vlan]
[–tag | --no-tag]
<虚拟网络名称>

(2)修改网络设置
openstack network set [选项列表] <虚拟网络名称或ID>
其中选项大部分与openstack network create命令相同,增加一个重命名选项–name。
(3)显示网络列表
openstack network list [选项列表]
(4)显示网络详细信息
openstack network show <虚拟网络名称或ID>
(5)删除网络
openstack network delete [虚拟网络列表]


(1)创建子网命令
openstack subnet create
[–project <项目名或ID> [–project-domain <项目所属的域的名称或ID >]]
[–subnet-pool <子网池> | --use-default-subnet-pool [–prefix-length <前缀长度>]|–use-prefix-delegation]
[–subnet-range <子网范围>]
[–allocation-pool start=<起始IP地址>,end=<结束IP地址>]
[–dhcp | --no-dhcp]
[–dns-nameserver <DNS服务器>]
[–gateway <网关>]
[–host-route destination=<主机路由目的子网>,gateway=<网关IP>]
[–network-segment <与此子网关联的网段名称或ID>]
–network <子网所属的虚拟网络名称或ID>
<子网名称>

默认启用DHCP,使用选项–dhcp

(2)子网管理命令与上述网络管理命令类似,只是将子命令network换成sub-net,操作对象改为子网。


路由器创建和管理命令
(1)创建路由器命令
openstack router create
[–project <项目名或ID> [–project-domain <项目所属的域的名称或ID >]]
[–enable | --disable]
[–availability-zone-hint <可用域>]
<路由名称>

(2)路由器管理命令与上述网络管理命令类似,只是将子命令network换成router,操作对象改为路由器。

网络拓扑类型

  1. Local
    Local网络与其他网络和节点隔离。该网络中的虚拟机实例只能与位于同一节点上同一网络的虚拟机实例通信,实际意义不大,主要用于测试环境。位于同一Local网络的实例之间可以通信,位于不同Local网络的示例之间无法通信。一个Local网络只能位于一个物理节点上,无法跨节点部署。
  2. Flat
    Flat是一种简单的扁平网络拓扑,所有虚拟机实例都连接在同一网络中,能与位于同一网络的实例进行通信,并且可以跨多个节点。这种网络不使用VLAN,没有对数据包打VLAN标签,无法进行网络隔离。Flat是基于不使用VLAN的物理网络实现的虚拟网络。每个物理网络最多只能实现一个虚拟网络。
  3. VLAN
    VLAN是支持802.1q协议的虚拟局域网,使用VLAN标签标记数据包,实现网络隔离。同一VLAN网络中的实例可以通信,不同VLAN网络中的实例只能通过路由器来通信。VLAN网络可以跨节点,是应用最广泛的网络拓扑类型之一。
  4. VXLAN
    VXLAN(Virtual Extensible LAN)可以看作是VLAN的一种扩展,相比于VLAN,它有更大的扩展性和灵活性,是目前支持大规模多租户网络环境的解决方案。由于VLAN包头部限长是12位,导致VLAN的数量限制是4096(212)个,不能满足网络空间日益增长的需求。目前VXLAN的封包头部有24位用作VXLAN标识符(VNID)来区分VXLAN网段,最多可以支持16777216(224)个网段。VLAN使用STP(Spanning Tree Protocol,生成树协议)防止环路,导致一半的网络路径被阻断。VXLAN的数据包是封装到UDP通过三层传输和转发的,可以完整地利用三层路由,能克服VLAN和物理网络基础设施的限制,更好地利用已有的网络路径。
  5. GRE
    GRE(Generic Routing Encapsulation,通用路由封装)是用一种网络层协议去封装另一种网络层协议的隧道技术。GRE的隧道由两端的源IP地址和目的IP地址定义,它允许用户使用IP封装IP等协议,并支持全部的路由协议。在OpenStack环境中使用GRE意味着“IP over IP”,GRE与VXLAN的主要区别在于,它是使用IP包而非UDP进行封装的。
  6. GENEVE
    GENEVE(Generic Network Virtualization Encapsulation,通用网络虚拟封装)的目标宣称是仅定义封装数据格式,尽可能实现数据格式的弹性和扩展性。GENEVE封装的包通过标准的网络设备传送,即通过单播或多播寻址,包从一个隧道端点(Tun-nel Endpoint)传送到另一个或多个隧道端点。GENEVE帧格式由一个封装在IPv4或IPv6的UDP里的简化的隧道头部组成。GENEVE的推出主要是为了解决封装时添加的元数据信息问题(到底是多少位,该怎么用,这些是否由GENEVE自动识别与调整),以适应各种虚拟化场景。

openstack存储-Cinder

openstack

(2)API前端服务(cinder-api)cinder-api作为Cinder对外服务的HTTP接口,向客户呈现Cinder能够提供的功能,负责接收和处理REST请求,并将请求放入RabbitMQ队列。当客户需要执行卷的相关操作时,能且只能向cinder-api发送REST请求。
(3)Scheduler调度服务(cinder-scheduler)cinder-scheduler对请求进行调度,将请求转发到合适的卷服务,即处理任务队列的任务,通过调度算法选择最合适的存储节点以创建卷。
(4)卷服务(cinder-volume)调度服务只分配任务,真正执行任务的是卷服务。cinder-volume管理块存储设备,定义后端设备。运行cinder-volume服务的节点被称为存储节点。
(5)备份服务(cinder-backup)备份服务用于提供卷的备份功能,支持将块存储卷备份到OpenStack对象存储(Swift)。
(6)卷提供者(Volume Provider)块存储服务需要后端存储设备(如外部的磁盘阵列以及其他存储设施)来创建卷。卷提供者定义存储设备,为卷提供物理存储空间。cinder-volume支持多种Volume Provider,每种Vol-ume Provider都能通过自己的驱动与cinder-volume协调工作

Cinder创建卷的基本流程

(1)客户(可以是OpenStack最终用户,也可以是其他程序)向cinder-api发送请求,要求创建一个卷。
(2)cinder-api对请求做一些必要处理后,向RabbitMQ发送一条消息,让cinder-scheduler服务创建一个卷。
(3)cinder-scheduler从消息队列中获取cinder-api发给它的消息,然后执行调度算法,从若干存储节点中选出某节点。
(4)cinder-scheduler向消息队列发送了一条消息,让该存储节点创建这个卷。
(5)该存储节点的cinder-volume服务从消息队列中获取cinder-scheduler发给它的消息,然后通过驱动在volumeprovider定义的后端存储设备上创建卷

命令行

openstack volume list
openstack volume show 54d0daec-578d-4b08-9d12-cd9b7fe62472
openstack volume create --image 620b31ce-cc4a-47ca-96df-d14f506f7368 --size 8 --availability-zone nova my-new-volume
openstack volume delete my-new-volume

将卷连接到实例
这种操作需要指定实例的ID和卷的ID
openstack server add volume 84c6e57d-a6b1-44b6-81eb-fcb36afd31b5 573e024d-5235-49ce-8332-be1576d323f8 --device /dev/vdb

扩展卷
扩展卷需要提供卷ID和新的大小。
openstack volume set 573e024d-5235-49ce-8332-be1576d323f8 --size 10

转让卷
首先创建转让卷。
openstack volume transfer request create a1cdace0-08e4-4dc7-b9dc-457e9bcfe25f

查看挂起的卷转让列表,提供转让ID和认证密钥。
openstack volume transfer request list

最后切换到另一个项目中接受转换。
openstack volume transfer request accept 6e4e9aa4-bed5-4f94-8f76-df43232f44dc b2c8e585cbc68a80

创建备份
openstack volume backup create [–incremental] [–force] VOLUME

openstack volume backup list
openstack volume backup show 04124e72-35b2-486e-a105-84e3d1725dfa

恢复备份
openstack volume backup restore BACKUP_ID VOLUME_ID

管理块存储服务配额

查看块存储服务配额
openstack project show -f value -c id PROJECT_NAME
openstack quota show PROJECT_ID

openstack quota set --volumes 15 b9d11a6ed55c4b0490b5f4124a6588f9

openstack编排-Heat

用户将对各种资源的需求写入模板文件中,Heat基于模板文件自动调用相关服务的接口来配置资源,从而实现自动化的云部署。
在编排服务中,资源(Resource)特指编排期间创建或修改的对象,可以是网络、路由器、子网、实例、卷、浮动IP、安全组等。

openstack

openstack

创建虚拟机实例的模板,demo-template.yaml

export NET_ID=$(openstack network list | awk '/ private / { print $2 }')
openstack stack create -t demo-template.yaml --parameter "NetID=$NET_ID" test-stack

openstack stackoutput show --all test-stack

openstack server list

openstack stack event list test-stack

openstack stack delete --yes test-stack