企业运维之 openstack 的介绍以及组件搭建

Posted 123坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了企业运维之 openstack 的介绍以及组件搭建相关的知识,希望对你有一定的参考价值。

1. openstack 的介绍

OpenStack是一个云操作系统,它控制整个数据中心的计算、存储和网络资源的大型池,所有这些都通过具有通用身份验证机制的api进行管理和配置。

还提供了一个仪表板,允许管理员控制,同时允许用户通过web界面提供资源。

除了标准的基础设施即服务功能外,其他组件还提供编排、故障管理和服务管理等服务,以确保用户应用程序的高可用性。

整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。
openstack重要集成组件:
Nova - 计算服务:是一个完整的 OpenStack 计算资源管理和访问工具,负责处理规划、创建和删除操作。
Neutron-网络服务:Neutron 能够连接其他 OpenStack 服务并连接网络。
Swift - 对象存储服务: 是一种高度容错的对象存储服务,使用 RESTful API 来存储和检索非结构数据对象。
Cinder-块存储服务:通过自助服务 API 访问持久块存储。
Glance - 镜像服务:Glance 可存储和检索多个位置的虚拟机磁盘镜像。
Keystone - 认证服务:Keystone 认证所有 OpenStack 服务并对其进行授权。同时,它也是所有服务的端点目录。
Horizon - UI服务
Ceilometer-监控服务:计费
Heat-集群服务:编排
dashboard:web管理界面

OpenStack 中项目
OpenStack 架构由大量开源项目组成。其中包含 6 个稳定可靠的核心服务,用于处理计算、网络、存储、身份和镜像; 同时,还为用户提供了十多种开发成熟度各异的可选服务。OpenStack 的 6 个核心服务主要担纲系统的基础架构,其余项目则负责管理控制面板、编排、裸机部署、信息传递、容器及统筹管理等操作。

在这里插入图片描述

在这里插入图片描述

2. openstack 的搭建

此处需要新开一个虚拟机至少4G内存;双网卡;CPU 设为直通: host-passthrough 是为了虚拟机里支持 kvm 硬件虚拟化。

在这里插入图片描述
此处直接访问 openstack 的官网来看其相关设置以及配置;

在这里插入图片描述

此处我们选择适用于 centos7 和 linux7 的对应版本;

3. 控制结点

  1. 网卡配置
    设定网卡信息和网关,查看 ip 和网关;激活第二块网卡。
[root@ops1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.25.250   0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.25.15.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
[root@server1 ~]# cd /etc/sysconfig/network-scripts/
在该目录下查看有 ifcfg-eth 文件,
如果没有需要在内核文件中加上 net.ifnames=0,然后重启。
[root@server1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@server1 network-scripts]# vim ifcfg-eth1
[root@server1 network-scripts]# cat ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
[root@server1 network-scripts]# ifup eth1
[root@ops1 network-scripts]# ip addr 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:25:f8:d8 brd ff:ff:ff:ff:ff:ff
    inet 172.25.25.1/24 brd 172.25.25.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe25:f8d8/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c8:d2:ab brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5054:ff:fec8:d2ab/64 scope link 
       valid_lft forever preferred_lft forever
  1. 域名解析
[root@server1 network-scripts]# vim /etc/hosts
[root@ops1 network-scripts]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.25.250	 foundation39.ilt.example.com
172.25.25.1	controller
172.25.25.2	compute1
172.25.25.3	block1
172.25.25.4	server4
172.25.25.5	server5
172.25.25.6	server6
172.25.25.7	server7
172.25.25.8	server8
[root@server1 network-scripts]# hostnamectl set-hostname controller
[root@server1 network-scripts]# hostname
controller
  1. 时间同步
    openstack 对于时间要求很严格,要求所有节点的时间必须时间同步;如果时间不同步,会导致云主机无法启动。

服务端
先将服务端的时间同步到真实主机,然后再将其作为服务端共享给集群中的其他主机。

[root@westos images]# vim /etc/chrony.conf 

 23 allow 172.25.25.0/24
[root@westos ~]# systemctl restart chronyd.service 
[root@westos ~]# systemctl enable --now chronyd

[root@controller ~]# yum install -y chrony.x86_64 
[root@controller ~]# vim /etc/chrony.conf 
  3 server 172.25.25.250 iburst

[root@controller ~]# systemctl restart chronyd.service 
[root@controller ~]#  chronyc sources -v
210 Number of sources = 1

  .-- 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               
===============================================================================
^* foundation39.ilt.example>     3   6    17    16  +4436ns[  +24us] +/-  148ms
  1. 安装 openstack 软件包
    在主机的apache 发布目录中,将软件包复制到该目录中;
[root@westos openstack]# cp -r /run/media/westos/disk/lnmp/mitaka/ .
[root@westos openstack]# pwd
/var/www/html/openstack
[root@westos openstack]# ls
mitaka

在控制节点将安装源指向宿主机的发布目录;

[root@controller yum.repos.d]# cat openstack.repo 
[openstack]
name=mitaka
baseurl=http://172.25.25.250/openstack/mitaka
gpgcheck=0
[root@controller yum.repos.d]# yum repolist

在安装之前,先在主机上升级包,然后安装客户端;

[root@controller yum.repos.d]# yum upgrade	##升级
[root@controller yum.repos.d]# yum install python-openstackclient -y	#安装 OpenStack 客户端
  1. SQL数据库

整个openstack 的数据都会持久化保存到 SQL 数据库中;此处使用mariadb 数据库。
安装并配置组件

安装软件包:

[root@controller yum.repos.d]# yum install mariadb mariadb-server python2-Pymysql -y
[root@controller yum.repos.d]# cd /etc/my.cnf.d/
[root@controller my.cnf.d]# ls
auth_gssapi.cnf  enable_encryption.preset  mysql-clients.cnf  tokudb.cnf
client.cnf       mariadb-server.cnf        openstack.cnf
[root@controller my.cnf.d]# cat openstack.cnf 	##配置数据库
[mysqld]
bind-address = 172.25.25.1
default-storage-engine = innodb	#默认引擎
innodb_file_per_table
max_connections = 4096			#最大连接数
collation-server = utf8_general_ci
character-set-server = utf8

启动数据库,并做数据库的初始化;

[root@controller my.cnf.d]# systemctl enable --now mariadb.service 
[root@controller my.cnf.d]# mysql_secure_installation

nosql 不需要,不是核心组件.

  1. 消息队列
    安装安装包,启动消息队列服务并将其配置为随系统启动:
[root@controller my.cnf.d]# yum install rabbitmq-server -y
[root@controller my.cnf.d]# systemctl enable --now rabbitmq-server.service

添加 openstack 用户,给openstack用户配置写和读权限:

[root@controller my.cnf.d]# rabbitmqctl add_user openstack openstack
Creating user "openstack" ...
[root@controller my.cnf.d]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" 
其中三个.* 计算网络时会用的到;

三个 .*代表的含义:代表权限

 [root@controller ~]# rabbitmq-plugins list		##列出所有的插件
[root@controller ~]# rabbitmq-plugins enable rabbitmq_management
#打开管理界面之后,会提供一个web 的接口
[root@controller ~]# netstat -antlp	

tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      4323/beam.smp  

此时在网页中访问:http://172.25.25.1:15672/

在这里插入图片描述

用 guest 用户登陆,密码也是 guest,此时会看到 .* 的权限。

在这里插入图片描述

也可以用命令 rabbitmqctl --help 来看.

[root@controller ~]# rabbitmqctl list_users	#列出用户
Listing users ...
openstack	[]
guest	[administrator]
[root@controller ~]# rabbitmqctl list_user_permissions openstack	#列出用户权限
Listing permissions for user "openstack" ...
/	.*	.*	.*
[root@controller ~]# rabbitmqctl authenticate_user openstack openstack		##密码校验
Authenticating user "openstack" ...
Success
  1. Memcached
    认证服务认证缓存使用 memcached缓存命令。

安装软件,并启动服务;

[root@controller ~]# yum install memcached python-memcached -y
[root@controller ~]# vim /etc/sysconfig/memcached 
[root@controller ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#OPTIONS="-l 127.0.0.1,::1"	#将其注释掉,默认监听所有
[root@controller ~]# systemctl enable --now memcached.service 

memcache 的默认端口是11211:

[root@controller ~]# netstat -antlp |grep :11211
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      4161/memcached      
tcp6       0      0 :::11211                :::*                    LISTEN      4161/memcached      

4. 认证服务

除了认证服务之外还有目录服务,目录服务里面有所有 api 用户的认证授权。

OpenStack:term:Identity service为认证管理,授权管理和服务目录服务管理提供单点整合。其它OpenStack服务将身份认证服务当做通用统一API来使用。此外,提供用户信息但是不在OpenStack项目中的服务(如LDAP服务)可被整合进先前存在的基础设施中。

为了从identity服务中获益,其他的OpenStack服务需要与它合作。当某个OpenStack服务收到来自用户的请求时,该服务询问Identity服务,验证该用户是否有权限进行此次请求。

身份服务包含这些组件:
1)服务器
一个中心化的服务器使用RESTful 接口来提供认证和授权服务。
2)驱动
驱动或服务后端被整合进集中式服务器中。它们被用来访问OpenStack外部仓库的身份信息, 并且它们可能已经存在于OpenStack被部署在的基础设施(例如,SQL数据库或LDAP服务器)中。
3)模块
中间件模块运行于使用身份认证服务的OpenStack组件的地址空间中。这些模块拦截服务请求,取出用户凭据,并将它们送入中央是服务器寻求授权。中间件模块和OpenStack组件间的整合使用Python Web服务器网关接口。

当安装OpenStack身份服务,用户必须将之注册到其OpenStack安装环境的每个服务。身份服务才可以追踪那些OpenStack服务已经安装,以及在网络中定位它们。

  1. 完成下面的步骤以创建数据库:
    用数据库连接客户端以 root 用户连接到数据库服务器.

创建 keystone 数据库,并对其授权;

MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';	##本机
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone'; 		##远程
Query OK, 0 rows affected (0.00 sec)

测试:

[root@controller ~]# mysql -u keystone -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \\g.
Your MariaDB connection id is 9
Server version: 10.1.20-MariaDB MariaDB Server
  1. 生成一个随机值在初始的配置中作为管理员的令牌,并安装对应组件;
[root@controller ~]# openssl rand -hex 10
1b41b1910e8948276332

安装组件,并编辑配置文件:

[root@controller ~]# yum install openstack-keystone httpd mod_wsgi -y
[root@controller ~]# grep -v ^# /etc/keystone/keystone.conf | uniq
#相关参数在对应的模块下面书写
[root@controller ~]# openssl rand -hex 10
fba442c0df1a5fd4d048
[root@controller ~]# vim /etc/keystone/keystone.conf

   1 [DEFAULT]
   2 admin_token = fba442c0df1a5fd4d048	定义初始管理令牌的值:
 527 [database]
 528 connection = mysql+pymysql://keystone:keystone@controller/keystone
#配置数据库访问
数据库:用pymysql 来连接:用户:密码:代表数据库主机:数据库名称
1985 [token]
1986 provider = fernet	#配置Fernet UUID令牌的提供者。
  1. 初始化身份认证服务的数据库
    以 ketstone 用户认证身份来同步数据库;
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@controller ~]# mysql -p

MariaDB [(none)]> use keystone
MariaDB [keystone]> show tables;
+------------------------+
| Tables_in_keystone     |
+------------------------+
| access_token           |
| assignment             |
| config_register        |
| consumer               |
| credential             |
| domain                 |
| endpoint               |
| endpoint_group         |
| federated_user         |
| federation_protocol    |
| group                  |
| id_mapping             |
| identity_provider      |
| idp_remote_ids         |
| implied_role           |
| local_user             |
| mapping                |
| migrate_version        |
| password               |
| policy                 |
| policy_association     |
| project                |
| project_endpoint       |
| project_endpoint_group |
| region                 |
| request_token          |
| revocation_event       |
| role                   |
| sensitive_config       |
| service                |
| service_provider       |
| token                  |
| trust                  |
| trust_role             |
| user                   |
| user_group_membership  |
| whitelisted_config     |
+------------------------+
37 rows in set (0.00 sec)
[root@controller ~]# id keystone
uid=163(keystone) gid=163(keystone) groups=163(keystone)
  1. 初始化Fernet keys
    会在 /etc/keystone/ 生成 fernet-keys;
[root@controller ~]# cd /etc/keystone/
[root@controller keystone]# ls
default_catalog.templates  keystone-paste.ini  policy.json
keystone.conf              logging.conf        sso_callback_template.html
[root@controller keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller keystone]# ls
default_catalog.templates  keystone.conf       logging.conf  sso_callback_template.html
fernet-keys                keystone-paste.ini  policy.json
  1. 配置 Apache HTTP 服务器
    1)编辑/etc/httpd/conf/httpd.conf 文件,配置ServerName 选项为控制节点;
[root@controller keystone]# vim /etc/httpd/conf/httpd.conf

 96 
 97 ServerName controller
 98 

2)创建文件 /etc/httpd/conf.d/wsgi-keystone.conf

[root@controller keystone]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000	 ##public 连接端口
Listen 35357	##仅限管理员使用

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

3)完成安装
启动 Apache HTTP 服务并配置其随系统启动;

[root@controller keystone]# systemctl enable --now httpd.service 
[root@

以上是关于企业运维之 openstack 的介绍以及组件搭建的主要内容,如果未能解决你的问题,请参考以下文章

企业运维之 openstack 的私有网络以及图形化配置

企业运维之 docker 的介绍和部署

企业运维之 zabbix 监控部署--监控应用

企业运维之 zabbix 监控部署--监控应用

企业运维之 zabbix 监控部署--监控主机

企业运维之 zabbix 监控部署--监控主机