在开机第一次使用openstack命令时都得先source一下keystone的环境变量文件,命令如下:
[root@controller ~]# source /etc/keystone/admin-openrc.sh
一、glance镜像服务的基本使用
(1) 创建镜像
1.1 上传镜像
上传到任意目录,记得住就行了,这里推荐上传到root目录下
1.2 创建镜像
参数 | 说明 |
--disk-format | 镜像格式 |
--container-format | 镜像在其他项目中可见性 |
--progress | 显示上传镜像的进度 |
--file | 选择本地镜像文件 |
--name | 上传后镜像的名称 |
[root@controller ~]# glance image-create --name cirros-0.3.4 --disk-format qcow2 --container-format bare --progress < cirros-0.3.4-x86_64-disk.img
(2) 管理镜像
2.1 查看镜像
通过命令可以在openstack平台中查看当前glance中所上传的镜像名称,命令如下:
[root@controller ~]# glance image-list
+--------------------------------------+--------------+
| ID | Name |
+--------------------------------------+--------------+
| 5944a2aa-4c44-488a-8cdc-979935020094 | cirros-0.3.4 |
+--------------------------------------+--------------+
也可以使用命令查看镜像的详细信息,命令如下:
[root@controller ~]# glance image-show 5944a2aa-4c44-488a-8cdc-979935020094 # 镜像id
2.2 修改镜像
如果需要改变镜像启动硬盘最低要求值(min-disk) 1G,min-disk默认单位为G。可以使用glance image-update 更新镜像信息,操作如下:
参数 | 参数说明 |
---|---|
--min-disk | 镜像启动最小硬盘大小 |
--name | 镜像名称 |
--disk-format | 镜像格式 |
--min-ram | 镜像启动最小内存大小 |
--container-format | 镜像在项目中可见性 |
[root@controller ~]# glance image-update --min-disk=1 5944a2aa-4c44-488a-8cdc-979935020094
也可以使用命令刚更新镜像启动内存最低要求值(min-ram)为1G,min-ram默认单位为M。使用glance image-update更新镜像信息操作如下:
[root@controller ~]# glance image-update --min-ram=1024 5944a2aa-4c44-488a-8cdc-979935020094
2.3 删除镜像
可以使用glance image-delete 删除上传至openstack平台上的镜像,命令如下:
[root@controller ~]# glance image-delete 5944a2aa-4c44-488a-8cdc-979935020094
二、nova服务的基础使用
(1) 创建flavor类型
flavor类型为openstack在创建云主机时需要提供的云主机大小类型,云主机的资源大小可使用不同的flavor类型来进行定义。
1.1 创建flavor类型
使用命令创建一个flavor,10G的硬盘大小,512M内存,1颗vcpu,id为10,名称为centos。命令如下:
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# openstack flavor create --disk 10 --ram 512 --vcpus 1 --id 10 centos
2.2 查看flavor类型
使用openstack flavor list命令查看flavor类型列表,命令如下:
[root@controller ~]# openstack flavor list
+----+-----------+------+------+-----------+-------+-----------+
| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+------+------+-----------+-------+-----------+
| 1 | m1.tiny | 512 | 10 | 0 | 1 | True |
| 10 | centos | 512 | 10 | 0 | 1 | True |
| 2 | m1.small | 1024 | 20 | 0 | 1 | True |
| 3 | m1.medium | 2048 | 40 | 0 | 2 | True |
+----+-----------+------+------+-----------+-------+-----------+
[root@controller ~]#
也可以使用 openstack flavor show 命令查看具体的flavor类型的详细信息。命令如下:
[root@controller ~]# openstack flavor show centos
+----------------------------+--------+
| Field | Value |
+----------------------------+--------+
| OS-FLV-DISABLED:disabled | False |
| OS-FLV-EXT-DATA:ephemeral | 0 |
| access_project_ids | None |
| disk | 10 |
| id | 10 |
| name | centos |
| os-flavor-access:is_public | True |
| properties | |
| ram | 512 |
| rxtx_factor | 1.0 |
| swap | |
| vcpus | 1 |
+----------------------------+--------+
(2) 安全组
访问安全组是为 openstack 提供给云主机的一个访问策略控制组,通过安全组中的策略可以控制云主机的出入访问规则。
2.1 查看访问安全组
使用命令 openstack security group list 可以查看当前所创建的访问安全组列表。命令如下:
[root@controller ~]# openstack security group list
+--------------------------------------+---------+------------------------+------------
----------------------+------+
| ID | Name | Description | Project
| Tags |
+--------------------------------------+---------+------------------------+------------
----------------------+------+
| 6d775afe-d2d0-4039-9008-a48e25ebfde8 | default | Default security group | 0b6f2d0be1d
342e09edc31dc841db7a5 | [] |
+--------------------------------------+---------+------------------------+------------
----------------------+------+
default 为 openstack 平台自带的安全组,通过命令可以查看安全组中的安全规则,命令如下:
[root@controller ~]# openstack security group rule list default
+--------------------------------------+-------------+-----------+-----------+---------
---+--------------------------------------+
| ID | IP Protocol | Ethertype | IP Range | Port Ran
ge | Remote Security Group |
+--------------------------------------+-------------+-----------+-----------+---------
---+--------------------------------------+
| 0b34c087-045e-4376-b4ee-4316cd11fdda | None | IPv6 | ::/0 |
| None |
| 3ac8d855-b1dd-4a6e-aeb4-56504d304954 | None | IPv6 | ::/0 |
| 6d775afe-d2d0-4039-9008-a48e25ebfde8 |
| 405f2785-0fb7-4c00-a7a0-200281badbc1 | None | IPv4 | 0.0.0.0/0 |
| 6d775afe-d2d0-4039-9008-a48e25ebfde8 |
| 9c4d7f25-6763-42ef-8858-003b5430b6d9 | None | IPv4 | 0.0.0.0/0 |
| None |
+--------------------------------------+-------------+-----------+-----------+---------
---+--------------------------------------+
在安全规则的列表中,不能看出每条规则的具体策略,通过使用命令 openstack security group rule show 查看任意规则的详细信息。命令如下:
[root@controller ~]# openstack security group rule show 9c4d7f25-6763-42ef-8858-003b5430b6d9 # 规则id
2.2 创建访问安全组
创建一个新的安全组,命令如下:
[root@controller ~]# openstack security group create test
[root@controller ~]# openstack security group create test
2.3 删除访问安全组
可以使用命令删除不需要使用的访问安全组,命令如下:
[root@controller ~]# openstack security group delete test
2.4 添加安全规则
在默认的安全组中添加三条需要使用的访问规则,使用 openstack security group rule create 命令,命令格式如下:
[root@controller ~]# openstack help security group rule create
usage: openstack security group rule create [-h]
[-f {json,shell,table,value,yaml}]
[-c COLUMN]
[--max-width <integer>]
[--fit-width] [--print-empty]
[--noindent] [--prefix PREFIX]
[--remote-ip <ip-address> | --remote-group
<group>]
[--description <description>]
[--dst-port <port-range>]
[--icmp-type <icmp-type>]
[--icmp-code <icmp-code>]
[--protocol <protocol>]
[--ingress | --egress]
[--ethertype <ethertype>]
[--project <project>]
[--project-domain <project-domain>]
<group>
在 default 安全组中添加一条策略,从入口方向放行所有 icmp 规则,命令如下:
[root@controller ~]# openstack security group rule create --protocol icmp --ingress default
在 defult 安全组中添加一条策略,从入口方向放行所有TCP规则,命令如下:
[root@controller ~]# openstack security group rule create --protocol tcp --ingress default
在 defult 安全组中添加一条策略,从入口方向放行所有 UDP 规则,命令如下:
[root@controller ~]# openstack security group rule create --protocol udp --ingress default
查看 default 安全组中所有的规则表信息,命令如下:
[root@controoer ~]# openstack security group rule list default
(3) 启动虚拟机
3.1 查询可用镜像
上传镜像,使用 openstack image list 命令查看当前可用的镜像列表。命令如下:
[root@controller ~]# glance image-create --name cirros --disk-format qcow2 --container-format bare --progress < cirros-0.3.4-x86_64-disk.img
[root@controller ~]# openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| bb743f67-3467-4ee0-8e2a-1c3817107ecc | cirros | active |
+--------------------------------------+--------+--------+
[root@controller ~]#
使用 openstack flavor list 命令查看可用的类型。命令如下:
[root@controller ~]# openstack flavor list
+----+-----------+------+------+-----------+-------+-----------+
| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+------+------+-----------+-------+-----------+
| 1 | m1.tiny | 512 | 10 | 0 | 1 | True |
| 2 | m1.small | 1024 | 20 | 0 | 1 | True |
| 3 | m1.medium | 2048 | 40 | 0 | 2 | True |
+----+-----------+------+------+-----------+-------+-----------+
3.2 创建网路和子网
使用 openstack network create 命令创建网络,命令如下:
[root@controller ~]# openstack network create --provider-network-type vlan --provider-physical-network provider network-vlan --provider-segment 200
使用 openstack subnet create 命令创建子网,命令如下:.
[root@controller ~]# openstack subnet list
[root@controller ~]# openstack subnet create --network network-vlan --allocation-pool start=192.168.200.100,end=192.168.200.200 --gateway 192.168.200.1 --subnet-range 192.168.200.0/24 subnet-vlan
3.3 创建云主机
使用 openstack saerver create 命令创建云主机,flavor为1核vpu、512内存、10G硬盘,使用network-vlan网络,云主机名为cirros-test,创建命令如下:
[root@controller ~]# openstack server create --image cirros --flavor test --network network-vlan cirros-test
(4) 管理虚拟机
4.1 查看虚拟机
使用 openstack server list 命令查看虚拟机列表信息,使用命令如下:
[root@controller ~]# openstack server list
使用命令可以查看虚拟机的具体信息,包括使用的安全组、flavor以及网络信息,通过命令 openstack server show 进行查看。命令如下:
[root@controller]# openstack server show cirros-test
4.2 操作虚拟机
可以通过命令擦送做虚拟机面对虚拟机进行关机、开机、重启等操作,关闭虚拟机操作,命令如下:
[root@controller ~]# openstack server stop cirros-test # 关机
[root@controller ~]# openstack server start cirros-test # 开机
[root@controller ~]# openstack servewr reboot cirros-test # 重启
(5) 云主机调整大小
5.1 修改配置文件
修改controller节点的nova.conf配置文件,添加调整类型大小的参数,controller节点设置参数如下:
[root@controller ~]# crudini --set /etc/nova/nova.conf DEFAULT all_resize_to_same_host True
[root@controller ~]# systemctl restart openstack-nova*
5.2 创建云主机类型
现有云主机硬盘和内存不满足使用,需要对现有云主机进行资源扩容,将内容扩容至1G,硬盘扩容至15G大小,类型名称为"centos1" 首先创建一个新的云主机类型满足扩容的需求。通过命令创建新云主机类型,命令如下:
[root@controller ~]# openstack flavor create --disk 15 --ram 1024 --vcpus 2 centos1
查看当前云主机类型:
[root@controller ~]# openstack flavor list
5.3 调整云主机类型
查看云主机列表,通过命令查看云主机列表
[root@controller ~]# openstack server list
使用命令调整云主机 cirros-test 类型为 centos1,使用 --wait 参数,在命令执行后,调整云主机需要一定时间,添加 wait 参数后会在确认时反馈 complete。命令如下:
[root@controller ~]# openstack server resize --flavor centos1 --wait cirros-test
三、cinder服务的基本使用
(1) 块存储服务
1.1 创建镜像和网络
[root@controller ~]# glance image-create --name cirros --disk-format qcow2 --container-
format bare --progress < cirros-0.3.4-x86_64-disk.img
[root@controller ~]# openstack network create --provider-network-type vlan --provider-p
hysical-network provider network-vlan --provider-segment 200
[root@controller ~]# openstack subnet create --network network-vlan --allocation-pool start=192.168.200.100,end=192.168.200.200 --gateway 192.168.200.1 --subnet-range 192.168.200.0/24 subnet-vlan
1.2 修改openstack平台
修改nova服务配置文件,设置参数virt_type=qemu。命令参数如下:
[root@controller ~]# crudini --set /etc/nova/nova.conf libvirt virt_type qemu
[root@controller ~]# systemctl restart openstack-nova-compute
1.3 创建云主机
[root@controller ~]# openstack server create --image cirros --flavor 2 --network network-vlan cirros-test
1.4 查看cinder服务状态
使用 openstack volume service list 命令查看块存储服务状态,命令如下:.
[root@controller ~]# openstack volume service list
1.5 创建块存储
通过使用命令 openstack volume create 创建块存储,大小为2G,名称为volume,命令如下:
[root@controller ~]# openstack volume create --size 2 volume
1.6 查看块存储
使用 openstack volume list 命令查看块存储列表信息。命令如下
[root@controller ~]# openstack volume list
通过openstack命令查看某一块存储的详细信息,命令如下:
[root@controller ~]# openstack volume show volume
1.7 挂载云硬盘
块存储设备创建成功后,可以在openstack上将该设备挂载至云主机上,可以作为一块云硬盘来进行使用。给云主机添加一块磁盘,使用命令将创建的volume块存储添加至云主机cirros-test上,命令如下:
[root@controller ~]# openstack server add volume cirros-test volume
使用命令查看块存储信息,命令如下:
[root@controller ~]# openstack volume list
(2) 扩展卷
2.1 扩展卷大小
创建完卷后可能因为需求的变更,需要对已有的卷进行扩容操作,这时用到openstack volume set命令修改卷的信息。分离卷,使用-size参数颗修改已创建好的卷大小,命令如下:
[root@controller ~]# openstack server remove volume cirros-test volume # 分离卷
[root@controller ~]# openstack volume set --size 3 volume
[root@controller ~]# openstack volume list
+--------------------------------------+--------+-----------+------+-------------+
| ID | Name | Status | Size | Attached to |
+--------------------------------------+--------+-----------+------+-------------+
| af4fe379-8f86-417a-a108-a7890ddaff14 | volume | available | 3 | |
+--------------------------------------+--------+-----------+------+-------------+
[root@controller ~]#
2.2 验证卷大小
将扩容后的卷volume 挂载至云主机cirros-test上,操作命令如下:
[root@controller ~]# openstack server add volume cirros-test volume
[root@controller ~]# openstack volume list
+--------------------------------------+--------+--------+------+----------------------
----------------+
| ID | Name | Status | Size | Attached to
|
+--------------------------------------+--------+--------+------+----------------------
----------------+
| af4fe379-8f86-417a-a108-a7890ddaff14 | volume | in-use | 3 | Attached to cirros-te
st on /dev/vdb |
+--------------------------------------+--------+--------+------+----------------------
----------------+
[root@controller ~]#
可以看到卷volume 挂载至云主机cirros-test盘符上的名称为/dev/vdb,使用virsh工具登录云主机,输入命令lsblk查看云硬盘大小是否为3G。命令如下:
[root@controller ~]# virsh console instance-00000001
Connected to domain instance-00000001
Escape character is ^]
login as 'cirros' user. default password: 'cubswin:)'. use 'sudo' for root.
cirros-test login: cirros
Password: cubswin:)
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 20G 0 disk
`-vda1 253:1 0 20G 0 part /
vdb 253:16 0 3G 0 disk
$
可以看到显示盘符vdb大小为3G,此时云硬盘已经扩展完成。
四、swift服务的基本使用
(1) 对象存储服务
1.1 查看服务状态
在openstack平台上使用swift stat查看对象存储服务状态:
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# swift stat
Account: AUTH_0b6f2d0be1d342e09edc31dc841db7a5
Containers: 0
Objects: 0
Bytes: 0
X-Put-Timestamp: 1703254328.69932
X-Timestamp: 1703254328.69932
X-Trans-Id: tx64e302d09b684a36a00a9-0065859937
Content-Type: text/plain; charset=utf-8
X-Openstack-Request-Id: tx64e302d09b684a36a00a9-0065859937
[root@controller ~]#
1.2 创建容器
通过openstack container create 命令创建容器:
[root@controller ~]# openstack container create swift-test
1.3 查看容器
使用命令查询容器列表信息:
[root@controller ~]# openstack container list
+------------+
| Name |
+------------+
| swift-test |
+------------+
使用命令查询容器详细信息:
[root@controller ~]# openstack container show swift-test
+--------------+---------------------------------------+
| Field | Value |
+--------------+---------------------------------------+
| account | AUTH_0b6f2d0be1d342e09edc31dc841db7a5 |
| bytes_used | 0 |
| container | swift-test |
| object_count | 0 |
+--------------+---------------------------------------+
[root@controller ~]#
1.4 创建对象
创建完容器后,可以创建对象,通过命令openstack object create在对象中创建对象。在使用命令创建对象前,需要将上传后的目录结构在本地创建。在本地创建名为test的目录/root/test,将/root/anaconda-ks.cfg文件复制至/root/test目录中,命令如下:
[root@controller ~]# mkdir test
[root@controller ~]# cp anaconda-ks.cfg test/
[root@controller ~]#
创建对象的过程中也是向容器中上传文件,使用命令创建test/anaconda-ks.cfg和anaconda-ks-cfg对象。操作如下:
[root@controller ~]# openstack object create swift-test test/anaconda-ks.cfg
+----------------------+------------+----------------------------------+
| object | container | etag |
+----------------------+------------+----------------------------------+
| test/anaconda-ks.cfg | swift-test | 41656296ae6768ae924a5b5f3fe15bf0 |
+----------------------+------------+----------------------------------+
1.5 查看对象
创建完对象后,通过命令查看容器中对象信息,使用命令openstack object list 查看容器swift-test中所有的对象信息,命令如下:
[root@controller ~]# openstack object list swift-test
+----------------------+
| Name |
+----------------------+
| test/anaconda-ks.cfg |
+----------------------+
[root@controller ~]#
通过查询命令可以看出,在通过命令上传对象时,本地路径即为容器内对象路径。使用命令openstack object show查询swift-test容器中test/anaconda-ks.cfg对象详细信息,命令如下:
[root@controller ~]# openstack object show swift-test test/anaconda-ks.cfg
+----------------+---------------------------------------+
| Field | Value |
+----------------+---------------------------------------+
| account | AUTH_0b6f2d0be1d342e09edc31dc841db7a5 |
| container | swift-test |
| content-length | 6880 |
| content-type | application/octet-stream |
| etag | 41656296ae6768ae924a5b5f3fe15bf0 |
| last-modified | Fri, 22 Dec 2023 14:21:15 GMT |
| object | test/anaconda-ks.cfg |
+----------------+---------------------------------------+
[root@controller ~]#
1.6 下载对象
存储在容器中的对象,可以在需要使用时,通过openstack object save命令保存到本地,将test/anaconda-ks.cfg对象下载至本地/opt/目录下。
[root@controller opt]# openstack object save swift-test test/anaconda-ks.cfg
[root@controller opt]# ls test/
anaconda-ks.cfg
[root@controller opt]#
1.7 删除对象
使用openstack object delete删除 swift-test容器内 test/anaconda-ks.cfg对象,查看swift-test容器中对象列表信息,操作命令如下:
[root@controller opt]# openstack object delete swift-test test/anaconda-ks.cfg
[root@controller opt]# openstack object list swift-test
[root@controller opt]#
1.8 删除容器
使用openstack container delete命令将swift-test容器删除:
[root@controller opt]# openstack container delete swift-test
[root@controller opt]# openstack container list
(2) 分片存储案例
2.1 创建容器
使用命令创建一个test容器并查看状态信息:
[root@controller opt]# swift post test
[root@controller opt]# swift stat test
Account: AUTH_0b6f2d0be1d342e09edc31dc841db7a5
Container: test
Objects: 0
Bytes: 0
Read ACL:
Write ACL:
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Storage-Policy: Policy-0
Last-Modified: Fri, 22 Dec 2023 14:34:04 GMT
X-Timestamp: 1703255643.79517
X-Trans-Id: tx4c175b7a686f49be98b3a-0065859e64
Content-Type: application/json; charset=utf-8
X-Openstack-Request-Id: tx4c175b7a686f49be98b3a-0065859e64
[root@controller opt]#
2.2 上传镜像并分片存储
将提供的cirros镜像上传至controller节点的/root目录下,并使用命令上传至test容器中,进行分配存储,每个片段大小为10M,命令如下:
[root@controller ~]# swift upload test -S 10000000 cirros-0.3.4-x86_64-disk.img
cirros-0.3.4-x86_64-disk.img segment 0
cirros-0.3.4-x86_64-disk.img segment 1
cirros-0.3.4-x86_64-disk.img
[root@controller ~]#
查看cirros镜像的存储路径:
[root@controller ~]# swift stat test cirros-0.3.4-x86_64-disk.img
Account: AUTH_0b6f2d0be1d342e09edc31dc841db7a5
Container: test
Object: cirros-0.3.4-x86_64-disk.img
Content Type: application/octet-stream
Content Length: 13287936
Last Modified: Fri, 22 Dec 2023 14:38:25 GMT
ETag: "cca17a689bfcd70118fabc833af0d033"
Manifest: test_segments/cirros-0.3.4-x86_64-disk.img/1703255836.788893/13
287936/10000000/
Meta Mtime: 1703255836.788893
Accept-Ranges: bytes
X-Timestamp: 1703255904.75342
X-Trans-Id: txc0706396ae434c6daa41a-0065859f9e
X-Openstack-Request-Id: txc0706396ae434c6daa41a-0065859f9e
[root@controller ~]#
查看存储路径中的数据片:
[root@controller ~]# swift list test_segments
cirros-0.3.4-x86_64-disk.img/1703255836.788893/13287936/10000000/00000000
cirros-0.3.4-x86_64-disk.img/1703255836.788893/13287936/10000000/00000001
[root@controller ~]#
可以看到,cirros镜像在上传至Swfit对象存储中被分片存储了,单个存储片的大小为10M,因为该镜像大小为12M左右,所有分成了两个存储片。