企业运维之 openstack 的介绍以及组件搭建
Posted 123坤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了企业运维之 openstack 的介绍以及组件搭建相关的知识,希望对你有一定的参考价值。
企业运维之 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. 控制结点
- 网卡配置
设定网卡信息和网关,查看 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
- 域名解析
[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
- 时间同步
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
- 安装 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 客户端
- 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 不需要,不是核心组件.
- 消息队列
安装安装包,启动消息队列服务并将其配置为随系统启动:
[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
- 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服务已经安装,以及在网络中定位它们。
- 完成下面的步骤以创建数据库:
用数据库连接客户端以 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
- 生成一个随机值在初始的配置中作为管理员的令牌,并安装对应组件;
[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令牌的提供者。
- 初始化身份认证服务的数据库
以 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)
- 初始化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
- 配置 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 的介绍以及组件搭建的主要内容,如果未能解决你的问题,请参考以下文章