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(可视情况而定)
- 配置 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
- 安装基本软件包
yum install -y bash-completion open-vm-tools net-tools chrony.x86_64
source /usr/share/bash-completion/bash_completion
- 配置 Hosts
echo '10.1.8.10 controller' >> /etc/hosts
echo '10.1.8.11 compute' >> /etc/hosts
- 关闭 SELinux
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
- 清除密钥信息
rm -rf /etc/ssh/ssh_host_*
- 清除 Machine ID
cat /dev/null > /etc/machine-id
cat /etc/machine-id
- 关机,打快照
3.2 配置控制节点与计算节点
根据模板机快照克隆出控制节点主机与计算节点主机:
控制节点主机 | 计算节点主机 | |
---|---|---|
主机名 | controller | compute |
IP 地址 | 10.1.8.10 | 10.1.8.11 |
- 配置主机基本信息
# ===== 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
- 配置时间服务器
# ===== 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
配置完成后关闭操作系统并打快照
- 安装 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 地址测试
- 开启网络服务
[root@controller ~]# systemctl start network
[root@controller ~]# systemctl enable network[root@compute ~]# systemctl start network
[root@compute ~]# systemctl enable network
- 配置 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 |
+----------------------------------+------------+