Openstack教程

Openstack命令

Keystone

命令 描述
openstack user create 创建用户
openstack project create 创建项目
openstack role add 添加角色到用户或项目
openstack role assignment list 列出角色分配
openstack token issue 颁发令牌

Glance

命令 描述
openstack image create 创建镜像
openstack image list 列出镜像
openstack image show 显示镜像详细信息
openstack image delete 删除镜像

Nova

命令 描述
openstack flavor create 创建虚拟机规格
openstack server create 创建虚拟机
openstack server list 列出虚拟机
openstack server show 显示虚拟机详细信息
openstack server delete 删除虚拟机

Neutron

命令 描述
openstack network create 创建网络
openstack subnet create 创建子网
openstack router create 创建路由器
openstack port create 创建端口
openstack floating ip create 创建浮动IP地址

Cinder

命令 描述
openstack volume create 创建卷
openstack volume list 列出卷
openstack volume show 显示卷详细信息
openstack volume delete 删除卷

Nova

nova创建虚拟机流程

  1. 界面或命令行通过RESTful API向keystone进行认证,keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
  2. 界面或命令行携带auth-token通过RESTful API向nova-api发送一个boot instance的请求。
  3. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
  4. keystone验证token是否有效,如有效则返回有效的认证和对应的角色。 通过认证后nova-api和数据库通讯,初始化新建虚拟机的数据库记录。
  5. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源。
  6. nova-scheduler进程侦听消息队列,获取nova-api的请求。 nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
  7. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息,nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
  8. nova-compute通过rpc.call向nova-conductor请求获取虚拟机信息,nova-conductor从数据库获取到虚拟机信息把虚拟机信息发送到消息队列。
  9. nova-compute从对应的消息队列中获取虚拟机信息消息,通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
  10. glance-api向keystone认证token是否有效,并返回验证结果,token验证通过,nova-compute获得虚拟机镜像信息。
  11. nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
  12. neutron-server向keystone认证token是否有效,并返回验证结果,token验证通过nova-compute获得虚拟机网络信息。
  13. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
  14. cinder-api向keystone认证token是否有效,并返回验证结果,token验证通过,nova-compute获得虚拟机持久化存储信息。
  15. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

Nova Scheduler调度策略

Scheduler的作用就是在创建实例(instance)时,为实例选择出合适的主机(host)。这个过程分两步:过滤(Fliter)和计算权值(Weight)

  • 过滤:过滤掉不符合我们的要求,或镜像要求(比如物理节点不支持64bit,物理节点不支持Vmware EXi等)的主机,留下符合过滤算法的主机集合。
  • 计算权重:通过指定的权重计算算法,计算在某物理节点上申请这个虚机所必须的消耗cost。物理节点越不适合这个虚机,消耗cost就越大,权值Weight就越大,调度算法会选择权值最小的主机。

过滤策略

Filter算法在nova-scheduler中是通过oslo.config.cfg模块从nova.conf配置文件中动态获取的,应用了Python的反射机制,在运行时刻决定初始化所选择的filter算法。OpenStack支持多种过滤策略,均在/nova/scheduler/filters包下:

  1. RetryFilter: 过滤掉之前调度过的节点,比如有三个节点都通过了过滤由于某个原因操作A节点失败了此时scheduler会重新执行过滤操作,重复次数scheduler_max_attempts 选项指定,默认是3。那么这时候 RetryFilter 就会将 A 直接刷掉,避免操作再次失败。
  2. AvailabilityZoneFilter:将计算节点划分到不同的Availability Zone中,使用不同主机组调度。
  3. RamFilter:将不满足内存的计算节点过滤掉。
  4. CoreFilter:将不满足vCPU计算节点过滤。
  5. ComputeFilter:保证nova-compute服务正常的计算节点才能够被调度。
  6. ComputeCapabilitiesFilter:根据计算节点特性进行调度,比如:x86或ARM。
  7. ImagePropertiesFilter:根据镜像metadata属性调度到对应计算节点。
  8. ServerGroupAntiAffinityFilter:将虚拟机调度到不同的节点,比如同时创建3台虚拟机可以将3台虚拟机调度到不同计算节点。
  9. ServerGroupAffinityFilter:将虚拟机调度到同一个节点。

权重

Scheduler根据过滤的计算节点的内存空闲计算计算节点的权重,节点内存空闲率越高权重值越大。Scheduler会调度到权重值比较大的计算节点上。

Neutron

东西流量走向

同一个子网

  1. vm1向vm2发起请求,通过目的IP地址得知vm2与自己在同一网段。
  2. 数据包经过linux bridge,进行安全策略检查,进入br-int打上内部vlan号。
  3. 数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
  4. 进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开compute1。
  5. 数据包进入compute2,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
  6. 数据包进入br-int,此时会被打上内部vlan号。
  7. 数据包经过离开br-int并去掉内部vlan号,送往linux bridge通过其上的iptables安全策略检查。
  8. 最后数据包送到vm2

不同子网

  1. vm1向vm2发出通信请求,根据目的IP地址得知vm2和自己不在同一网段,将数据包送往网关。
  2. 数据包经过linux bridge通过其上的iptables安全策略检查,按后送往br-int并打上内部vlan号。
  3. 数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
  4. 进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开compute1。
  5. 数据包进入网络节点,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
  6. 数据包进入br-int,此时会被打上内部vlan号。
  7. 进入router namespace路由空间找到网关,vm1的网关配置在此路由器接口qr-1口上。
  8. 将数据包路由到vm2的网关,vm2的网关配置在qr-2口上,送回br-int并打上内部vlan号。
  9. 数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
  10. 进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开network node。
  11. 数据包进入compute2,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
  12. 数据包进入br-int,此时会被打上内部vlan号。
  13. 数据包经过离开br-int并去掉内部vlan号,送往linux bridge通过其上的iptables安全策略检查。
  14. 最后数据包送到vm2。
文章作者: 慕容峻才
文章链接: https://www.acaiblog.top/Openstack/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿才的博客
微信打赏
支付宝打赏