OpenStack组件 本文共有8521个字,关键词: IAAS基础设施即服务,面向运维人员 PAAS平台即服务,面向开发人员 SAAS软件即服务,面向用户终端 服务器虚拟化:将一台物理机服务器做成虚拟机 桌面虚拟化:只提供一个桌面,用户的操作限制在桌面 应用虚拟化:采用B/S架构方式实现,但是代价较大 OpenStack:使用Python写的,通过消息队列进行通信,模块化。 Dashboard:管理界面,通过API调用接口。 Dashboard horizon 基于OpenStack API接口使用Django开发的web管理 Compute nova 通过虚拟化技术提供计算资源池 Networking neutron 实现了虚拟机的网络资源管理 Object storage swift 对象存储,适用于一次写入多次读取,写入后不可更改 Block storage cinder 块存储,提供存储资源池 Identity service keystone 认证管理 Image service glance 提供虚拟镜像的注册和存储管理 Telemetry ceilometer 提供检测和数据库采集计量服务 Openstack通过API的方式调用服务,REST API 调用的方式: curl、firefox plugin、restclient-ui-3.4-jar(java写的在Windows下的工具) 只要能够支持HTTP协议就能够进行调用 Xshell用户信息添加页面上可以对远端主机进行端口的映射(通过22端口将远端服务器端口映射到本地:127.0.0.1:xxxx) 查询请求:get 修改请求:put 云平台的部署要根据用户的需求对各个组件进行选择,参照需要启动多少实例,实例的配置,镜像的数量等对硬件需求进行规划。在生产环境中安装使用种子节点的方式,既作为控制节点又作为种子节点,使用PXE对镜像和软件进行推送。 部署openstack的顺序: ①安装控制节点操作系统和网络配置 ②控制节点安装必要的中间件和相关系统服务 ③控制节点组件安装 ④(SDN)网络节点操作系统安装 ⑤(SDN)网络节点安装必要的中间件和相关系统服务 ⑥(SDN)网络节点组件安装 ⑦计算节点操作系统安装 ⑧计算节点安装必要的中间件和相关系统服务 ⑨计算节点组件安装 CentOS_7上安装OpenStack注意事项: 采用本地yum源构建速度会快很多,可以使用FTP服务器提供服务 关闭NetworkManager 关闭firewalld 关闭selinux 设置主机名并搭建DNS,可以使用host解析,也可使用bind提供服务,controller上搭建 搭建时间服务器,在控制节点上安装。 注意:openstack使用主机名来进行区分,如果某节点主机名被修改会造成不可逆的操作。 OpenStack网络示意图 ![](http://fxme.top/usr/uploads/2019/04/3185605840.png) Keystone验证流程: ![](http://fxme.top/usr/uploads/2019/04/161451935.png) 用户创建虚拟机的流程: ![](http://fxme.top/usr/uploads/2019/04/906618779.png) ~]# keystone token-get #以当前用户身份获取一个token Openstack平台搭建的时候租户、用户、角色的创建流程: 先创建租户 创建用户时指定属于那个租户 创建角色,默认有两个角色:admin(管理员),member(普通用户),角色可自定义 绑定角色,将角色分配到具体的某个用户,这个用户在这个租户下是什么角色 镜像-glance Image identifiers Image_URI(/images/全局唯一的定位符) Image status(对镜像操作的状态) Queued:镜像已经被保留(metadata已经写入数据库,但是还没有上传镜像。) Saving:镜像正在被上传 Active:镜像可以使用 Killed:镜像损坏或者不可用 Deleted:镜像被删除(只有拿着被删除的镜像的ID去查找的时候才会出现,在dashboard上不会显示。) Disk format: Raw:裸数据,二进制组成,占用磁盘较大,启动虚拟机较快。 Vhd:vmware、xen、microsoft、virtualbox支持的格式 Vmdk:vmware发起的开源的磁盘格式 Vdi:virtualbox、QEMU、emulator支持 Iso:主要是归档使用 Qcow2:用于kvm虚拟机上,磁盘支持扩展,磁盘动态变化、支持快照 Container format(容器格式): Bare:裸格式 Ovf:虚拟机格式,使用较多 Glance API用于处理HTTP请求 Glance_DB:metadata for image,存储镜像的元数据信息 Store adapter:image的存储方式由store image决定,通常我们是用文件系统的方式进行存储。 存储的方式可以是filesystem、swift storage、S3(simple storage servers) 亚马逊镜像的存储方式、HTTP storage(也可以将镜像放到HTTP服务器上)。 RDB:ceph(分布式块存储)等存储方式。 Glance镜像的定制: 定制的需求: 包的添加与删除 Linux的优化 支持秘钥登录等预设定功能 首先到官网下载能在openstack上使用的镜像 1. 先创建一个10G的文件 ~]# qemu-img create –f qcow2 image-test.img 10G 对于创建好的文件可以使用file命令查看文件的类型 2. 创建虚拟机 ~]# virsh-install --name VM_NAME --hvm –ram 2048 --vcpus 4 –disk path=/var/tmp/image-test.img size=10,bus=virtio,format=qcow2 --network network:default --acclerate --vnc --vncport=5908 --cdrom /var/tmp/centos-xx-xx.iso -boot cdrom xhell想要看到虚拟机内的图形界面,需要在xshell中开启x11隧道转发(需要manager)通过22端口。 启动起来的操作系统删除网卡的MAC、UUID等硬编码信息(70的配置文件) 禁用防火墙,清空/etc/sysconfig/iptables中的规则信息 默认启用SSH服务 开机自动resize根分区 设置使用SSH密钥对连接 设置YUM源 ~]# yum -y install cloud-init #针对云的运行环境需要使用到的一些功能 ~]# vi /etc/cloud/cloud.conf #通过更改该配置文件可以定义instance启动起来后的一些行为。 ~]# shotdown -h now #修改完成关机,此时需要注意的是不能开机,否则需要重新修改。 将imag-test.img作为镜像上传至glance服务器,镜像制作完成。 使用virtualbox也能够完成镜像的制作 创建vmdk格式的硬盘文件的虚拟机 安装操作系统并进行相应的修改,关机 将vmdk文件上传到Linux主机上进行格式的转换 ~]# qemu-img convert -f vmdk -O raw CentOS_6.vmdk CentOS_6.img #现将vmdk格式的镜像转成raw格式,不能直接转成qcow2的格式 ~]# qemu-img convert -f raw -O qcow2 CentOS_6.img CentOS_6.qcow2 ~]# qemu-img info 镜像名称 #查看镜像的信息 修改镜像中的内容: 使用guestfish工具,需要先安装 ~]# guestfish --rw -a 镜像名 进入guestfish工具环境 >run 启动镜像 >list-fliesystems 3查看磁盘及文件系统类型 >mount /dev/sda1 / #将root挂载到根上 >upload 本地文件 镜像目录下的文件 #上传文件到镜像中,徐志鼎镜像中的文件名,不能自动生成 >download 镜像文件 本地目录下的文件 #将镜像中的文件下载到本地 安装软件等操作不适合在此处进行。 nova核心组件: controller节点组件: nova-api 接口,用于接收http请求 nova-schedule 计算资源调度 nova-conductor 连接数据库的Proxy(避免直连数据库,大量的直连导致数据库的压力无法均衡) nova-conductor 认证 nova-novncproxy vnc proxy(避免直接访问vnc) compute节点组件: nova-compute 负责虚拟机的管理 client: nova-client 向nova发起请求的客户端 nova-manage 运维组件管理操作工具 nova主要是提供计算服务,大致服务框架如下: ![](http://fxme.top/usr/uploads/2019/04/2516307196.png) nova内部组件的交互: 采用RabbitMQ Queues(消息队列),异步通信,组件之间是松耦合关系。 如果采用API的方式,强耦合使得服务的拆解变得困难。 对应的服务只需要监控消息队列,即可完成消息的获取。 ![](http://fxme.top/usr/uploads/2019/04/1159206136.png) nova启动innstance的流程,涉及两个节点: nova:cloud controller nova:compute node 以及其他公用的组件,如glance、swift等 ![](http://fxme.top/usr/uploads/2019/04/2678221917.png) ~]# virsh list --all #查看当前计算节点上的实例 ~]# virsh edit Instance_ID #显示指定实例的VNC端口号 ~]# cd /var/lib/nova/instance/ #该目录下是以虚拟机ID命名的目录,实例启动后存放磁盘的目录。 console.log 启动过程日志 disk 虚拟机的磁盘 libvirt.xml instance描述文件 ./base 为glance下载的镜像 ~]# virsh vncdisplay Instance_ID #显示指定实例的VNC端口号 ~]# qumu-img info /var/lib/nova/instance/base/Image_File #查看镜像文件格式 创建虚拟机常见的错误: 401:认证错误 检查用户名密码是否输入正确 检查认证配置是否正确 409:查看nova服务是否正常运行 No Valid host错误 查看是不是有可用的资源(compute节点) 调高配置资源,或者删除一些无用的主机。 网络不通: 查看dhcp(dnsmasq)、查看路由、查看openswitch服务是不是crash。 查看instance启动流程 编辑计算节点下配置文件 ~]# vim /etc/nova/nova.conf #开启debug,并开启日志 ~]# /etc/init.d/openstack-nova-api restart #重启nova-api服务 OpenStack网络: LInux interface type: TAP/TUN kvm等Hypervisor虚拟网卡的实现 TUN and TAP device have 啊/sys/class/net/tap0/tun-flags file bridge 相当于交换机,所有的物理网卡收到的包都是一样的,每个网卡只抓取自己的数据包 brideg have a /sys/class/net/br0/bridge directory loopback 回环网卡 bridge and loopback interface have 00:00:00:00:00:00 in /sys/class/net/lo/address physical 物理网卡 physical device have a /sys/class/net/eth0/device symlink floast IP(浮动IP)的实现需要物理网卡开启混杂模式(promiscuous mode) "UP BROADCAST RUNING MULTICAST" 网卡信息中显示此条信息表示已开启混杂模式。 依靠dnsmasq服务实现DHCP功能 DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。 LXC:Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。网络隔离,主机上可以配置多个相同IP地址或相同网段的网卡。 叠加网络: 1. 一个数据包封装在另一个数据包内,被封装的包转发到隧道断电后在进行拆装。 2. 叠加网络就是使用这种"包内之包"的技术安全的将一个网络隐藏在另一个网络中,然后将网络区段进行迁移。 VLAN:L2 over L2 GRE:L3 over L3(UDP) VXLAN:L2 over L3(UDP) atp设备: tap设备是kvm虚拟机网卡的实现类型,虚拟机可以通过tap设备和连接在另一端的设备进行通信。 tap设备的查找方式: ~]# cat /etc/libvirt/qumu/instance-XXX.xml #虚拟机xml文件 可以在xml文件中看到 虚拟网络对(VETH,Virtual Ethernet Pair) 将两个网卡直接连接起来,在一端发怵消息,在另一端可以完整的收到,类似于网线的作用,用于连接bridge和switch(不同虚拟网之间的连接)。 虚拟网络对(VETH)设备的查看: ~]# ip a ~]# ethtool -S 设备名 #可以看到成对的VETH设备的index编号是连续的,即成对出现。 Linux Bridge的使用 bridge相当于HUB设备,转发接收到的数据包到所有端口 bridge的查看方式: ~]# brctl show #网桥上有两个设备,一个是连接虚拟机的tap设备,一个是连接open switch的虚拟网卡对,也可以通过虚拟机的xml文件进行查看。 #] cat /etc/libvirt/qemu/instance-xxx.xml #体现在interface标签中 neutron SDN实现: neutron SDN的实现是在计算节点和网络节点上实现的。 实例通过tap设备连接到br-int(open vswitch bridge) ![](http://fxme.top/usr/uploads/2019/04/815655576.png) neutron SDN GRE的实现 br-int与br-tun之间由虚拟网络对连接(patch-tunpatch-int),br-tun是专门用于同其他主机建立隧道的bridge,数据通过建立的隧道到达Network node节点的br-tun(通过指定IP到达),br-tun通过虚拟网络对连接(patch-intpatch-tun)br-int,在network上的br-int上有一个特殊的网口qrXX,它属于br-int网桥,同时它暴露在物理层,连接到br-ex的qgXX,图中红色虚线为同一个namespace,namespace中配置了source NAT规则,在同一个网桥下的eth0物理网卡收到数据包,并将其转发到Internet。 计算节点网络的实现 open switch的使用: 在open switch上可以配置端口和VLAN ~]# ovs-vsctl show #每创建一个虚拟机都会多出四个虚拟网卡 #在compute节点上,网桥以qb开头(连接虚拟机的bridge),q为前一代网络组件名称的简写。 虚拟网络对的识别: qvo:连接到open vswitch qvb:连接到bridge ![](http://fxme.top/usr/uploads/2019/04/1335693674.png) 虚拟机的网卡是由tap设备提供的,tap设备的另一端连接到Linux网桥上,再由虚拟网络对连接到open vswitch,从此tap设备出来的数据包会带有port VLAN tag标记。因此,不同的虚拟机如果属于同一个子网,port ID是一样的,再通过虚拟网络对从open vswitch连接到open vswitch的bridge上,这个bridge是直连物理网卡的,因此和外网是通的,在此处(bridge)会将虚拟机的VLAN转换成物理机的VLAN_ID 网络节点network ~]# ovs-vsctl show #查看open vswitch的网络状态 #当open vswitch接收到数据包的时候会将数据包转发给相同tag标记的port #此处显示的tap设备是DHCPserver的网卡 ~]# ip netns #可以看到3个namespace(一个网络中) #qrouter用于路由,该命名空间中有相应网段的网关(web界面上需要使用amdin查看,因为网络是admin创建的) #namespace名称的后缀是网络的ID ~]# ip netns exec NameSpace ip a #查看namespace中的内容,可以找到与DHCPserver先关的tap设备,因此命名网络空间中的tap设备就是DHCPserver ~]# ps -ef |grep dnsmasq #可查看相关进程,DHCP服务器进程 ~]# ip netns exec qrouterXXX route #W查看命名空间中的路由表 ~]# ip netns exec qrouterXXX iptables -t nat -nL #查看命令空间中的NATO转发规则 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 OpenStack+Ceph 2019-04-27 评论 5476 次浏览