OpenStack认证管理-Keystone

Keystone基本概念

在这里插入图片描述

  • Domain:一个域可以对应一个大的机构、一个数据中心,并且必须全局唯一。云的终端用户可以在自 己的Domain中创建多个Project、User、Group和Role。具备对多个Project进行统一管理的能力。
  • User:Keystone会通过认证信息(Credential,如密码等)验证用户请求的合法性,通过验证的用户将 会分配到一个特定的令牌,该令牌可以被当作后续资源访问的一个通行证,并非全局唯一,只需要在域 内唯一即可。
  • Group:用户组是一组User的容器,可以向Group中添加用户,并直接给Group分配角色,在这个 Group中的所有用户就拥有了Group所拥有的角色权限。通过引入Group的概念,Keystone实现了对用 户组的管理,达到了同时管理一组用户权限的目的。
  • Project:项目是各个服务中的一些可以访问的资源集合。我们需要在创建虚拟机时指定某个项目,在 Cinder创建卷时也需要指定具体的项目。用户总是被默认绑定到某些项目上,在用户访问项目的资源 前,必须具有对该项目的访问权限,或者说在特定项目下被赋予了特定的角色。项目不必全局唯一,只 需要在某个域下唯一即可。 在OpenStack的界面和文档中,Tenant/Project/Account这几个术语是通用 的,但长期看会倾向使用Project(公有云叫租户)
  • Role:一个用户所具有的角色,角色不同意味着被赋予的权限不同,只有知道用户被赋予的角色才能知 道该用户是否有权限访问某资源。用户可以被赋予一个域或项目内的角色。一个用户被赋予域的角色意 味着他对域内所有的项目都具有相同的角色,而特定项目的角色只具有对特定项目的访问权限。角色可 以被继承,在一个项目树下,拥有父项目的访问权限也意味着同时拥有对子项目的访问权限。角色必须 全局唯一

查看domain

[root@controller ~ 09:36:18]# source keystonerc_admin
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID                               | Name    | Enabled | Description        |
+----------------------------------+---------+---------+--------------------+
| d8ac6cff08f7496c969452b61237876b | heat    | True    |                    |
| default                          | Default | True    | The default domain |
+----------------------------------+---------+---------+--------------------+

创建domain:

# 创建新的domain叫domain-test
[root@controller ~(keystone_admin)]# openstack domain create domain-test
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | 3b8e2c50c1c642e68ffe2f848a8889b9 |
| name        | domain-test                      |
| options     | {}                               |
| tags        | []                               |
+-------------+----------------------------------+

#再次验证确实多了一个domain-test
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+-------------+---------+--------------------+
| ID                               | Name        | Enabled | Description        |
+----------------------------------+-------------+---------+--------------------+
| 3b8e2c50c1c642e68ffe2f848a8889b9 | domain-test | True    |                    |
| d8ac6cff08f7496c969452b61237876b | heat        | True    |                    |
| default                          | Default     | True    | The default domain |
+----------------------------------+-------------+---------+--------------------+

删除domain:

# 设置domain禁用
[root@controller ~(keystone_admin)]# openstack domain set --disable domain-test
[root@controller ~(keystone_admin)]# openstack domain delete domain-test
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID                               | Name    | Enabled | Description        |
+----------------------------------+---------+---------+--------------------+
| d8ac6cff08f7496c969452b61237876b | heat    | True    |                    |
| default                          | Default | True    | The default domain |
+----------------------------------+---------+---------+--------------------+

开启多域登录界面

[root@controller ~(keystone_admin)]# cd /etc/openstack-dashboard/ 
[root@controller openstack-dashboard(keystone_admin)]# ls
cinder_policy.json  keystone_policy.json  local_settings.d     nova_policy.d
glance_policy.json  local_settings        neutron_policy.json  nova_policy.json
[root@controller openstack-dashboard(keystone_admin)]# vim local_settings
#修改配置文件83行如下,开启keystone支持多域
 83 OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
[root@controller openstack-dashboard(keystone_admin)]# systemctl restart httpd

测试

在这里插入图片描述

在这里插入图片描述

列出所有用户:

[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID                               | Name       |
+----------------------------------+------------+
| ef2e98805d884acba8609fef1acad5b9 | admin      |
| d728cda9949946d0859eb0ff352b7e2c | heat_admin |
| e509ffebfa9b45529b40d7db0936feb0 | glance     |
| 12bd57f15d81462d9d9dbd31bb0babba | cinder     |
| d9e004f59c2f4063919fe62dd3e25954 | nova       |
| a6464b5839aa4a9ebd27212f8f5291b2 | placement  |
| 1717532d83be4dd2930247857ff14822 | neutron    |
| 2420dca31d6e4a7f8658e286085547f4 | swift      |
| 029796c9e94740cb82f7974ffa468a06 | heat       |
| eb679b3fe5b54395886d005c350b04bf | heat-cfn   |
| 4daa2c46ea354432b233123b205f80d1 | gnocchi    |
| 98a5ef335d584419b1ed681ef41d6a43 | ceilometer |
| e6af5c3cc2254905a01b10c76ef990d5 | aodh       |
+----------------------------------+------------+

创建新用户:user1

#创建用户user1密码huawei
[root@controller ~(keystone_admin)]# openstack user create --password huawei user1
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | e0aae3c13ecf43978aa057652612ebca |
| name                | user1                            |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

#查看用户列表有没有新创建的用户user1,user1在最下面
[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID                               | Name       |
+----------------------------------+------------+
| ef2e98805d884acba8609fef1acad5b9 | admin      |
| d728cda9949946d0859eb0ff352b7e2c | heat_admin |
| e509ffebfa9b45529b40d7db0936feb0 | glance     |
| 12bd57f15d81462d9d9dbd31bb0babba | cinder     |
| d9e004f59c2f4063919fe62dd3e25954 | nova       |
| a6464b5839aa4a9ebd27212f8f5291b2 | placement  |
| 1717532d83be4dd2930247857ff14822 | neutron    |
| 2420dca31d6e4a7f8658e286085547f4 | swift      |
| 029796c9e94740cb82f7974ffa468a06 | heat       |
| eb679b3fe5b54395886d005c350b04bf | heat-cfn   |
| 4daa2c46ea354432b233123b205f80d1 | gnocchi    |
| 98a5ef335d584419b1ed681ef41d6a43 | ceilometer |
| e6af5c3cc2254905a01b10c76ef990d5 | aodh       |
| e0aae3c13ecf43978aa057652612ebca | user1      |
+----------------------------------+------------+

#查看user1用户详细信息
[root@controller ~(keystone_admin)]# openstack user show user1
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | e0aae3c13ecf43978aa057652612ebca |
| name                | user1                            |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

创建组group1,并将user1加入group1

#创建组group1
[root@controller ~(keystone_admin)]# openstack group create group1
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | default                          |
| id          | f7484a62f43b400c8db3a1ce64c7a72f |
| name        | group1                           |
+-------------+----------------------------------+

#查看group1组详细信息
[root@controller ~(keystone_admin)]# openstack group show group1
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | default                          |
| id          | f7484a62f43b400c8db3a1ce64c7a72f |
| name        | group1                           |
+-------------+----------------------------------+

#列出所有的组
[root@controller ~(keystone_admin)]# openstack group list
+----------------------------------+--------+
| ID                               | Name   |
+----------------------------------+--------+
| f7484a62f43b400c8db3a1ce64c7a72f | group1 |
+----------------------------------+--------+

#将user1加入group1
[root@controller ~(keystone_admin)]# openstack group add user group1 user1

#查看user1是否隶属于group1
[root@controller ~(keystone_admin)]# openstack group contains user group1 user1
user1 in group group1

查看角色role

[root@controller ~(keystone_admin)]# openstack role list
+----------------------------------+------------------+
| ID                               | Name             |
+----------------------------------+------------------+
| 0b8aac0601ae4b2ca62ab3337b19b209 | SwiftOperator    |
| 0ec3e71074154918b45da12819cde3ac | heat_stack_user  |
| 1be423acac4448e9a29fd41821cb82ea | _member_         |
| 4d6cc7e543a54338816d40fda9978602 | member           |
| 8c7293f9c4394c2d8b9d60dbd3024737 | reader           |
| ab6b2968c4d64ee28263ed1f8203aa64 | ResellerAdmin    |
| d715d2d8a0994176a2055e24719d8234 | admin            |
| e394f6cdc86a42b18add529326898ae4 | heat_stack_owner |
+----------------------------------+------------------+

给group1赋予角色admin

[root@controller ~(keystone_admin)]# openstack role add --project admin --group group1 admin

验证group1角色:

[root@controller ~(keystone_admin)]# openstack role assignment list --names --group group1
+-------+------+----------------+---------------+--------+--------+-----------+
| Role  | User | Group          | Project       | Domain | System | Inherited |
+-------+------+----------------+---------------+--------+--------+-----------+
| admin |      | group1@Default | admin@Default |        |        | False     |
+-------+------+----------------+---------------+--------+--------+-----------+

在这里插入图片描述

创建ProjectA:

#创建项目ProjectA
[root@controller ~(keystone_admin)]# openstack project create projeckA
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 6ec1d2fc61ae47d5bc9b8a59a52c7a4f |
| is_domain   | False                            |
| name        | projeckA                         |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

#ProjeectA分配给用户user1
[root@controller ~(keystone_admin)]# openstack user set --project projeckA user1

#给项目ProjectA里的用户user1赋予角色admin
[root@controller ~(keystone_admin)]# openstack role add --user user1 --project projeckA admin 

在这里插入图片描述

修改ProjectA配额

#将Project配额设置为实例3,vcpu 5,内存5000MB
[root@controller ~(keystone_admin)]# openstack quota set --instance 3 --cores 5 --ram 500 projeckA

在这里插入图片描述

查看OpenStack有哪些服务:

[root@controller ~(keystone_admin)]# openstack service list
+----------------------------------+------------+----------------+
| ID                               | Name       | Type           |
+----------------------------------+------------+----------------+
| 292337316b9c4604b5d03e37af73f097 | swift      | object-store   |
| 2eb1f7d8f8b4437e9dbdd90801632747 | heat       | orchestration  |
| 3394e86797514d03b5f38a2f7cfa3c12 | gnocchi    | metric         |
| 383c2c988eba48cda898c71d16595655 | cinderv3   | volumev3       |
| 3c817f78af8d4b73bb0edd0f960e2c3e | cinderv2   | volumev2       |
| 6043401a519b4f17992fad0ddd870928 | keystone   | identity       |
| 6bc3b4f0fb87401798aa3acb554c6e60 | nova       | compute        |
| 6d4bf9e42e31474c96fc09c77870300e | ceilometer | metering       |
| 9c805ea43fed4a1ba8700d3ed8f04e40 | aodh       | alarming       |
| b58e1d97df6346e4ab940c156c6702ed | glance     | image          |
| c34d692977544104a97182e8e55257f6 | heat-cfn   | cloudformation |
| d4eff180d1cd47448225e9d0fd6342b9 | neutron    | network        |
| ffdf581fa8c54f55b0c0dbdc0cd1acd2 | placement  | placement      |
+----------------------------------+------------+----------------+

在这里插入图片描述

查看catalog:
在这里插入图片描述

在这里插入图片描述

命令行上传大文件镜像-带进度条

WEB界面上传文件没有进度条,只会转圈

命令行上传大文件:

[root@controller ~ 15:44:35]# source keystonerc_admin 
[root@controller ~(keystone_admin)]# glance image-create --name image_centos --file CentOS-7-x86_64-Minimal-1810.iso --disk-format raw --container bare --progress 
[=============================>] 100%
+------------------+----------------------------------------------------------------------------------+
| Property         | Value                                                                            |
+------------------+----------------------------------------------------------------------------------+
| checksum         | bd43d41e01c2a46b3cb23eb9139dce4b                                                 |
| container_format | bare                                                                             |
| created_at       | 2025-10-27T07:45:34Z                                                             |
| disk_format      | raw                                                                              |
| id               | b974098c-eb88-4b84-9edf-1230d699feb4                                             |
| min_disk         | 0                                                                                |
| min_ram          | 0                                                                                |
| name             | image_centos                                                                     |
| os_hash_algo     | sha512                                                                           |
| os_hash_value    | d1418c1bd6bcd47f08b9601b537903561562d20a0101371b1f2673bb0b22ab2e90ddb905c901dcc8 |
|                  | dd13d5efabd94a90c0d58a8c365a2c3a7284cd4175de60dc                                 |
| os_hidden        | False                                                                            |
| owner            | 19d12993d1c448dea6f909052fe309ce                                                 |
| protected        | False                                                                            |
| size             | 962592768                                                                        |
| status           | active                                                                           |
| tags             | []                                                                               |
| updated_at       | 2025-10-27T07:45:40Z                                                             |
| virtual_size     | 962592768                                                                        |
| visibility       | shared                                                                           |
+------------------+----------------------------------------------------------------------------------+

理解Keystone核心概念

作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情:

  1. 管理用户及其权限
  2. 维护 OpenStack Services 的 Endpoint
  3. Authentication(认证)和 Authorization(鉴权)

学习 Keystone,得理解下面这些概念:

User

User 指代任何使用 OpenStack 的实体,可以是真正的用户,其他系统或者服务。
在这里插入图片描述

当 User 请求访问 OpenStack 时,Keystone 会对其进行验证。Horizon 在身份管理>用户 管理 User

除了 admin,OpenStack 也为 nova、cinder、glance、neutron 服务创建了相应的 User。 admin 也 可以管理这些 User。

Credentials

Credentials 是 User 用来证明自己身份的信息,可以是:

  1. 用户名/密码
  2. Token
  3. API Key
  4. 其他高级方式

Authentication

Authentication 是 Keystone 验证 User 身份的过程。User 访问 OpenStack 时向 Keystone 提交用户名 和密码形式的 Credentials,Keystone 验证通过后会给 User 签发一个 Token 作为后续访问的 Credential。

Token

Token 是由数字和字母组成的字符串,User 成功 Authentication 后 Keystone 生成 Token 并分配给 User。 1. Token 用做访问 Service 的 Credential 2. Service 会通过 Keystone 验证 Token 的有效性 3. Token 的有效期默认是 24 小时

Project

Project 用于将 OpenStack 的资源(计算、存储和网络)进行分组和隔离。

根据 OpenStack 服务的对象不同,Project 可以是一个客户(公有云,也叫租户)、部门或者项目组 (私有云)。

这里请注意:

  1. 资源的所有权是属于 Project 的,而不是 User。
  2. 在 OpenStack 的界面和文档中,Tenant / Project / Account 这几个术语是通用的,但长期看会倾 向使用 Project
  3. 每个 User(包括 admin)必须挂在 Project 里才能访问该 Project 的资源。 一个User可以属于多 个 Project。
  4. admin 相当于 root 用户,具有最高权限

Horizon 在 身份管理>项目 中管理 Project

通过 管理成员将 User 添加到 Project
在这里插入图片描述

在这里插入图片描述

Service

OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、 Image Service (Glance) 、Networking Service (Neutron) 等。每个 Service 都会提供若干个 Endpoint,User 通过 Endpoint 访问资源和执行操作。

Endpoint

Endpoint 是一个网络上可访问的地址,通常是一个 URL。Service 通过 Endpoint 暴露自己的 API。 Keystone 负责管理和维护每个 Service 的 Endpoint。

可以使用下面的命令来查看 Endpoint。

[root@controller ~(keystone_admin)]# openstack endpoint list [root@controller ~(keystone_admin)]# openstack catalog list

Role

安全包含两部分:Authentication(认证)和 Authorization(鉴权)

Authentication 解决的是“你是谁?”的问题

Authorization 解决的是“你能干什么?”的问题

Keystone 借助 Role 实现 Authorization:

  1. Keystone定义Role

  2. 可以为 User 分配一个或多个 Role,Horizon 的菜单为 Identity->Project->Manage Members

  3. Service 决定每个 Role 能做什么事情 Service 通过各自的 policy.json 文件对 Role 进行访问控制。

    下面是 Nova 服务 /etc/nova/policy.json 中的示例

    访问策略规则以JSON格式指定,文件名为policy.json

    策略文件的路径是/etc/SERVICE_NAME/policy.json,例如/etc/keystone/policy.json

    packstack安装策略文件路径是/etc/openstack-dashboard/SERVICE_NAME_policy.json

VMjh9P9a-1761649261169)

OpenStack 默认配置只区分 admin 和非 admin Role。 如果需要对特定的 Role 进行授权,可以修 改 policy.json。下一节我们将通过例子加深对这些概念的理解。

通过例子学习keystone

上一节介绍了 Keystone 的核心概念。本节我们通过“查询可用 image”这个实际操作让大家对这些概念建 立更加感性的认识。User admin 要查看 Project 中的 image

第 1 步 登录

当点击 登入 时,
在这里插入图片描述

Token 中包含了 User 的 Role 信息

第 2 步 显示操作界面

请注意,顶部显示 admin 可访问的 Project 为 “admin” ”。 其实在此之前发生了一些事情:
在这里插入图片描述

同时,admin 可以访问 实例, 镜像 卷等服务

这是因为 admin 已经从 Keystone 拿到了各 Service 的 Endpoints
在这里插入图片描述

第 3 步 显示 镜像 列表

点击 “镜像”,会显示镜像列表

背后发生了这些事: 首先 admin 将请求发送到 Glance 的 Endpoint

在这里插入图片描述

Glance 向 Keystone 询问 admin 身份是否有效

在这里插入图片描述

接下来 Glance 会查看 /etc/glance/policy.json 判断 admin 是否有查看 image 的权限

权限判定通过,Glance 将 image 列表发给 admin。

在这里插入图片描述

Troubleshoot

OpenStack 排查问题的方法主要是通过日志。

每个 Service 都有自己的日志文件。

Keystone 主要有一个日志: keystone.log 保存在 /var/log/keystone/ 目录里。

[root@controller nova(keystone_admin)]# cd /var/log/keystone/
[root@controller keystone(keystone_admin)]# ls
keystone.log

如果需要得到最详细的日志信息,可以在 /etc/keystone/keystone.conf 中打开 debug 选项

[root@controller keystone(keystone_admin)]# cd /etc/keystone/
[root@controller keystone(keystone_admin)]# ls
default_catalog.templates fernet-keys keystone.conf logging.conf policy.d 
policy.json puppet.conf sso_callback_template.html
[root@controller keystone(keystone_admin)]# vim keystone.conf
# 修改配置文件第94行
94 debug=True

在这里插入图片描述

  • 我们以创建VM为例,站在整个OpenStack角度来看一下,整个认证流程是怎样的。
  • 首先用户需要使用OpenStack,第一步就要向Keystone提供用户名密码来获取Token。当用户获取 Token后,需要向Nova发送创建虚拟机请求,Nova负责调用计算资源并管理虚拟机的生命周期,所以这 个创建请求要发送到Nova。请求的Head中会携带Token,当Nova-api接收到请求后,会将Token传递到 Keystone进行验证是否有效合法。当验证成功后返回信息给Nova,Nova才开始进行创建VM操作。这边 不具体介绍Nova如何操作,但是我们知道创建一台虚拟机,不仅需要准备CPU、内存等计算资源,还要 有相应的网络、存储等资源,这里以网络资源为例,Nova-api将token透传给Nova-compute,Novacompute会向Neutron-server发送与网络相关操作请求,请求Head中也携带Token,Neutron收到请求 后也会将Token传递到Keystone验证,验证成功才执行相应操作。
  • 这个流程中我们可以看到,不同服务间的调用也要携带Token,并且Keystone只校验了Token的有效 性,那么每个服务的操作权限控制是怎么实现的呢?

在这里插入图片描述

  • 首先用户发送基本信息给Keystone,一般是用户名和密码。Keystone经过验证后会返回一个Token给用 户,用户向Nova发送创建虚拟机请求,并携带Token信息,nova接收到请求后,会拿着Token去 Keystone进行验证,验证成功后开始执行创建VM操作,Nova会向Glance发送申请镜像信息并携带 Token,会向Neutron发送申请网络信息也会携带Token,Glance和Neutron组件接收到请求后,都会向 Keystone验证Token的有效性(图中仅用了一条线表示,请注意理解),验证通过即执行相应的操作, 返回完成信息,当VM创建完成后,Nova返回创建成功信息给用户,用户即可使用虚拟机

OpenStack镜像管理-glance

公有云(华为云)镜像概念

在这里插入图片描述

解释说明

  • 镜像

    是一个包含了操作系统及必要配置的弹性云服务器模板,使用镜像可以创建弹性云服务器。

  • 公共镜像

    公共镜像是云平台提供的常见的标准操作系统镜像,所有用户可见,包括操作系统以及预装的公共 应用。公共镜像具有高度稳定性,皆为正版授权,您也可以根据实际需求自助配置应用环境或相关 软件。

  • 私有镜像

    基于云服务器或外部镜像文件等方式创建的个人镜像,仅用户自己可见。包含操作系统、预装的公 共应用以及用户的私有应用。选择私有镜像创建云服务器,可以节省您重复配置云服务器的时间。 更多信息,请参见怎样制作私有镜像?

  • 共享镜像

    您可以接受云平台其他用户共享的私有镜像,作为自己的镜像进行使用。 更多信息,请参见怎样共享镜像?

  • 市场镜像

    提供预装操作系统、应用环境和各类软件的优质第三方镜像。无需配置,可一键部署,满足建站、 应用开发、可视化管理等个性化需求。

    最主要的作用:节约时间

Glance在OpenStack中的作用

在这里插入图片描述

Glance架构

在这里插入图片描述

在这里插入图片描述

  • 在Newton版本及之前版本中,Glance支持REST API V1和V2。

  • 在V2 API版本中,Glance-Registry的内容被整合进了Glance-API。如果Glance-API接收到与镜像元数据 有关的请求,则会直接操作数据库,不需要再通过Glance-Registry。

  • 在V1 API版本中,Glance-Registry与Glance-API一样,也是一个WSGI Server,但是Glance-Registry处 理的是与镜像元数据相关的RESTful请求。Glance-API在接收到用户的RESTful请求后,如果该请求与元 数据相关,则将其转发给Glance-Registry。需要注意的是,Glance-Registry提供的REST API是给 Glance-API使用的 ,不对OpenStack外部用户暴露。

  • 在Newton版本中V1已经过时,并从Stein版本开始,Glance-Registry被废弃,由Glance-API代替,然后 通过Store模块的接口实现对各种不同后台存储系统的支持,包括Glance架构图中的Amazon S3、 Cinder/Swift、Ceph、Sheepdog等存储后端。

    查看glalnce-api配置文件,观察与database通信的部分:

    glance的配置文件在 /etc/glance 目录下:

#查看配置文件,不做修改
[root@controller glance]# vim /etc/glance/glance-api.conf
1619 connection=mysql+pymysql://glance:123@192.168.108.10/glance

镜像image、实例instance、规格flavor三者区别

在这里插入图片描述

镜像、实例和规格的关系:

用户可以从同一个镜像启动任意数量的实例

每个启动的实例都是基于镜像的一个副本,实例上的任何修改都不会影响到镜像

启动实例时,必须指定一个规格,实例按照规格使用资源

Glance磁盘格式

在这里插入图片描述

将镜像添加到Glance时,必须指定虚拟机镜像的磁盘格式和容器格式

Glance状态机

Glance中有两种状态机:镜像状态和任务状态

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Glance状态机转换图

在这里插入图片描述

  • queued:没有上传image数据,只有db中的元数据。
  • saving:正在上传image data,当注册一个镜像使用POST /images并且当前携带了一个x-image-metalocation头,这个镜像将不会进入saving状态(镜像的数据已经是可以获得的,不能重传)。
  • active:当镜像数据上传完毕,镜像就可以被使用了(可获得的),此时处于active状态。
  • deactivated:表示任何非管理员用户都无权访问镜像数据,禁止下载镜像,也禁止像镜像导出和镜像克 隆之类的操作(请求镜像数据的操作)。
  • killed:表示上传过程中发生错误,并且镜像是不可读的。
  • deleted:glance已经保存了该镜像的数据,但是该镜像不再可用,处于该状态的镜像将在不久后被自动 删除。
  • pending_delete: 与deleted相似,glance还没有清除镜像数据,只是处于该状态的镜像不可恢复。

上传镜像实验

此次实验上传两个镜像:

cirros-0.5.2-x86_64-disk.img

TinyCore-12.0.iso

直接先将这2个文件,拖放到controller节点的/root目录。观察两个文件磁盘格式

[root@controller ~ 14:15:28]# ls
anaconda-ks.cfg  answers.txt.bak               keystonerc_admin
answers.txt      cirros-0.5.2-x86_64-disk.img  TinyCore-12.0.iso

[root@controller ~ 14:38:14]# qemu-img info cirros-0.5.2-x86_64-disk.img 
image: cirros-0.5.2-x86_64-disk.img
#磁盘格式qcow2
file format: qcow2
virtual size: 112 MiB (117440512 bytes)
disk size: 15.5 MiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false
    
[root@controller ~ 14:38:30]# qemu-img info TinyCore-12.0.iso 
image: TinyCore-12.0.iso
file format: raw
virtual size: 20 MiB (20971520 bytes)
disk size: 20 MiB

web页面 点击管理员–>计算–>镜像–>创建镜像
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

点击上图右上角问号可以看到帮助

在这里插入图片描述

上传成功:

在这里插入图片描述

点击镜像

镜像上传到哪里去了?

[root@controller ~ 14:38:50]# find / -name 55c74f49-31f3-4763-b930-d76696cd0f74
/var/lib/glance/images/55c74f49-31f3-4763-b930-d76696cd0f74

去数据库中查看现象:

[root@controller ~ 14:42:29]# mysql
MariaDB [(none)]> use glance;
MariaDB [glance]> select id,value from image_locations;
+----+--------------------------------------------------------------------+
| id | value                                                              |
+----+--------------------------------------------------------------------+
|  1 | file:///var/lib/glance/images/55c74f49-31f3-4763-b930-d76696cd0f74 |
|  2 | file:///var/lib/glance/images/a4db2f6c-5564-4853-ae90-160e73520ea7 |
+----+--------------------------------------------------------------------+

Glance镜像制作

最简单的Glance镜像制作方法是下载系统供应商官方发布的OpenStack镜像文件。大多数镜像预安装了 cloud-init包,支持SSH密钥对登录和用户数据注入功能。
在这里插入图片描述

  • 镜像的具体下载链接,请参考OpenStack社区网站: ▫https://docs.openstack.org/image-guide/obtain-images.html

在这里插入图片描述

使用swift作为Glance后端存储

在这里插入图片描述

[root@controller ~ 20:41:44]# grep -Ev '^#' /etc/glance/glance-api.conf | grep -Ev '^$'
[DEFAULT]
bind_host=0.0.0.0
bind_port=9292
workers=4
image_cache_dir=/var/lib/glance/image-cache
debug=False
log_file=/var/log/glance/api.log
log_dir=/var/log/glance
transport_url=rabbit://guest:guest@192.168.108.10:5672/
[cinder]
[cors]
[database]
connection=mysql+pymysql://glance:123@192.168.108.10/glance
[file]
[glance.store.http.store]
[glance.store.rbd.store]
[glance.store.s3.store]
[glance.store.swift.store]
[glance.store.vmware_datastore.store]
[glance_store]
stores=file,http,swift
default_store=file
filesystem_store_datadir=/var/lib/glance/images/
[image_format]
[keystone_authtoken]
www_authenticate_uri=http://192.168.108.10:5000/v3
auth_type=password
auth_url=http://192.168.108.10:5000
username=glance
password=123
user_domain_name=Default
project_name=services
project_domain_name=Default
[oslo_concurrency]
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
driver=messagingv2
topics=notifications
[oslo_messaging_rabbit]
ssl=False
default_notification_exchange=glance
[oslo_middleware]
[oslo_policy]
policy_file=/etc/glance/policy.json
[paste_deploy]
flavor=keystone
[profiler]
[store_type_location_strategy]
[task]
[taskflow_executor]
[wsgi]

#下面为查看swift密码方式
[root@controller ~ 20:41:45]# vim answers.txt
1137 CONFIG_SWIFT_HASH=9d4e9cabbecf4240

[root@controller ~ 20:49:32]# vim /etc/glance/glance-api.conf
3111 default_store=swift
3982 swift_store_region = RegionOne
4090 swift_store_container = gqdglance
4118 swift_store_large_object_size = 5120
4160 swift_store_create_container_on_put = true
4182 swift_store_multi_tenant = true
4230 swift_store_admin_tenants = services
4391 swift_store_auth_address = http://192.168.108.10:5000/v3
4399 swift_store_user = swift
#这里的swift密码是安装的时候决定的,随机产生的,查看answers.txt
4408 swift_store_key = 9d4e9cabbecf4240

[root@controller ~ 20:50:07]# source keystonerc_admin 
[root@controller ~(keystone_admin)]# systemctl restart openstack-glance*

上传镜像,测试效果:

web页面中 点击项目–>网络–>网络–>创建网络
在这里插入图片描述
在这里插入图片描述

查看具体ID

点击对象存储、
容器

数据库中观察现象:

[root@controller ~ 20:53:27]# mysql
MariaDB [(none)]> use glance;
Database changed
MariaDB [glance]> select id,value from image_locations;
+----+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | value                                                                                                                                                         |
+----+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
|  1 | swift+http://192.168.108.10:8080/v1/AUTH_19d12993d1c448dea6f909052fe309ce/gqdglance_0d20299e-4e9c-4c71-b852-4b7bfd02af43/0d20299e-4e9c-4c71-b852-4b7bfd02af43 |
+----+---------------------------------------------------------------------------------------------------------------------------------------------------------------+

命令行上传大文件镜像-带进度条

WEB界面上传文件没有进度条,只会转圈

命令行上传大文件:

[root@controller ~ 15:44:35]# source keystonerc_admin 
[root@controller ~(keystone_admin)]# glance image-create --name image_centos --file CentOS-7-x86_64-Minimal-1810.iso --disk-format raw --container bare --progress 
[=============================>] 100%
......
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐