OpenStack

1. 什么是 OpenStack

1.1 OpenStack 发展史

2006 年亚马逊推出 AWS,正式开启云计算的新纪元

2010 年 7 月美国国家航空航天局(NASA)与 Rackspace 合作,共同宣布 OpenStack 开放源码计划,由此开启了属于 OpenStack 的时代

OpenStack 从诞生之初对标 AWS,一直在向 AWS 学习,同时开放接口去兼容各种 AWS 服务

1.2 OpenStack 是什么

OpenStack 是虚拟机、裸金属和容器的云基础架构,其可控制整个数据中心的大型计算、存储和网络资源池,所有资源都通过 API 或 Web 界面进行管理

OpenStack 本质是由一系列叫脚本的命令组成,这些脚本会被捆绑到名为项目的软件包中,这些软件包则用于传递创建云环境的任务

为了创建这些环境,OpenStack 还会使用 2 种其他类型的软件:

  • 虚拟化软件,用于创建从硬件中抽象出来的虚拟资源层
  • 基础操作系统(OS),用于执行 OpenStack 脚本发出的命令

OpenStack 本身不会虚拟化资源,但会使用虚拟化资源来构建云,OpenStack、虚拟化和基础操作系统,这 3 种技术协同工作服务用户

1.3 OpenStack 版本

OpenStack 每年两个大版本,一般在 4 月和 10 月中旬发布,版本命名首字母按照 A-Z 循环更替

在这里插入图片描述

1.4 OpenStack 与虚拟化

OpenStack 不是虚拟化,OpenStack 只是系统的控制面,不包括系统的数据面组件,如Hypervisor、存储和网络设备等。虚拟化只是 OpenStack 底层的技术实现手段之一,但并非核心关注点

OpenStack 与虚拟化的关键区别在于

  • OpenStack 本身不提供虚拟化技术,其通过调用多种技术实现多资源池管理,对外提供统一管理接口
  • 虚拟化使虚拟与物理环境隔离,实现资源复用、降低隔离损耗、提升运行效率、提供高级虚拟化特性

2. OpenStack 架构

在这里插入图片描述

每个 OpenStack 服务内部是由多个进程组成。所有服务(Keystone除外)都至少有一个 API 进程,负责监听 API 请求,对请求进行预处理并将它们传递给服务的其他部分

每个 OpenStack 服务的进程之间的通信,使用 AMQP 消息代理。服务的状态存储在数据库中。在部署和配置 OpenStack 云时,管理员可以在多种消息代理和数据库解决方案中进行选择,例如 RabbitMQ、MySQL、MariaDB 和 SQLite

用户可以通过 Web 用户界面、命令行客户端以及通过浏览器插件或 curl 等工具发出 API 请求来访问 OpenStack

在这里插入图片描述

OpenStack 的核心服务如下:

服务名服务类型作用
HORIZON界面管理服务提供基于 Web 的控制界面,使云管理员和用户能够管理各种 OpenStack 资源和服务
KEYSTONE认证服务提供身份验证,服务发现和分布式多租户授权,支持 LDAP、OAuth、OpenID Connect、SAML 和 SQL
GLANCE镜像服务提供发现、注册和检索虚拟机镜像功能,提供的虚拟机实例镜像可以存放在不同地方,例如本地文件系统、Swift对象存储、Cinder块存储等
NOVA计算服务提供大规模、可扩展、按需自助服务的计算资源,支持管理裸机,虚拟机和容器
CINDER块存储服务提供块存储服务,为虚拟机实例提供持久化存储,调用不同存储接口驱动,将存储设备转化成块存储池,用户无需了解存储实际部署位置或设备类型
SWIFT对象存储服务提供高度可用、分布式、最终一致的对象存储服务,可以高效、安全且廉价地存储大量数据,非常适合存储需要弹性扩展的非结构化数据
NEUTRON网络服务负责管理虚拟网络,专注于为 OpenStack 提供网络即服务,依赖 Keystone 认证服务
HEAT编排服务为云应用程序编排 OpenStack 基础架构资源,提供 OpenStack 原生 REST API 和 CloudFormation 兼容的查询 API
CEILOMETER计量服务Ceilometer项目是一项数据收集服务,提供跨当前 OpenStack 核心组件规范化和转换数据的能力,其数据可为所有 OpenStack 核心组件提供客户计费、资源跟踪和警报功能

在这里插入图片描述

3. 安装 OpenStack

3.1 配置模板机

从模板机中克隆一台虚拟机作为 OpenStack 模板机使用,配置信息如下:

  • CPU: 不低于 4 核
  • 内存: 不低于 8 GB
  • 磁盘: 不低于 100 GB
  • 网卡: 1 张,NAT 模式
  • 操作系统: CentOS 8 Stream(可视情况而定)
  1. 配置 yum 源
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# cat <<EOF > /etc/yum.repos.d/openstack.repo
[centos-openstack-victoria]
name=CentOS 8 - OpenStack victoria
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/cloud/x86_64/openstack-victoria/
gpgcheck=0
enabled=1[highavailability]
name=CentOS Stream 8 - HighAvailability
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/HighAvailability/x86_64/os/
gpgcheck=0
enabled=1[nfv]
name=CentOS Stream 8 - NFV
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/NFV/x86_64/os/
gpgcheck=0
enabled=1[rt]
name=CentOS Stream 8 - RT
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/RT/x86_64/os/
gpgcheck=0
enabled=1[resilientstorage]
name=CentOS Stream 8 - ResilientStorage
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/ResilientStorage/x86_64/os/
gpgcheck=0
enabled=1[extras-common]
name=CentOS Stream 8 - Extras packages
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/extras-common/
gpgcheck=0
enabled=1[extras]
name=CentOS Stream $releasever - Extras
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/os/
gpgcheck=0
enabled=1[centos-ceph-pacific]
name=CentOS - Ceph Pacific
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific/
gpgcheck=0
enabled=1[centos-rabbitmq-38]
name=CentOS-8 - RabbitMQ 38
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/messaging/x86_64/rabbitmq-38/
gpgcheck=0
enabled=1[centos-nfv-openvswitch]
name=CentOS Stream 8 - NFV OpenvSwitch
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/nfv/x86_64/openvswitch-2/
gpgcheck=0
enabled=1[baseos]
name=CentOS Stream 8 - BaseOS
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/BaseOS/x86_64/os/
gpgcheck=0
enabled=1[appstream]
name=CentOS Stream 8 - AppStream
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/AppStream/x86_64/os/
gpgcheck=0
enabled=1[powertools]
name=CentOS Stream 8 - PowerTools
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/PowerTools/x86_64/os/
gpgcheck=0
enabled=1
EOF[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
  1. 安装基本软件包
yum install -y bash-completion open-vm-tools net-tools chrony.x86_64
source /usr/share/bash-completion/bash_completion
  1. 配置 Hosts
echo '10.1.8.10 controller' >> /etc/hosts
echo '10.1.8.11 compute' >> /etc/hosts
  1. 关闭 SELinux
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
  1. 清除密钥信息
rm -rf /etc/ssh/ssh_host_*
  1. 清除 Machine ID
cat /dev/null > /etc/machine-id
cat /etc/machine-id
  1. 关机,打快照

3.2 配置控制节点与计算节点

根据模板机快照克隆出控制节点主机与计算节点主机:

控制节点主机计算节点主机
主机名controllercompute
IP 地址10.1.8.1010.1.8.11
  1. 配置主机基本信息
# ===== Controller =====
hostnamectl set-hostname controller
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2
nmcli connection up ens160# ===== Compute =====
hostnamectl set-hostname compute
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 10.1.8.11/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2
nmcli connection up ens160
  1. 配置时间服务器
# ===== Controller =====
[root@controller ~]# vim /etc/chrony.conf
# pool 2.centos.pool.ntp.org iburst
server ntp.aliyun.com iburst
# Allow NTP client access from local network.
#allow 192.168.0.0/16
allow 10.1.8.0/24[root@controller ~]# systemctl restart chronyd
[root@controller ~]# systemctl enable chronyd# ===== Compute =====
[root@compute ~]# vim /etc/chrony.conf
# pool 2.centos.pool.ntp.org iburst
server controller iburst[root@compute ~]# systemctl restart chronyd
[root@compute ~]# systemctl enable chronyd

配置完成后关闭操作系统并打快照

  1. 安装 OpenStack
# 安装 OpenStack 软件包
[root@controller ~]# yum install -y openstack-packstack# 生成应答文件
[root@controller ~]# packstack --gen-answer-file=answers.txt
Packstack changed given value  to required value /root/.ssh/id_rsa.pubAdditional information:* Parameter CONFIG_NEUTRON_L2_AGENT: You have chosen OVN Neutron backend. Note 
that this backend does not support the VPNaaS plugin. Geneve will be used as the 
encapsulation method for tenant networks# 更改应答文件
[root@controller ~]# sed -i '/^CONFIG_COMPUTE_HOSTS=/cCONFIG_COMPUTE_HOSTS=10.1.8.10,10.1.8.11' answers.txt
#                                                                          |--------|--------| 控制节点与存储节点 IP 地址
[root@controller ~]# sed -i '/^CONFIG_PROVISION_DEMO=/cCONFIG_PROVISION_DEMO=n' answers.txt
[root@controller ~]# sed -i '/^CONFIG_HEAT_INSTALL=/cCONFIG_HEAT_INSTALL=y' answers.txt
[root@controller ~]# sed -i '/^CONFIG_NEUTRON_OVN_BRIDGE_IFACES=/cCONFIG_NEUTRON_OVN_BRIDGE_IFACES=brex:ens160' answers.txt
#                                                                                                       |----| 网卡设备名
[root@controller ~]# sed -i.bak -r 's/(.+_PW)=[0-9a-z]+/\1=huawei/g' answers.txt
#                                                          |----| 此处为密码,可自行设置# 关闭网络管理
[root@controller ~]# systemctl stop NetworkManager; systemctl disable NetworkManager; systemctl mask NetworkManager
[root@compute ~]# systemctl stop NetworkManager; systemctl disable NetworkManager; systemctl mask NetworkManager# 安装 OpenStack
[root@controller ~]# packstack --answer-file=answers.txt
# 注:整个安装过程会持续近 45 分钟,且长时间处于一个页面,属于正常现象
**** Installation completed successfully ******

完成后可以在浏览器输入控制节点的 IP 地址测试

在这里插入图片描述

  1. 开启网络服务
[root@controller ~]# systemctl start network
[root@controller ~]# systemctl enable network[root@compute ~]# systemctl start network
[root@compute ~]# systemctl enable network
  1. 配置 OpenStack 命令补全
[root@controller ~]# openstack complete >> /etc/bash_completion.d/complete
The 'openstack bgp speaker show dragents' CLI is deprecated and will be removed 
in the future. Use 'openstack bgp dragent list' CLI instead.

关机,打快照

一定要打快照!!!
一定要打快照!!!
一定要打快照!!!

至此安装结束

4. 界面管理:OpenStack - HORIZON

4.1 网页端

打开浏览器,输入 controller 主机的 IP 地址访问 web 端网页

输入用户名与密码进行登录,管理员用户名默认为 admin

在这里插入图片描述

完成登录后,主页面为 “项目-计算-概览” 页面,左侧为管理选项,中间为管理界面,中上方为当前目录,左上方为项目切换按钮,右上角为用户管理按钮

在这里插入图片描述

点击导航栏的 “管理员”、“概览”,可以看到整个系统的使用状况摘要

在这里插入图片描述

点击导航栏的 “身份管理”、“项目”,可以看到项目的界面

在这里插入图片描述

如需修改用户名与密码,可以点击右上方用户名、“设置”、“修改密码”,即可打开密码重置页面

在这里插入图片描述

创建用户

点击 “身份管理”、“用户”、“创建用户”,填写必要信息,即可创建一个新用户

示例:为 admin 项目创建一个普通用户 user1

在这里插入图片描述

创建完成后可自行尝试以新用户身份登录

4.2 命令行

远程连接到 OpenStack Controller 主机

4.2.1 登入 OpenStack 命令行

使用命令 source 命令可以进入 OpenStack 命令行,语法如下:

source 认证文件# 示例
[root@controller ~ 19:05:17]# source keystonerc_admin 
[root@controller ~(keystone_admin)]# # OpenStack 管理命令行

完成登录后,可以执行一条命令验证登录,如

[root@controller ~(keystone_admin)]# openstack project list
+----------------------------------+----------+
| ID                               | Name     |
+----------------------------------+----------+
| 4f1858067e5741aca8c7ce11ec53f9cb | admin    |
| 6bfedc999fec49f99cf3805f1dc64096 | services |
+----------------------------------+----------+
# Success

如果想要以别的用户角色进入 OpenStack 命令行,需要为对应的用户创建一个验证文件,以刚刚创建的 user1 用户为例,操作如下:

# 1. 复制 admin 用户的认证文件,并将用户名更改为 user1
[root@controller ~(keystone_admin)]# cp keystonerc_admin keystonerc_user1# 2. 更改文件内与用户信息相关的内容
[root@controller ~(keystone_admin)]# vim keystonerc_user1 
unset OS_SERVICE_TOKENexport OS_USERNAME=user1    # 用户名export OS_PASSWORD='huawei' # 密码export OS_REGION_NAME=RegionOneexport OS_AUTH_URL=http://10.1.8.10:5000/v3 # 登录地址export PS1='[\u@\h \W(keystone_user1)]\$ '  # 命令提示符格式export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3# 3. 以 user1 用户身份登录
[root@controller ~(keystone_admin)]# source keystonerc_user1 
[root@controller ~(keystone_user1)]# # Success

5. 认证管理:OpenStack - KEYSTONE

5.1 KEYSTONE 基本概念

Keystone 是 OpenStack 的核心身份认证服务,负责管理用户身份验证、服务目录管理以及访问权限控制。它为整个云平台提供了统一的认证机制,确保只有经过授权的用户和服务才能访问相应资源。

理解 Keystone 的核心概念是掌握 OpenStack 身份管理的基础,以下为关键术语及其含义的详细说明:

关键字含义
Domain,Keystone 中一个虚拟概念,一个域是一组 User、Group 或 Project 的容器
User用户,是可以通过 Keystone 访问 OpenStack 服务的个人、系统或某个服务
Group用户组,是一组 User 的容器,可以向 Group 中添加用户,并直接给 Group 分配角色
Project项目,是各个服务中一些可以访问的资源集合,项目只需在某个域下唯一即可
Role角色,具有一组定义的用户权限和特权以执行一组特定操作,角色不同,被赋予的权限不同
Service服务,一种 OpenStack 服务,服务会对外暴露一个或多个端点,用户可以通过这些端点访问资源并执行操作
Endpoint端点,是指一个可以用来访问某个具体服务的网络地址
Token令牌,是允许访问特定资源的凭证
Credential凭证,确认用户身份的数据,如用户的用户名和密码

5.2 域 Domain

一个域可以对应一个大的机构、一个数据中心,并且必须全局唯一

云的终端用户可以在自己的Domain中创建多个 Project、User、Group 和 Role。具备对多个 Project 进行统一管理的能力

在 OpenStack 命令行中,使用 openstack domain 命令对域进行管理

5.2.1 查看域

使用命令 openstack domain list 查看当前系统的域列表

示例:

[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID                               | Name    | Enabled | Description        |
+----------------------------------+---------+---------+--------------------+
| default                          | Default | True    | The default domain |
| ef4dc053cfcb41f38d496152f8c82be4 | heat    | True    |                    |
+----------------------------------+---------+---------+--------------------+

5.2.2 创建域

使用 openstack domain create 命令创建新的域,语法如下:

openstack domain create 域名# 示例
[root@controller ~(keystone_admin)]# openstack domain create domain-test
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | dfe813d348db481eaacbf42bc57d6e86 |
| name        | domain-test                      |
| options     | {}                               |
| tags        | []                               |
+-------------+----------------------------------+
[root@controller ~(keystone_admin)]# openstack domain list # 查看列表验证结果
+----------------------------------+-------------+---------+--------------------+
| ID                               | Name        | Enabled | Description        |
+----------------------------------+-------------+---------+--------------------+
| default                          | Default     | True    | The default domain |
| dfe813d348db481eaacbf42bc57d6e86 | domain-test | True    |                    | # 创建成功
| ef4dc053cfcb41f38d496152f8c82be4 | heat        | True    |                    |
+----------------------------------+-------------+---------+--------------------+

Keystone 会通过认证信息(Credential,如密码等)验证用户请求的合法性,通过验证的用户将会分配到一个特定的令牌,该令牌可以被当作后续资源访问的一个通行证,并非全局唯一,只需要在域内唯一即可。

5.2.3 开启多域登录

开启多域登录需要将位于 /etc/openstack-dashboard 目录下的 openstack 配置文件 local_settings 中的 OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT 参数值设置为 True

[root@controller ~(keystone_admin)]# vim /etc/openstack-dashboard/local_settings
# 配置项在第 83 行附近
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

完成后配置后,重启 httpd 服务,然后就可以在网页端看到登录时有域选项

[root@controller ~(keystone_admin)]# systemctl restart httpd

在这里插入图片描述

进入系统后,也可以在左上角显示当前项目的位置切换当前域

在这里插入图片描述

5.2.4 删除域

使用 openstack domain delete 命令删除域,再删除之前,还需要先将域停用,语法如下:

# 1. 停用域
openstack domain set --disable 域名
# 2. 删除域
openstack domain delete 域名# 示例
# ===== 1. 停用域 =====
[root@controller ~(keystone_admin)]# openstack domain set --disable domain-test# ===== 2. 删除域 =====
[root@controller ~(keystone_admin)]# openstack domain delete domain-test# ===== 3. 查看结果 =====
[root@controller ~(keystone_admin)]# openstack domain list
+----------------------------------+---------+---------+--------------------+
| ID                               | Name    | Enabled | Description        |
+----------------------------------+---------+---------+--------------------+
| default                          | Default | True    | The default domain |
| ef4dc053cfcb41f38d496152f8c82be4 | heat    | True    |                    |
+----------------------------------+---------+---------+--------------------+

5.3 用户 User

Keystone 会通过认证信息(Credential,如密码等)验证用户请求的合法性,通过验证的用户将会分配到一个特定的令牌,该令牌可以被当作后续资源访问的一个通行证,并非全局唯一,只需要在域内唯一即可

在 OpenStack 命令行中,使用 openstack user 命令对用户进行管理

5.3.1 查看用户

使用命令 openstack user list 可以查看系统中的所有用户

[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID                               | Name       |
+----------------------------------+------------+
| 9185e1a6e1104d599800b8dc991648fa | admin      |
| 2691dc95f3904149b4b68c622a5f8fb3 | heat_admin |
| a16a1b2282854db7a3a67401e065efb0 | glance     |
| 1b6c73cd0f1a46b39d38d428242c9536 | cinder     |
| 4801377f70af47029d24de21327d0163 | nova       |
| 1eafa4f84fba40ba9a7c5d84adc0f7d2 | placement  |
| 488261f809784873b881a4ce95562557 | neutron    |
| 47b260ab202a4e6ea9e76bfb16fe9693 | swift      |
| 510e37e577fa43409ab9d294b8a4f163 | heat       |
| 4f40959cd70a4bc69f4c2ea1d1d1b92d | heat-cfn   |
| cb70cc5072144949a94fc7f413c2d372 | gnocchi    |
| 2e5877e2b9124e85b0e552c085beb0ac | ceilometer |
| a00ae338fcc04c2db3d3a23e06ab4e1b | aodh       |
| 43b88044bfcf47ed9efdaeee22dd2b2f | user1      |
+----------------------------------+------------+

使用命令 openstack user show 用户名 可以查看指定用户的详细信息

[root@controller ~(keystone_admin)]# openstack user show admin
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| email               | root@localhost                   |
| enabled             | True                             |
| id                  | 9185e1a6e1104d599800b8dc991648fa |
| name                | admin                            |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

5.3.2 创建用户

使用 openstack user create 创建用户,语法如下:

openstack user create [选项及参数] 用户名
# 常用选项
# --password PASSWORD: 指定用户通过 PASSWORD 密码进行登录
# --domain DOMAIN: 将用户加入 DOMAIN 域,默认加入 Default 域
# --email EMAIL: 邮箱地址,默认为 root@localhost
# --description TEXT: 描述
# --password-Prompt: 交互式输入密码
# --enable: 启用用户(默认)
# --disable: 禁用用户# 示例 1:创建一个用户 user1,密码为 huawei
[root@controller ~(keystone_admin)]# openstack user create --password huawei user1
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 43b88044bfcf47ed9efdaeee22dd2b2f |
| name                | user1                            |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+# 示例 2:创建一个用户 user2,密码为 huawei,隶属于 domain-test 域,默认为禁用状态
[root@controller ~(keystone_admin)]# openstack user create --password huawei --domain domain-test --disable user2
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | 468eedb41b254a70b337d64f3c9ce24a | # domain-test 域 ID
| enabled             | False                            | # 默认状态为禁用
| id                  | 323b966bd1f1453cb8f85279e9dbce37 |
| name                | user2                            |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+# 查看结果
[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID                               | Name       |
+----------------------------------+------------+
| 9185e1a6e1104d599800b8dc991648fa | admin      |
| ...                              | ...        |
| 43b88044bfcf47ed9efdaeee22dd2b2f | user1      | # HERE
| 323b966bd1f1453cb8f85279e9dbce37 | user2      | # HERE
+----------------------------------+------------+

5.3.3 修改用户信息

使用 openstack user set 命令修改用户信息,语法如下:

openstack user set 选项与参数 用户名
# 常用选项
# --password PASSWORD: 修改用户密码为 PASSWORD
# --email EMAIL: 修改用户邮箱地址为 EMAIL
# --description TEXT: 修改描述
# --password-Prompt: 交互式修改密码
# --enable: 启用用户
# --disable: 禁用用户# 示例:修改 user2 的登录密码为 centos,设置其邮箱地址为 abc@123.com,启用账户
[root@controller ~(keystone_admin)]# openstack user set --password centos --email abc@123.com --enable user2
[root@controller ~(keystone_admin)]# openstack user show user2
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | 468eedb41b254a70b337d64f3c9ce24a |
| email               | abc@123.com                      | # 邮箱地址已修改
| enabled             | True                             | # 账号已启用
| id                  | 323b966bd1f1453cb8f85279e9dbce37 |
| name                | user2                            |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

5.3.4 删除用户

使用命令 openstack user delete 用户名 可以删除用户

# 示例:删除用户 user2
[root@controller ~(keystone_admin)]# openstack user delete user2
[root@controller ~(keystone_admin)]# openstack user list
+----------------------------------+------------+
| ID                               | Name       |
+----------------------------------+------------+
| 9185e1a6e1104d599800b8dc991648fa | admin      |
| ...                              | ...        |
| 43b88044bfcf47ed9efdaeee22dd2b2f | user1      |
+----------------------------------+------------+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97869.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97869.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/97869.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql小数取整

1 向下取整 SELECT FLOOR(123.456); -- 结果: 1232 向上取整 SELECT CEIL(123.001); -- 结果: 1243 四舍五入 SELECT ROUND(123.456); -- 结果: 123 SELECT ROUND(123.556); -- 结果: 1244 截断&#xff08;不四舍五入&#xff0c;直接截断小数位&#xff09; SELECT …

Day43 PHP(mysql不同注入类型、mysql不同注入点、mysql传输不同数据类型 )

一、不同注入类型实际&#xff1a;我们未知sql是哪种类型&#xff0c;只能靠试/使用sql工具原理&#xff1a;闭合程序员写的sql语句&#xff0c;并且执行我们所需要的sql语句&#xff0c;最后将闭合后多余的 用-- 或者#注释掉。 总结一下就是先闭合&#xff0c;后注释。共四种…

Linux应用开发(君正T23):三网智能切换及配网功能

前段时间接手了一个监控项目&#xff0c;其中甲方对于设备的要求有一条就是实现网口eth、WiFi、4G三种手段的联网方式并且当某一个网络不好的时候就去切换到下一个能用的网络&#xff0c;让监控设备持续不断的有网络&#xff0c;保证监控数据的上传。这个部分的功能就交由我来实…

IvorySQL 4.6:DocumentDB+FerretDB 实现 MongoDB 兼容部署指南

背景 MongoDB 诞生之初&#xff0c;便以出色的易用性与详尽的驱动程序文档脱颖而出&#xff0c;堪称对传统关系型数据库的一次重要革新&#xff0c;也正因如此&#xff0c;它迅速成为开发者社区的热门之选。 然而&#xff0c;随着其许可模式从开源转向 SSPL 许可证&#xff0…

论文阅读:arixv 2025 One Token to Fool LLM-as-a-Judge

总目录 大模型相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2507.08794 https://www.doubao.com/chat/20698287584991234 速览 这篇文档主要讲了一个关于“大语言模型当裁判”的重要发现——很多我们以为靠谱的AI裁…

webrtc弱网-AlrDetector类源码分析与算法原理

AlrDetector&#xff08;应用受限区域检测器&#xff09;是WebRTC中用于检测发送端是否处于应用层限速状态的核心组件。它通过维护一个基于时间间隔的预算系统&#xff0c;监控实际发送数据量与网络容量之间的关系。当发送速率持续低于网络容量的设定比例&#xff08;如65%&…

ABP + Verify(快照) 驱动的 PDF/Excel 导出回归

ABP + Verify(快照) 驱动的 PDF/Excel 导出回归 🚀 📚 目录 ABP + Verify(快照) 驱动的 PDF/Excel 导出回归 🚀 0) TL;DR ✨ 1) 背景与目标 🎯 2) 架构与职责(解耦渲染器) 🧩 3) “确定性”前置条件(去伪差异) 🔒 4) PDF 回归策略(以 QuestPDF 为例) 📄 4.…

SIFT特征匹配实战:KNN算法实现指纹认证

这个利用了前面学到的SIFT特征检测来实现的&#xff0c;然后这里主要就是引入了一个新的匹配器。这里匹配是用KNN算法进行匹配的。下面来看下细节。介绍函数由于要频繁展示&#xff0c;所以这里定义了一个函数。def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)导入…

网络安全渗透测试第一步信息收集

信息收集是渗透测试中最基础且关键的一步&#xff0c;它直接影响后续漏洞发现和利用的成功率。本文将系统介绍信息收集的常用方法、工具和技巧&#xff0c;帮助你在实战中高效定位目标弱点。 一、搜索引擎利用 1. Google Hacking 通过Google搜索语法快速定位敏感信息、后台地…

C++——类和对象1

1.类的定义1.1 类定义格式class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{ }中的内容是类的主题为了&#xff0c;注意类定义结束时后面的分号不能省略。类体中的内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量&#xff1b;类中的函数称为类的方…

动手学Agent:Agent设计模式——构建有效Agent的7种模型

Agent本身的定义也不是绝对的&#xff0c;从LLM到最高等级的Agent&#xff0c;中间是有大量灰度地带的&#xff0c;在Anthropic看来&#xff0c;Agent可以以多种方式定义&#xff0c;有些人将完全自主系统定义为Agent&#xff0c;而另一些团队则将预定义的工作流程定义为Agent。…

Windows 下 .venv 激活脚本深度定制:同时注入 PyTorch 调试日志与国内网络加速通道——从“能跑”到“好调”的完整工程化方案

Windows 下 .venv 激活脚本深度定制&#xff1a;同时注入 PyTorch 调试日志与国内网络加速通道 ——从“能跑”到“好调”的完整工程化方案 一、为什么非得改激活脚本&#xff1f; 重复劳动最耗时 每次打开终端都要敲四五行 set/export&#xff0c;人脑就是不可靠的剪贴板。 环…

[BX]和loop指令,debug和masm汇编编译器对指令的不同处理,循环,大小寄存器的包含关系,操作数据长度与寄存器的关系,段前缀

[bx]是什么[bx]这个表达方式和[0]很像&#xff0c;他们俩的功能也很像。之前就提到了&#xff0c;[0]表示一个内存单元&#xff0c;他的偏移地址是0。从这边我们可以引出内存单元的定义&#xff1a;要有内存单元的地址&#xff0c;要有内存单元的长度&#xff08;类型&#xff…

域格YM310 X09移芯CAT1模组HTTPS连接服务器

HTTPS连接服务器 本文档介绍了HTTPS连接服务器的大致流程&#xff0c;测试服务器为httpbin.org。 HTTPS连接服务器流程 创建证书文件 创建一个文件 ATFSCREATE<filename>参数&#xff1a;<filename> 文件名 写入CA证书 ATFSWRITE<filename>,<mode&…

【ManiSkill】常见envs学习笔记

1. StackCube-v1 用于模拟机器人在桌面场景中将红色立方体&#xff08;cubeA&#xff09;堆叠到绿色立方体&#xff08;cubeB&#xff09;上的操作。该任务强调精确抓取、放置和稳定性控制。成功条件包括红色立方体稳定堆叠在绿色立方体上且不被机器人抓取。 参数 (Arguments…

Java 网络编程全解析

前言&#xff1a;网络编程的意义与价值 前言&#xff1a;网络编程的意义与价值 在当今互联网时代&#xff0c;网络编程是软件开发的核心技能之一。无论是桌面应用、移动应用还是企业级系统&#xff0c;几乎都需要与网络交互。Java 作为一门跨平台的编程语言&#xff0c;提供了完…

HarmonyOS应用拉起系列(三):如何直接拉起腾讯/百度/高德地图进行导航

在鸿蒙应用开发中&#xff0c;经常需要跳转第三方地图应用&#xff08;如 腾讯地图、百度地图、高德地图&#xff09;进行导航。无论是出行类 App、物流类 App&#xff0c;还是线下活动类应用&#xff0c;都存在“跳转地图导航”的实际需求。写完HarmonyOS应用拉起系列一和二后…

PCGrad解决多任务冲突

论文解读&#xff1a;"Gradient Surgery for Multi-Task Learning" 1. 论文标题直译 Gradient Surgery: 梯度手术for Multi-Task Learning: 应用于多任务学习 合在一起就是&#xff1a;为多任务学习量身定制的梯度手术。这个名字非常形象地概括了它的核心思想。 …

Nvidia显卡架构解析与cuda应用生态浅析

文章目录 0. Nvidia显卡简介 一、主要显卡系列 二、主要GPU架构与代表产品 1.main 1.1 CUDA 13.0 的重大变化 1.2 V100 的硬件短板已显现 1.3 这意味着什么? 1.4 写在后面 彩蛋:V100 0. Nvidia显卡简介 一、主要显卡系列 GeForce 系列(消费级) 用途:游戏、创作、日常图形…

开发指南:使用 MQTTNet 库构建 .Net 物联网 MQTT 应用程序

一、背景介绍 随着物联网的兴起&#xff0c;.Net 框架在构建物联网应用程序方面变得越来越流行。微软的 .Net Core 和 .Net 框架为开发人员提供了一组工具和库&#xff0c;以构建可以在 Raspberry Pi、HummingBoard、BeagleBoard、Pine A64 等平台上运行的物联网应用程序。 MQT…