一、基础环境准备
1、yum源配置
# 切换到yum目录
[root@controller ~]# cd /etc/yum.repos.d/
# 创建备份目录
[root@controller yum.repos.d]# mkdir repo.bak
[root@controller yum.repos.d]# ls
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo ....
# 把原来的yum文件移到到备份目录
[root@controller yum.repos.d]# mv *.repo repo.bak/
# 下载阿里的yum源
[root@controller yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2523 100 2523 0 0 20847 0 --:--:-- --:--:-- --:--:-- 21025
# 清理yum
[root@controller yum.repos.d]# yum clean all && yum makecache
2、主机名修改
# 修改主机名
[root@asdad yum.repos.d]# hostnamectl set-hostname controller
# 让修改生效显示
[root@asdad yum.repos.d]# bash
[root@controller yum.repos.d]#
# 修改后hostname文件内容对应修改
[root@controller yum.repos.d]# cat /etc/hostname
controller
3、本地域名的解析
直接通过主机名访问主机,需要将主机名和IP地址进行绑定,绑定工作可以通过本地域名解析来实现。
Linux中的 /etc/hosts
文件可以将一些常用的域名和对应的IP建立对应关系。
默认hosts文件内容和意义:
[root@controller ~]# cat /etc/hosts
# 每一行都表示一个域名到Ip地址的映射关系
# 127.0.0.1表示IPv4的本地IP地址
# ::1表示IPv6的本地IP地址
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 # 第一个名称是主机名,后面的为主机的别名
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # 第一个名称是主机名,后面的为主机的别名
案例:将controller解析为内网IP——192.168.10.10
# 添加解析信息到文件最后一行
[root@controller ~]# echo \'192.168.10.10 controller\' >> /etc/hosts
[root@controller ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.10 controller
# ping通,解析正常
[root@controller ~]# ping controller
PING controller (192.168.10.10) 56(84) bytes of data.
64 bytes from controller (192.168.10.10): icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from controller (192.168.10.10): icmp_seq=2 ttl=64 time=0.034 ms
4、防火墙管理
CentOS7系统默认使用firewall作为系统防火墙,管理功能集成在系统服务管理命令 systemctl
中。
常用参数 |
功能说明 |
status |
查看服务运行状态 |
start |
开启服务 |
stop |
停止服务 |
enable |
服务开机启动 |
disable |
服务开机禁用 |
restart |
重启服务 |
# 停止防火墙和禁止开机启动防火墙
[root@controller ~]# systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# 查看防火墙是否关闭
[root@controller ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
二、Openstack基础支持服务
Openstack平台需要借助多种第三方提供的基础服务才能正常运行,数据库、消息队列、时间同步、缓存服务等。
1、Chrony时间同步服务
同一个系统内的计算机时间必须保持一致才能保证系统工作正常。
Chrony软件是一款开源的自由软件,包括两个核心组件:chronyd(后台守护程序)和chronyc(命令行用户管理工具)。
(1)时间同步服务配置
通过修改chrony配置可以将任意一台计算机配置成NTP服务器或NTP服务器连接的客户端。
# 安装chrony
[root@controller ~]# yum install -y chrony
# 查看chrony配置文件
[root@controller ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst # Centos官方提供了4个NTP服务器
server 2.centos.pool.ntp.org iburst # iburst作用:设置当NTP服务器一定时间没有应答时,客户端发送8倍数据包以提升同步成功率
server 3.centos.pool.ntp.org iburst
...略
# Allow NTP client access from local network.
allow 192.168.10.0/24 # 设置允许某个网段的chrony客户端使用本机NTP服务
...略
# 修改配置后,重启服务生效
[root@controller ~]# systemctl restart chronyd
[root@controller ~]# systemctl enable chronyd
(2)时间同步服务管理
时间同步由chronyc命令进行监控和管理。
功能说明 |
常用参数命令 |
查看 ntp_servers信息,加-v将显示对数据的说明 |
chronyc sources -v |
查看 ntp_servers 状态 |
chronyc sourcestats -v |
查看 ntp_servers 是否在线 |
chronyc activity -v |
查看 ntp 详细信息 |
chronyc tracking -v |
强制同步下系统时钟 |
chronyc -a makestep |
显示访问本服务器的客户端 |
chronyc clients |
添加新的ntp服务器 |
chronyc add server |
删除已有的ntp服务器 |
chronyc delete |
# 查看当前客户端与NTP服务器连接情况(不加-v)
[root@controller ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 119.28.183.184 2 6 17 4 +4589us[ +17ms] +/- 45ms
^- ntp1.ams1.nl.leaseweb.net 2 6 375 5 +20ms[ +32ms] +/- 235ms
^+ 85.199.214.102 1 6 377 4 -17ms[-4919us] +/- 134ms
^- pingless.com 2 6 377 4 -15ms[ -15ms] +/- 132ms
# 查看当前客户端与NTP服务器连接情况(加-v)
[root@controller ~]# chronyc sources -v
210 Number of sources = 4
.-- Source mode \'^\' = server, \'=\' = peer, \'#\' = local clock.
/ .- Source state \'*\' = current synced, \'+\' = combined , \'-\' = not combined,
| / \'?\' = unreachable, \'x\' = time may be in error, \'~\' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \\ | | zzzz = estimated error.
|| | | \\
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 119.28.183.184 2 6 17 6 +4589us[ +17ms] +/- 45ms
^- ntp1.ams1.nl.leaseweb.net 2 6 375 7 +20ms[ +32ms] +/- 235ms
^+ 85.199.214.102 1 6 377 6 -17ms[-4919us] +/- 134ms
^- pingless.com 2 6 377 6 -15ms[ -15ms] +/- 132ms
# 查看 ntp服务器 是否在线
[root@controller ~]# chronyc activity
200 OK
4 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address
# 添加腾讯NTP服务器
[root@controller ~]# chronyc add server time1.cloud.tencent.com
200 OK
# 删除腾讯的NTP服务器
[root@controller ~]# chronyc delete time1.cloud.tencent.com
200 OK
2、Openstack云计算平台框架
安装组件前,需要先将框架搭建起来。因此要安装由CentOS官方发布的Openstack云计算框架与客户端管理工具。
(1)安装Openstack框架和客户端
# 1.安装Openstack框架
# 模糊查询软件包名称
[root@controller ~]# yum list *-openstack-train
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Available Packages
centos-release-openstack-train.noarch 1-1.el7.centos extras
# 安装
[root@controller ~]# yum -y install centos-release-openstack-train
# 2.升级所有的软件包
# 自动检查所有可升级的软件包并升级
[root@controller ~]# yum upgrade -y
# 3.安装openstack客户端
[root@controller ~]# yum install -y python-openstackclient
# 4.查看openstack的版本号
[root@controller ~]# openstack --version
openstack 4.0.2
(2)禁用Centos的SElinux,安装openstack-selinux
selinux有三种工作模式:
强制模式(enforcing)————强制使用selinux的安全策略;
宽容模式(permissive)————不使用安全策略,只将相关信息写入日志;
禁用模式(disabled)————禁用selinux。
openstack-selinux:帮助openstack平台自动控制和管理selinux安全策略。
# 1.禁用Centos的SElinux
[root@controller ~]# vi /etc/selinux/config
...略
SELINUX=disabled 《————改为这样
...略
# 让修改配置生效
[root@controller ~]# setenforce 0
# 2.安装openstack-selinux
[root@controller ~]# yum install -y openstack-selinux
3、mariadb数据库
Mysql的创始人Michel Widenius主导开发完全兼容MYSQL、开源免费的MariaDB数据库。
MariaDB采用Maria存储引擎的MYSQL数据库的分支版本。
(1)安装mariadb
# mariadb-server:数据库后台服务
# python2-PyMySQL:python访问数据库的模块
[root@controller ~]# yum install -y mariadb-server python2-PyMySQL
(2)编辑数据库配置文件
配置文件是 /etc/my.cnf.d/
目录下所有后缀为 cnf
的文件。
配置文件中主要参数及功能:
参数 |
功能说明 |
port |
数据库对外服务的端口号,默认为3306 |
datadir |
数据库文件存放目录 |
bind-address |
绑定远程访问地址,只允许从该地址访问数据库 |
default-storage-engine |
默认存储引擎,MariaDB支持几十种存储引擎,其中InnoDB是比较常用的支持事务的存储引擎 |
innodb_file_per_table |
InnoDB引擎的独立表空间,让每个表的数据都单独保存 |
max_connections |
最大连接数 |
collation-server |
字符的排序规则,也称为排列字符集,每个字符集都对应一个或多个排列字符集 |
character-set-server |
字符集 |
[root@controller ~]# cd /etc/my.cnf.d/
[root@controller my.cnf.d]# ls
client.cnf mariadb-server.cnf
enable_encryption.preset mysql-clients.cnf
# 创建文件
[root@controller my.cnf.d]# touch openstack.cnf
# 写入信息
echo \'[mysqld]
bind-address = 192.168.10.10
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8\' > openstack.cnf
(3)启动mariadb
# 设置开机启动
[root@controller my.cnf.d]# systemctl enable mariadb
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
# 立即启动数据库
[root@controller my.cnf.d]# systemctl start mariadb
# 检查数据库启动情况
[root@controller my.cnf.d]# systemctl status mariadb
(4)初始化mariadb数据库
[root@controller ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we\'ll need the current
password for the root user. If you\'ve just installed MariaDB, and
you haven\'t set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 《输入当前密码,没有则直接按【Enter】键
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y 《是否设置新密码
New password: 《输入新密码
Re-enter new password: 《确认新密码
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y 《是否去掉匿名用户
... Success!
Normally, root should only be allowed to connect from \'localhost\'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y 《是否禁止root用户远程登录
... Success!
By default, MariaDB comes with a database named \'test\' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y 《是否去掉测试数据库
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y 《是否重新加载权限表
... Success!
Cleaning up...
All done! If you\'ve completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
(5)登录和使用数据库
# 登录数据库
[root@controller ~]# mysql -h localhost -uroot -p000000
Welcome to the MariaDB monitor. Commands end with ; or \\g.
Your MariaDB connection id is 16
Server version: 10.3.20-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.
MariaDB [(none)]> show databases;
MariaDB [(none)]> use mysql;
MariaDB [mysql]> show tables;
MariaDB [mysql]> exit
Bye
4、RabbitMQ消息队列服务
消息队列(Message Queue,MQ)是一种应用间的通信方式,消息发送到消息队列后由消息队列来确保消息的可靠传递,即消息发布者和消息使用者之间并不产生直接关系。
OpenStack各个组件之间就是通过消息队列进行相互通信的。其中RabbitMQ是一个开源的、应用广泛的消息服务系统。
通常使用RabbitMQ为OpenStack提供消息队列服务。
(1)用户管理常用语法
RabbitMQ用户的用户名和密码由rabbitmqctl命令进行管理
新建RabbitMQ用户的命令如下:
rabbitmqctl add_user <用户名> <密码>
删除RabbitMQ用户的命令如下:
rabbitmqctl delete_user <用户名>
修改RabbitMQ用户密码的命令如下:
rabbitmqctl change_password <用户名> <新密码>
(2)案例
# 1.安装RabbitMQ消息队列
[root@controller ~]# yum install -y rabbitmq-server
# 2.启动RabbitMQ消息队列
# 开机启动
[root@controller ~]# systemctl enable rabbitmq-server
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
# 立即启动
[root@controller ~]# systemctl start rabbitmq-server
# 3.设置用户和密码
# 创建一个名为“rabbitmq”的用户,密码为“RABBIT_PASS”
[root@controller ~]# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack"
# 修改openstack用户密码为000000
[root@controller ~]# rabbitmqctl change_password openstack 000000
Changing password for user "openstack"
# 4.管理用户权限
# 3个“.*”分别对应配置、写入、读取权。给openstack用户赋予对RabbitMQ所有资源的配置、写入与读取权限
[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
# 查看用户的权限
[root@controller ~]# rabbitmqctl list_user_permissions openstack
Listing permissions for user "openstack"
/ .* .* .*
5、Memcached内存缓存服务
内存缓存(Memcached)是一个高性能的分布式内存对象缓存系统,能够存储各种格式的数据,包括图像、视频、文件,以及数据库检索的结果等
(1)安装memcached服务
# “memcached”是内存缓存服务软件,
# “python-memcached”是对该服务进行管理的接口程序软件
[root@controller ~]# yum install -y memcached python-memcached
# 安装完成后,系统将自动创建名为“memcached”的用户
[root@controller ~]# cat /etc/passwd | grep memcached
memcached:x:995:992:Memcached daemon:/run/memcached:/sbin/nologin
(2)配置内存缓存服务
Memcached的配置文件为/etc/sysconfig/memcached
。
[root@controller ~]# vi /etc/sysconfig/memcached
PORT="11211" # 服务端口
USER="memcached" # 用户名
MAXCONN="1024" # 允许的最大连接数
CACHESIZE="64" # 最大的缓存大小
OPTIONS="-l 127.0.0.1,::1,192.168.10.10" # 监听地址(默认监听本地)
(3)启动内存缓存服务
# 开机启动
[root@controller ~]# systemctl enable memcached
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
# 立即启动
[root@controller ~]# systemctl start memcached
# 检查服务是否启动
[root@controller ~]# netstat -tnlup | grep memcached
tcp 0 0 192.168.10.10:11211 0.0.0.0:* LISTEN 3778/memcached
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 3778/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 3778/memcached
6、etcd分布式键值对存储系统
etcd是一个开源项目,它的目标是构建一个高可用的分布式键-值(Key-Value)数据库用于配置共享和服务发现。
这个软件的作用类似于分布式系统中“/etc”目录的功能,即存储大规模分布式系统的配置信息。
(1)etcd配置参数
配置参数 |
说明 |
ETCD_LISTEN_PEER_URLS |
用于监听其他etcd成员的地址,只能是IP地址,不能写域名 |
ETCD_LISTEN_CLIENT_URLS |
对外提供服务的地址,只能是IP地址,不能写域名 |
ETCD_NAME |
当前etcd成员的名字,成员必须有唯一名字,建议采用主机名 |
ETCD_INITIAL_ADVERTISE_PEER_URLS |
列出这个成员的伙伴地址,通告给集群中的其他成员 |
ETCD_ADVERTISE_CLIENT_URLS |
列出这个成员的客户端地址,通告给集群中的其他成员 |
ETCD_INITIAL_CLUSTER |
启动初始化集群配置,值为“成员名=该成员服务地址” |
ETCD_INITIAL_CLUSTER_TOKEN |
初始化etcd集群标识,用于多个etcd集群相互识别 |
ETCD_INITIAL_CLUSTER_STATE |
初始化集群状态(新建值为“new”,已存在值为“existing”)。如果这个选项被设置为existing,etcd将试图加入已有的集群 |
(2)安装配置
# 1.安装
[root@controller ~]# yum install -y etcd
# 2.备份配置文件
[root@controller ~]# cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.bak
# 修改配置
echo \'ETCD_LISTEN_PEER_URLS="http://192.168.10.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.10.10:2379,http://127.0.0.1:2379"
ETCD_NAME="controller"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.10:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.10:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.10.10:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
\' > /etc/etcd/etcd.conf
# 3.启动服务
[root@controller ~]# systemctl enable etcd
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
[root@controller ~]# systemctl start etcd
# 4.检查运行
[root@controller ~]# netstat -tnlup| grep etcd
tcp 0 0 192.168.10.10:2379 0.0.0.0:* LISTEN 4319/etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 4319/etcd
tcp 0 0 192.168.10.10:2380 0.0.0.0:* LISTEN 4319/etcd
(3)etcd服务管理
etcdctl是管理etcd服务的工具,利用它可以实现数据的存取。
[root@controller ~]# etcdctl set testkey 001
001
[root@controller ~]# etcdctl get testkey
001
[root@controller ~]# etcdctl set name kobe
kobe
[root@controller ~]# etcdctl get name
kobe
三、集群配置
现在已经有了一台符合条件的虚拟机作为控制节点,还需要准备一个计算节点。
1、计算节点克隆
第1步,在VMware Workstation主界面鼠标右键单击【我的计算机】下的虚拟机(虚拟机需处于关闭状态),在弹出的菜单中依次选择【管理】→【克隆】后出现【克隆虚拟机向导】
第2步,选择克隆源与克隆类型。在【克隆虚拟机向导】对话框中单击【下一页】按钮进入【克隆源】界面。在【克隆源】界面中选择【虚拟机中的当前状态】单选按钮,然后单击【下一步】按钮,弹出克隆类型】界面。在【克隆类型】界面中选择【创建完整克隆】单选按钮,然后单击【下一步】按钮,弹出【新虚拟机名称】界面。
第3步,设置新的虚拟机名称及存储位置,然后开始克隆虚拟机。在【新虚拟机名称】界面中的【虚拟机名称】和【位置】文本框内填写和选择新克隆的虚拟机的名称和虚拟机存储的位置,设置完成后单击【完成】按钮,显示【正在克隆虚拟机】对话框。
给这个计算节点添加一个40G的磁盘。
2、计算节点配置
# 修改网络配置
[root@controller ~]# cd /etc/sysconfig/network-scripts/
# 生产新的uuid
[root@controller network-scripts]# uuidgen >> ifcfg-ens33
[root@controller network-scripts]# uuidgen >> ifcfg-ens34
# 修改ifcfg-ens33配置
NAME=ens33
UUID=80d04405-642e-41f6-aa31-a33b79b92ca4 # 将新生成的uuid放这里替换
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.20 # 修改网卡地址
NETMASK=255.255.255.0
# 修改ifcfg-ens34配置
NAME=ens34
UUID=381db26e-7267-485c-a459-f4b56d0e5e42 # 将新生成的uuid放这里替换
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.20.20 # 修改网卡地址
NETMASK=255.255.255.0
GATEWAY=192.168.20.2
DNS1=114.114.114.114
DNS2=8.8.8.8
# 重启网络
[root@controller network-scripts]# systemctl restart network
# 使用xshell等工具连接192.168.10.20,查看当前的网络信息:
[root@controller ~]# ip a
1: lo: 略
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:fc:73:40 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.20/24 brd 192.168.10.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::4883:d953:184d:971b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:fc:73:4a brd ff:ff:ff:ff:ff:ff
inet 192.168.20.20/24 brd 192.168.20.255 scope global noprefixroute ens34
valid_lft forever preferred_lft forever
inet6 fe80::e991:bf85:171d:2a7a/64 scope link noprefixroute
valid_lft forever preferred_lft foreve
# 更改计算节点主机名
[root@controller ~]# hostnamectl set-hostname compute
[root@controller ~]# bash
[root@compute ~]#
3、配置域名解析和防火墙
为了提升工作效率,将主机名和ip地址绑定。
(1)域名解析配置
# 修改控制节点本地域名解析
[root@controller ~]# echo \'192.168.10.20 compute\' >> /etc/hosts
# 修改计算节点本地域名解析
[root@compute ~]# echo \'192.168.10.20 compute\' >> /etc/hosts
# 验证互PING
[root@controller ~]# ping compute
[root@compute ~]# ping controller
(2)selinux和防火墙关闭
安装openstack之前需要关闭linux系统自带的selinux和firewall防火墙,避免因防火墙设置问题造成服务访问出现问题。
# 1.控制、计算节点都修改/etc/selinux/config,将"SELINUX=enforcing" 改为 "SELINUX=disabled"
# 2.禁止开机启动和关闭防火墙
# 控制节点:
[root@controller ~]# systemctl disable firewalld
[root@controller ~]# systemctl stop firewalld
# 计算节点:
[root@compute ~]# systemctl disable firewalld
[root@compute ~]# systemctl stop firewalld
4、搭建本地软件仓库
不能访问外网的环境,需要搭建本地的YUM源。
没必要在每台机器上都配置同样的软件仓库,可以选择共享的方式为其他主机提供服务。
案例:在控制节点配置YUM源,并搭建文件传输服务器为其他的计算节点提供服务。
(1)在控制节点配置YUM源
添加base、extras、updates、train、virt这5个软件仓库的本地地址——挂载镜像的地址。
name是软件仓库名、baseurl是仓库地址、enable设置1为启用该软件仓库、gpgcheck设置为0为取消数字签名验证。
file:///
表示链接到本地文件系统的地址。
# 1.上传openStack-train.iso文件到/opt目录下
[root@controller opt]# du -sh *
0 mydriver
16G openStack-train.iso
# 2.将镜像文件挂载到文件夹中,即可访问镜像文件内容
[root@controller opt]# mkdir openstack
[root@controller opt]# ls
mydriver openstack openStack-train.iso
# 挂载命令:将镜像文件挂载到/opt/openstack
[root@controller opt]# mount openStack-train.iso openstack/
mount: /dev/loop0 is write-protected, mounting read-only
[root@controller opt]# df -H
...略
/dev/loop0 17G 17G 0 100% /opt/openstack
# 3.备份原有的yum的配置文件
[root@controller openstack]# cd /etc/yum.repos.d/
[root@controller yum.repos.d]# ls
CentOS-Base.repo CentOS-OpenStack-train.repo repo.bak
# 将阿里源改名,避免覆盖官方源备份
[root@controller yum.repos.d]# mv CentOS-Base.repo CentOS-ALIBABA-Base.repo
# 移动repo文件到备份目录
[root@controller yum.repos.d]# mv *.repo repo.bak/
# 4.编写本地YUM源文件,指向本地文件
[root@controller yum.repos.d]# vi OpenStack.repo
[base]
name=base
baseurl=file:///opt/openstack/base/
enable=1
gpgcheck=0
[extras]
name=extras
baseurl=file:///opt/openstack/extras/
enable=1
gpgcheck=0
[updates]
name=updates
baseurl=file:///opt/openstack/updates/
enable=1
gpgcheck=0
[train]
name=train
baseurl=file:///opt/openstack/train/
enable=1
gpgcheck=0
[virt]
name=virt
baseurl=file:///opt/openstack/virt/
enable=1
gpgcheck=0
# 5.清除原有的YUM源缓存并重建缓存
[root@controller ~]# yum clean all
# 重建缓存
[root@controller ~]# yum makecache
# 检查yum源
[root@controller ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base base 10,039
extras extras 500
train train 3,168
updates updates 3,182
virt virt 63
repolist: 16,952
# 长期挂载,避免重启丢失
[root@controller ~]# vi /etc/fstab
# 在最后添加如下内容
/opt/openStack-train.iso /opt/openstack/ iso9660 defaults,loop 0 0
(2)控制节点配置FTP服务器
控制节点上已经有了本地YUM源文件,搭建一个FTP服务器,共享软件仓库为计算节点提供服务。
# 1.安装FTP服务
[root@controller ~]# yum install -y vsftpd
# 2.配置FTP主目录为软件仓库目录:添加如下信息
[root@controller ~]# echo \'anon_root=/opt\' >> /etc/vsftpd/vsftpd.conf
# 3.启动FTP服务
[root@controller ~]# systemctl start vsftpd
[root@controller ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
(3)计算节点配置YUM源
修改yum配置文件,将YUM源指向控制节点FTP服务器的软件仓库。
# 1.备份YUM配置文件
[root@compute ~]# cd /etc/yum.repos.d/
[root@compute yum.repos.d]# mv CentOS-Base.repo CentOS-ALIBABA-Base.repo # 改名
[root@compute yum.repos.d]# mv *.repo repo.bak/ # 迁移到备份目录
# 2.从控制节点传输配置文件
[root@compute yum.repos.d]# scp root@controller:/etc/yum.repos.d/OpenStack.repo OpenStack.repo
# 注意输入控制节点密码和yes
# 3.编辑YUM源文件
[root@compute yum.repos.d]# vi OpenStack.repo
[base]
name=base
baseurl=ftp://controller/openstack/base/
enable=1
gpgcheck=0
[extras]
name=extras
baseurl=ftp://controller/openstack/extras/
enable=1
gpgcheck=0
[updates]
name=updates
baseurl=ftp://controller/openstack/updates/
enable=1
gpgcheck=0
[train]
name=train
baseurl=ftp://controller/openstack/train/
enable=1
gpgcheck=0
[virt]
name=virt
baseurl=ftp://controller/openstack/virt/
enable=1
gpgcheck=0
# 4.清除原有的YUM源缓存并重建缓存
[root@compute ~]# yum clean all
[root@compute ~]# yum makecache
5、局域网时间同步
实现控制节点和计算节点的时间同步,控制节点作为时间同步系统服务端,计算节点作为客户端。
# 1.配置控制节点为NTP时间服务器
[root@controller ~]# vi /etc/chrony.conf
###### 注释默认同步服务器,添加阿里时间同步 #########
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp.aliyun.com iburst
###### 配置允许同网段主机使用本机的NTP服务 ###########
# Allow NTP client access from local network.
allow 192.168.10.0/24
# 2.配置计算节点时间同步
[root@compute ~]# vi /etc/chrony.conf
###### 注释默认同步服务器,添加本地同步 #########
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server controller iburst
# 3.重启时间同步服务让配置生效
[root@controller ~]# systemctl restart chronyd
[root@compute ~]# systemctl restart chronyd
# 4.检查时间同步状态
[root@compute ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===========================================================================
^* controller 3 6 17 41 +6800ns[ +15us] +/- 29ms
[root@controller ~]# date
Wed Oct 5 16:32:39 CST 2022
[root@compute ~]# date
Wed Oct 5 16:32:39 CST 2022
6、openstack云计算平台基础框架自检
控制节点和计算节点都需要执行软件框架安装、云计算平台管理客户端安装、openstack的selinux防火墙管理包。
安装方法见本章2-2。
# 检查1:只有自建的repo文件
[root@controller ~]# ls /etc/yum.repos.d/
OpenStack.repo repo.bak
[root@compute ~]# ls /etc/yum.repos.d/
OpenStack.repo repo.bak
# 检查2:
[root@controller ~]# openstack --version
openstack 4.0.2
[root@compute ~]# openstack --version
openstack 4.0.2
7、MariaDB数据库服务自检
MariaDB数据库的安装和配置只需要在控制节点操作。
# 1.关闭compute节点数据库,删除配置文件
[root@compute ~]# systemctl stop mariadb
[root@compute ~]# systemctl disable mariadb
[root@compute my.cnf.d]# rm /etc/my.cnf.d/openstack.cnf
rm: remove regular file ‘/etc/my.cnf.d/openstack.cnf’? yes
# 自检1:查看端口占用
[root@controller ~]# netstat -tnlup | grep 3306
tcp 0 0 192.168.10.10:3306 0.0.0.0:* LISTEN 1159/mysqld
# 自检2:控制节点配置文件没问题,尝试登录
[root@controller ~]# mysql -uroot -p000000
Welcome to the MariaDB monitor. Commands end with ; or \\g.
Your MariaDB connection id is 8
Server version: 10.3.20-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.
MariaDB [(none)]>
# 自检3:数据库中有名为mysql的数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
8、RabbitMQ消息队列服务自检
帮助openstack各个组件之间相互通信。仅需在控制节点安装和配置。
# 1.添加rabbitmq用户,密码为000000
[root@controller ~]# rabbitmqctl add_user rabbitmq 000000
Creating user "rabbitmq"
# 2.为rabbitmq用户,授予消息队列中所有资源的配置、写入、读取权限
[root@controller ~]# rabbitmqctl set_permissions rabbitmq ".*" ".*" ".*"
Setting permissions for user "rabbitmq" in vhost "/"
# 自检1:服务端口25672和5672是否处于监听状态
[root@controller ~]# netstat -tnlup | grep 5672
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 964/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 964/beam.smp
# 自检2:查看用户列表
[root@controller ~]# rabbitmqctl list_users
Listing users
rabbitmq []
openstack []
guest [administrator]
# 自检3:用户权限是否正确
[root@controller ~]# rabbitmqctl list_user_permissions rabbitmq
Listing permissions for user "rabbitmq"
/ .* .* .*
9、Memcached缓存服务自检
高性能的分布式内存对象缓存系统,能大大提升云平台的数据分发效率。仅需在控制节点安装和配置。
# 1.修改缓存服务配置,对控制节点访问进行监听
[root@controller ~]# vi /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,controller"
# 2.重启缓存服务
[root@controller ~]# systemctl restart memcached
# 自检1:服务端口11211是否处于监听状态
[root@controller ~]# netstat -tnlup|grep 11211
tcp 0 0 192.168.10.10:11211 0.0.0.0:* LISTEN 5068/memcached
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 5068/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 5068/memcached
# 自检2:控制节点能否用telnet访问
# 在计算节点安装telnet
[root@compute my.cnf.d]# yum install -y telnet
[root@compute ~]# telnet controller 11211
Trying 192.168.10.10...
Connected to controller.
Escape character is \'^]\'.
stats 《——————这里输入stats命令查看
STAT pid 5068
STAT uptime 691
quit 《————输入quit退出
10、etcd分布式键值对存储系统自检
用于存储大规模分布式系统的配置信息,用于组件的注册和服务发现等。仅需在控制节点安装和配置。
# 自检1:服务端口2379和2380是否处于监听状态
[root@controller ~]# netstat -tnlup | grep etcd
tcp 0 0 192.168.10.10:2379 0.0.0.0:* LISTEN 970/etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 970/etcd
tcp 0 0 192.168.10.10:2380 0.0.0.0:* LISTEN 970/etcd
# 自检2:能正常存取数据
[root@controller ~]# etcdctl set mykey 007
007
[root@controller ~]# etcdctl get mykey
007
11、永久mount、开机mount
控制节点重启后,/opt/openstack共享的内容全丢失。
做如下操作配置iso文件开机自动挂载关机。
# 在/etc/fstab最后加入如下内容
[root@controller openstack]# vi /etc/fstab
/opt/openStack-train.iso /opt/openstack/ iso9660 defaults,loop 0 0
四、keystone组件部署
只在控制节点操作,建议操作前给控制节点拍摄快照。
1、安装和配置keystone
# 1.安装keystone软件包
# wsgi:使web服务器支持WSGI的插件
# httpd:Apache软件包
# openstack-keystone:keystone的软件包
[root@controller ~]# yum install -y openstack-keystone httpd mod_wsgi
# 查看keystone用户信息
[root@controller ~]# cat /etc/passwd | grep keystone
keystone:x:163:163:OpenStack Keystone Daemons:/var/lib/keystone:/sbin/nologin
# 查看keystone用户组
[root@controller ~]# cat /etc/group | grep keystone
keystone:x:163:
# 2.创建keystone的数据库并授权
[root@controller ~]# mysql -uroot -p000000
# 创建数据库
MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.000 sec)
# 授权本地登录keystone用户
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO \'keystone\'@\'localhost\' IDENTIFIED BY \'000000\';
Query OK, 0 rows affected (0.001 sec)
# 授权任意远程主机登录keystone用户
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO \'keystone\'@\'%\' IDENTIFIED BY \'000000\';
Query OK, 0 rows affected (0.000 sec)
# 退出数据库
MariaDB [(none)]> quit
Bye
# 3.修改keystone配置文件
[root@controller ~]# vi /etc/keystone/keystone.conf
# 找到[database] 部分,加入如下内容,配置数据库连接信息
connection=mysql+pymysql://keystone:000000@controller/keystone
# 找到[token] 部分,解开注释,配置令牌的加密方式
provider = fernet
# 4.初始化keytone数据库
# 同步数据库
# su keytone:表示切换到keytone用户
# \'-s /bin/sh\':表示指定使用什么编译器来执行命令
# \'-c\':表示具体执行的命令
[root@controller ~]# su keystone -s /bin/sh -c "keystone-manage db_sync"
# 检查数据库
[root@controller ~]# mysql -uroot -p000000
# 打开keystone数据库
MariaDB [(none)]> use keystone;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# 显示keytone数据库中的数据表
MariaDB [keystone]> show tables;
+------------------------------------+
| Tables_in_keystone |
+------------------------------------+
| access_rule |
| access_token |
| application_credential |
| application_credential_access_rule |
| application_credential_role |
# 出现如上所示的很多数据表,说明数据库同步成功。
2、keystone组件初始化
keystone安装后,需要为keystone初始化密钥库、初始化用户身份认证信息、初始化服务....
# 1.初始化Fernet密钥库
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# 执行命令后创建/etc/keystone/fernet-keys,并在目录中生成两个fernet密钥,分别用于加密和解密
[root@controller fernet-keys]# pwd
/etc/keystone/fernet-keys
[root@controller fernet-keys]# du -sh *
4.0K 0
4.0K 1
[root@controller keystone]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# 执行命令后创建/etc/keystone/credential-keys目录,生成两个fetnet密钥,用于加密/解密用户凭证
[root@controller credential-keys]# pwd
/etc/keystone/credential-keys
[root@controller credential-keys]# du -sh *
4.0K 0
4.0K 1
# 2.初始化用户身份认证信息
# openstack默认有一个admin用户,还没有对应的密码等登录所必须的信息。使用 `keystone-manage bootstrap` 初始化登录凭证。
[root@controller ~]# keystone-manage bootstrap --bootstrap-password 000000 \\ # 设置密码
> --bootstrap-admin-url http://controller:5000/v3 \\ # 设置用户服务端点
> --bootstrap-internal-url http://controller:5000/v3 \\ # 设置内部用户的服务端点
> --bootstrap-public-url http://controller:5000/v3 \\ # 设置公共用户的服务端点
> --bootstrap-region-id RegionOne # 设置区域ID
# 命令执行后,keystone数据库中就已经存放了登录需要的验证信息。
# 3.配置web服务
# (1)给apache增加wsgi支持
# 将wsgi-keystone.conf文件软链接到\'/etc/httpd/conf.d/目录\',作为apache的配置文件
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
[root@controller ~]# ls /etc/httpd/conf.d/
autoindex.conf README userdir.conf welcome.conf wsgi-keystone.conf
# (2)修改apache服务器配置并启动
[root@controller ~]# vi /etc/httpd/conf/httpd.conf
# 修改为web服务所在的IP地址或域名
96 ServerName controller
# (3)启动apache
[root@controller ~]# systemctl start httpd
[root@controller ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
3、模拟登录验证
通过环境变量可以出传送用户名和密码等凭证给keystone,再由它验证。
# 创建一个文件存储身份凭证
[root@controller ~]# vi admin-login
export OS_USERNAME=admin
export OS_PASSWORD=000000
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
# 导入环境变量
[root@controller ~]# source admin-login
# 查看现有环境信息
[root@controller ~]# export -p
declare -x OS_AUTH_URL="http://controller:5000/v3"
declare -x OS_IDENTITY_API_VERSION="3"
declare -x OS_IMAGE_API_VERSION="2"
declare -x OS_PASSWORD="000000"
declare -x OS_PROJECT_DOMAIN_NAME="Default"/
declare -x OS_PROJECT_NAME="admin"
declare -x OS_USERNAME="admin"
declare -x OS_USER_DOMAIN_NAME="Default"
4、检测keystone服务
openstack平台所有对组件的操作都需要keystone认证才能进行,能执行openstack管理命令,说明keystone服务正常。
# 在default域创建名为 \'project\' 的项目
[root@controller ~]# openstack project create --domain default project
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| domain_id | default |
| enabled | True |
| id | e3a549077f354998aa1a75677cfde62e |
| is_domain | False |
| name | project |
| options | |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
# 查看现有项目列表
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 4188570a34464b938ed3fa7e08681df8 | admin |
| e3a549077f354998aa1a75677cfde62e | project |
+----------------------------------+---------+
# 创建名为user的角色
[root@controller ~]# openstack role create user
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 700ec993d3cf456fa591c03e72f37856 |
| name | user |
| options | |
+-------------+----------------------------------+
# 查看当前角色列表
[root@controller ~]# openstack role list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| 47670bbd6cc1472ab42db560637c7ebe | reader |
| 5eee0910aeb844a1b82f48100da7adc9 | admin |
| 700ec993d3cf456fa591c03e72f37856 | user |
| bc2c8147bbd643629a020a6bd9591eca | member |
+----------------------------------+--------+
# 查看现有域列表
[root@controller ~]# openstack domain list
+---------+---------+---------+--------------------+
| ID | Name | Enabled | Description |
+---------+---------+---------+--------------------+
| default | Default | True | The default domain |
+---------+---------+---------+--------------------+
# 查看现有用户列表
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| f4f16d960e0643d7b5a35db152c87dae | admin |
+----------------------------------+-------+
五、glance部署
安装openstack镜像服务。只在控制节点进行操作。
1、安装glance
安装glance软件包。只在控制节点进行操作。
# 1.安装glance软件包
# 原生的源缺包,把阿里的源下载到这个路径
[root@controller yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@controller ~]# yum install -y openstack-glance
# 安装后会自动生成glance用户和用户组
[root@controller ~]# cat /etc/passwd | grep glance
glance:x:161:161:OpenStack Glance Daemons:/var/lib/glance:/sbin/nologin
[root@controller ~]# cat /etc/group | grep glance
glance:x:161:
# 2.创建glance数据库并授权
# 连接数据库
[root@controller ~]# mysql -uroot -p000000
# 新建glance数据库
MariaDB [(none)]> CREATE DATABASE glance;
Query OK, 1 row affected (0.001 sec)
# 为新数据库授权本地和远程登录glance用户
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO \'glance\'@\'localhost\' IDENTIFIED BY \'000000\';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO \'glance\'@\'%\' IDENTIFIED BY \'000000\';
Query OK, 0 rows affected (0.001 sec)
# 退出数据库
MariaDB [(none)]> quit
Bye
2、配置glance
glance的配置文件是/etc/glance/glance-api.conf
,修改它可以实现glance与数据库及keystone的连接。
# 1.备份配置文件
[root@controller ~]# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak
# 2.去掉配置文件注释和空行
# grep:查找文件中符合条件的字符串。 -E:采用正则表达式;-v:匹配所有不满足正则的条件(反选)
# ^:以什么开头; $:匹配字符结尾;|:匹配|左或|右的字符
[root@controller ~]# grep -Ev \'^$|#\' /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf
# 3.编辑配置文件
# default_store = file:默认存储系统为本地系统
# filesystem_store_datadir = /var/lib/glance/images/ : 镜像文件实际存储的目录
[root@controller ~]# vi /etc/glance/glance-api.conf
[database]
connection = mysql+pymysql://glance:000000@controller/glance
[glance_store]
stores = file
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
username = glance
password = 000000
project_name = project
user_domain_name = Default
project_domain_name = Default
[paste_deploy]
flavor = keystone
# 4.初始化数据库
# 同步数据库:将安装文件中的数据库表信息填入数据库中
[root@controller ~]# su glance -s /bin/sh -c "glance-manage db_sync"
# 检查数据库
[root@controller ~]# mysql -uroot -p000000
MariaDB [(none)]> use glance
MariaDB [glance]> show tables;
+----------------------------------+
| Tables_in_glance |
+----------------------------------+
| alembic_version |
| image_locations |
| image_members |
| image_properties |
| image_tags |
| images |
.....
3、Glance组件初始化
Glance安装配置成功之后,需要给glance初始化用户、密码并分配角色、初始化服务和服务端点。
(1)创建Glance用户并分配角色
# 导入环境变量模拟登录
[root@controller ~]# source admin-login
# 在default域创建名为glance,密码为000000的用户
[root@controller ~]# openstack user create --domain default --password 000000 glance
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 81238b556a444c8f80cb3d7dc72a24d3 |
| name | glance |
| options | |
| password_expires_at | None |
+---------------------+----------------------------------+
# 查看当前已有的项目
[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 4188570a34464b938ed3fa7e08681df8 | admin |
| e3a549077f354998aa1a75677cfde62e | project |
+----------------------------------+---------+
# 查看已有的用户
[root@controller ~]# openstack user list
+----------------------------------+--------+
| ID | Name |
+----------------------------------+--------+
| f4f16d960e0643d7b5a35db152c87dae | admin |
| 81238b556a444c8f80cb3d7dc72a24d3 | glance |
+----------------------------------+--------+
# 授予glance用户操作project项目时的admin角色权限
[root@controller ~]# openstack role add --project project --user glance admin
# 查看glance用户详情
[root@controller ~]# openstack user show glance
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 81238b556a444c8f80cb3d7dc72a24d3 |
| name | glance |
| options | |
| password_expires_at | None |
+---------------------+----------------------------------+
(2)创建glance服务及服务端点
# 1.创建服务
# 创建名为glance,类型为image的服务
[root@controller ~]# openstack service create --name glance image
+---------+----------------------------------+
| Field | Value |
+---------+----------------------------------+
| enabled | True |
| id | 324a07034ea4453692570e3edf73cf2c |
| name | glance |
| type | image |
+---------+----------------------------------+
# 2.创建镜像服务端点
# 服务端点有三种:公共用户(public)、内部组件(internal)、Admin用户(admin)服务的地址。
# 创建公共用户访问服务端点
[root@controller ~]# openstack endpoint create --region RegionOne glance public http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | ab3208eb36fd4a8db9c90b9113da9bbb |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 324a07034ea4453692570e3edf73cf2c |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
# 创建内部组件访问服务端点
[root@controller ~]# openstack endpoint create --region RegionOne glance internal http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 54994f15e8184e099334760060b9e2a9 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 324a07034ea4453692570e3edf73cf2c |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
# 创建Admin用户访问服务端点
[root@controller ~]# openstack endpoint create --region RegionOne glance admin http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 97ae61936255471f9f55858cc0443e61 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 324a07034ea4453692570e3edf73cf2c |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
# 查克服务端点
[root@controller ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------+
| 0d31919afb564c8aa52ec5eddf474a55 | RegionOne | keystone | identity | True | admin | http://controller:5000/v3 |
| 243f1e7ace4f444cba2978b900aeb165 | RegionOne | keystone | identity | True | internal | http://controller:5000/v3 |
| 54994f15e8184e099334760060b9e2a9 | RegionOne | glance | image | True | internal | http://controller:9292 |
| 702df46845be40fb9e75fb988314ee90 | RegionOne | keystone | identity | True | public | http://controller:5000/v3 |
| 97ae61936255471f9f55858cc0443e61 | RegionOne | glance | image | True | admin | http://controller:9292 |
| ab3208eb36fd4a8db9c90b9113da9bbb | RegionOne | glance | image | True | public | http://controller:9292 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------+
(3)启动glance服务
# 开机启动glance服务
[root@controller ~]# systemctl enable openstack-glance-api
Created symlink from /etc/systemd/system/multi-user.target.wants/openstack-glance-api.service to /usr/lib/systemd/system/openstack-glance-api.service.
# 启动glance服务
[root@controller ~]# systemctl start openstack-glance-api
4、验证Glance服务
检查glance服务是否正常。
# 方法一:查看端口占用情况(9292是否被占用)
[root@controller ~]# netstat -tnlup | grep 9292
tcp 0 0 0.0.0.0:9292 0.0.0.0:* LISTEN 5740/python2
# 方法二:查看服务运行状态(active (running)说明服务正在运行)
[root@controller ~]# systemctl status openstack-glance-api
● openstack-glance-api.service - OpenStack Image Service (code-named Glance) API server
Loaded: loaded (/usr/lib/systemd/system/openstack-glance-api.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-19 17:09:13 CST;
5、用glance制作镜像
CirrOS是一种很小的Linux操作系统,仅有十几兆字节大小,这里Glance将用它来制作一个镜像。
# 安装lrzsz工具
[root@controller ~]# yum install -y lrzsz
# 上传cirros-0.5.1-x86_64-disk.img 到/root目录
[root@controller ~]# rz
z waiting to receive.**B0100000023be50
[root@controller ~]# ls
admin-login cirros-0.5.1-x86_64-disk.img
# glance创建镜像
[root@controller ~]# openstack image create --file cirros-0.5.1-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros
# 查看镜像列表
[root@controller ~]# openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| a859fddb-3ec1-4cd8-84ec-482112af929b | cirros | active |
+--------------------------------------+--------+--------+
# 删除镜像
[root@controller ~]# openstack image delete a859fddb-3ec1-4cd8-84ec-482112af929b
# 重新创镜像
[root@controller ~]# openstack image create --file cirros-0.5.1-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| checksum | 1d3062cd89af34e419f7100277f38b2b |
| container_format | bare |
| created_at | 2022-10-19T09:20:03Z |
| disk_format | qcow2 |
| file | /v2/images/7096885c-0a58-4086-8014-b92affceb0e8/file |
| id | 7096885c-0a58-4086-8014-b92affceb0e8 |
| min_disk | 0 |
| min_ram | 0 |
| name openstack部署指南
自动化部署工具:
www.ansible.com
www.puppetlabs.com
chef.io/chef
packstack
devstack
手动部署:
keystone :维护目录,身份认证;keystone-api ,divers.
ubuntu 14.04
keystone安装:
1、数据库安装
sudo apt-get install mysql-server
创建:keystone 数据库
keystone数据库授权
// echo "manual" >/etc/init/keystone.override
sudo apt-get install apache2 libapache2-mod-wsgi memcached python
nova
以上是关于OpenStack手动部署的主要内容,如果未能解决你的问题,请参考以下文章
OpenStack手动分布式部署NovaQueens版
OpenStack服务默认端口号
packstack部署openstacky要多久
openstack部署指南
OpenStack手动安装手册即错误排查(Icehouse)
saltstack 自动化部署openstack queens 版本