首页 文章 精选 留言 我的

精选列表

搜索[openstack],共3159篇文章
优秀的个人博客,低调大师

NFS Volume Provider(Part II) - 每天5分钟玩转 OpenStack(63)

上一节我们将 NFS volume provider 配置就绪,本节将创建 volume。 创建 volume 创建 NFS volume 操作方法与 LVM volume 一样,唯一区别是在 volume type 的下拉列表中选择“nfs”。 点击“Create Volume”,cinder-api,cinder-scheduler 和 cinder-volume 共同协作创建 volume “nfs-vol-1”。这个流程与 LVM volume 一样。 下面我们重点分析 cinder-volume 的日志,看看 NFS volume provider 是如何创建 volume 的。 日志在 /opt/stack/logs/c-vol.log。 cinder-volume 也会启动 Flow 来完成 volume 创建工作,Flow 的名称为 volume_create_manager。 volume_create_manager 首先执行 ExtractVolumeRefTask, OnFailureRescheduleTask, ExtractVolumeSpecTask, NotifyVolumeActionTask 为 volume创建做准备。 然后由 CreateVolumeFromSpecTask 真正创建 volume。 首先 mount 远程 NFS 目录。 执行 stat、du 命令检查 NFS 目录。 执行 truncate 创建 volume 文件。 设置 volume 文件为可读写。 create 操作完成。 Volume 在 NFS 上以文件存在,命名为“volume-<volume ID>”。 GUI volume 列表中可以看到新创建的 volume。 基于 NFS Volume 已经准备就绪,下一节我们其 attach 到 instance。

优秀的个人博客,低调大师

NFS Volume Provider(Part I) - 每天5分钟玩转 OpenStack(62)

cinder-volume 支持多种 volume provider,前面我们一直使用的是默认的 LVM,本节我们将增加 NFS volume provider。 虽然 NFS 更多地应用在实验或小规模 cinder 环境,由于性能和缺乏高可用的原因在生产环境中不太可能使用,但是学习 NFS volume provider 的意义在于:1. 理解 cinder-volume 如何支持多 backend2. 更重要的,可以理解 cinder-volume,nova-compute 和 volume provider 是如何协同工作,共同为 instance 提供块存储。3. 举一反三,能够快速理解并接入其他生产级 backend ,比如 Ceph,商业存储等。下图展示了 cinder、nova 是如何与 NFS volume provider 协调工作的。 NFS Volume Provider就是我们通常说的 NFS Server,提供远程 NFS 目录,NFS Clinet 可以 mount 这些远程目录到本地,然后像使用本地目录一样创建、读写文件以及子目录。 cinder-volume存储节点通过 NFS driver 管理 NFS volume provider 中的 volume,这些 volume 在 NFS 中实际上是一个个文件。 nova-compute计算节点将 NFS volume provider 存放 volume 的目录 mount 到本地,然后将 volume 文件作为虚拟硬盘映射给 instance。 这里有几点需要强调: 在 Cinder 的 driver 架构中,运行 cinder-volume 的存储节点和 Volume Provider 可以是完全独立的两个实体。 cinder-volume 通过 driver 与 Volume Provider 通信,控制和管理 volume。 Instance 读写 volume 时,数据流不需要经过存储节点,而是直接对 Volume Provider 中的 volume 进行读写。 正如上图所示,存储节点与 NFS Volume Provider 的连接只用作 volume 的管理和控制(绿色连线);真正的数据读写,是通过计算节点和 NFS Volume Proiver 之间的连接完成的(紫色连线)。这种设计减少了中间环节,存储节点不直接参与数据传输,保证了读写效率。 其他 Volume Provider(例如 ceph,swift,商业存储等)均遵循这种控制流与数据流分离的设计。 配置 NFS Volume Provider 在实验环境中,NFS volume provider 的 NFS 远程目录为 192.168.104.11:/storage cinder-volume 服务节点上 mount point 为 /nfs_storage。 在 /etc/cinder/cinder.conf 中添加 nfs backend。 enabled_backends = lvmdriver-1,nfs 让 cinder-volume 使用 nfs backend [nfs] 中详细配置 nfs backend。包括: a) 指定存储节点上 /nfs_storage 为 nfs 的 mount point。 nfs_mount_point_base = /nfs_storage b) 查看 /etc/cinder/nfs_shares 活动 nfs 共享目录列表。 nfs_shares_config = /etc/cinder/nfs_shares,其内容为 列表中只有 192.168.104.11:/storage。如果希望有多个 nfs 共享目录存放 volume,则可以添加到该文件中。 c) nfs volume driver。 volume_driver=cinder.volume.drivers.nfs.NfsDriver d) 设置 volume backend name。在 cinder 中需要根据这里的 volume_backend_name 创建对应的 volume type,这个非常重要。 volume_backend_name = nfs 重启 cinder-volume,cinder service-list 确认 nfs cinder-volume 服务正常工作。 创建 nfs volume type。 打开GUI页面Admin -> System -> Volumes -> Volume Types,点击 “Create Volume Type”。 命名 nfs,点击“Create Volume Type”。 选择 nfs volume tyep,点击下拉菜单“View Extra Specs” 点击“Create”,Key 输入 volume_backend_name ;Value 输入 nfs。 NFS volume provider 准备就绪,下一节我们将创建 NFS 为 backend 的 volume。

优秀的个人博客,低调大师

Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)

上一节我们讨论了 attach volume 操作中 cinder-api 的工作,本节讨论 cinder-volume 和 nova-compute 如何将 volume attach 到 Instance。 cinder-volume 初始化 volume 的连接 cinder-volume 接收到 initialize_connection 消息后,会通过 tgt 创建 target,并将 volume 所对应的 LV 通过 target export 出来。日志为 /opt/stack/logs/c-vol.log 下面的日志显示:通过命令 tgtadm --lld iscsi --op show --mode target 看到已经将 1GB(1074MB)的 LV /dev/stack-volumes-lvmdriver-1/volume-1e7f6bd7-ce11-4a73-b95e-aabd65a5b188 通过 Target 1 export 出来了。 Initialize connection 完成。 nova-compute 将 volume attach 到 instance 计算节点作为 iSCSI initiator 访问存储节点 Iscsi Target 上的 volume,并将其 attach 到 instance。日志文件为 /opt/stack/logs/n-cpu.log nova-compute 依次执行 iscsiadm 的 new, update, login, rescan 操作访问 target 上的 volume。 计算节点将 iSCSI target 上的 volume 识别为一个磁盘文件。 然后通过更新 instance 的 XML 配置文件将 volume 映射给 instance。 我们也可以通过 virsh edit 查看更新后的 XML。 可以看到,instance 增加了一个类型为 block 的虚拟磁盘,source 就是要 attach 的 volume,该虚拟磁盘的设备名为 vdb。 手工 Shut off 并 Start instance,通过 fdisk -l 查看到 volume 已经 attach 上来,设备为 vdb GUI 界面也会更新相关 attach 信息 现在如果我们在存储节点执行 tgt-admin --show --mode target,会看到计算节点作为 initiator 已经连接到 target 1。cinder-volume 刚刚创建 target 的时候是没有 initiator 连接的,大家可以将下面的截图与之前的日志做个对比。 以上就是 attach volume 的全部内容,下一节我们讨论 detach 操作。

优秀的个人博客,低调大师

Create Volume 操作(Part III) - 每天5分钟玩转 OpenStack(52)

本节是创建 Volume 的第三部分,也是最后一部分:cinder-volume 的处理过程。 第一部分和第二部分可以参考前面两个小节。cinder-volume 通过 driver 创建 volume,日志为 /opt/stack/logs/c-vol.log。 与 cinder-api 和 cinder-scheduler 执行方式类似,cinder-volume 也启动了一个 Flow 来完成 volume 创建工作,Flow 的名称为 volume_create_manager。 volume_create_manager 首先执行 ExtractVolumeRefTask, OnFailureRescheduleTask, ExtractVolumeSpecTask, NotifyVolumeActionTask 为 volume 创建做准备。 接下来 CreateVolumeFromSpecTask 执行 volume 创建任务。 因为 volume provider 为 LVM, CreateVolumeFromSpecTask 通过 lvcreate 命令在 VG stack-volumes-lvmdriver-1 中创建了一个 1G 的 LV,cinder-volume 将这个 LV 作为volume。 新创建的 LV 命名为“volume-1e7f6bd7-ce11-4a73-b95e-aabd65a5b188”,其格式为“volume-<volume ID>”。 最后,CreateVolumeOnFinishTask 完成扫尾工作。 至此,volume 成功创建,Flow volume_create_manager 结束。 下一节我们讨论如何将新建的 volume 挂到 instance 上,即 attach 操作。

优秀的个人博客,低调大师

Create Volume 操作(Part II) - 每天5分钟玩转 OpenStack(51)

上一节我们讨论了 Cinder 创建 Volume 的第一部分,cinder-api 的操作,本节继续第二部分,cinder-scheduler 调度工作。 cinder-scheduler 执行调度 cinder-scheduler 执行调度算法,通过 Filter 和 Weigher 挑选最优的存储节点 日志为 /opt/stack/logs/c-sch.log。 cinder-scheduler 通过 Flow volume_create_scheduler 执行调度工作。 该 Flow 依次执行 ExtractSchedulerSpecTask 和 ScheduleCreateVolumeTask。 主要的 filter 和 weighting 工作由 ScheduleCreateVolumeTask 完成。 经过 AvailabilityZoneFilter, CapacityFilter, CapabilitiesFilter 和 CapacityWeigher 的层层筛选,最终选择了存储节点 devstack-controller@lvmdriver-1#lvmdriver-1。 Flow volume_create_scheduler 完成调度,状态变为 SUCCESS。 cinder-scheduler 发送消息 cinder-scheduler 发送消息给 cinder-volume,让其创建 volume 源码 /opt/stack/cinder/cinder/scheduler/filter_scheduler.py,方法为 schedule_create_volume。 下一节我们讨论 Create Volume 的最后一部分: cinder-volume 的处理过程。

优秀的个人博客,低调大师

LVM 类型的 Storage Pool - 每天5分钟玩转 OpenStack(8)

LVM 类型的 Storage Pool 不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上 VG 中的 LV 也可以作为虚拟磁盘分配给虚拟机使用。 不过,LV 由于没有磁盘的 MBR 引导记录,不能作为虚拟机的启动盘,只能作为数据盘使用。 这种配置下,宿主机上的 VG 就是一个 Storage Pool,VG 中的 LV 就是 Volume。 LV 的优点是有较好的性能;不足的地方是管理和移动性方面不如镜像文件,而且不能通过网络远程使用。 下面举个例子。 首先,在宿主机上创建了一个容量为 10G 的 VG,命名为 HostVG。 然后创建了一个 Storage Pool 的定义文件 /etc/libvirt/storage/HostVG.xml,内容为 然后通过 virsh 命令创建新的 Storage Pool “HostVG” 并启用这个 HostVG 现在我们可以在 virt-manager 中为虚机 kvm1 添加 LV 的虚拟磁盘了。 点击 Browse 可以看到 HostVG 已经在 Stroage Pool 的列表中了,选择 HostVG 为 volume 命名为 newlv 并设置大小 100MB 点击 Finish,newlv 创建成功 点击 Choose Volume 点击 Finish 确认将 newlv 作为 volume 添加到 kvm1 新 volume 添加成功 在宿主机上则多了一个命名为newlv的LV 其他类型的Storage Pool KVM 还支持 iSCSI,Ceph 等多种类型的 Storage Pool,这里就不一一介绍了,最常用的就是目录类型,其他类型可以参考文档 http://libvirt.org/storage.html 下一节我们将开始讨论 KVM 的网络虚拟化原理

优秀的个人博客,低调大师

openstack 制作大于2TB根分区自动扩容的CENTOS镜像

制作镜像的时候默认分的是30G空间 qemu-img create -f raw centos.img 30G 看官网文档安装完系统需要安装cloud-init和clout-utils包,本人安装了完这个工具 但是发现启动系统以后,root根分区开机只能自动扩展到900G或者500G。 后来经查需要使用GPT分区,根分区才能到2TB空间。 于是从做镜像,选择GPT方式安装操作系统。(有关如何用GPT方式安装系统,网上可以查查资料 很多的) 分区的时候 我是分了3个分区swap boot 和根分区。 也就是 vda1 /swap vda2 /boot vda3 / 当系统装完以后需要执行以下命令: yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y cloud-init cloud-* yum -y parted yum -y gdisk 网卡设置为dhcp cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=”eth0″ BOOTPROTO=dhcp ONBOOT=”yes” rm -rf /etc/udev/rules.d/70-persistent-net.rules 这个时候需要重启系统 否则不会出现/var/lib/cloud/scripts的目录 下面的步骤是下一次启动的时候执行的分区脚本 之所以在下面这个目录创建的含义是,第1次启动会执行这个目录下的脚本,只执行一次,在重启系统的时候这个脚本就不会再执行了,如果临时重启了系统那需要 删除/var/lib/cloud/scripets/seem/config_scripts_per_once.once这个文件,否则下次启动的滞 后将不会执行分区的命令脚本了 cd /var/lib/cloud/scripets/per-once 创建一个脚本growpart.sh 脚本内容如下 !#/bin/bash growpart -v /dev/vda 3 reboot 这里的是growpart -v /dev/vda 3 这个3的意思是我上面分区的时候的根分区的卷标.所以分区的时候请正确选择你的根分区卷标号,有可能你的是4 或者5 记得 df 看下 然后关闭系统 打包上传镜像就可以开机自动扩容到2TB以上的分区了,第一次启动的时候系统过程会很慢,需要等待20分钟,因为在扩容分区 以上就完成了操作。。 我不是一个爱写BLOG的人,若有不清楚地方 留言吧

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册