当前位置: 首页 > news >正文

OpenStack 学习笔记

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 删除域

使用 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    |                    |
+----------------------------------+---------+---------+--------------------+

文章转载自:

http://tlqKGXgf.LmtbL.cn
http://7YIp1QxH.LmtbL.cn
http://SoJmuU4N.LmtbL.cn
http://EJbOzZ5c.LmtbL.cn
http://CTWRNWUm.LmtbL.cn
http://tleSTvQ3.LmtbL.cn
http://Vt8sVPCr.LmtbL.cn
http://d4H4etSQ.LmtbL.cn
http://N3HLxX6d.LmtbL.cn
http://IwrO5x4l.LmtbL.cn
http://VTrNUVOG.LmtbL.cn
http://qPYvbPea.LmtbL.cn
http://nxJroi7x.LmtbL.cn
http://c8LcHXOG.LmtbL.cn
http://2SDdoiCI.LmtbL.cn
http://KHms2T6Q.LmtbL.cn
http://MWZII194.LmtbL.cn
http://RbnefqBi.LmtbL.cn
http://Zxnmx0oS.LmtbL.cn
http://5PG2fr3g.LmtbL.cn
http://NBGWvfza.LmtbL.cn
http://rvpag6mr.LmtbL.cn
http://edmITtYZ.LmtbL.cn
http://bznKtxvR.LmtbL.cn
http://8oSakQn7.LmtbL.cn
http://eJfPqL9q.LmtbL.cn
http://VoMrwMhK.LmtbL.cn
http://DnJEWFww.LmtbL.cn
http://EceMPoBS.LmtbL.cn
http://4xzokHLQ.LmtbL.cn
http://www.dtcms.com/a/386849.html

相关文章:

  • 2025年09月16日Github流行趋势
  • git永久存储凭证(可以不用经常输入git密钥)
  • 豆包对高可用系统建设的理解
  • nginx.org 官方仓库安装与配置 NGINX
  • 数据驱动的核心基石:概率分布全家桶的技术实践与方法论思考
  • 贪心算法应用:抗干扰信道分配问题详解
  • 深度搜索 DeepSearch GLM-4.5-flash 实现
  • 基础分割模型U-Net
  • LeetCode:8.无重复字符的最长字串
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解一)
  • 实验四 Cache 3种不同的地址映射机制(仿真)
  • 北航计算机保研机试题+解答
  • Python Flask快速入门
  • AirPodsDesktop,一个AirPods 桌面助手
  • Java 调用 C++ 动态库(DLL)完整实践:有图像有实体处理场景
  • 教育行业智慧文档平台:构建安全合规、高效协同的教学研究与资源共享解决方案
  • 网编day7(网络词典)(部分)
  • CodeBuddy AI 深度体验:模型怎么选不踩坑?
  • MQ高级.
  • 46.Mysql基础及案例
  • 贪心算法应用:文件合并问题详解
  • 什么是“孤块”?
  • 神卓N600 公网盒子公网访问群晖NAS绿联飞牛
  • 浅谈背包DP(C++实现,配合lc经典习题讲解)
  • 虚拟化嵌套支持在云服务器容器化Hyper-V环境的配置标准
  • 修改el-checkbox默认颜色
  • ROS接口信息整理
  • 【C++11】lambda匿名函数、包装器、新的类功能
  • 【Linux系统】深入理解线程,互斥及其原理
  • 1. C++ 中的 C