侧边栏壁纸
博主头像
口鸟人 博主等级

言念君子 . 温其如玉

  • 累计撰写 39 篇文章
  • 累计创建 16 个标签
  • 累计收到 14 条评论

目 录CONTENT

文章目录

OpenStack云平台部署--控制节点配置

koniaoer
2023-12-28 / 2 评论 / 3 点赞 / 309 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-12-23,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

OpenStack云平台

实验环境

一台作为控制节点的主机,至少一台作为计算节点的主机

一,控制节点配置

1)主机网卡配置

建议设置两张网卡(内网/外网)
内网网段(192.168.64.0)
外网网段(192.168.130.0)

ps:需要与外网连通,并配好yum源

2)关闭防火墙,selinux,及libvirtd服务

systemctl disable firewalld #关闭防火墙

systemctl disable libvirtd.service #关闭libvirtd服务

3)CentOS/redhat部分常用软件安装

yum install -y vim net-tools bash-completion-extras git

4) 配置主机名及hosts文件

hostnamectl set-hostname controller			#修改主机名 reboot或者exit刷新
echo "192.168.130.100 controller" >> /etc/hosts #添加主机域名本地解析

5)同步时间

方案一

yum -y install ntp
systemctl start ntpd 
systemctl enable ntpd 

方案二

vi /etc/chrony.conf

allow 192.168.32.0/24		#添加要控制的网段允许通信

systemctl enable chronyd   	#开机启动
systemctl restart chronyd

6)在yum源中配置openstack源

yum list |grep openstack

yum -y install centos-release-openstack-[版本号(a~z)].noarch				#字母越靠后版本越新

删除新生成的配置,写入自定义的配置
rm CentOS-Ceph-Nautilus.repo
rm CentOS-NFS-Ganesha-28.repo
rm CentOS-OpenStack-train.repo
rm CentOS-QEMU-EV.repo
rm CentOS-Storage-common.repo


vi /etc/yum.repo.d/openstack.repo

[base]
name=base
baseurl=http://repo.huaweicloud.com/centos/7/os/x86_64/
enable=1
gpgcheck=0

[extras]
name=extras
baseurl=http://repo.huaweicloud.com/centos/7/extras/x86_64/
enable=1
gpgcheck=0

[updates]
name=updates
baseurl=http://repo.huaweicloud.com/centos/7/updates/x86_64/
enable=1
gpgcheck=0

[train]
name=train
baseurl=http://repo.huaweicloud.com/centos/7/cloud/x86_64/openstack-train/
enable=1
gpgcheck=0

[virt]
name=virt
baseurl=http://repo.huaweicloud.com/centos/7/virt/x86_64/kvm-common/
enable=1
gpgcheck=0

7)下载OpenStack云计算平台框架和客户端

yum list |grep openstackclient
yum -y install python3-openstackclient.noarch								#客户端

openstack --version		#查看版本

vi /etc/selinux/config
更改策略
SELINUX=disabled

查找包:
yum list |grep openstack-selinux
安装
yum -y install openstack-selinux.noarch					#要下对应版本号的selinux,在Redhat系统中要下载对应的rdo包

在这个网站查找对应系统的对应rdo包
https://cbs.centos.org/koji/packageinfo?packageID=3212

8)openstack第三方服务

1, MariaDB数据库服务
yum list |grep mariadb-server			#查询源里的mariadb-server
yum list |grep PyMySQL					#查询源里的PyMySQL

yum -y install mariadb-server.x86_64	#要根据你源里的名称下载
yum -y install python2-PyMySQL.noarch



在cd /etc/my.cnf.d/下新增配置文件,
vi openstack.cnf

[mysqld]
bind-address=[控制节点的ip]       #指定MySQL服务器监听的IP地址,如果希望MySQL服务器接受来自任何IP地址的连接,可以将此值设置为0.0.0.0
default-storage-engine=innodb     #这个配置项设置了MySQL的默认存储引擎为InnoDB
innodb_file_per_table=on          #这个配置项启用了InnoDB的“每个表一个文件”模式。当设置为on时,每个InnoDB表都会存储在自己的.ibd文件中,而不是共享一个表空间文件
max_connections=4096              #这个配置项设置了MySQL服务器允许的最大并发连接数      
collation-server=utf8_general_ci  #这个配置项设置了服务器的默认排序规则(collation)为utf8_general_ci
character-set-server=utf8         #这个配置项设置了服务器的默认字符集为utf8
其中192.168.232.130为控制节点的仅主机模式ip

重启服务
systemctl enable mariadb
systemctl restart mariadb

初始化数据库
mysql_secure_installation

	Enter current password for root (enter for none): 	#直接回车
	Set root password? [Y/n] y
	New password: 123456
	Re-enter new password: 123456
	Remove anonymous users? [Y/n] y
	Disallow root login remotely? [Y/n] y
	Remove test database and access to it? [Y/n] y
	Reload privilege tables now? [Y/n] y
	... Success!

测试数据库
mysql -hlocalhost -uroot -p123456

show databases;		
use mysql;
show tables;

2,RabbiMQ消息队列服务
Openstack各个主机之间是通过消息队列进行相互通信

yum list |grep rabbitmq-server
yum install rabbitmq-server.x86_64	#下载RabbiMQ消息队列服务

systemctl enable rabbitmq-server
systemctl start  rabbitmq-server


创建管理用户密码
rabbitmqctl add_user openstack 123456	#其中openstack为用户名,123456为密码

设置用户管理权限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"	#这个命令会为名为 openstack 的用户在默认的 / 虚拟主机中设置全部的配置、写入和读取权限
/*
rabbitmqctl set_permissions [-p vhost] username "conf" "write" "read"
其中 -p vhost 是可选参数,用来指定虚拟主机(vhost),如果不指定,默认是/.

conf, write, 和 read 是权限模式,它们可以是通配符 .* 或者是具体的权限表达式

如果您想要确保这个命令正确执行,请确保以下几点:
1,您已经通过 rabbitmqctl add_user 添加了 openstack 用户,并且设置了密码。
2.您有足够权限运行 rabbitmqctl 命令,通常需要以 RabbitMQ 服务账户或具有管理员权限的用户身份执行。
3,RabbitMQ 服务正在运行并且可访问。
4,如果您的意图是在特定的虚拟主机上设置权限,请使用 -p 参数指定正确的虚拟主机。
*/




查看权限
rabbitmqctl list_user_permissions openstack
检查服务运行状态
netstat -tnlup
其中端口25672和5672是消息队列服务的默认端口

3,安装Memcached缓存
yum list |grep memcache      #查找memcache包
yum -y install memcached.x86_64 python3-memcached.noarch  #安装自己找到的包


修改配置
vi /etc/sysconfig/memcached
/*

PORT="11211"       #指定Memcached服务器监听的端口号为11211
USER="memcached"   #指定运行Memcached服务的用户名为memcached
MAXCONN="1024"     #设置Memcached服务器允许的最大并发连接数为1024
CACHESIZE="64"     #指定了Memcached服务器分配给缓存的内存大小,单位是MB(兆字节)
OPTIONS="-l 127.0.0.1,::1,192.168.130.128"
#这部分是Memcached服务器的启动选项。-l 参数用于指定Memcached服务器监听的IP地址
*/

systemctl enable memcached
systemctl restart memcached


检测服务
netstat -tnulp|grep memcache

4,etcd键值对存储系统
yum list |grep etcd          #查找包
yum -y install etcd.x86_64  


vi /etc/etcd/etcd.conf

/*
ETCD_NAME="controller"
#设置etcd节点的名称为controller,在etcd集群中,每个节点的名称应该是唯一的

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#指定etcd存储数据的目录为/var/lib/etcd/default.etcd,etcd会在这个目录下存储其快照、日志和配置文件等

ETCD_LISTEN_PEER_URLS="http://127.0.0.1:2380"
#这是etcd节点之间用于集群内部通信的端口

ETCD_LISTEN_CLIENT_URLS="http://192.168.130.128:2379"
#这是etcd对外提供服务的端口,客户端通过这个端口与etcd进行交互

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://127.0.0.1:2380"
#这个URL用于集群内部节点之间的通信和发现

ETCD_INITIAL_CLUSTER="controller=http://127.0.0.1:2380"
#设置etcd集群的初始成员列表,这个例子中,集群只有一个成员controller,其通信地址为http://127.0.0.1:2380

ETCD_INITIAL_CLUSTER_STATE="new"
#设置etcd集群的初始状态为new

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
#设置etcd集群的初始集群令牌为etcd-cluster-01。这个令牌用于在创建集群时识别集群成员,确保集群的一致性

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.130.128:2379"
#这个URL用于客户端连接到etcd节点

*/


systemctl enable etcd
systemctl start etcd

7)认证服务Keystone安装

Keystone在OpenStack云计算平台中就是这个认证单元,负责各个组件的认证工作, 本任务将在控制节点中安装Keystone组件

1、基本概念
  • 项目(project):项目是供用户使用的资源集合,不同的项目之间的资源是隔离的

  • 服务(Service):服务是项目中各个组件提供的服务。

  • 端点(Endpoint):端点是一个用来访问或定位某个服务的地址

  • 用户(User):用户是任何拥有身份验证信息来使用OpenStack的实体,可以是真正的使用人、其他系统或者某一服务

  • 角色(Role):角色是预定义的权限集合。

  • 认证(Authentication)、凭据(Credentials):认证是Keystone验证用户身份的过程,凭据是认证用户身份时需要的身份验证数据。

  • 令牌(Token):令牌是一个加密字符串,是访问资源的“通行证”

  • 组(Group):组是部分用户的集合,通过分配角色到组,可以批量向在该组中的所有用户分配权限

  • 域(Domain):域是项目和用户的集合

2、keystone组建架构

用户给Keystone提供凭证用于登录系统。登录成功后Keystone将签发令牌给用户。以后每次调用其他组件服务的时候都要出示令牌并由Keystone对令牌进行验证通过后才能继续使用服务

3、安装和配置keystone
yum list |grep openstack-keystone
yum list |grep httpd
yum list |grep mod_wsgi
#查找这三个安装包
yum -y install openstack-keystone.noarch httpd.x86_64 python3-mod_wsgi.x86_64


安装完查看默认用户
cat /etc/passwd|grep keystone
cat /etc/group|grep keystone

4、创建keystone数据库并授权
mysql -uroot -p123456
#登录数据库
create database keystone;
#创建keystone的数据库
show databases;


GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'127.0.0.1' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456'; 

#上面两条语句把“keystone”数据库的所有表(keystone.*)的所有权限(ALLPRIVILEGES)授予本地主机('localhost')及任意远程主机('%')中名为“keystone”的用户,验证密码为“123456”,这里的“keystone”用户是安装Keystone组件时自动生成的系统用户。


vi /etc/keystone/keystone.conf
在database下面添加以下配置:
connection = mysql+pymysql://keystone:123456@controller/keystone
 
在token下面添加以下配置:
provider = fernet

5,初始化数据库

su keystone -s /bin/sh -c "keystone-manage db_sync"

#以keystone用户的身份,使用/bin/sh作为shell,执行keystone-manage db_sync命令来同步Keystone服务的数据库模式


进入数据库查看
mysql -uroot -p123456
use keystone;

show tables;

6,keystone组件初始化
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://controller:5000/v3 --bootstrap-internal-url http://controller:5000/v3 --bootstrap-public-url http://controller:5000/v3 --bootstrap-region-id RegionOne
#初始化用户身份认证信息

7,配置Web服务
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
vi /etc/httpd/conf/httpd.conf
#添加以下配置
ServerName controller

systemctl enable httpd
systemctl start httpd

8,测试
导入环境变量
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://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

每次运行命令之前,都需要执行以下操作:
source admin_login

创建project项目
openstack project create --domain default project

项目列表
openstack project list

创建user角色
openstack role create user

查看角色列表
openstack role list

用户列表
openstack user list
openstack domain list

8)镜像服务Glance安装

1,基本概念

Glance是镜像服务(Image Service)的项目代号,是OpenStack的核心组件之一。它和Keystone一样是一个支持WSGI协议的Web服务,用户可以通过Web访问或者用命令行控制Glance对镜像进行管理,其功能包括虚拟机镜像和快照的注册、检索、删除、权限管理等

l  镜像元数据(Metadata)

镜像元数据是存放在数据库中的关于镜像的相关信息,如文件名、大小、状态等字符串信息,用于快速检索

l  镜像文件(Image File)

镜像文件即镜像本身,它存储于后端存储里,所谓的后端存储就是第三方存储系统,如文件系统、Swift、S3、Cinder等

l  磁盘格式(Disk Format):

磁盘格式(Disk Format):Glance中的磁盘格式指的是镜像文件的存储格式(qcow2 QEMU支持的一种动态可扩展并支持快照的磁盘格式,是OpenStack的常用磁盘格式)

2,Glance的组件架构

所有对Glance合法的请求都会通过Glance-API这个入口,如果是对镜像元数据的处理请求,Glance-API会与数据库交互进行处理。而所有对镜像文件的操作都是通过调用存储接口执行的,因为存储接口负责与后端存储的交互

3,安装Glance
yum list |grep openstack-glance                 #检测安装包

yum -y install openstack-glance.noarch          #部分系统需要安装相关依赖包

依赖包网址:https://centos.pkgs.org/
例:
dnf --enablerepo=crb install python3-pyxattr    #作者用的Redhat9依赖包



查询安装是否成功
cat /etc/passwd|grep glance
      glance:x:161:161:OpenStack Glance Daemons:/var/lib/glance:/sbin/nologin

cat /etc/group|grep glance
      glance:x:161:

4,授权数据库
mysql -uroot -p123456
create database glance;
show databases;

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '123456';

5,修改配置
备份配置文件
cp /etc/glance/glance-api.conf /etc/glance/glance-api.bak
去除无效的注释文件信息
grep -Ev '^$|#' /etc/glance/glance-api.bak > /etc/glance/glance-api.conf


vi /etc/glance/glance-api.conf

添加以下参数信息
/*
[database]
connection = mysql+pymysql://glance:123456@controller/glance

[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
username = glance
password = 123456
project_name = project
user_domain_name = Default
project_domain_name = Default

[paste_deploy]
flavor = keystone

[glance_store]
stores = file
default_store = file                             
filesystem_store_datadir = /var/lib/glance/images/  

*/

5,数据库同步
su glance -s /bin/sh -c "glance-manage db_sync"


登录glance数据库,查看数据包是否同步成功
mysql -uroot -p123456
use glance;
show tables;
6,Glance组件初始化
l 创建glance用户
openstack user create --domain default --password 123456 glance
l 给glance分配用户
openstack role add --project project --user glance admin
l创建服务
openstack service create --name glance image

openstack endpoint create --region RegionOne glance public http://controller:9292
openstack endpoint create --region RegionOne glance internal http://controller:9292
openstack endpoint create --region RegionOne glance admin http://controller:9292
l重启服务
systemctl enable openstack-glance-api
systemctl restart openstack-glance-api 

使用xftp软件上传img文件,上传到/etc目录下

cirros-0.5.1-x86_64-disk.img

l创建镜像
openstack image create --file /etc/cirros-0.5.1-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros 
l查看镜像
openstack image list

9)放置服务Placement安装

1,基本概念

Placement的主要组成是它的接口模块(Placement-API),该模块监控系统资源信息

2,基本工作流程

l 第1步,Nova告诉Placement要创建的云主机需要什么资源、数量如何

l 第2步,Placement从数据库中查询获得两个数据,第一个数据是现有空闲资源足以创建云主机的物理主机以及它们所剩资源信息,第二个数据是这些物理主机原有的资源信息

l 第3步,数据库为Placement返回查询到的数据

l 第4步,Placement将获得的两个数据告知Nova

l 第5步,Nova用这两个数据通过算法选择好创建云主机的物理主机,并将选择的结果告诉Placement

l 第6步,Placement修改数据库,将相应资源从该物理主机的资源中扣除

3,下载安装包
yum install -y openstack-placement-api.noarch
cat /etc/passwd |grep placement
cat /etc/group |grep placement

验证成功

4,创建数据库并授权
mysql -uroot -p123456
create database placement;
GRANT ALL PRIVILEGES ON placement.* TO placement@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON placement.* TO placement@'%' IDENTIFIED BY '123456';

5,配置文件修改

备份文件

去除多余的注释信息

编辑配置文件

cp /etc/placement/placement.conf  /etc/placement/placement.bak
grep -Ev '^$|#' /etc/placement/placement.bak > /etc/placement/placement.conf
vi /etc/placement/placement.conf

[api]
auth_strategy = keystone

[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456

[placement_database]
connection = mysql+pymysql://placement:123456@controller/placement

vi /etc/httpd/conf.d/00-placement-api.conf

添加apache服务配置

<Directory /usr/bin>
         Require all granted
 </Directory>
systemctl restart httpd
httpd -v

6,数据库同步
su glance -s /bin/sh -c "placement-manage db sync"
mysql -uroot -123456
use placement;
show tables;

7,组件初始化
. admin_login
openstack user create --domain default --password 123456 placement
openstack service create --name placement placement
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778

检测

curl http://controller:8778
netstat -tnulp |grep 8778

10)计算服务Nova安装

1,基本的概念

Nova负责管理OpenStack中云主机实例(虚拟机)的创建、删除、启动、停止等。Nova位于OpenStack架构的中心,其他服务或者组件(如Glance、Placement、Cinder、Neutron等)对它提供支持

2,组件架构

l nova-api :该模块用于接收和响应外部请求,也是外部可用于管理Nova的唯一入口

l nova-scheduler:负责从计算机集群中选择某一主机创建虚拟机

l nova-compute:nova的核心模块,负责创建虚拟机

l nova-conductor:负责将数据写进数据库

3,基本工作流程

第1步,nova-api接收到用户通过管理界面或命令行发起的云主机创建请求,并将其发送到消息队列中

第2步,nova-conductor从消息队列获得请求,从数据库获得如Cell单元的相关信息,再将请求和获得的数据放入消息队列

第3步,nova-scheduler从消息队列获得请求和数据以后,与Placement组件配合选择创建云主机的物理机,选择完成后,请求转入消息队列等待nova-compute处理

第4步,nova-compute从消息队列获得请求后,分别与Glance、Neutron和Cinder交互以获取镜像资源、网络资源和云存储资源。一切资源准备就绪后,nova-compute通过Hypervisor调用具体的虚拟化程序,如KVM、QEMU、Xen等,来创建虚拟机

4,控制节点安装nova
yum install -y openstack-nova-api.noarch openstack-nova-conductor.noarch openstack-nova-scheduler.noarch openstack-nova-novncproxy.noarch

在控制节点共安装了Nova的4个软件包,它们分别如下

“openstack-nova-api”:Nova与外部的接口模块。

“openstack-nova-conductor”:Nova传导服务模块,提供数据库访问。

“nova-scheduler”:Nova调度服务模块,用以选择某台主机进行云主机创建。

“openstack-nova-novncproxy”:Nova的虚拟网络控制台( Virtual Network Console,VNC)代理模块,支持用户通过VNC访问云主机。

cat /etc/passwd|grep nova
cat /etc/group|grep nova

5,创建数据库
mysql -uroot -p123456
create database nova;
create database nova_api;
create database nova_cell0;
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';
exit

6,修改配置文件
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]
connection = mysql+pymysql://nova:123456@controller/nova_api

[database]
connection = mysql+pymysql://nova:123456@controller/nova

[api]
auth_strategy = keystone

[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password

[placement]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456
region_name = RegionOne

[glance]
api_servers = http://controller:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[DEFAULT]
enabled_apis = osapi_compute,metadata           
transport_url = rabbit://openstack:123456@controller:5672
my_ip = 192.168.130.128
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip

7,数据库同步
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

8,nova组件初始化

l 导入环境变量

 source admin_login

l 创建nova用户

openstack user create --domain default --password 123456 nova

l 给nova用户分配admin角色

l 创建对外的访问端点

l 创建对外、对内、admin访问端点

openstack role add --project project --user nova admin

openstack service create --name nova compute

l 重启后要重新运行这3个命令

openstack endpoint create --region RegionOne nova public http://controller:8774/v2.1
openstack endpoint create --region RegionOne nova internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne nova admin http://controller:8774/v2.1

l 检查

openstack endpoint list |grep nova

9,启动组件

l 设置开机启动

l 启动

l 查看状态

l 端口检测

l 服务检测

systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

systemctl status openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

netstat -nutpl|grep 877 

openstack compute service list

ps:遇到这个报错

Missing value auth-url required for auth plugin password

运行再source admin_login

l 查看服务端点

openstack catalog list

11)网络服务Neutron安装

1 基本概念

l 网桥(Bridge):似于交换机,用于连接不同的网络设备

l 网络(Network):包含多个子网段的虚拟网络

l 子网(Subnet):ip池,可以分配给虚拟机ip

l 端口(Port):就是虚拟机的网卡

 

l Neutron的组件架构

 

l 核心插件(Core-plugin)

Neutron中的核心插件即为二层模块(Modular Layer 2,ML2),它负责管理OSI第二层的网络连接。ML2中主要包括网络、子网、端口这3类核心资源.

l 服务插件(Service-pluging)

服务插件是除核心插件以外其他的插件的统称,主要实现OSI模型的第三层到第七层的网络服务.

 

2 基本工作流程

 

第1步,“neutron-server”服务模块收到要创建虚拟网络的请求,然后将该请求通过消息队列通知给对应的“neutron-plugin”插件,假设网络提供者为开放虚拟交换机(Open vSwitch,OVS),那么这里的插件对应的就是OVS的插件。

第2步,当OVS插件收到请求后,将需要创建的虚拟网络的信息(名称、ID等)保存到数据库中并通过消息队列通知运行在各个节点上的 “neutron-agent”代理。

第3步,“neutron-agent”代理收到消息后会在节点上创建对应设备,例如VLAN设备。

3 Neutron支持的网络模式

l Flat网络模式

所有虚拟机的网卡IP地址和物理机的网卡IP地址同处一个网段中.

l VLAN网络模式

VLAN是一种将局域网(Local Area Network,LAN)设备从逻辑上划分成更小的局域网

l VXLAN与GRE网络模式

虚拟扩展局域网(Virtual Extensible Local Area Network,VXLAN)和通用路由封装(Generic Routing Encapsulation,GRE)这两种延展网络(Overlay Network)。所谓延展网络,是指在其他网络上扩建而来的网络

4 网卡设置

(以下操作在计算和控制节点都需要设置)

l 将外网网卡设置为混杂模式

ifconfig ens34 promisc   注意ens34是nat网卡

vi /etc/profile

在“/etc/profile”环境变量配置文件末尾加上命令语句

ifconfig ens34 promisc

l 加载桥接模式防火墙模块

vi /etc/sysctl.conf

添加

net.bridge.bridge-nf-call-iptables = 1 
net.bridge.bridge-nf-call-ip6tables = 1

验证:

modprobe br_netfilter 
sysctl -p

5 控制节点安装neutron
安装
yum -y install openstack-neutron openstack-neutron-ml2 openstack- neutron-linuxbridge

“openstack-neutron”:“neutron-server”模块的包

“openstack-neutron-ml2”:ML2插件的包

“openstack-neutron-linuxbridge”:网桥和网络提供者相关的软件包

l 查询账号

cat /etc/passwd |grep neutron 
cat /etc/group |grep neutron

数据库操作
mysql -uroot -p123456
create database neutron;
show databases;

l 授权登录

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456';

修改配置文件
cp /etc/neutron/neutron.conf /etc/neutron/neutron.bak
grep -Ev '^$|#' /etc/neutron/neutron.bak >/etc/neutron/neutron.conf

l 修改以下neutron.conf配置:

vi  /etc/neutron/neutron.conf
[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:123456@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[database]
connection = mysql+pymysql://neutron:123456@controller/neutron

[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = neutron
password = 123456

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = project
username = nova
password = 123456
region_name = RegionOne
server_proxyclient_address = 192.168.64.100#控制节点仅主机ip

l 修改ml2插件配置

cp /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_ conf.bak
grep -Ev '^$|#' /etc/neutron/plugins/ml2/ml2_conf.bak>/etc/neutron/plugins/ml2/ml2_conf.ini
vi /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security

[ml2_type_flat]
flat_networks = provider

[securitygroup]
enable_ipset = true
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

l 修改linuxbridge插件配置

cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.bak
grep -Ev '^$|#' /etc/neutron/plugins/ml2/linuxbridge_agent.bak>/etc/neutron/plugins/ml2/linuxbridge_agent.ini

vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
physical_interface_mappings = provider:ens33  #指向控制节点的nat网卡名称
[vxlan]
enable_vxlan = false

[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

l 修改dhcp配置

cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.bak
grep -Ev '^$|#' /etc/neutron/dhcp_agent.bak> /etc/neutron/dhcp_agent.ini
vi /etc/neutron/dhcp_agent.ini

[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true 

l 修改metadata配置

vi /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET

l 修改nova配置

vi /etc/nova/nova.conf

[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = project
username = neutron
password = 123456
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET

初始化数据库
su neutron -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/ neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade heads"  
mysql -uroot -p123456
use neutron
show tables;

控制节点初始化

创建角色

openstack user create --domain default --password 123456 neutron

l 授权admin

l 创建服务端点

openstack role add --project project --user neutron admin
openstack service create --name neutron network
openstack endpoint create --region RegionOne neutron public http://controller:9696
openstack endpoint create --region RegionOne neutron internal http://controller:9696
openstack endpoint create --region RegionOne neutron admin http://controller:9696

启动服务

l 重启nova-api

systemctl restart openstack-nova-api 
systemctl status openstack-nova-api

l 重启neutron服务

systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
systemctl status neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

l 检测服务

netstat -tnlup|grep 9696

l 获取端点

curl http://controller:9696

后面跳转到计算节点配置

检测neutron服务
openstack network agent list
neutron-status upgrade check

12)块存储服务cinder

1 基本概念

Cinder是OpenStack中提供块存储服务的组件,主要功能是为虚拟机实例提供虚拟磁盘管理服务。

l 文件存储:文件存储依靠文件系统来存储文件。文件直接存储在文件系统中,通过FTP、网络文件系统(Network File System,NFS)等服务进行访问。

l 块存储:块存储中的块顾名思义就是存储系统采用的一整块存储设备。块存储可以虚拟出整块硬盘给云主机使用。

l 对象存储:对象数据可以分为两个部分,一部分是数据,存储于对象存储服务器中;另一部分是对应的元数据,存储于元数据服务器中。

2 Cinder的组件架构

l Cinder-api:模块入口,接收请求参数。

l Cinder-volume:管理所有的卷信息,包括增删改在。

l Volume-provider:真正去调用创建卷的组件。

l Volume-scheduler:选择创建卷到哪个存储服务器上。

l Volume-backup:备份。

3 Cinder的基本工作流程

Cinder各个模块分工合作的大致流程如下(注意模块之间的通信都是通过消息队列传递的)

第1步,“cinder-api”接收到用户通过管理界面或命令行发起的卷创建请求后,完成必要处理后将其发送到消息队列中。

第2步,“cinder-scheduler”从消息队列获得请求和数据以后,从若干存储节点中选出一个能存放该卷的节点。然后又将信息发送到消息队列。

第3步,“cinder-volume”从消息队列获取请求后,通过“volume-provider”调用具体的卷管理系统在存储设备上创建卷。

4 在控制节点安装
安装
yum -y install openstack-cinder
cat /etc/passwd |grep cinder
cat /etc/group |grep cinder

数据库
mysql -uroot -p123456
create database cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '123456';

修改配置
cp /etc/cinder/cinder.conf /etc/cinder/cinder.bak
grep -Ev '^$|#' /etc/cinder/cinder.bak > /etc/cinder/cinder.conf
vi /etc/cinder/cinder.conf
[DEFAULT]
auth_strategy = keystone
transport_url = rabbit://rabbitmq:123456@controller:5672


[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = cinder
password = 123456

[database]
connection = mysql+pymysql://cinder:123456@controller/cinder

[oslo_concurrency]
lock_path = /var/lib/cinder/tmp

修改nova配置:

vi /etc/nova/nova.conf 

[cinder]
os_region_name = RegionOne

同步数据库
su cinder -s /bin/sh -c "cinder-manage db sync" 
mysql -uroot -p123456
use cinder;
show tables;

创建用户角色
openstack user create --domain default --password 123456 cinder
openstack role add --project project --user cinder admin
openstack service create --name cinderv3 volumev3

l 创建服务端点

openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s

systemctl enable openstack-cinder-api openstack-cinder-scheduler
systemctl start openstack-cinder-api openstack-cinder-scheduler
systemctl status openstack-cinder-api openstack-cinder-scheduler

跳转到计算节点新加卷

13)虚拟网络管理

1 网络管理

主要包含网络的增删改查操作。

openstack network <操作> [选项] [<网络名>]

创建一个外部共享的网络

openstack network create --share --external --provider-physical-network provider --provider-network-type flat [your name]

查看网络列表

openstack network list

查看网络信息

openstack network show [网络ID]

修改网络信息(修改名字)

openstack network set --name 2022-lisi [网络ID]

删除网络信息

openstack network delete [网络ID]

2 子网管理

子网(Subnet)是挂载在网络上的一个IP地址段,它的主要功能是当网络上创建新的端口时为其分配IP地址。子网与网络是多对一的关系,一个子网必须属于一个网络,而一个网络下可以有多个子网

创建子网

openstack subnet create --network [网络ID] --allocation-pool start=192.168.110.100,end=192.168.110.250 --dns-nameserver 114.114.114.114 --subnet-range 192.168.110.0/24 [子网 name]

其中:

--network 网络名称

--allocation-pool 子网段范围

--dns-nameserver dns解析

--subnet-range 子网掩码

[子网 name]子网的名称

查看子网列表

openstack subnet list

查看子网信息

openstack subnet show [子网 name]

修改子网

openstack subnet set --name [改.子网 name] [原.子网 name]

删除子网

openstack subnet delete [子网 name]

3 端口管理

端口(Port)是挂载在子网上的用于连接云主机虚拟网卡的接口。端口上定义了硬件物理地址(MAC地址)和独立的IP地址,当云主机的虚拟网卡连接到某个端口时,端口就会将 MAC地址和IP地址分配给虚拟网卡

创建端口

openstack port create [port name] --network [网络name] --fixed-ip subnet=[子网name],ip-address=192.168.130.110

其中:

[port name] 端口的名称

[网络name] 网络的名称

[子网name] 子网的名称

192.168.130.110 子网的ip,即port的ip

查看端口列表

openstack port list

查看端口信息

openstack port show [port name]

修改端口

openstack port set --name [改.port name] [原.port name]
openstack port list

删除端口

openstack port delete [改.port name]

4 网桥管理

l 下载网桥命令行包

yum install -y bridge-utils

l 添加网桥

brctl addbr br1

l 网桥绑定网卡

brctl addif br1 ens33

l 查询网桥信息

brctl show br1

l 解除绑定

brctl delif br1 ens33

l 删除网桥

brctl delbr br1

5 实例管理

实例类型(Flavor)类似于云主机的虚拟硬件配置模板,该模板中定义了包括内存和硬盘大小、CPU个数等云主机信息,OpenStack云计算平台依据这个配置模板来批量生产云主机

通常实例类型的管理包括创建、删除、查询等。可用下面的命令对OpenStack的实例类型进行管理

openstack flavor <操作> [选项] <实例类型名>

创建模板

openstack flavor create --id auto --ram 512 --disk 10 --vcpus 1 --public my-flavor

查看模板列表

openstack flavor list

查看模板信息

openstack flavor show my-flavor-02

修改模板

openstack flavor set --property time=2024 my-flavor-02

删除模板

openstack flavor set delete my-flavor-02

6 云主机管理

云主机管理是OpenStack云计算平台的核心功能,通常云主机的管理包括创建、删除、查询等。可用下面的命令对OpenStack的云主机进行管理

openstack server <操作> <云主机名> [选项]

创建云主机

openstack server create vm001 --image cirros --flavor my-flavor --network [网络名称]

其中:

vm001 虚拟机名称

cirros 镜像名称

my-flavor 规格名称

查看云主机列表

openstack server list

查看云主机

openstack server show vm001

停止云主机

openstack server start vm001

重启云主机

openstack server reboot vm001

快照管理

通过对云主机进行拍摄快照操作可以获得一个镜像。而这个镜像可以用来还原云主机或者创建新的云主机。用下面的命令实现对OpenStack云主机进行快照拍摄。

openstack server image create <快照名> [选项]

l 创建快照

openstack server image create vm001 --name vm001-snap

l 查看快照

openstack image list

 

删除云主机

openstack server delete vm001

3

评论区