openstack部署后实战

分布式部署规则

1、平常都是两台Node安装OpenStack平台,那如果想分布式部署该怎么做?比如:部署两台Nova服务,一台单独的Neutron服务,一台单独的存储节点等。

整体思想:

  • 如果想要部署两台Nova服务,那就在controller节点安装管理端服务,分别在不同的节点安装Nova服务端。并且运行"su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova"命令去发现新添加的Nova节点。如果想把Controller节点也变成一个计算服务节点,也是安装Nova(compute)节点安装的一样,其中修改配置文件时,有许多部分都是已经修改过的,需要修改两点(这里只是大概,具体的操作看实际情况):[VNC]中需要修改,[libvirt]中virt_type = qemu需要修改。

    最后别忘重启systemctl restart libvirtd.service openstack-nova-compute.service服务,这个是点睛之笔。

  • 普遍的情况下,除了controller节点安装neutron组件,每一个安装了Nova节点上需要安装neutron服务。

    如果想单独一台节点作为neutron服务那就直接按照部署在Nova节点的方式一样就行。

    但是记得如果想要云主机能上网,一台neutron需要三个网卡:一个用于提供provider网络(flat),一个用于Vxlan网络,一个用于集群内部通信网络。

  • 如果想要一台节点单独做存储节点的话(这里指的是LVM类型的存储),如果是分布式存储,比如:Ceph,Swift那就另当别论)直接按照cinder客户端的方式安装就行,my_ip别忘修改。

网络实战

1、前面也已经说过了,只要云主机想访问外网,就需要三块网卡:

  • provider网络(flat),这个网络是provider network(物理网络),必须要由admin用户创建,在配置文件中关于flat网络的配置:provider:ens33,实际上就是做了物理网络和虚拟网络的映射,provider可以随意定义,但是在创建flat网络指定物理网络名称是需要指定自定义的名称。我们创建了flat网络后,虚拟机使用了flat网络后,所发出的数据包实际上就是相当于是由ens33网络发出去的数据包,这样只要ens33网卡能上网那云主机也能上网,所以ens33网卡所在的网络类型需要是NAT模式(这个是在VM Workstation说的,因为实验室基于虚拟机做的),当然这个ens33网卡就需要配置网关,DNS等,而且在创建的flat网络时也需要配置网关和DNS,须和ens33的配置信息保持一致。在OpenStack中创建flat网络选上"external(外部网络)",然后共享网络

    当然vlan类型的网络也是一样的。因为flat和vlan在openstack中是属于同一种网络的,只是底层实现效果不一样,具体的:vlan出去的数据包需要打tag,而flat出去的数据包不需要打tag。

    重要思想:就可以把flat网络实现的效果理解为公有云上的公网IP。只要有了它云主机就能上网。

  • Vxlan网络:它是一个虚拟的网络,也叫做tenant network,所以vxlan网络是由tenant(租户创建的)这样它才有实际意义。为啥说Vxlan是个虚拟的网络?因为它本身不需要依赖于具体的物理网络,它不需要和某个物理网络对应,满足Vxlan的条件,在虚拟机上单独添加一块网卡,比如:ens38,这个ens38的类型是NAT,Host Only,桥接都行,并且ens38网卡配置信息,不需要网关。然后在创建Vxlan网络时,首先/etc/neutron/plugins/ml2/linuxbridge_agent.ini 配置文件中的[vxlan]分组中的local_ip = 192.168.17.10,填写本地你想当做Vxlan那块网卡的IP就行了。

    然后是在Openstack中创建Vxlan,网段随便创建,并不需要和实际的物理网络相对应,因为Vxlan是个基于IP叠加的网络,也就是说只要Vxlan底层有个IP就行,网关不用写,这样就行了。

    重要思想:Vxlan网络的效果就相当于公有云中云服务器中的私网IP,它既不能上外网,也不能和其它不同网段的服务器的通信。

    但是想要使得具有Vxlan的网络的云主机能上外网并且和不同网络的云主机通信该怎么解决?

    这就需要路由器,接口,浮动IP的接入了,稍后实战。

2、创建flat网络:

flat的网络就这样设置,DNS应该不用个ens33的一致,也能上网,但是必须有效。

就这样创建一台云主机并且使用flat网络,云主机就能上网了。

3、密钥对的使用

创建密钥分为两种:

  • 创建密钥对:创建好之后会下载,注意这个密钥只能下载一次,所以妥善保管:
  • 导入公钥

我们现在服务器上创建个密钥对

shell 复制代码
#生成密钥对,-t rsa指定rsa算法
[root@controller ~]# ssh-keygen -t rsa 

#copy公钥到openstack中
[root@controller ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGbJMMjvMc/T0mQAWvjXxCbefIeamvWEk2AAAi3jUudLCsmtzswIFkgNTASiXQbx1OtYkfpPC5seulEAO9+RxPfE4v8G4xQAHC8mERrUavj+L3OUc0le9UsFsxmJ6dC/OJD8+zUOEVvwiku03au7mBYMtn4soBzzHwKuRXJZdkW4yY9GaYmvdOdONmQs4mEP+PPc7CTE7u+npnsdr1BusmyqkIXLGbjnGPMOeOXPmOyhU4PKktZFmGfOqChMbrWGZB/4kDCqcuhuSAK77oauYMTEhBBSIut/ubJYWOsh8hB2jiydsnqZOlVpD6Oat/B6cCv2BiXkIy1ZhJkEk0SsKN root@controller

密钥对有了,然后创建云主机,看看如何使用密钥去连接云主机:

在Win的DOC窗口测试,xshell过几天研究。

1、这个是使用密钥对的方式连接

shell 复制代码
#centos.pem是在下载下来密钥文件
C:\Users\郑波>ssh -i centos.pem cirros@192.168.9.183     #可以看到登陆成功!!!
Warning: Identity file centos.pem not accessible: No such file or directory.
cirros@192.168.9.183's password:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:22:f6:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.9.183/24 brd 192.168.9.255 scope global eth0
    inet6 fe80::f816:3eff:fe22:f6a3/64 scope link
       valid_lft forever preferred_lft forever

2、使用导入公钥的方式连接:

shell 复制代码
[root@controller ~]# ssh cirros@192.168.9.173    #在controller,compute等节点连接可以,在Win上一样也可以。
The authenticity of host '192.168.9.173 (192.168.9.173)' can't be established.
RSA key fingerprint is SHA256:wJuOUWxA/6S++RA0p/bfJpOkmW7MvcJtGn33ia5YCr4.
RSA key fingerprint is MD5:2a:6a:5d:01:ed:22:0d:55:71:39:8c:21:c1:d7:c4:b2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.173' (RSA) to the list of known hosts.
cirros@192.168.9.173's password: 
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:59:7e:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.9.173/24 brd 192.168.9.255 scope global eth0
    inet6 fe80::f816:3eff:fe59:7e13/64 scope link 
       valid_lft forever preferred_lft forever
$ 

4、创建Vxlan

在项目中创建的网络默认就是Vxlan网络,在管理员中创建也行。在管理员中创建Vxlan网络需要制定个段ID,只要在配置文件中的范围就行。

这里在项目中创建Vxlan网络,就正常创建即可,这里不再演示。

当然如果想要上外网还需要配置DNS:114.114.114.114(这个随意,只要有效即可),IP池还规定一下吧0.100-0.200

1、重点:现在Vxlan网络和外界是完全不互通的,要想胡同需要创建路由器。因此在创建了Vxlan网络之后,接下来就需要创建路由器。

在项目--->路由中创建路由:

2、重点:创建了路由,我们要在路由中创建个接口。

点击路由器名称--->接口会发现有一个接口了,而且IP是:192.168.9.109,

会显示flat网络中的IP地址,问什么?其实是这样的:这是个路由器,是负责实现nat工作的。我现在想使用Vxlan网络去上网,而Vxlan默认是私网IP不可能可外部网络进行通信,但是现在flat能访问外网啊,因此我们在添加个Vxlan网络的接口,将此接口和192.168.9.109接口做映射,其实就是SNAT,DNAT转换,这一样以来Vxlan就能上网了。

创建如下:

这个网关IP通常是172.30.0.1或172.30.0.254

创建好之后,刷新查看,是否是"UP"的状态,如果是"DOWN"的状态,那就是L3-agent代理配置错了。

接下来使用此Vxlan网络创建实例,检测其网络的可通性。

重点结论!!!:

  • 此时在云主机上可以ping通baidu.com,还可以ping controller,compute等节点,也就是说使用Vxlan网络的云主机已经可以访问外网了。
  • 但是!!!在我Win这个物理机上,或者controller,compute等主机上都不能ping通云主机,

这时如果还想实现外面的平通云主机,就需要浮动IP了(Float IP)

(1)在项目中创建浮动IP:

(2)创建好了浮动IP,我们需要将此浮动IP绑定在"vm02-vxlan"云主机上

这样绑定之后,在Win上或者controller,compute上就能ping通云主机了,只不过ping的是192.168.9.101,

此时我们可以ssh连接vm02-vxlan主机上。

shell 复制代码
#需要注意的是,绑定的192.168.9.101浮动IP不会在云主机中显示,云主机是无感知的。
[root@controller ~]# ssh cirros@192.168.9.101
The authenticity of host '192.168.9.101 (192.168.9.101)' can't be established.
RSA key fingerprint is SHA256:pJIDlBRxckl5eeFjVwVT1iJOT1UjqDstgHeqpmmO7uE.
RSA key fingerprint is MD5:3a:51:5e:b2:e2:2d:7c:63:53:b0:b0:79:85:4c:52:11.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.101' (RSA) to the list of known hosts.
cirros@192.168.9.101's password: 
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:7c:16:85 brd ff:ff:ff:ff:ff:ff
    inet 172.30.0.193/24 brd 172.30.0.255 scope global eth0
    inet6 fe80::f816:3eff:fe7c:1685/64 scope link 
       valid_lft forever preferred_lft forever

网络拓扑分析

基于以上实验,形成如下网络拓扑

5、Vxlan使用的一些场景

场景一:同一网络下各子网默认互通

此测试:在同一个Vxlan网络下,其包含的各个子网是否能互通?

答案:默认能互通(标题既是答案)

实验测试:

在vxlan_172.30网络已经有个172.30.0.0/24的网络了,现在在创建个子网:172.30.1.0/24

创建步骤:

  • 创建vxlan_172.30.1

  • 创建路由

  • 基于上述路由创建接口,做NAT映射转换,具体来说时SNAT,因为外部ping不通内部所以没有DNAT,

  • 创建实例,用于检测。为了创建的云主机实例在172.30.1.0/24这个网络下面,我们可以通过指定端口的方式操作。

    在项目--->网络--->网络名称--->端口操作:

  • 创建实例。既然指定了端口,那就直接选端口即可。

场景二:不同网络下的子网不能互通,需要添加静态路由实现

实验步骤:

  • 创建个Vxlan_172.40.0网络(172.40.0.0/24)
  • 基于172.40创建个路由
  • 基于路由创建接口,用于SNAT转换
  • 创建云主机实例

现在172.40.0和172.30.0是不互通的,那如何实现互通?

答案:做静态路由

1、记录下40,30外部网关的IP,在路由器中

40的外部网关IP:192.168.9.145

30的外部网关IP:192.168.9.109

2、添加静态路由,现在40网络上面添加:

项目--->路由--->点击40的路由--->静态路由:

那如上配置之后,在40上就可以ping通30了,但是我们没有在30上配置40的静态路由,因此在30上还不能ping通40

3、添加静态路由,在30上面添加,做法和上面一样,不在演示。

这样不同网络的云主机实例就能互相ping通了。

6、实例的升降配与实例的冷迁移

在定义实例规格时,不建议定义根磁盘大小,如果定义,则将所有规格对磁盘大小定义设置为相同

根磁盘大小可以由镜像上传时定义最小根磁盘大小,也可以在创建实例时指定根磁盘大小。

1、实例升降配时均会重启实例

2、实例升降配时需要手动确认,若需要自动确认,需要在计算节点[DEFAULT]部分增加,如下配置:

  • 计算节点上添加,用于实例升降配自动确认,自动确认时间,0是禁止,1代表1s自动确认:

    resize_confirm_window = 1

3、实例升降配会出现实例迁移(当前所在计算节点资源不够时),所以还需要添加如下参数,同时要配置支持冷迁移或热迁移:

  • allow_resize_to_same_host = true
  • allow_migrate_to_same_host = true

但是通常情况下冷迁移会报错,因为一个计算节点资源不够,会迁移到另一个计算节点上去,但由于计算节点的nova用户不能互相通信,所以我们需要进行配置:

冷迁移配置

1、配置计算节点之间nova用户ssh对等性,即互相访问免密登陆

nova用户在安装nova软件时就已经创建了,只是限制登陆,需要修改为允许登陆,这个可以在/etc/passwd中查看。

如下配置:

shell 复制代码
#设置nova用户可登录
[root@compute01 ~]# usermod -s /bin/bash nova

#给nova用户设置密码,便于后面scp密钥使用,要是不设置密码,还需要切换至root用户去scp密码
[root@compute01 ~]# echo "nova" |passwd --stdin nova

#登陆nova用户
[root@compute01 ~]# su - nova
Last login: Sat Apr 30 10:46:39 EDT 2022 from controller on pts/3
-bash-4.2$ pwd
/var/lib/nova

#生成密钥对
-bash-4.2$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/nova/.ssh/id_rsa): 
Created directory '/var/lib/nova/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/nova/.ssh/id_rsa.
Your public key has been saved in /var/lib/nova/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DO85l2PxWiTRVjORpAYEUrJVRgUEm2sqJz0OSzHc7Mc nova@compute01
The key's randomart image is:
+---[RSA 2048]----+
|      o.=BOo..*o |
|       = + o o.o |
|      o o . =    |
|   . o + . +     |
|    + o S o .    |
|     = = . *     |
|    = * E = o    |
|   . B o + +     |
|    . .   .      |
+----[SHA256]-----+

#在一个计算节点生成密钥以及authorized_keys文件
-bash-4.2$ ssh-copy-id compute01


#把密钥scp至每一个计算节点上面:
-bash-4.2$ scp -rp .ssh/ compute02:~/
                     
#注意scp的文件要保证文件的属性一致
#登陆测试
测试本身,测试非本身的登陆
比如我们在compute01上测试 
-bash-4.2$ ssh compute02        #02的免密登陆
Last login: Sun May  1 10:57:00 2022
-bash-4.2$ exit
logout
Connection to compute02 closed.
-bash-4.2$ ssh compute01        #01的也免密登陆  
Last login: Sun May  1 10:49:23 2022
同样在compute02上也测试一下

2、修改配置文件/etc/nova/nova.conf

shell 复制代码
[DEFAULT]
allow_resize_to_same_host= true      #允许在本机进行迁移
allow_migrate_to_same_host= true
resize_confirm_window=1      #这个和冷迁移关系不大

7、主机聚合

主机聚合(Host Aggregate)允许将硬件进行逻辑分组,并在用户创建实例时能指定对应的组,通常将相同规格硬件计算节点归类在一个组,

1、只有计算节点才能使用主机聚合

2、创建主机聚合时,必须要自定义一个域(可用区/可用域)

3、创建主机聚合时,会自动添加一个元数据avaliability_zone,值默认等于主机聚合名称

4、通过一个计算节点只能归属于一个可用域,即不能同属于两个或两个以上可用域

5、删除主机聚合时,必须先移除该主机聚合组下的所有计算节点,否则无法删除该主机聚合。

6、主机聚合可以让实例创建在指定的计算节点上。大部分情况,实例创建时是由调度器决定创建在哪台计算节点上,但在需要错误排查或编排服务资源分配时,希望能够直接在指定计算节点上创建实例,就可以用到主机聚合来实现。

7、主机聚合可以让管理员对终端用户透明的方式定义计算资源,同时根据目的进行逻辑地分组,当主机分组的元数据与实例类型的元数据匹配,并且使用该类型启动实例时,就会调度主机聚合中的计算节点创建实例。

8、可用域(可用区)是对计算资源的逻辑隔离,用户启动实例时可以选择选择对应的可用域,如果没有自定义可用域,默认为nova域。如果有多个可用域,则用户创建多个实例时可以指定不同的可用域,避免某-个可用域故障带来的问题。

8、主机组与虚拟机调度

主机组与主机聚合作用的对象不同。

主机聚合是针对宿主机计算节点,而主机组是针对虚拟机实例

1、按照关联、不关联、软关联、软不关联四种策略对用户创建的虚拟机进行管理。实现约束虚拟机与虚拟机在物理机上的部署关系。

(1)、关联:将实例创建在同-个计算节点上, 当该计算节点资源不够时就会失败。例如, 2个计算节点,批量创建3个实例, 选择"关联"组,则实例全部创建在其中-个计算节点上, 不会在另-个计算节点若资源不够时将会失败,关联组实例不支持迁移。

(2)、不关联:将实创建在不同计算节点上,当计算节点数等于"不关联"组中实例个数时,再创建实例到"不关联"组就失败。

(3)、软关联:将实例尽量创建在同-个计算节点上,当评估该计算节点资源不够时不会失败,会落到另一个计算节点。

(4)、软不关联:将实例尽量创建在不同计算节点上,当计算节点数量不够时,实例会落到同一个计算节点上。

2、Openstack的虚拟机调度策略默认是用FilterScheduler来实现。通过调度算法实现

(1)、先过滤掉不满足虚机flavor要求的计算节点

(2)、对剩余计算节点进行权重计算

(3)、选取权重值最优的计算节点返回

3、在控制节点上nova.conf中的vailable. filters用于配置可用的fiter,默认所有nova内置的ilter都可以用于过滤操作。 enabled, filters用于指定可用的过滤器。

filter. scheduler将按照enabled. filters值的顺序进行过滤。

[iter. scheduler]

available_ filters=nova.scheduler.fiters.all filters

enabled_fltrs=RtrylilteravailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapaliltieFilter,ImagePropertiesFilter,ServerGroupAtiftinityFilterServerGroupAinityFilter

  1. RetryFilter
    过滤掉已经尝试过调度且失败的节点
  2. AvibiltyZoneFilter
    为提高容灾性和隔离性,可以将计算节点划分到不同的可用域中,Openstack默认只有一 个命名为"nova"的可用域, 所有计算节点默认都是放在"nova"可用域中,用户可以通过主机聚合创建自定义域,在创建实例时可以选择自定义域。
  3. RamFilter
    将不能满足flavor内存的计算节点过滤掉,为了提高系统的资源使用率,Openstack允许计算节点超额使用内存,也就是可以超过实际内存大小,可通过ram. alocation. ration=1.5 配置,默认初始超比率initial ram. alcation. ratio=1.5.同样还有CPU和磁盘超额配置。
    [DEFAULT]
    cpu
    allocation
    ratio=1.0
    ram_ allocation ratio=1.0
    initial .cpu_ allocation_ ratio=16.0
    initial_ ram_ allocation_ ratio=1.5
    、 ComputeFilter
    确保只能正常的计算节点才能被nova-scheduler调度, ComputeFilter 是必须的过滤器
  4. ComputeCapabiltiesFilter
    根据计算节点的特性来过滤,比如计算节点有x86和ARM架构,如果想指定实例部署到x86_ 64架构节点上,就要使用ComputeCapailisiter,.同时还需要在flavor中添加metadata.添加Architecture=>86. .64
    6、ImagePropertiesFilter
    根据所选image的属性来过滤计算节点跟favor类似,image也有metadata, 用于指定其属性。
  5. ServerGroupfityFiltr (亲和性)
    将实例尽量创建在同一个计算节点上,结合主机组实现.要创建一个关联"主机组或"软关联"组。
    03:53

ram,cpu配额的参数配置

shell 复制代码
[root@compute02 ~]# vi /etc/nova/nova.conf
[DEFAULT]
cpu_allocation_ratio=1.0
ram_allocation_ratio=1.0
initial_cpu_allocation_ratio=1.0
initial_ram_allocation_ratio=1.0
相关推荐
mqiqe2 天前
云计算Openstack Neutron
云计算·openstack·perl
mqiqe2 天前
云计算Openstack Keystone
数据库·云计算·openstack
mqiqe4 天前
云计算Openstack Cinder
云计算·php·openstack
mqiqe5 天前
云计算Openstack Glance
云计算·openstack
mqiqe6 天前
云计算Openstack Nova
microsoft·云计算·openstack
mqiqe8 天前
云计算Openstack
云计算·openstack
mqiqe8 天前
云计算Openstack Swift
云计算·openstack·swift
苦逼IT运维9 天前
OpenStack 部署实践与原理解析 - Ubuntu 22.04 部署 (DevStack)
linux·运维·ubuntu·openstack·运维开发·devops
kuuuugua10 天前
2024广东省职业技能大赛云计算——OpenStack镜像、脚本详解
云计算·bash·openstack
qlau200717 天前
基于kolla-ansible在AnolisOS8.6上部署all-in-one模式OpenStack-Train
ansible·openstack