目录
[1)关于浮动 IP 地址](#1)关于浮动 IP 地址)
[2.1、部署 OpenStack](#2.1、部署 OpenStack)
[2.4、绑定浮动 IP](#2.4、绑定浮动 IP)
一、案例分析
1.1、案例概述
OpenStack 大部分管理功能都可以通过 Dashboard 进行操作,熟练掌握 Dashboard 操作对于运维工程师十分重要。Dashboard 图形化的操作界面将简化管理任务,同时降低出错概率。本章通过云主机的创建过程,学习 Dashboard 界面的基本操作,同时学习网络、路由、实例类型、镜像、安全组、卷、密钥对、快照等功能的操作方法。
1.2、案例前置知识点
1)关于浮动 IP 地址
浮动 IP 地址是 OpenStack 引入的一个非常重要的概念,类似于 NAT 转换中的内部全局地址,可以被外部网络所访问。OpenStack 中的云主机网络一般是受 NAT 保护的网络,即内部网络通过虚拟路由器(提供 NAT 功能)连接外部网络。当需要从外部访问云主机网络时,需要使用浮动 IP 地址实现。其原理是通过目的地址转换或 NAT 映射实现外部网络访问云主机网络。浮动 IP 地址是可以从外部访问的 IP 地址列表,通常是外部网络的 IP 地址段。浮动 IP 地址不能分配给云主机使用,但是可以通过绑定云主机,实现外部网络访问云主机,如通过 SSH 协议管理云主机。当该云主机不需要通过外部网络访问时,管理员可以随时将该浮动 IP 地址分配给其他云主机使用。浮动 IP 地址机制为云用户提供了很大灵活性,也为系统管理员降低了安全风险。
2)关于快照
OpenStack 中,快照功能有别于传统 VMware 或者 KVM 的快照,它是以创建镜像的方式保存在 Glance 中。通过对云主机镜像的转换和复制,生成一个全新的镜像。 该镜像和云主机无任何关联,但可以通过该镜像创建一个全新的云主机,从而实现云主机的迁移与备份。OpenStack 快照不包含任何快照链信息,只保留磁盘信息,无法回滚至快照点。对 OpenStack 而言,实例可以做快照、卷也可以做快照。
1.3、案例环境
1)本案例实验环境
本章节的实验测试机需确保已禁用 Firewalld 和 SELinux 功能,并且可以成功连接互联网,具体硬件环境如下表所示。
|----------------|----------------|---------|--------|--------|------------------|
| IP 地址 | 系统版本 | CPU | 内存 | 磁盘 | OpenStack 版本 |
| 192.168.23.211 | CentOS7.6(64位) | 4核 | 8GB | 100GB | Train 版本 |
2)案例需求
本章案例的需求如下
- 创建云主机;
- 使云主机可以访问外部网络;
- 外部网络可以通过 SSH 协议免密码访问云主机;
- 云主机挂载新卷;
- 云主机创建快照;
- 创建 CentOS 镜像;
3)案例实现思路
本章案例的实现思路如下
- 准备一键式安装 OpenStack 环境;
- 创建网络和路由;
- 创建实例;
- 绑定浮动 IP 地址;
- 添加安全组规则;
- 创建密钥对;
- 创建卷挂载及使用;
- 管理快照;
- 创建镜像;
二、案例实施
2.1、部署 OpenStack
部署环境过程请参考"前一篇 OpenStack 入门体验"章节。此处不再详细阐述。完成后使用管理员账号登录 OpenStack 的 Web 控制台。
2.2、创建网络和路由
通过 packstack 部署 OpenStack 环境成功后,默认已经配置了网络、路由、实例类型以及镜像等功能,并且可以直接使用,以方便直接体验 OpenStack。本章主要带领读者学习 OpenStack 各功能块的实现方法。所以首先删除默认创建的网络,再重新创建新的网络。
1)删除默认的网络
OpenStack 安装完成后默认会有两个网络,分别是外部网络 public(172.24.4.0/24)、内部网络 private(10.0.0.0/24)。外部网络不能直接删除,会提示报错信息,原因是存在默认的路由器(demo 项目)且已经连接到该网络。在删除之前应该首先删除连接该网络的路由器接口,或者直接删除存在的路由器。管理员用户登录 OpenStack 控制台后,无法在"项目"选项卡中配置 demo 项目下的路由器。需 要进入"管理员"选项卡。
控制台中依次单击"管理员"→"网络"→"路由"选项卡,选中虚拟路由器 route1 前面的复选框,并单击右上角的"删除路由"按钮,如图 1 所示。
图 1 删除路由
删除路由器后,依次单击"管理员"→"网络"→"网络"选项卡,选中默认存在的 public 和 private 网络,并单击右上角的"删除网络"按钮,删除默认存在的网络,如图 2 所示。
图 2 删除网络
至此,完成了网络和路由器的删除操作。
2)创建网络和路由
创建云主机之前,首先要创建用于连接云主机的内部网络,以及用于实现云主机访问外部网络的路由器和外部网络。创建步骤为先创建外部网络和内部网络以及对应的子网,再创建路由器连接外部网络和内部网络。创建外部网络只能在"管理员"→"网络"→"网络"选项卡中操作,创建内部网络可以在"管理员"→"网络"→"网络"或"项目"→"网络"→"网络"选项卡中操作。
- 创建网络
创建外部网络:
依次单击"管理员"→"网络"→"网络"选项卡,完成后单击右上角"+创建网络"按钮, 弹出创建网络界面,在"名称"字段填写 public,"项目"选择 admin,"供应商网络类型" 字段选择 Flat,物理网络填写"extnet",并勾选"外部网络"复选框。完成后单击"下一 步"按钮,如图 3 所示。
图 3 创建外部网络
外部网络设置完成后,在创建子网页面,依次填写"子网名称"、"网络地址"和"网关 IP"输入框。其中"网络地址"处为云主机所在的内部网络的 IP 地址段,可以由管理员自行定义。完成后单击"下一步"按钮,如图 4 所示。
图 4 填写子网信息
注意:"网关 IP"字段为空表示默认使用网络中第一个 IP 地址,如 X.X.X.1,也可以自行指定其他 IP 地址。如果不需要云主机通过该网络访问其他网络,可以勾选"禁用网关"复选 框。
在"子网详情"选项卡中,取消勾选"激活 DHCP"复选框,其他字段可以保持默认设置,因为外部网络和云主机网络属于不同的网段,也不需要给云主机分配 IP 地址、 DNS 等参数。直接单击"创建"按钮,如图 5 所示。
图 5 填写子网详情信息
页面将返回到 public 网络的子网列表页面,显示当前创建成功的子网信息,如图 6 所示。
图 6 查看子网列表
创建内部网络:
外部网络创建成功后,下面开始创建内部网络。内部网络用于连接云主机实例, 建议配置 DHCP,用于向云主机分配网络参数。
依次单击"项目"→"网络"→"网络"选项卡,页面中间将显示之前创建成功的外部网 络"public"。单击右上角"+创建网络"按钮,开始创建内部网络。在弹出的创建网络页面,填写"网络名称"为 private,确保选中"创建子网"复选框,完成后单击"下一步"按钮,如图 7 所示。
图 7 创建云主机网络
在接下来的"子网"选项卡页面,根据管理员规划,依次填写"子网名称"、"网络地址"以及"网关 IP"输入框。"网关 IP"输入框留空默认使用网络中第一个 IP 地址。如果不需要该网络中的云主机访问外部网络,可以勾选"禁用网关"复选框。完成后单击"下 一步"按钮,如图 8 所示。
图 8 填写子网信息
在"子网详情"选项卡页面,确保勾选"激活 DHCP"复选框,并填写"分配地址池" 和"DNS 服务器"输入框。配置该网络可以向云主机分配 IP 地址和 DNS 地址。完成后单击"已创建"按钮,如图 9 所示。
图 9 填写子网详情信息
完成后将返回网络列表页,显示当前已经创建成功的网络,如图 10 所示。
图 10 查看网络列表
- 创建路由
网络创建完成后,还需要创建路由器实现内部网络和外部网络之间的转发。
依次单击"项目"→"网络"→"路由"选项卡,并单击页面右上角"+新建路由"按钮,在弹出的"新建路由"页面,填写"路由名称"输入框,并选择外部网络为之前创建的"public"。 完成后,单击"新建路由"按钮,新创建的路由器默认开启 SNAT 功能,如图 11 所示。
图 11 新建路由
完成后将返回到路由列表页面。显示当前创建成功的路由器信息,如图 12 所示。
图 12 查看路由列表
成功创建路由并选择外部网络之后,将自动创建连接外部网络的接口,还需创建连接内部网络的接口。单击路由器名称"route"超链接,进入路由详细信息页面。单击 "接口"选项卡,并单击页面右上角"+增加接口"按钮。在弹出的"增加接口"页面中,"子 网 " 下拉菜单中选择之前创建成功的内部网 络 "private:192.168.1.0/24(private_subnet)","IP 地址"留空默认为 private 网络中配置的网关地址。完成后,单击"提交"按钮,如图 13 所示。
图 13 增加路由接口
页面将返回到路由器接口列表页面,显示当前的路由器接口。如果接口状态显示 为"Down",如图 14 所示。可刷新页面,正常状态为"运行中"。
图 14 查看接口列表
至此,网络和路由创建完成。
2.3、创建实例
Packstack 一键部署 OpenStack 完成后,默认存在实例类型和镜像配置。实例类型的作用是对云主机进行资源限制。镜像用于生成云主机操作系统。当存在网络、路 由、实例类型以及镜像之后,就可以创建云主机了。不过在创建之前,要先检查下"项目"→"计算"→"镜像"选项卡下的 cirros 这个镜像的大小,正常大小为十几兆。如果为几百 K,请参照前面章进行替换。
依次单击"项目"→"计算"→"实例"选项卡,页面右边单击"创建实例"按钮,在弹出的创建实例页面,填写"实例名称"为 test。完成后单击"下一步"按钮,如图 15 所示。
图 15 创建云主机(一)
在"源"选项卡页面,"选择源"下拉菜单中选择"镜像",创建新卷位置选择"不"(如果需要持久化,选择"是")。在"可用配额"下面的镜像列表中,单击名称为"cirros"镜像右边的箭头,确保其位于已分配下面。完成后单击"下一步"按钮,如图 16 所示。
图 16 创建云主机(二)
在"实例类型"选项卡页面中间区域,单击资源占用最少的"m1.tiny"实例类型右边的箭头,确保其位于已分配下面。完成后单击"下一步"按钮,如图 17 所示。
图 17 创建云主机(三)
在"网络"选项卡页面中间,单击之前创建的内部网络"private"右边的箭头,确保其位于已分配下面。 当完成"详情"、"源"、"实例类型"、"网络"四个必需选项卡配置之后,其他可选配置选项卡可保持默认,直接单击"创建实例"按钮,如图 18 所示。
图 18 创建云主机(四)
页面将返回到实例列表页面,并基于之前的配置创建实例,创建的实时信息可查看"任务"一栏中的动态显示内容。创建成功后云主机将获得一个 IP 地址,如图 19 所示。
图 19 创建云主机(五)
在实例"test"右边"创建快照"旁边的下拉菜单中选择"控制台",进入云主机控制台, 根据终端提示信息键入用户名和密码登录云主机控制台,并查看当前云主机的 IP 地 址,如图 20 所示。
图 20 查看云主机 IP 地址
测试从云主机 ping 外网,比如 baidu.com,发现网络不通。命令如下:
bash
$ ping www.baidu.com
$
上述 ping 命令无任何输出结果,说明网络不通。在前面创建外部网络时,指定的外部网络网关地址是 172.16.1.1,如图 4 所示。所以需要在宿主机上存在该网关地址。需先通过 ifconfig 命令检查该 IP 地址是否存在,如果不存在,可执行命令如下。
bash
[root@openstack ~]# ifconfig br-ex 172.16.1.1 netmask 255.255.255.0 up
或者仿照前面章节创建"ifcfg-br-ex"网卡配置文件来定义该 IP 地址。
宿主机的 br-ex 网卡用于连接 OpenStack 虚拟网络,但是虚拟网络访问互联网必须经过宿主机的真实网卡 ens32,宿主机在 br-ex 和 ens32 之间转发流量可以通过三种方式。
- 将 ens32 网卡加入 br-ex 网桥,取消 ens32 配置的 IP 地址,配置 br-ex 为宿主机外部网络的 IP 地址段,这种方式需要修改外部网络 public 的网段地址。
- 开启宿主机的路由功能,通过路由转发数据,同时配置宿主机的回包路由。
- 配置宿主机的 NAT 功能,通过路由加地址转换转发数据,不需要回包路由,不需要修改现有网段。
下面基于第三种方式进行介绍。添加一条 nat 规则。为了避免重启后规则消失, 可以将其写到 iptables 配置文件。注意:-o ens32 参数需要根据实际的宿主机网卡名称来配置。命令如下。
bash
[root@openstack ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@openstack ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o ens32 -m comment --comment "000 nat" -j MASQUERADE
[root@openstack ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
再次测试云主机和互联网的连通性。执行命令如下所示。
上述命令输出结果显示云主机已经能够成功访问互联网。
2.4、绑定浮动 IP
经过前面的配置,云主机已经可以访问外部网络,但是外部网络还不能访问云主机。无论是宿主机还是外部网络设备,都没有云主机网络的路由条目。根据之前的介绍,创建的虚拟路由器连接外部网络后默认启用 SNAT 功能。若要访问 NAT 设备身后的网络,需要通过配置 NAT 映射或目标地址转换实现,即需要配置浮动 IP 地址。
依次单击"项目"→"网络"→"浮动 IP"选项卡,在页面右边单击"分配 IP 给项目"按钮,将弹出分配浮动 IP 页面,在页面中选择"资源池"为"public",并单击"分配 IP"按 钮,如图 21 所示。
图 21 分配浮动 IP 地址
页面将返回到浮动 IP 列表页面,显示成功分配的浮动 IP 地址列表,如图 22 所示。
图 22 浮动 IP 地址列表
图 22 中显示已经成功分配了 IP 地址 172.16.1.175。下面将该浮动 IP 地址分配给云主机。单击浮动 IP 地址右边的"关联"按钮,并在弹出的"管理浮动 IP 的关联" 页面中,选择"待连接的端口"下拉菜单,并选择"test"云主机。完成后单击"关联"按钮, 如图 23 所示。
图 23 管理浮动 IP 地址的关联
根据浮动 IP 列表页面中的显示信息可得知,已经成功的将浮动 IP 地址和云主机绑定,如图 24 所示。
图 24 浮动 IP 地址分配列表
切换到"项目"→"计算"→"实例"选项卡,可以看到云主机"test"绑定了浮动 IP 地址 172.16.1.175,如图 25 所示。
图 25 查看云主机的更新信息
绑定浮动 IP 地址后,理论上可以从外部网络访问云主机,但是还需要配置安全组规则。
2.5、添加安全组规则
安全组的作用是保护云主机的安全,OpenStack 有一个默认安全组 default,从数据包方向分为入口和出口,访问云主机的入口流量必须要经过安全组规则放行流量。
依次单击"项目"→"网络"→"安全组"选项卡,页面中间显示默认的安全组规则 default,单击其右边的"管理规则"按钮,如图 26 所示。
图 26 默认安全组规则
在 default 安全组规则列表页面,默认存在四条规则,如图 27 所示。
图 27 管理安全组规则
单击页面右上角"+添加规则"按钮,在弹出的"添加规则"页面,选择"规则"为"ALL ICMP","方向"选择"入口",其他保持默认,完成后单击"添加"按钮,如图 28 所示。
图 28 添加 ICMP 规则
页面将返回到 default 安全组规则列表页面,最后部分显示添加成功的安全组规则,如图 29 所示。
图 29 查看 ICMP 规则
配置完浮动 IP 地址和安全组规则后,尝试从外部网络(宿主机以外的网络,此处以宿主机代替)访问云主机。访问的目标云主机所绑定的浮动 IP 地址。测试的命令结果如下所示。
bash
[root@openstack ~]# ping 172.16.1.175
PING 172.16.1.175 (172.16.1.175) 56(84) bytes of data.
64 bytes from 172.16.1.175: icmp_seq=1 ttl=63 time=2.83 ms
64 bytes from 172.16.1.175: icmp_seq=2 ttl=63 time=3.26 ms
64 bytes from 172.16.1.175: icmp_seq=3 ttl=63 time=26.2 ms
为了可以让管理员从外部网络通过 SSH 协议管理云主机,同理与添加 ICMP 规则相同。通过添加规则,放行外部网络访问云主机的入口 SSH 协议流量。添加 SSH 规则页面如图 30 所示,查看 SSH 规则如图 31 所示。
图 30 添加 SSH 规则
图 31 查看 SSH 规则
管理员在宿主机尝试通过 SSH 命令远程登录云主机,测试命令及结果如下:
bash
[root@openstack ~]# ssh cirros@172.16.1.175
The authenticity of host '172.16.1.175 (172.16.1.175)' can't be established.
ECDSA key fingerprint is SHA256:dc9t9DZqWvpcBu2pRt8OZpLZgDCat9SizG+pf/BfY60.
ECDSA key fingerprint is MD5:50:ee:ff:10:e4:4c:e8:2f:24:63:08:42:99:8a:9b:85.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.175' (ECDSA) to the list of known hosts.
cirros@172.16.1.175's password:
$ ifconfig
eth0 Link encap:Ethernet HWaddr FA:16:3E:CE:7F:AE
inet addr:192.168.1.189 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fece:7fae/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1442 Metric:1
RX packets:164 errors:0 dropped:0 overruns:0 frame:0
TX packets:217 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:18771 (18.3 KiB) TX bytes:20089 (19.6 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
$
以上测试表明,管理员可以通过 SSH 协议远程连接云主机。
2.6、创建密钥对
密钥对是 OpenStack 提供的一个安全认证功能,用户可以在创建云主机的时候选择添加密钥对,管理员在访问云主机时可以免密码登录。免密码登录并不意味着安全性的降低,因为密钥对的攻破难度比密码要大很多。
依次打开"项目"→"计算"→"密钥对"选项卡,在密钥对列表页面单击"+创建密钥对" 按钮,如图 32 所示。
图 32 查看密钥对
在"创建密钥对"页面,输入密钥对名称"my-auth",秘钥类型选择 SSH 密钥。完成后单击"创建密钥对"按钮,如图 33 所示。
图 33 创建密钥对
秘钥对创建完成后,浏览器会自动下载 my-auth.pem 文件。my-auth.pem 将是该云主机的私钥文件。通过云主机绑定该密钥对,并复制该私钥文件到管理端,从而实现远程免密码连接云主机。下面通过宿主机使用密钥登录云主机。
在宿主机上创建 cirros 用户并设置权限,运行命令如下。
bash
[root@openstack ~]# useradd cirros
[root@openstack ~]# mkdir /home/cirros/.ssh
将 my-auth.pem 文件上传到宿主机/home/cirros/.ssh 目录下,重命名为 id_rsa 文件。命令如下。
bash
[root@openstack ~]# mv /home/cirros/.ssh/my-auth.pem /home/cirros/.ssh/id_rsa
[root@openstack ~]# chmod 700 /home/cirros/.ssh/
[root@openstack ~]# chown -R cirros.cirros /home/cirros/.ssh/
[root@openstack ~]# chmod 600 /home/cirros/.ssh/id_rsa
要使用密钥对,需要重新创建一台云主机。如果资源不够可删除之前创建的测试云主机。默认会自动选择刚刚创建的密钥对,完成后绑定浮动 IP 地址 172.16.1.175 到云主机。尝试在宿主机使用密钥对登录云主机,执行命令如下所示。
bash
[root@openstack ~]# su - cirros
[cirros@openstack ~]$ ssh 172.16.1.175
The authenticity of host '172.16.1.175 (172.16.1.175)' can't be established.
ECDSA key fingerprint is SHA256:6SRAmG5Xfi7m93QmOGZiTCOB+E2UHWUmkL7XpfV1Kog.
ECDSA key fingerprint is MD5:78:10:fc:e8:29:41:a5:0f:13:69:91:08:99:bd:bc:f2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.175' (ECDSA) to the list of known hosts.
$ ifconfig
eth0 Link encap:Ethernet HWaddr FA:16:3E:89:20:4F
inet addr:192.168.1.120 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fe89:204f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1442 Metric:1
RX packets:103 errors:0 dropped:0 overruns:0 frame:0
TX packets:152 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14023 (13.6 KiB) TX bytes:14598 (14.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
$
在上述命令中,通过 ssh 工具远程连接云主机没有输入任何密码信息,但是不具备私钥文件的客户端无法正常通过 SSH 协议远程连接云主机。
2.7、创建及使用卷挂载
OpenStack 通过 Cinder 提供块存储服务。管理员可根据需要对云主机添加卷。 卷是一个块设备,由云主机挂载使用。本章的案例环境是一个单机环境。如果启用卷设备,那么 Cinder 将会占用所有的可用空间。
首先创建一个卷,依次打开"项目"→"卷"→"卷"选项卡,页面右边单击"+创建卷" 按钮,如图 34 所示。
图 34 查看卷信息
在弹出的"创建卷"页面中,填写卷名称为"test-lv",大小为"2",其他保持默认。 完成后单击"创建卷"按钮,如图 35 所示。
图 35 创建卷
页面将返回到卷列表页面,显示当前创建成功的卷信息,如图 36 所示。
图 36 查看卷列表
卷创建好之后,还需要和实例关联才可以使用。单击图 36 中的"编辑卷"旁边的 下拉菜单,选择"管理连接"。在弹出的"管理已连接卷"页面,选择"连接到实例"为之前 创建的云主机"test"。完成后单击"连接卷"按钮,如图 37 所示。
图 37 管理已连接卷
在随后的卷列表页面,显示当前卷已经连接到云主机 test 上的/dev/vdb 设备,如 图 38 所示。
图 38 卷列表页面
进入到 test 云主机控制台,执行 fdisk 命令查看磁盘情况。如下所示。
bash
$ sudo fdisk -l
Disk /dev/vda: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F05EDE64-4EFD-477A-B01E-B37CCD5D3EB4
Device Start End Sectors Size Type
/dev/vda1 18432 2097118 2078687 1015M Linux filesystem
/dev/vda15 2048 18431 16384 8M EFI System
Partition table entries are not in disk order.
Disk /dev/vdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5a692294
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 4194303 4192256 2G 83 Linux
在云主机控制台中,对/dev/vdb 进行分区、格式化,并挂载到/mnt 目录。命令如下。
bash
$ sudo fdisk /dev/vdb //过程略
$ sudo mkfs /dev/vdb1
$ sudo mount /dev/vdb1 /mnt
$ df -h
Filesystem Size Used Available Use% Mounted on
/dev 231.7M 0 231.7M 0% /dev
/dev/vda1 980.0M 32.9M 905.8M 4% /
tmpfs 238.8M 0 238.8M 0% /dev/shm
tmpfs 238.8M 84.0K 238.7M 0% /run
/dev/vdb1 2.0G 3.0M 1.9G 0% /mnt
在/mnt 目录写入一个 test.txt 文件,内容如下。
bash
$ sudo vi /mnt/test.txt
$ sudo cat /mnt/test.txt
2G
注意:创建卷的时候指定的容量大小并不会立即占用磁盘空间,当卷中有数据时才会真正占用。
当云主机的卷空间不足时,需要对卷进行扩容,扩容之前首先对卷进行分离。在卷列表页面单击卷的"管理连接",在弹出的"管理已连接卷"页面,单击卷对应的"分离 卷"按钮,如图 39 所示。
图 39 管理已连接卷页面
在确认分类卷页面继续单击"分离卷"按钮,图 40 所示。
图 40 确认分离卷
当前卷断开后,在对应的下拉菜单中选择"扩展卷"。在弹出的扩展卷页面中,填写卷的新大小为"3"。完成后单击"扩展卷"按钮,如图 41 所示。
图 41 扩展卷页面
返回到卷列表页面,页面中卷大小信息已经更新为 3GiB,如图 42 所示。
图 42 卷列表页面中更新卷的大小
继续在卷对应的下拉菜单中选择"管理连接",重新连接到云主机实例"test",如图 43 所示。
图 43 重新连接实例
登录 test 云主机控制台,尝试访问之前创建的 test.txt 文件,test.txt 文件已经不存在。同时,新出现了 vdb 分区,其大小为 3GB,执行命令和结果如下所示。
bash
$ ls /mnt/test.txt
ls: /mnt/test.txt: No such file or directory
$ sudo fdisk -l
Disk /dev/vda: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F05EDE64-4EFD-477A-B01E-B37CCD5D3EB4
Device Start End Sectors Size Type
/dev/vda1 18432 2097118 2078687 1015M Linux filesystem
/dev/vda15 2048 18431 16384 8M EFI System
Partition table entries are not in disk order.
Disk /dev/vdb: 3 GiB, 3221225472 bytes, 6291456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5a692294
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 4194303 4192256 2G 83 Linux
扩展后多出的 1GB 的空间默认没有被分区。即只扩展了磁盘大小,并没有改变分区大小。卸载/dev/vdb1 分区,挂载/dev/vdc1 分区。完成后查看 test.txt 内容正常。 为了使用新扩展的 1GB 空间,需要重启云主机。
bash
$ sudo umount -l /mnt
$ sudo mount /dev/vdb1 /mnt/
$ sudo cat /mnt/test.txt
2G
$ sudo reboot
云主机重启后,卷将被重新识别为/dev/vdb,需要重新挂载使用。新增加的 /dev/vdb2 分区还需要格式化才能挂载使用。执行命令如下。
bash
$ sudo mkdir /data
$ sudo fdisk /dev/vdb
$ sudo mkfs /dev/vdb2
$ sudo mount /dev/vdb2 /data
$ sudo mount /dev/vdb1 /mnt
$ df -h
Filesystem Size Used Available Use% Mounted on
/dev 231.7M 0 231.7M 0% /dev
/dev/vda1 980.0M 32.9M 905.8M 4% /
tmpfs 238.8M 0 238.8M 0% /dev/shm
tmpfs 238.8M 80.0K 238.7M 0% /run
/dev/vdb2 1007.9M 1.3M 955.4M 0% /data
/dev/vdb1 2.0G 3.0M 1.9G 0% /mnt
2.8、快照管理
快照可以分为基于实例的快照和基于卷的快照两种类型。实例快照保存在 Glance 中,而卷快照保存在本地存储。
1)基于实例的快照
需要注意所选实例要不带卷或者先卸载卷,若带卷会导致实验失败。
首先在当前云主机创建一个 test.txt 文件,并且写入内容,如下所示。
bash
$ echo test > test.txt
$ cat test.txt
test
$ ifconfig
eth0 Link encap:Ethernet HWaddr FA:16:3E:89:20:4F
inet addr:192.168.1.120 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fe89:204f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1442 Metric:1
RX packets:1055 errors:0 dropped:0 overruns:0 frame:0
TX packets:922 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:91779 (89.6 KiB) TX bytes:89270 (87.1 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
然后创建一个实例快照,通过该实例快照启动一个全新的云主机。首先在"实例 列表"页面,单击实例 test 对应的"创建快照"按钮,如图 44 所示。
图 44 实例列表中创建快照
在弹出的"创建快照"页面,输入快照名称"test-snap",并单击"创建快照"按钮,如 图 45 所示。
图 45 创建全新快照
页面将自动进入"镜像"页面,并在列表的最后生成一个新的镜像,其状态可能一 直处于排队状态,可刷新页面解决。完成效果如图 46 所示。
图 46 查看镜像列表
实例快照创建完成之后,通过该快照重新生成云主机。单击镜像后面的"启动"按钮,在弹出的"创建实例"页面,实例名称填写"test01"。在"源"选项卡页面中,"选择源" 下拉列表选择"实例快照",并在下面选择名称为"test-snap"的快照,如图 47 所示。 其他配置参考前面的步骤。完成后单击"创建实例"按钮。
图 47 创建实例(一)
创建完成后的效果如图 48 所示。
图 48 创建实例(二)
登录 test01 云主机控制台,执行如下命令。
上述命令输出结果显示,通过实例快照创建的云主机 test01 和云主机 test 数据 一致。
2)基于卷的快照
删除之前创建的"test01"云主机,重新创建云主机"test01",在云主机创建过程中在"源"选项卡页面选择"创建新卷",大小 1GB。创建完成后在"项目"→"卷"→"卷"页面 中出现一个新的卷,实例 test01 将存储在 Cinder 块里,如图 49 所示。
图 49 查看卷信息
登录 test01 云主机控制台,创建一个 test.txt 文件,写入 test01 内容如下。
进入"项目"→"卷"→"卷"页面,对上面的卷做一个快照,在编辑卷右侧下拉框选择创建快照,名称叫做"test01-lv-snap",创建过程中会提示"这个卷已经被连接到某个实例了"。正确的做法是先将卷分离出来,再创建卷快照。因为 test01 云主机是实验 境并且没有应用对卷实时写入文件,所以忽略该提示。直接单击"创建卷快照(强制)"按钮,如图 50 所示。
图 50 创建卷快照
在卷快照列表页面可以看到创建成功的快照信息,如图 51 所示。
图 51 查看卷信息
通过该卷快照,在创建卷右侧下拉框选择"创建实例",实例名称"test02",在"源" 页面选择卷快照,完成后登录 test02 云主机控制台执行命令如下。
上述命令显示,通过卷快照生成的云主机除了 IP 地址外,和之前的云主机内容 一致。同时,在卷列表页面将会多出一个 test02 使用的卷,如图 52 所示。
图 52 查看卷信息
无论是实例快照还是卷快照,都可以用来生成全新的云主机,在生产环境中通常通过快照对云主机进行备份或迁移。
2.9、创建镜像
本章案例使用的是官网下载的 CentOS 镜像(CentOS-7-x86_64-GenericCloud-1802.qcow2)。依次打开"管理员"→"计算"→"镜 像"选项卡页面,单击"创建镜像"按钮,填写镜像名称,在"文件"位置通过浏览选择下载的镜像文件,镜像格式选择"QCOW2-QEMU 模拟器",完成后单击"创建镜像"按钮, 如图 53 所示。
图 53 创建镜像
创建过程会出现进度条,创建成功页面如图 54 所示。
图 54 创建镜像成功
镜像导入成功后,可以通过该镜像生成基于 CentOS 7 操作系统的云主机,需要注意,要同时给该镜像选择或创建适合的实例类型。可以通过密钥对的方式免密码登录基于该镜像的云主机,默认存在 centos 用户。可参考 2.6 节中步骤 6 部分操作