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创建虚拟机流程
- 界面或命令行通过RESTful API向keystone进行认证,keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
- 界面或命令行携带auth-token通过RESTful API向nova-api发送一个boot instance的请求。
- nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
- keystone验证token是否有效,如有效则返回有效的认证和对应的角色。 通过认证后nova-api和数据库通讯,初始化新建虚拟机的数据库记录。
- nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源。
- nova-scheduler进程侦听消息队列,获取nova-api的请求。 nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
- nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息,nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
- nova-compute通过rpc.call向nova-conductor请求获取虚拟机信息,nova-conductor从数据库获取到虚拟机信息把虚拟机信息发送到消息队列。
- nova-compute从对应的消息队列中获取虚拟机信息消息,通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
- glance-api向keystone认证token是否有效,并返回验证结果,token验证通过,nova-compute获得虚拟机镜像信息。
- nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
- neutron-server向keystone认证token是否有效,并返回验证结果,token验证通过nova-compute获得虚拟机网络信息。
- nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
- cinder-api向keystone认证token是否有效,并返回验证结果,token验证通过,nova-compute获得虚拟机持久化存储信息。
- 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包下:
- RetryFilter: 过滤掉之前调度过的节点,比如有三个节点都通过了过滤由于某个原因操作A节点失败了此时scheduler会重新执行过滤操作,重复次数scheduler_max_attempts 选项指定,默认是3。那么这时候 RetryFilter 就会将 A 直接刷掉,避免操作再次失败。
- AvailabilityZoneFilter:将计算节点划分到不同的Availability Zone中,使用不同主机组调度。
- RamFilter:将不满足内存的计算节点过滤掉。
- CoreFilter:将不满足vCPU计算节点过滤。
- ComputeFilter:保证nova-compute服务正常的计算节点才能够被调度。
- ComputeCapabilitiesFilter:根据计算节点特性进行调度,比如:x86或ARM。
- ImagePropertiesFilter:根据镜像metadata属性调度到对应计算节点。
- ServerGroupAntiAffinityFilter:将虚拟机调度到不同的节点,比如同时创建3台虚拟机可以将3台虚拟机调度到不同计算节点。
- ServerGroupAffinityFilter:将虚拟机调度到同一个节点。
权重
Scheduler根据过滤的计算节点的内存空闲计算计算节点的权重,节点内存空闲率越高权重值越大。Scheduler会调度到权重值比较大的计算节点上。
Neutron
东西流量走向
同一个子网
- vm1向vm2发起请求,通过目的IP地址得知vm2与自己在同一网段。
- 数据包经过linux bridge,进行安全策略检查,进入br-int打上内部vlan号。
- 数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
- 进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开compute1。
- 数据包进入compute2,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
- 数据包进入br-int,此时会被打上内部vlan号。
- 数据包经过离开br-int并去掉内部vlan号,送往linux bridge通过其上的iptables安全策略检查。
- 最后数据包送到vm2
不同子网
- vm1向vm2发出通信请求,根据目的IP地址得知vm2和自己不在同一网段,将数据包送往网关。
- 数据包经过linux bridge通过其上的iptables安全策略检查,按后送往br-int并打上内部vlan号。
- 数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
- 进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开compute1。
- 数据包进入网络节点,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
- 数据包进入br-int,此时会被打上内部vlan号。
- 进入router namespace路由空间找到网关,vm1的网关配置在此路由器接口qr-1口上。
- 将数据包路由到vm2的网关,vm2的网关配置在qr-2口上,送回br-int并打上内部vlan号。
- 数据包脱掉br-int的内部vlan号进入br-tun/br-vlan。
- 进入br-tun的数据包此时vxlan封装并打上vni号,进入br-vlan的数据包此时打上外部vlan号,通过nic离开network node。
- 数据包进入compute2,经过br-tun的数据包完成vxlan的解封装去掉vni号,经过br-vlan的数据包去掉vlan号。
- 数据包进入br-int,此时会被打上内部vlan号。
- 数据包经过离开br-int并去掉内部vlan号,送往linux bridge通过其上的iptables安全策略检查。
- 最后数据包送到vm2。