💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
OpenStack 架构
图
2.1
体现了
OpenStack
中各个服务之间的相互关系,图中的箭头体现了提供
服务方和接受服务方的相对关系。
图 2.1 云计算概念图
OpenStack
由多种服务组成,每种服务具有独立的命名。在整个
OpenStack
架
构中,
Keystone
提供认证服务,接收来自用户和服务的认证请求,并对身份进行认
证。各个服务之间通过公用的
API
接口进行交互。大部分服务均包含一个
API
进程,
用于侦听
API
请求,根据服务的性质选择处理请求或转发请求。服务进程之间的通讯
通过消息队列实现,如
AMQP
。
在 部 署 完 成 的 云 系 统 平 台 上 , 用 户 通 过
Dashboard
或
RestAPI
方 式 在 经
KeyStone
模块认证授权后,可以执行创建虚拟机服务。通过
Nova
模块创建虚拟机
实例,
Nova
调用
Glance
模块提供的镜像服务,然后调用
Neutron
模块提供网络服
务。根据需要可以选择给虚拟机增加存储卷,卷功能由
Cinder
模块提供服务。整个
过程在
Ceilometer
模块的资源监控下完成。同时
Cinder
提供的
Volume
和
Glance
第
2
页 共
23
页
第
3
页 共
23
页
提供的镜像可以通过
Swift
对象存储机制进行保存。
通过以上解析可以看到
OpenStack
云平台服务的提供主要是依靠
Nova
、
Glance
、
Cinder
和
Neutron
四 个核 心 模 块完 成 的 ,四 个 辅助 模 块
Horizen
、
Ceilometer
、
Keystone
、
Swift
提供的访问、监控、权限和对象存储功能。
一、云计算平台基础环境准备
openstack软件仓库
mount 镜像地址 挂载地址
vi /etc/fstab(永久挂载)
/opt/openstack/openStack-train.iso /mnt/openstack iso9660 defaults 0 0
openstack yum源
cd /etc/yum.repos.d
vi centos-openstack.repo
[virt]
name=virt
baseurl=file:///mnt/openstack/virt/
enabled=1
gpgcheck=0
[base]
name=base
baseurl=file:///mnt/openstack/base/
enabled=1
gpgcheck=0
[extras]
name=extras
baseurl=file:///mnt/openstack/extras/
enabled=1
gpgcheck=0
[updates]
name=updates
baseurl=file:///mnt/openstack/updates/
enabled=1
gpgcheck=0
[train]
name=train
baseurl=file:///mnt/openstack/train
enabled=1
gpgcheck=0
yum clean all
yum makecache
yum repolist
#永久挂载
vi /etc/fstab
/opt/openstack /mnt/openstack iso9669 defaults 0 0
#放置路径 挂载路径 文件类型
服务端安装FTP服务器
#服务端安装ftp服务
yum install -y vsftpd
vi /etc/vsftpd/vsftpd.conf
#加一行(/opt软件仓库所在位置)
anon_root=/opt
#服务端与客户端均运行
yum install -y net-tools
安装chrony时间同步服务
#使用以下命令安装chrony:
yum install chrony -y
#开启服务
systemctl start chronyd
systemctl enable chronyd
systemctl命令用于控制系统服务。start选项启动服务,enable选项设置开机自启。
配置chrony服务,
#编辑chrony配置文件/etc/chrony.conf:
vi /etc/chrony.conf
#在文件中找到server配置项,将其更改为国内可用的NTP服务器。例如,可将其更改为阿里云的NTP服务器:
#iburst选项表示在与服务器同步时进行快速启动。
server ntp.aliyun.com iburst
#重启服务
systemctl restart chronyd
#检查chrony服务是否正常运行:
systemctl status chronyd
如果服务已经成功启动并在运行中,会显示Active: active (running)。
#检查系统时间是否已经与NTP服务器同步:
chronyc tracking
#如果系统时间已经与NTP服务器同步,则会显示类似以下内容的输出:
Reference ID : 7F7F0101 ()
Stratum : 3
Ref time (UTC) : Fri Oct 22 17:59:14 2021
System time : 0.000000002 seconds fast of NTP time
Last offset : +0.000000036 seconds
RMS offset : 0.000000036 seconds
Frequency : 2.815 ppm slow
Residual freq : +0.000 ppm
Skew : 0.001 ppm
Root delay : 0.027991212 seconds
Root dispersion : 0.005167614 seconds
Update interval : 64.2 seconds
Leap status : Normal
#Ref time (UTC)表示NTP服务器上的时间。
#System time表示本地系统时间与NTP服务器时间的差值。
#Last offset表示上一次与NTP服务器同步时的时间偏移值。
#RMS offset表示平均时间偏移值。
#Frequency表示本地系统时钟的频率与NTP服务器时钟的频率之间的差异,以PPM表示。
#其他参数表示网络延迟等性能指标。
安装openstack云计算平台基础框架
yum install -y centos-release-openstack-train
yum upgrade
#rm -rf /etc/yum.repos.d/C*.repo
yum install -y python-openstackclient
yum install -y openstack-selinux
安装MariaDB数据库服务
yum install -y mariadb-server python2-PyMySQL
vi /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address=hostip
default-storage-engine=innodb
innodb_file_per_table=on
max_connections=4096
collation-server=utf8_general_ci
character-set-server=utf8
mysql_secure_installation #(初始化数据库)
mysql -uroot -p password
安装RabbitMQ消息队列服务
yum install -y rabbitmq-server
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
rabbitmqctl add_user rabbitmq 123456
rabbitmqctl set_permissions rabbitmq".*"".*"".*"
netstat -tnluo | grep 5672 #验证
安装Memcached缓存服务
yum install -y memcached python-memcached
vi /etc/sysconfig/memcached
OPTIONS= -| hostip,::1,hostname #修改
systemctl enable memcached
systemctl start memcached
netstat -tnluo | grep 11211 #验证
安装etcd分布式键值对存储系统
yum install -y etcd
vi /etc/etcd/etcd.conf
# etcd配置文件
# etcd集群成员
ETCD_NAME=hostname
ETCD_ADVERTISE_CLIENT_URLS="http://(hostip):2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="HTTP://(HOSTIP):2380"
ETCD_LISTEN_CLIENT_URLS="http://(hostip):2379"
ETCD_LISTEN_PEER_URLS="http://(hostip):2380"
ETCD_INITIAL_CLUSTER="hostname=http://(hostip):2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
# Raft一致性算法参数
#ETCD_RAFT_LOG_SIZE=536870912
#ETCD_RAFT_LOG_LIMIT=5242880
# 安全性配置
#ETCD_TLS=true
#ETCD_CERT_FILE="path/to/cert.pem"
#ETCD_KEY_FILE="path/to/key.pem"
#ETCD_CLIENT_CERT_AUTH=true
#ETCD_TRUSTED_CA_FILE="path/to/ca.pem"
#ETCD_AUTO_REJOIN_RETRIES=10
#ETCD_AUTO_REJOIN_DELAY=10
systemctl enable etcd
systemctl start etcd
netstat -tnlup | grep etcd
二、认证服务(keystone)安装
#安装依赖包和Keystone服务
yum install -y openstack-keystone httpd mod_wsgi
#确认是否已经创建keystone用户组和用户
cat /etc/passwd | grep keystone
cat /etc/group | grep keystone
#创建Keystone所需的MySQL数据库和用户
mysql -uroot -p123456
create database keystone;
grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456';
grant all privileges on keystone.* to 'keystone'@'%' identified by '123456';
quit;
#修改Keystone配置文件的数据库连接信息
vi /etc/keystone/keystone.conf #(修改以下)
[database]
connection = mysql+pymysql://keystone:123456@hostname/keystone #582/600
[token]
provider = fernet #2446/2475
#同步Keystone数据库
su keystone -s /bin/sh -c "keystone-manage db_sync"
#查看数据库
mysql -uroot -p123456
use keystone;
show tables;
quit;
#设置Keystone Fernet #令牌和凭据
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
#初始化用户身份认证
keystone-manage bootstrap --bootstrap-password 123456 --bootstrap-admin-url http://server01:5000/v3 --bootstrap-internal-url http://server01:5000/v3 --bootstrap-public-url http://server01:5000/v3 --bootstrap-region-id RegionOne
#配置Apache服务
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ #建立链接
vi /etc/httpd/conf/httpd.conf
#修改
ServerName (hostip)
#启动Apache服务
systemctl start httpd
systemctl enable httpd
#创建初始化环境变量文件
vi admin-login
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://hostname:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
#导入环境变量并查看
source admin-login
export -p
#创建项目、角色和域,并列出已有的项目、角色和域
openstack project create --domain default project
#openstack project list
#openstack role create user
#openstack role list
#openstack domain list
#openstack user list
三、镜像服务(Glance)安装
#安装glance软件包
yum install -y openstack-glance
#查看glance用户和组
cat /etc/passwd | grep glance
cat /etc/group | grep glance
#创建glance数据库
mysql -uroot -p123456
create database glance;
grant all privileges on glance.* to 'glance'@'localhost' identified by '123456';
grant all privileges on glance.* to 'glance'@'%' identified by '123456';
quit;
#备份并修改glance-api配置文件
cp /etc/glance/glance-api.conf /etc/glance/glance-api.bak
grep -Ev "^$|#" /etc/glance/glance-api.bak > /etc/glance/glance-api.conf
#!@必须靠左不得有空格
[database]
connection = mysql+pymysql://glance:123456@hostname/glance
[keystone_authtoken]
auth_url = http://hostname:5000
memcached_servers = hostname:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = glance
password = 123456
[paste_deploy]
flavor = keystone
[glance_store]
stores = file
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
#同步数据库
su glance -s /bin/sh -c "glance-manage db_sync"
#查看数据库
mysql -uroot -p123456
use glance;
show tables;
quit;
#导入环境变量
source admin-login
#创建glance用户和服务
openstack user create --domain default --password 123456 glance
openstack service create --name glance image
openstack endpoint create --region RegionOne glance public http://hostname:9292
openstack endpoint create --region RegionOne glance internal http://hostname:9292
openstack endpoint create --region RegionOne glance admin http://hostname:9292
#启动glance-api服务
systemctl start openstack-glance-api
systemctl enable openstack-glance-api
#检查服务状态和端口监听情况
netstat -tnlup | grep 9292
systemctl status openstack-glance-api
#例子
#创建镜像并查看镜像列表
openstack image create --file 镜像地址 --disk-format qcow2 --container-format bare --public cirros(镜像名称)
openstack image list
#openstack user list
#openstack domain list
#openstack role list
#openstack endpoint list
#ll /var/lib/glance/images/
四、放置服务(Placement)安装
#安装 openstack-placement-api
yum install -y openstack-placement-api
#查看 placement 用户和组
cat /etc/passwd | grep placement
cat /etc/group | grep placement
#创建 placement 数据库,并授权
mysql -uroot -p123456
create database placement;
grant all privileges on placement.* to 'placement'@'hostname' identified by '123456';
grant all privileges on placement.* to 'placement'@'%' identified by '123456';
quit
#备份并编辑 placement 配置文件
cp /etc/placement/plancement.conf /etc/placement/plancement-conf.bak
grep -Ev "^$|#" /etc/plancement/placement.conf.bak > /etc/placement/plancement.conf
#配置 keystone 认证
vi /etc/placement/placement.conf
[DEFAULT]
[api]
auth_strategy = keystone
[cors]
[keystone_authtoken]
auth_url = http://server:5000
memcached_servers = server:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456
[oslo_policy]
[placement]
[placement_database]
connection = mysql+pymysql://placement:123456@server01/placement
[profiler]
#配置 apache
vi /etc/httpd/conf.d/00-placement-api.conf
#!@在<VirtualHost *:8778>中添加,报错则删
# <Directory /usr/bin>
# Require all granted
# </Directory>
<\VirtualHost>
#同步数据库
su placement -s /bin/sh -c "placement-manage db sync"
mysql -uroot -p123456
use placement;
show tables;
#导入环境变量
source admin-login
#创建 keystone 用户和角色,并分配权限
openstack user create --domain default --password 123456 placement
openstack role add --project project --user placement admin
#创建服务和端点
openstack service create --name placement placement
openstack endpoint create --region RegionOne placement public http://hostname:8778
openstack endpoint create --region RegionOne placement internal http://hostname:8778
openstack endpoint create --region RegionOne placement admin http://hostname:8778
#重启 apache 并查看端口
systemctl restart httpd
netstat -tnlup | grep 8778
#测试端口是否正常
curl http://hostname:8778
五、计算服务(Nova)安装
#安装nova软件包
yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-scheduler openstack-nova-novncproxy
cat /etc/passwd | grep nova #查看用户信息
cat /etc/group | grep nova #查看用户组信息
mysql -uroot -p123456 #进入数据库
#创建三个数据库
create database nova_api;
create database nova_cell0;
create database nova;
#授予“nova”用户从本地和远程管理数据库的权限
grant all privileges on nova_api.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova_api.* to 'nova'@'%' identified by '123456';
grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova_cell0.* to 'nova'@'%' identified by '123456';
grant all privileges on nova.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova.* to 'nova'@'%' identified by '123456';
quit;
#备份配置文件
cp /etc/nova/nova.conf /etc/nova/nova.bak
#去除空行和注释
grep -Ev "^$|#" /etc/nova/nova.bak > /etc/nova/nova.conf
#进入主配置文件
#向左靠齐勿有空格
vi /etc/nova/nova.conf
[api_database] #与nova_api数据库连接
connection = mysql+pymysql://nova:123456@hostname/nova_api
[database] #与nova数据库连接
connection = mysql+pymysql://nova:123456@hostname/nova
[api] #与keystone交互
auth_strategy = keystone
[keystone_authtoken] #与keystone交互
auth_url = http://hostname:5000
memcached_servers = hostname:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456
[placement] #与placement交互
auth_url = http://hostname:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456
region_name = RegionOne
[glance] #与glance交互
api_server = http://hostname:9292
[oslo_concurrency] #为OpenStack代码块提供线程及进程锁
lock_path = /var/lib/nova/tmp
[DEFAULT] #配置使用消息队列及防火墙信息
enabled_apis = osapi_compute,metadata
transport_url = rabbit://rabbitmq:123456@hostname:5672
my_ip = (hostip)
use_neturon = true
firewall_dirver = nova.virt.firewall.NoopFirewallDriver
[vnc] #配置VCN连接方式
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
#初始化nova数据库
su nova -s /bin/sh -c "nova-manage api_db sync"
su nova -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1"
su nova -s /bin/sh -c "nova-manage cell_v2 map_cell0"
su nova -s /bin/sh -c "nova-manage db sync"
#验证:获得已注册的单元列表
nova-manage cell_v2 list_cells
#nova组件初始化
#导入环境变量
source admin-login
#在OpenStack平台创建nova用户,密码123456
openstack user create --domain default --password 123456 nova
openstack role add --project project --user nova admin
#创建名为nova类型为compute的服务
openstack service create --name nova compute
#公众用户访问端点
openstack endpoint create --region RegionOne nova public http://hostname:8774/v2.1
#内部组件访问端点
openstack endpoint create --region RegionOne nova internal http://hostname:8774/v2.1
#admin用户访问端点
openstack endpoint create --region RegionOne nova admin http://hostname:8774/v2.1
#启动并设置开机启动
systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
netstat -nutpl | grep 877 #查看端口占用(8774,8775)
openstack compute service list #查看计算服务列表
#安装客户端Nova服务
yum install -y openstack-nova-compute
cat /etc/passwd | grep nova
cat /etc/group | grep nova
cp /etc/nova/nova.conf /etc/nova/nova.bak
grep -Ev "^$|#" /etc/nova/nova.bak > /etc/nova/nova.conf
vi /etc/nova/nova.conf
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://hostname:5000
memcached_servers = hostname:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456
[placement]
auth_url = http://hostname:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456
region_name = RegionOne
[glance]
api_server = http://hostname:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://rabbitmq:123456@hostname:5672
my_ip = (客户端ip)
use_neturon = true
firewall_dirver = nova.virt.firewall.NoopFirewallDriver
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://(server-ip):6080/vnc_auto.html
[libvirt]
virt_type = qemu
systemctl start libvirtd openstack-nova-compute
systemctl enable libvirtd openstack-nova-compute
#发现客户端并检验服务(服务端执行)
source admin-login
su nova -s /bin.sh -c "nova-manage cell_v2 discover_hosts --verbose"
#设置自动发现
vi /etc/novs.novs.conf
[scheduler]
discover_hosts_in_cells_interval = 60
systemctl restart openstack-nova-api #重启nova-api服务
#验证
opensatck compute service list #查看计算服务列表
openstack catalog list #查看OpenStack现有服务及服务对应的端点列表
nova-status upgrade check #