部署OpenStack架构

OpenStack环境部署

虚拟机设备信息及需求
控制节点(ct)
CPU:双核双线程-CPU虚拟化开启
在这里插入图片描述

内存:8G 硬盘:300G+300G(CEPH块存储)
双网卡:VM1(局域网)192.168.100.10 VM8(NAT):20.0.0.14
操作系统:Centos 7.6(1810)最小化安装

计算节点c1
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:300G+300G(CEPH块存储)
双网卡:VM1(局域网)192.168.100.20 VM8(NAT):20.0.0.15
操作系统:Centos 7.6(1810)-最小化安装

计算节点c2
CPU:双核双线程-CPU虚拟化开启
内存:6G 硬盘:300G+300G(CEPH块存储)
双网卡:VM1(局域网)192.168.100.30 VM8(NAT):20.0.0.16
操作系统:Centos 7.6(1810)-最小化安装

部署思路

一、配置操作系统+OpenStack运行环境
二、配置OpenStack平台基础服务(rabbitmq、mariadb、memcache、Apache)
三、配置OpenStack keystone组件
四、配置OpenStack Glance组件
五、配置placement服务
六、配置OpenStack Nova组件
七、配置OpenStack Neutron组件
八、配置OpenStack dashboard组件
九、配置OpenStack Cinder组件
十、常用云主机操作

基础环境配置

(所有节点,ct上演示)

centos7的安装与基本配置

[root@server4 ~]#  hostnamectl set-hostname ct
[root@server4 ~]#  bash

[root@server5 ~]#  hostnamectl set-hostname c1
[root@server5 ~]#  bash

[root@server6 ~]#  hostnamectl set-hostname c2
[root@server6 ~]#  bash

基础环境依赖包

1 [root@ct ~]# yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre  pcre-devel expat-devel cmake  bzip2 
2 [root@ct ~]# yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils

添加网卡,并设置网卡优先级

VM8(NAT)

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=20.0.0.14   (c1,c2分别设置为20.0.0.15  20.0.0.16)
NETMASK=255.255.255.0
GATEWAY=20.0.0.2
DNS=20.0.0.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV4_ROUTE_METRIC=90    #路由优先级,设置VMnet8网卡优先
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=fb3d5044-2ae8-484a-89b2-a098c5d9b550
DEVICE=ens33
ONBOOT=yes

VM1(仅主机模式)

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.100.10  (c1,c2分别设置为192.168.100.20 192,168.200.30)
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes

附加:添加之后需要重启网卡

[root@ct ~]# systemctl restart network

配置DNS

[root@ct ~]# vim /etc/resolv.conf
nameserver 20.0.0.2

附加:

(查看是否上网:如果提示没有该主机名修改一下DNS的名称直接改为DNS1)

添加主机映射

[root@ct ~]# vi /etc/hosts  //添加的是局域网

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 ct
192.168.100.20 c1
192.168.100.30 c2

三台主机设置免交互登录(非对称密钥)

[root@ct ~]#  ssh-keygen -t rsa	  //一直回车
[root@ct ~]#  ssh-copy-id ct
[root@ct ~]#  ssh-copy-id c1
[root@ct ~]#  ssh-copy-id c2

控制节点ct时间同步配置

#主机ct
[root@ct ~]# yum install chrony -y
[root@ct ~]# vim /etc/chrony.conf 
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
 3 #server 0.centos.pool.ntp.org iburst //注释以下4行
 4 #server 1.centos.pool.ntp.org iburst
 5 #server 2.centos.pool.ntp.org iburst
 6 #server 3.centos.pool.ntp.org iburst 
 7 server ntp6.aliyun.com iburst  #添加阿里云时间同步
 8 allow 192.168.100.0/24    #允许100网段同步自己的时间
[root@ct ~]# systemctl enable chronyd
[root@ct ~]# systemctl restart chronyd

#主机c1,c2
[root@c1 ~]# yum install chrony -y
[root@c1 ~]# vi /etc/chrony.conf
  3 #server 0.centos.pool.ntp.org iburst   //注释以下4行
  4 #server 1.centos.pool.ntp.org iburst
  5 #server 2.centos.pool.ntp.org iburst
  6 #server 3.centos.pool.ntp.org iburst
  7 server ct iburst              //同步主机ct

[root@c1 ~]# systemctl enable chronyd
[root@c1 ~]# systemctl restart chronyd

#使用 chronyc sources 命令查询时间同步信息
[root@ct ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 203.107.6.88                  2   8   377   162   +445us[ +557us] +/-   27ms

设置周期性任务

[root@ct ~]# crontab -e
*/30 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log  //每半小时执行一次时间同步的日志记录
[root@ct ~]# crontab -l    //查看任务计划
*/30 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log

安装基础的环境依赖包(重新下载一遍,查看是否重复)

yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre  pcre-devel expat-devel cmake  bzip2
yum -y install centos-release-openstack-train //openstack的train版本仓库源安装包 同时安装 OpenStack 客户端和 openstack-selinux 安装包
yum -y install python-openstackclient  //openstack客户端
yum -y install openstack-selinux  //openstack核心防护,RHEL和 CentOS 默认启用 SELinux 。安装 openstack-selinux 包实现对OpenStack服务的安全策略进行自动管理
yum -y install openstack-utils  //openstack管理工具

配置OpenStack系统环境配置

(仅在控制节点ct上安装)

安装配置MariaDB

[root@ct ~]# yum -y install mariadb mariadb-server python2-PyMySQL
//此包用于openstack的控制端连接mysql所需要的模块,如果不安装,则无法连接数据库;此包只安装在控制端
[root@ct ~]# yum -y install libibverbs
添加MySQL子配置文件,增加如下内容
[root@ct ~]# vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.100.10   #控制节点局域网地址
default-storage-engine = innodb    #默认存储引擎
innodb_file_per_table = on            #每张表独立表空间文件
max_connections = 4096                 #最大连接数
collation-server = utf8_general_ci    #默认字符集
character-set-server = utf8

设置开机自启动服务

[root@ct my.cnf.d]# systemctl enable mariadb
[root@ct my.cnf.d]# systemctl start mariadb

初始化数据库,执行MariaDB 安全配置脚本

[root@ct my.cnf.d]# mysql_secure_installation
Enter current password for root (enter for none):             #回车
OK, successfully used password, moving on...
Set root password? [Y/n] Y   //设置root密码
Remove anonymous users? [Y/n] Y
 ... Success!
Disallow root login remotely? [Y/n] N
 ... skipping.
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

安装RabbitMQ
所有创建虚拟机的指令,控制端都会发送到rabbitmq,node节点监听rabbitmq

[root@ct ~]# yum -y install rabbitmq-server

[root@ct ~]# systemctl enable rabbitmq-server.service //配置服务,启动RabbitMQ服务,并设置其开机启动
[root@ct ~]# systemctl start rabbitmq-server.service

创建消息队列用户,用于controler和node节点连接rabbitmq的认证

[root@ct ~]# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack"

配置openstack用户的操作权限(正则,配置读写权限)

[root@ct ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
#可查看256725672 两个端口(5672是Rabbitmq默认端口,25672是Rabbit的测试工具CLI的端口)

查看rabbmq插件列表

[root@ct ~]#  rabbitmq-plugins list
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status:   * = running on rabbit@ct
 |/
[e*] amqp_client                       3.6.16
[e*] cowboy                            1.0.4
[e*] cowlib                            1.0.2
[  ] rabbitmq_amqp1_0                  3.6.16
[  ] rabbitmq_auth_backend_ldap        3.6.16
[  ] rabbitmq_auth_mechanism_ssl       3.6.16
[  ] rabbitmq_consistent_hash_exchange 3.6.16
[  ] rabbitmq_event_exchange           3.6.16
[  ] rabbitmq_federation               3.6.16
[  ] rabbitmq_federation_management    3.6.16
[  ] rabbitmq_jms_topic_exchange       3.6.16
[E*] rabbitmq_management               3.6.16
[e*] rabbitmq_management_agent         3.6.16
[  ] rabbitmq_management_visualiser    3.6.16
[  ] rabbitmq_mqtt                     3.6.16
[  ] rabbitmq_random_exchange          3.6.16
[  ] rabbitmq_recent_history_exchange  3.6.16
[  ] rabbitmq_sharding                 3.6.16
[  ] rabbitmq_shovel                   3.6.16
[  ] rabbitmq_shovel_management        3.6.16
[  ] rabbitmq_stomp                    3.6.16
[  ] rabbitmq_top                      3.6.16
[  ] rabbitmq_tracing                  3.6.16
[  ] rabbitmq_trust_store              3.6.16
[e*] rabbitmq_web_dispatch             3.6.16
[  ] rabbitmq_web_mqtt                 3.6.16
[  ] rabbitmq_web_mqtt_examples        3.6.16
[  ] rabbitmq_web_stomp                3.6.16
[  ] rabbitmq_web_stomp_examples       3.6.16
[  ] sockjs   

开启rabbitmq的web管理界面(可视化)的插件,端口为15672

[root@ct ~]# rabbitmq-plugins enable rabbitmq_management

检查端口(25672 5672 15672)是否开启

[root@ct ~]# ss -anpt | grep 5672
LISTEN     0      128          *:25672                    *:*                   users:(("beam.smp",pid=9371,fd=46))
LISTEN     0      128          *:15672                    *:*                   users:(("beam.smp",pid=9371,fd=56))
TIME-WAIT  0      0      192.168.100.10:42745              192.168.100.10:25672              
LISTEN     0      128         :::5672                    :::*                   users:(("beam.smp",pid=9371,fd=55))

访问20.0.0.14:15672 验证服务
默认账号密码为guest
在这里插入图片描述
安装memcached
作用:安装memcached是用于存储session信息;服务身份验证机制使用Memcached来缓存令牌 在登录openstack的dashboard时,会产生一些session信息,这些session信息会存放到memcached中

session :会话管理,session共享机制,会有一个共享池,存放客户请求,所有节点服务器都能响应,当某个响应请求的节点挂掉,其他节点会直接回复请求,整个过程客户端无感知。

安装Memcached

[root@ct ~]# yum install -y memcached python-memcached
#python-*模块在OpenStack中起到连接数据库的作用

修改Memcached配置文件

[root@ct ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1,ct"   //添加控制节点主机名

[root@ct ~]# systemctl enable memcached
[root@ct ~]# systemctl start memcached
 
[root@ct ~]# netstat -nautp | grep 11211

安装etcd

[root@ct ~]# yum -y install etcd

修改配置文件

[root@ct ~]# cd /etc/etcd/
[root@ct etcd]# ls
etcd.conf
[root@ct etcd]# vim etcd.conf 
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  #数据目录位置
ETCD_LISTEN_PEER_URLS="http://192.168.100.10:2380" #监听其他etcd member的url(2380端口,集群之间通讯,域名为无效值)
ETCD_LISTEN_CLIENT_URLS="http://192.168.100.10:2379" #对外提供服务的地址(2379端口,集群内部的通讯端口)	
ETCD_NAME="ct"	#集群中节点标识(名称)
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.10:2380" #该节点成员的URL地址,2380端口:用于集群之间通讯
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.10:2379
ETCD_INITIAL_CLUSTER="ct=http://192.168.100.10:2380"	
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" #集群唯一标识
ETCD_INITIAL_CLUSTER_STATE="new"   
#初始集群状态,new为静态,若为existing,则表示此ETCD服务将尝试加入已有的集群
若为DNS,则表示此集群将作为被加入的对象

#开机自启动、开启服务,检测端口
[root@ct ~]# systemctl enable etcd.service
[root@ct ~]# systemctl start etcd.service
[root@ct ~]# netstat -anutp |grep 2379
[root@ct ~]# netstat -anutp |grep 2380
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.100.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.100.10:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="ct"
#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.100.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.100.10:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="ct"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.10:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.10:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="ct=http://192.168.100.10:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"

Keystone 组件的搭建

OpenStack组件安装的顺序

Keystone(apache)
glance
nova
neutron

部署openstack组件时,需先行安装认证服务(keystone),而认证服务是使用Apache运行的,安装完成后才可以创建、管理账号,然后安装镜像服务(glance)、计算服务(nova)、网络服务(neutron)

其中计算服务和网络服务分为管理端和客户端,所以需要在openstack的管理端安装计算服务和网络服务的管理端,在创建虚拟机的node节点上安装计算服务和网络服务的客户端,最后安装dashboard服务,openstack各种组件的API都是通过apache运行的

openstack的管理端负责创建虚拟机过程的调度:
通过openstack管理端创建虚拟机的相关数据最终都会记录到mysql(mariadb)中;node节点没有权限往数据库中写数据,只有控制端有权限,并且node节点与控制端通讯是通过rabbitmq间接通讯,node节点会监听rabbitmq,控制端也会监听rabbitmq,控制端把创建虚拟机的指令发送到rabbitmq,由监听rabbitmq指定队列的node节点接收消息并创建虚拟机
在这里插入图片描述
创建数据库实例和数据库用户(ct上安装)

[root@ct ~]# mysql -u root -p
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit

安装keystone、httpd、mod_wsgi配置

[root@ct ~]# yum -y install openstack-keystone httpd mod_wsgi
[root@ct ~]# cp -a /etc/keystone/keystone.conf{,.bak}
[root@ct ~]# grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf
#mod_wsgi包的作用是让apache能够代理pythone程序的组件;openstack的各个组件,包括API都是用python写的,但访问的是apache,apache会把请求转发给python去处理,这些包只安装在controler节点

通过pymysql模块访问mysql,指定用户名密码、数据库的域名、数据库名
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@ct/keystone

指定token的提供者,提供者就是keystone自己本身,Fernet:一种安全的消息传递格式
[root@ct ~]# openstack-config --set /etc/keystone/keystone.conf token provider fernet

初始化认证服务数据库
[root@ct ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化fernet 密钥存储库(以下命令会生成两个密钥,生成的密钥放于/etc/keystone/目录下,用于加密数据)
[root@ct keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@ct keystone]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

配置bootstrap身份认证服务

[root@ct ~]# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://ct:5000/v3/ \
--bootstrap-internal-url http://ct:5000/v3/ \
--bootstrap-public-url http://ct:5000/v3/ \
--bootstrap-region-id RegionOne	#指定一个区域名称

#此步骤是初始化openstack,会吧openstack的admin用户信息,写入到mysql的user表中,以及url等其他信息写入到mysql的相关表中
#admin-url 是管理网(如公有云内部openstack 管理网络),用于管理虚拟机的扩容或删除;如果公有网络和管理网是一个网络,则当业务量大时,会造成无法通过openstack的控制端扩容虚拟机,所以需要这个管理网。
#internel-url 是内部网络,进行数据传输,如虚拟机访问存储和数据库、zookeeper等中间件,这个网络是不能被外网访问的,只能用于企业内部访问。
#public-url 是共有网络,可以给用户访问的(如公有云),但是此环境没有这些网络,则公用同一个网络
#5000端口是keystone提供认证的端口
#需要在haproxy服务器上添加一条listen
#各种网络的url 需要制定controler节点的域名,一般是haproxy的vip的域名(高可用模式)

配置apache服务器

[root@ct ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf

优化配置文件路径
安装完mod_wsgi包后,会生成wsgi-keystone.conf 这个文件,文件中配置了虚拟主机及监听了5000端口,mod_wsgi 就是python的网关

[root@ct ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

开启apache服务

[root@ct conf.d]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@ct conf.d]# systemctl start httpd

配置管理员账户的环境变量
这些环境变量用于创建角色和项目使用,但是创建角色和项目需要有认证信息,所以通过环境变量声明用户名和密码等认证信息,欺骗openstack已经等了且通过认证,这样就可以创建项目和角色;也就是把admin用户的验证信息通过声明环境变量的方式传递给openstack进行验证,实现针对openstack的非交互式操作。

[root@ct ~]# cat >> ~/.bashrc << EOF
export OS_USERNAME=admin			#控制台登陆用户名
export OS_PASSWORD=ADMIN_PASS	#控制台登陆密码
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://ct:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
[root@ct ~]# source ~/.bashrc

通过配置环境变量,可以使用openstack命令进行一些操作

[root@ct ~]# openstack user list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| fcd2a1aac0cb45f5bc92a4af8159ef9a | admin |
+----------------------------------+-------+
#获取openstack用户列表

创建openstack域、项目、用户和角色

创建一个项目(project),创建在指定的domain(域)中,这里为default 默认,指定描述信息,project名称为service,可用openstack domain list 查询。

[root@ct ~]#  openstack project create --domain default --description "Service Project" servic
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | f66281b7eabe4bf0beaa4d6c04cd659a |
| is_domain   | False                            |
| name        | servic                           |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

创建角色(可使用openstack role list 查看)

[root@ct ~]# openstack role create user
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | d520d09041f14d58a08c39293b061542 |
| name        | user                             |
| options     | {}                               |
+-------------+----------------------------------+
[root@ct ~]# openstack role list  #查看角色列表
+----------------------------------+--------+
| ID                               | Name   |
+----------------------------------+--------+
| 1a4c78bfe1a34fb1906ee5df00aa585a | reader |   
| 24cacf62ef1b4d38bfb55d5967aa62fb | user   | //新加的user用户
| 3404aa3635b64ea6b3cdceaa5ac13647 | member | //租户
| d520d09041f14d58a08c39293b061542 | admin  | //管理员
+----------------------------------+--------+

验证,查看是否可以不指定密码就可以获取到token信息(验证认证服务)

[root@ct ~]#  openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                                                                   |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2020-12-16T11:49:36+0000                                                                                                                                                                |
| id         | gAAAAABf2eZAS748stcfAOX79rNg5Av1y9VKmFMTNyxR83pw7N5twg4CHPFrGZ8OZSpo9BfIfYr2z8QNArPp0yzWIiUp-Rj5m4VJ9O-yiQfepIbi6yTwgHHxqpCEkv8rHq3c2IysrOUMOlFzV08bWX1kBaA4tfn_5yDGuz2fAe0lX-9Z4OvrQiA |
| project_id | 76f663b83e8f4f4fabb04d092c889015                                                                                                                                                        |
| user_id    | fcd2a1aac0cb45f5bc92a4af8159ef9a                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

小结

Keystone 组件是OpenStack的核心组件,作为openstack集群中同一认证和授权的模块,其功能是多种方式认证、授权的模块,其核心功能就是针对于User(用户)、Tenant(租户)、Role(角色)、Token(令牌/凭证)的控制(手工编译部署即围绕此功能展开的)
User:使用 openstack 的用户。
Tenant:租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。
Role:角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。
Token:指的是一串比特值或者字符串,用来作为访问资源的记号。Token 中含有可访问资源的范围和有效时间,token 是用户的一种凭证,需要使用正确的用户名和密码向 Keystone 服务申请才能得到 token。

keystone组件的部署过程:
控制节点包括基础服务,扩展服务和支持服务。所以安装keystone这一基础服务之前,需要安装支持服务,包括 mariaDB、rabbitMQ、memcache、etcd,用于openstack的数据存储和消息代理。
keystone 与支持服务的对接:
rabbitmq:消息队列,在进行消息传递时,需要进行加密处理,而keystone正是token的提供者,可设置其加密方式为 fernet 这种安全的消息传递格式(用传参方式修改keystone配置文件 [token] )。并初始化密钥数据库,生成两个密钥文件。
mariadb:创建keystone组件的数据库,并为keystone用户授予对keystone库的所有权限。在keystone配置文件 [datebase] 模块进行连接登录数据库。通过keystone初始化数据库。
开始安装keystone时,需要同时安装apache服务,keystone与其他组件的通信需要apache的支持,因为openstack的各个组件,包括API都是Python写的,apache可以代理Python,由apache转发openstack各个组件的请求给Python去处理。
对接apache:apache配置文件监听了keystone认证端口5000。
通过网络的配置,使keystone可以控制全局,包括管理网络,内部网络,共有网络。

创建项目和角色,需要认证信息,把admin用户的验证信息通过声明环境变量的方式传递给openstack进行验证,即可创建。
Openstack身份认证服务提供了一个整合管理身份认证、授权、服务目录的point(Keystone组件基本就是围绕着这个point来展开)。其他的Openstack服务会使用Identity service的这个point来作为统一的API(这些API会被存放带一个服务目录中)。除此之外,Identity service还能够提供用户的相关信息,但这个信息并不会被包含在Openstack中,这些用户信息会被预先整合到一个基础架构中
Identity service带来的好处在于,其他的Openstack需要通过Identity service来进行集中协调。当一个Openstack服务接收到一个用户的请求时,那么Openstack就会通过Identity service来检查这个用户是否有权限来发出这个请求。
在安装OpenStack Identity service后,其他的OpenStack service必须要在Identity service中注册才能被使用。Identity可以追踪每一个OpenStack service的安装,并在系统网络中定位这个service的位置。
有了Identity service,Openstack就能够很好的对多个不同组件或者不同的用户进行协调和管理,在一个复杂的大型SOA软件系统中,需要Keystone这样的角色来支撑系统的松耦合架构设计。

Glance组件的搭建

一、Glance的概述
Glance是为虚拟机的创建提供镜像的服务,我们基于Openstack是构建基本的IaaS平台对外提供虚拟机,而虚拟机在创建时必须为选择需要安装的操作系统,Glance服务就是为该选择提供不同的操作系统镜像。
二、Glance的组件
Glance-API
主要用来响应各种REST请求然后通过其它模块(主要是glance-registry组件和后端存储接口)完成镜像的上传、删除、查询等操作。可以简单的再分为两部分:一层中间件,它主要是做一些对请求的解析工作(如分析出版本号), 另外一部分提供实际的服务(如与镜像上传下载的后端存储接口交互)。默认绑定端口是9292。

Glance-Registry
镜像注册服务用于提供镜像元数据的REST接口。主要工作是存储或者获取镜像的元数据,与MySQL数据库进行交互。也可以简单的再细分为两部分,API和具体的Server。元数据是指镜像相关的一些信息(如id,size, status,location,checksum,min_disk,min_ram,owner等)真正的镜像数据保存在实际所使用的后端存储里(如Swift,S3,Filesystem等)。默认绑定的端口是9191。

Image Store
严格来说Image Store不属于Glance的组件,这里把它单独分出来只是为了方便理解,它只是一个接口层,提供镜像存储和查询的接口。具体的实现则需要外部存储(Swift,S3)的支持。

三、Glance的工作流程
Glance需要配置的服务:glance-api、glance-registry
Glance-api:接受云系统镜像的创建、删除、读取请求
Glance-registry:云系统镜像注册服务
在这里插入图片描述
①Glance-api接收REST API的请求,类似nova-api
②Glance-api在功能上与nova-api十分类似,都是接收REST API请求,然后通过其他模块(glance-registry及Image Store)来完成诸如镜像的查找、‘获取、上传、删除等操作,api默认的监听端口为9292
③Glance-registry用于与MySQL数据库交互,用于存储或获取镜像的元数据(metadata);提供镜像元数据相关的REST接口,通过glance-registry,可以向数据库写入或获取镜像的各种数据,glance-registry的监听端口为9191。glance的数据库中有两张表,一张是image表,另一张是imgage propetry表。image表保存了镜像的格式、大小等信息;而image propetry表则主要保存镜像的定制化信息。可以通过:mysql -h 192.168.56.11 -uglance -pglance -e "use glance;show tables;"查看表信息
④image store是一个存储的接口层,通过这个接口,glance可以获取镜像,image store支持有Amazon的S3,OpenStack本身的swift,还有诸如ceph,GlusterFS等分布式存储。Image Store仅仅是一个接口处,具体的实现需要外部的存储支持。

总结:
glance-api 是系统后台运行的服务进程。
对外提供 REST API,响应 image 查询、获取和存储的调用。

glance-api 不会真正处理请求。
如果是与 image metadata(元数据)相关的操作,glance-api 会把请求转发给 glance-registry;
如果是与 image 自身存取相关的操作,glance-api 会把请求转发给该 image 的 store 。

因为OpenStack上创建虚拟机需要镜像支持,所以先行进行部署
部署思路:
1、创建数据库、授权
2、创建OpenStack用户、授权、管理
3、修改配置文件(glance-api.conf、glance-registry.conf)
4、初始化数据库,上传实例镜像

Glance安装配置(此处将glance服务配置在控制节点上)
环境描述:
在这里插入图片描述
安装和配置镜像服务之前,先创建创建一个数据库、服务凭证和API端点

创建glance数据库实例和数据库用户

[root@ct ~]# mysql -u root -p123456
MariaDB [(none)]> CREATE DATABASE glance;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit

创建OpenStack的Glance用户

创建用户前,需要首先执行管理员环境变量脚本(此处已经在~/.bashrc 中定义过了)
[root@ct ~]# source ~/.bashrc

创建glance用户
[root@ct ~]# openstack user create --domain default --password GLANCE_PASS glance
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | b1704a7ab77c404c8cb9716588ed1bad |
| name                | glance                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

将glance用户添加到service项目中,并且针对这个项目拥有admin权限;注册glance的API,需要对service项目有admin权限        
[root@ct ~]# openstack role add --project service --user glance admin  //给glance用户授予admin权限

创建一个service服务,service名称为glance,类型为image            
[root@ct ~]# openstack service create --name glance --description "OpenStack Image" image //创建glance服务
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image                  |
| enabled     | True                             |
| id          | 8038f2ea835640bea2dae5b1acd8bd0d |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+

openstack service list 查看
[root@ct ~]# openstack service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| 8038f2ea835640bea2dae5b1acd8bd0d | glance   | image    |
| fa7c4f819d944d17aa520d2b6aa4001f | keystone | identity |
+----------------------------------+----------+----------+

创建镜像服务 API 端点

OpenStack使用三种API端点代表三种服务:admin、internal、public
[root@ct ~]# openstack endpoint create --region RegionOne image public http://ct:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 66028878a2624c94822e7afcd2014560 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8038f2ea835640bea2dae5b1acd8bd0d |
| service_name | glance                           |
| service_type | image                            |
| url          | http://ct:9292                   |
+--------------+----------------------------------+

root@ct ~]# openstack endpoint create --region RegionOne image internal http://ct:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | e6ffe971c5e34f019cdca20d3d7df8ea |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8038f2ea835640bea2dae5b1acd8bd0d |
| service_name | glance                           |
| service_type | image                            |
| url          | http://ct:9292                   |
+--------------+----------------------------------+

[root@ct ~]# openstack endpoint create --region RegionOne image admin http://ct:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | d8db44b2a2e64982bd03b400556ac38b |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8038f2ea835640bea2dae5b1acd8bd0d |
| service_name | glance                           |
| service_type | image                            |
| url          | http://ct:9292                   |
+--------------+----------------------------------+

安装 openstack-glance 软件包

[root@ct ~]# yum -y install openstack-glance 

修改glance配置文件,/etc/glance/glance-api.conf 和 /etc/glance/glance-registry.conf

修改glance-api.conf配置
[root@ct ~]# cp -a /etc/glance/glance-api.conf{,.bak}
[root@ct ~]# grep -Ev '^$|#' /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf
openstack-config --set /etc/glance/glance-api.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_name service
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken username glance
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken password GLANCE_PASS
openstack-config --set /etc/glance/glance-api.conf paste_deploy flavor keystone
openstack-config --set /etc/glance/glance-api.conf glance_store stores file,http
openstack-config --set /etc/glance/glance-api.conf glance_store default_store file
openstack-config --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/

[root@ct ~]# cat /etc/glance/glance-api.conf
[DEFAULT]
[cinder]
[cors]
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
[file]
[glance.store.http.store]
[glance.store.rbd.store]
[glance.store.sheepdog.store]
[glance.store.swift.store]
[glance.store.vmware_datastore.store]
[glance_store]               
stores = file,http     #存储类型,file:文件,http:基于api调用的方式,把镜像放到其他存储上
default_store = file  #默认存储方式
filesystem_store_datadir = /var/lib/glance/images/  ##指定镜像存放的本地目录
[image_format]
[keystone_authtoken]
www_authenticate_uri = http://ct:5000   ##指定认证的keystone的URL
auth_url = http://ct:5000
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service   #glance用户针对service项目拥有admin权限
username = glance
password = GLANCE_PASS
[oslo_concurrency]
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[paste_deploy]
flavor = keystone   #指定提供认证的服务器为keystone
[profiler] 
[store_type_location_strategy]
[task]
[taskflow_executor]

修改glance-registry.conf 配置文件
[root@ct ~]# cp -a /etc/glance/glance-registry.conf{,.bak}
[root@ct ~]# grep -Ev '^$|#' /etc/glance/glance-registry.conf.bak > /etc/glance/glance-registry.conf
openstack-config --set /etc/glance/glance-registry.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_type password
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_name service
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken username glance
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken password GLANCE_PASS
openstack-config --set /etc/glance/glance-registry.conf paste_deploy flavor keystone
openstack-config --set /etc/glance/glance-registry.conf glance_store stores file,http
openstack-config --set /etc/glance/glance-registry.conf glance_store default_store file
openstack-config --set /etc/glance/glance-registry.conf glance_store filesystem_store_datadir /var/lib/glance/images/


[root@ct ~]# cat /etc/glance/glance-registry.conf
[DEFAULT]
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
[keystone_authtoken]
www_authenticate_uri = http://ct:5000
auth_url = http://ct:5000
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_policy]
[paste_deploy]
flavor = keystone
[profiler]


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

写入镜像服务数据库

初始化glance数据库,生成相关表结构
[root@ct ~]# su -s /bin/sh -c "glance-manage db_sync" glance
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
/usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1280, u"Name 'alembic_version_pkc' ignored for PRIMARY key.")
  result = self._query(query)
INFO  [alembic.runtime.migration] Running upgrade  -> liberty, liberty initial
INFO  [alembic.runtime.migration] Running upgrade liberty -> mitaka01, add index on created_at and updated_at columns of 'images' table
......
Upgraded database to: train_contract01, current revision(s): train_contract01
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Database is synced successfully.

开启glance服务,开启之后会生成存放镜像的目录/var/lib/glance/image
[root@ct ~]# systemctl enable openstack-glance-api.service \   
openstack-glance-registry.service   systemctl enable openstack-glance-api.service
[root@ct ~]# systemctl start openstack-glance-api.service \
openstack-glance-registry.service    systemctl start openstack-glance-api.service

查看端口
[root@ct ~]# netstat -anpt | grep 9292
tcp        0      0 0.0.0.0:9292            0.0.0.0:*               LISTEN      40908/python2  

修改glance权限,赋予openstack-glance-api.service 服务对存储设备的可写权限
[root@ct ~]# chown -hR glance:glance /var/lib/glance/
#-h 只对符号连接/软链接的文件修改,而不更改其他任何相关文件

验证操作,镜像导入,先上传cirros镜像到控制节点的/root,然后进行上传镜像

yum -y install wget
[root@ct ~]# wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img  //下载镜像

使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置(public)公共可见,可供所有项目使用,镜像名为cirros
[root@ct ~]# openstack image create "cirros" \
--file cirros-0.3.5-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--public
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field            | Value                                                                                                                                                                                      |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| checksum         | a14b07d9bd8c8380cf795419a0b0195f                                                                                                                                                           |
| container_format | bare                                                                                                                                                                                       |
| created_at       | 2020-12-16T13:00:35Z                                                                                                                                                                       |
| disk_format      | qcow2                                                                                                                                                                                      |
| file             | /v2/images/134fc2ea-430c-41c2-bf67-332515cd4fda/file                                                                                                                                       |
| id               | 134fc2ea-430c-41c2-bf67-332515cd4fda                                                                                                                                                       |
| min_disk         | 0                                                                                                                                                                                          |
| min_ram          | 0                                                                                                                                                                                          |
| name             | cirros                                                                                                                                                                                     |
| owner            | 76f663b83e8f4f4fabb04d092c889015                                                                                                                                                           |
| properties       | os_hash_algo='sha512', os_hash_value='6f73593dd9da6f7dece9a135df331dd4316c56d1fd4e6a93c93fa1ba5e8edf13d44ad107ead852655fe65d9e65b0d382fff7aeed274dc3601ac475afd82bdbbf', os_hidden='False' |
| protected        | False                                                                                                                                                                                      |
| schema           | /v2/schemas/image                                                                                                                                                                          |
| size             | 9225792                                                                                                                                                                                    |
| status           | active                                                                                                                                                                                     |
| tags             |                                                                                                                                                                                            |
| updated_at       | 2020-12-16T13:00:36Z                                                                                                                                                                       |
| virtual_size     | None                                                                                                                                                                                       |
| visibility       | public                                                                                                                                                                                     |
+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

确认镜像的上传并验证属性

查看镜像两种方法

方法一: #可查看到镜像状态
[root@ct ~]# openstack image list 
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 134fc2ea-430c-41c2-bf67-332515cd4fda | cirros | active |
+--------------------------------------+--------+--------+

方法二: #只能看到镜像id和名字
[root@ct ~]# glance image-list 
+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 134fc2ea-430c-41c2-bf67-332515cd4fda | cirros |
+--------------------------------------+--------+

此时,查看到镜像存放在本地

[root@ct ~]# cd /var/lib/glance/images/
[root@ct images]# ll
总用量 9012
-rw-r-----. 1 glance glance 9225792 1216 21:00 134fc2ea-430c-41c2-bf67-332515cd4fda
  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值