在开机第一次使用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 | []   |
+--------------------------------------+---------+------------------------+------------
----------------------+------+

defaultopenstack 平台自带的安全组,通过命令可以查看安全组中的安全规则,命令如下:

[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.cfganaconda-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左右,所有分成了两个存储片。