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
相关推荐
aherhuo20 小时前
基于openEuler22.09部署OpenStack Yoga云平台(一)
linux·运维·服务器·openstack
終不似少年遊*5 天前
云计算HCIP-OpenStack01
云原生·云计算·学习笔记·openstack·hcip·虚拟化
終不似少年遊*8 天前
云计算HCIP-OpenStack03
linux·网络·云原生·云计算·学习笔记·openstack·hcip
終不似少年遊*9 天前
云计算HCIP-OpenStack02
云原生·云计算·学习笔记·openstack·hcip
終不似少年遊*9 天前
云计算HCIP-OpenStack04
云原生·云计算·学习笔记·openstack·hcip·虚拟化
終不似少年遊*10 天前
华为云(openstack)常用命令行
linux·服务器·网络·华为云·云计算·操作系统·openstack
ZVAyIVqt0UFji17 天前
openstack内部rpc消息通信源码分析
网络·网络协议·rpc·openstack
four-hour21 天前
openstack 报错合集
openstack
葡萄爱24 天前
构建高可用系统设计OpenStack、Docker、Mesos和Kubernetes(简称K8s)
docker·kubernetes·openstack
four-hour25 天前
四:工具、环境准备-compute node
linux·ubuntu·openstack