文章目录
1.1OpenStack核心组件和功能
Keystone(身份认证与授权服务)
#### 作为 OpenStack 的 "安全网关",所有组件的访问都需要通过 Keystone 的认证。
#### 核心功能包括:用户管理(创建、删除、权限设置)、角色定义(如管理员、普通用户)、项目划分(资源隔离的逻辑单位,类似 "租户")、令牌管理(生成临时访问令牌,验证请求合法性)。
#### 支持多种认证方式,如密码、密钥对、LDAP 集成等,确保资源访问的安全性。
Glance(镜像服务)
#### 相当于虚拟机的 "模板仓库",存储的镜像包含操作系统、预装软件等,可直接用于创建 Nova 虚拟机实例。
#### 支持多种镜像格式(如 QCOW2、RAW、VMDK 等),并能与 Swift(对象存储)等集成实现镜像的持久化存储和分布式管理。
#### 提供镜像版本控制、元数据管理(如镜像大小、操作系统类型)等功能。
Nova(计算服务)
#### OpenStack 的 "计算引擎",负责虚拟机实例的全生命周期管理:从基于 Glance 镜像创建实例,到根据资源负载调度实例到合适的物理节点,再到实例的启停、迁移、删除等。
#### 本身不直接提供虚拟化能力,而是通过调用底层虚拟化技术(如 KVM、Xen、Docker 等)实现虚拟机管理。
#### 依赖 Neutron 提供网络、Cinder 提供存储,与 Keystone 交互进行权限验证。
Neutron(网络服务)
#### 提供 "虚拟网络基础设施",让虚拟机实例像物理机一样拥有独立的网络配置。
#### 核心功能包括:虚拟交换机(vSwitch)、虚拟路由器(vRouter)、IP 地址分配(DHCP)、安全组(防火墙规则)、负载均衡、VPN 等。
#### 支持多种网络模式(如 VLAN、VXLAN),可实现不同项目 / 租户间的网络隔离,满足多租户场景需求。
Cinder(块存储服务)
#### 为虚拟机提供 "持久化块存储",类似物理机的硬盘,即使虚拟机删除,存储卷的数据也能保留。
#### 支持卷的创建、挂载、卸载、快照(备份)、扩容等操作,可与 Nova 集成,直接为虚拟机分配存储卷。
#### 底层可对接多种存储后端(如本地硬盘、SAN 存储、Ceph 等),提供高可用和性能优化。
Horizon(Web 管理界面)
#### OpenStack 的 "可视化控制台",通过 Web 界面将上述所有组件的功能整合,方便用户(无需命令行)进行资源管理,如创建虚拟机、配置网络、上传镜像等。
#### 支持多租户视图隔离,不同用户只能看到自己有权限的资源,操作逻辑与组件 API 一一对应。
其他常用组件
Swift(对象存储服务):用于存储非结构化数据(如图片、文档、日志等),采用分布式架构,适合海量数据的持久化存储,可独立于虚拟机存在,常作为 Glance 的后端存储或单独提供对象存储服务。
Trove(数据库服务):提供托管的数据库服务,支持 MySQL、PostgreSQL 等主流数据库,自动完成数据库的部署、备份、扩容等运维工作,简化用户的数据库管理。
Heat(编排服务):通过 "模板" 定义云计算资源(如虚拟机、网络、存储的组合),实现资源的自动化部署和生命周期管理,适合复杂应用的一键部署(如多节点集群)。
Ceilometer(计量服务):监控 OpenStack 资源的使用情况(如虚拟机运行时间、网络流量、存储占用),为计费、资源优化提供数据支持。
组件间的协同关系
OpenStack 的组件通过统一的 API 和消息队列(如 RabbitMQ)协同工作,例如:
用户通过 Horizon 发起创建虚拟机的请求,请求先经 Keystone 认证;
Nova 接收请求后,从 Glance 获取指定镜像,向 Neutron 申请网络配置,向 Cinder 申请存储卷;
Nova 将这些资源整合,在合适的物理节点上创建并启动虚拟机实例;
整个过程中,Ceilometer 记录资源使用,Heat 可按模板自动重复上述流程。
这种模块化设计使得 OpenStack 具有高度的灵活性和可扩展性,用户可根据需求选择核心组件或集成其他服务,构建定制化的云计算平台。
2.1OpenStack案例环境
IP 地址 | 系统版本 | CPU | 内存 | 磁盘 | OpenStack 版本 |
---|---|---|---|---|---|
192.168.9.236 | CentOS7.3(64 位) | 8核 | 16GB | 30GB | Train 版本 |
2.1.1创建实例
实例:相当于在云计算环境中运行的一台 "虚拟计算机",就像我们日常使用的物理计算机一样,实例有自己的操作系统、CPU、内存、存储和网络等资源 。用户可以在实例上安装应用程序、部署服务,执行各种计算任务,比如搭建 Web 服务器、数据库服务器等。

在添加实例过程中,配置项填写如下脚本
#!/bin/bash
passwd root<<EOF
aptech
aptech
EOF
passwd centos<<EOF
aptech
aptech
EOF
sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
echo "UseDNS no" >> /etc/ssh/sshd_config
systemctl restart sshd

测试云主机和互联网的连通性
sqlping www.baidu.com PING www.baidu.com (220.181.112.244): 56 data bytes 64 bytes from 220.181.112.244: seq=0 ttl=126 time=14.693 ms 64 bytes from 220.181.112.244: seq=1 ttl=126 time=12.755 ms 64 bytes from 220.181.112.244: seq=2 ttl=126 time=9.271 ms
2.1.2绑定浮动IP地址
浮动IP地址:浮动 IP 地址是从外部网络(通常是与物理网络相连通的网络,能访问互联网等外部资源)中分配出来的公网 IP 地址,它可以被动态地关联到虚拟机实例的固定(内部)IP 地址上 。通过浮动 IP,外部网络中的设备(如其他服务器、用户的计算机等)能够访问到处于内部虚拟网络中的虚拟机实例。
2.1.3添加安全组规则
安全组:本质上是一组由用户自定义的网络访问规则的集合,类似于防火墙规则。每个虚拟机实例都可以关联一个或多个安全组。这些规则定义了哪些 IP 地址、端口和协议的网络流量被允许进入或离开虚拟机实例,从而保护虚拟机上运行的应用程序和数据免受未经授权的访问和攻击。

sql[root@openstack ~]# ping 172.16.1.163 PING 172.16.1.163 (172.16.1.163) 56(84) bytes of data. 64 bytes from 172.16.1.163: icmp_seq=1 ttl=63 time=2.85 ms 64 bytes from 172.16.1.163: icmp_seq=2 ttl=63 time=1.73 ms 64 bytes from 172.16.1.163: icmp_seq=3 ttl=63 time=1.32 ms 64 bytes from 172.16.1.163: icmp_seq=4 ttl=63 time=0.721 ms
sql[root@openstack ~]# ssh cirros@172.16.1.163 The authenticity of host '172.16.1.163 (172.16.1.163)' can't be established. ECDSA key fingerprint is SHA256:PGyaua19g3sV9OULGawmGxJdLzSpIRpngRkhuqhup0. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.163' (ECDSA) to the list of known hosts. cirros@172.16.1.163's password: $ ifconfig eth0 Link encap:Ethernet HWaddr FA:16:3E:8B:C3:1C inet addr:192.168.1.189 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::f816:3eff:fe8b:c31c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1442 Metric:1 RX packets:138 errors:0 dropped:0 overruns:0 frame:0 TX packets:218 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:15914 (15.5 KB) TX bytes:19533 (19.0 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
2.1.4创建密钥对
密钥对:密钥对由一对密钥组成,即公钥(Public Key)和私钥(Private Key) 。公钥是公开的,可以被任何人获取;私钥则必须严格保密,只有密钥对的拥有者知道。在 OpenStack 环境中,公钥被存储在虚拟机实例上,用于验证登录请求;私钥则由用户保管,用于在登录虚拟机实例时进行身份验证。
通过宿主机使用密钥登录云主机
sql[root@openstack ~]# useradd cirros [root@openstack ~]# mkdir /home/cirros/.ssh [root@openstack ~]# mv /home/cirros/.ssh/my-auth.pem /home/cirros/.ssh/id_rsa [root@openstack ~]# chmod 700 /home/cirros/.ssh [root@openstack ~]# chown -R cirros.cirros /home/cirros/.ssh [root@openstack ~]# chmod 600 /home/cirros/.ssh/id_rsa
sqlplaintext [root@openstack ~]# su - cirros [cirros@openstack ~]$ ssh 172.16.1.163 The authenticity of host '172.16.1.163 (172.16.1.163)' can't be established. ECDSA key fingerprint is SHA256:KDOK6Wn0VVmVnHEPVed2CimdMcdxzu10NVmUfg. ECDSA key fingerprint is MD5:ab:53:30:4a:65:b6:cb:12:05:cd:db:30:f6:de:ca. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.163' (ECDSA) to the list of known hosts. $ ifconfig eth0 Link encap:Ethernet HWaddr: FA:18:3E:71:0A:48 inet addr:192.168.1.155 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::f818:3eff:fe71:0a48/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1442 Metric:1 RX packets:129 errors:0 dropped:0 overruns:0 frame:0 TX packets:169 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:20062 (19.5 KB) TX bytes:17586 (17.1 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
2.1.5 创建及使用卷挂载
项目--卷--卷选项卡
进入到test云主机控制台,执行fdisk命令查看磁盘情况
sqlfdisk -l Disk /dev/vda: 1 GiB, 1073741824 bytes, 2097152 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: F05EDE64-4EFD-477A-B01E-B37CCD5D3EB4 Device Start End Sectors Size Type /dev/vda1 18432 2097118 2078687 1015M Linux filesystem /dev/vda15 2048 18431 16384 8M EFI System Partition table entries are not in disk order. Disk /dev/vdb: 2 GiB, 2147483648 bytes, 4194304 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes plaintext fdisk /dev/vdb sudo mkfs /dev/vdb1 sudo mount /dev/vdb1 /mnt df -h Filesystem Size Used Avail Use% Mounted on /dev 231.7M 0 231.7M 0% /dev /dev/vda1 980.0M 32.9M 905.8M 4% / tmpfs 238.8M 0 238.8M 0% /dev/shm tmpfs 238.8M 84.0K 238.7M 0% /run /dev/vdb1 2.0G 3.0M 1.9G 0% /mnt
2.1.6 快照管理
基于实例的快照
首先在当前云主机创建一个 test.txt 文件,并且写入内容
sqlecho test > test.txt cat test.txt test ifconfig eth0 Link encap:Ethernet HWaddr FA:16:3E:71:0A:46 inet addr:192.168.1.155 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::f816:3eff:fe71:0a46/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1442 Metric:1 RX packets:572 errors:0 dropped:0 overruns:0 frame:0 TX packets:519 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:52427 (51.1 KiB) TX bytes:66089 (64.5 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)