1.openstack 初识
1.1openstack 简介
openstack的版本号是以字母顺序来命名的,比如i版本就叫icehouse,j版本就叫juno,k版本叫kilo.本笔记针对kilo版本。
1.2openstack 组件
openstack组件项目包括
Horizon(提供图形界面),
Nova(控制虚拟机的生命周期),
Neutron(提供网络服务),
Swift(提供对象存储服务),
Cinder(提供块存储服务),
Keystone(提供用户认证服务),
Glance(控制镜像),
Ceilometer(测量计费),
Heat(根据预先设置的模板,实现计算存储和网络资源的流程化部署,同时支持HOT和AWS CloundFormation的模板),
Trove( 提供数据库服务,包括关联型和非关联型),Sahara(提供数据处理的服务,类似Hadoop)
注:Keystone对应Identity service,Ceilometer对应Telemetry(易忘)
1.3openstack 架构图
链接:http://docs.openstack.org/kilo/install-guide/install/yum/content/ch_overview.html
2.openstack 环境搭建
操作系统为CentOS7
2.1neutron的节点及硬件的规划
Controller Node:
CPU:1
RAM:8GB
Storage:100GB
NIC:1
Network Node:
CPU:1
RAM:2GB
Storage:100GB
NIC:3
Compute Node:
CPU:2
RAM:8GB
Storage:100GB
NIC:2
2.2 neutron各节点的所需组件(核心)
Controller Node:
SQL Database Service(数据库服务)
Message Queue(消息队列)
Network Time Service(网络时间服务)
Identity(测量计费)
Image Service(镜像服务)
Compute Management(计算管理)
Networking Management(网络管理)
Networking ML2 Plug-in
Network Node:
Open vSwitch
Networking ML2 Plug-in
Networking Open vSwitch Agent
Networking L3 Agent
Networking DHCP Agent
Networking Metadata Agent
Compute Nodes:
KVM Hypervisor
Open vSwitch
Compute
Networking ML2 Plug-in
Networking Open vSwitch Agent
Telemetry Agent
2.3 安装前的环境要求
2.3.1关闭防火墙
systemctl stop firewalld
2.3.2关闭自动网络管理工具(比如NetworkManager)
systemctl stop NetworkManger
2.3.3警告
配置网络时,会断开网络
有些linux版本的/etc/hosts文件有类似127.0.0.1映射到主机的环回地址,会影响dns解析,注释掉它
2.3.4节点的网络配置
openstack 的网络配置分为openstack networking(neutron)和legacy networking(nova-network)两种方式,我们这里就选neutron方式来配置网络。这里主要有四种网络形式,分别为管理网络,隧道网络,存储网络(可选),外部网络,我们暂且不管存储网络。这里的大概步骤就是根据需要添加网卡---对每个网卡进行配置(保证每个节点能ping通外网,且能互相ping通)
2.3.5 添加NTP服务
大概思路是controller同步外网时间,其他节点同步controller的时间
具体操作,请参考官方文档http://docs.openstack.org/kilo/install-guide/install/yum/content/ch_basic_environment.html#basics-neutron-networking-compute-node
注:compute1和network节点使用ntpq -c assoc验证时,reach选项为no,貌似不对劲。参考资料http://www.aboutyun.com/thread-11395-1-1.html
2.3.6添加额外的包(所有节点)
2.3.7添加关系型数据库(MySQL,controller节点)
2.3.8添加消息队列(RabbitMQ,controller节点)
3 添加认证服务(controller节点)
3.1相关概念
User:用户
Credentials:用于识别用户身份的数据
Authentication:识别用户身份的行为
Token:一段字母和数字组成的字符串,用来使用某种服务的具体凭证
Tenant:租户(一个租户可包含多个用户)
Service:服务(节点)
Endpoint:服务端点(具体的某种动作)
Role:角色(决定所拥有的服务种类)
Keystong Client:控制台
3.2安装配置认证服务
注:
1.openssl rand -hex 10生成一段随机字符串作为管理的token
2.
# su -s /bin/sh -c "keystone-manage db_sync" keystone
在执行这条命令的时候,出现
No handlers could be found for logger "oslo_config.cfg"的报错,编辑keystone的配置文件/etc/keystone/keystone.conf将下面的verbose = True(这是个可选项)注释掉
命令正常运行
1
2
3
|
[DEFAULT]
...
verbose = True
|
注:1.在openstack上运行命令必须带有--os-token和--os-url的参数,或者在环境变量设置OS_TOKEN和OS_URL的环境变量,本人和文档一致,倾向通过设置环境变量(通过执行shell脚本,来设置环境变量的值)以减少命令长度
2.openstack 支持3种api端点:admin(受保护的),internal(与其他主机通信),public(公开)
3.4创建用户,项目和角色
3.5检验测试
注:1.由于keystone命令被社区抛弃(还没被我抛弃),但是如果还想使用它,必须修改添加环境变量的shell脚本
export OS_AUTH_URL = http://controller:35357/v2.0
4.添加镜像服务
4.1主要组成
glance-api(镜像服务接口)
glance-registry(镜像元数据,属于私有的internal服务,不要开放给users)
Database(存储镜像的元数据的数据库)
Storage respository for image files(存储镜像的仓库)
4.2安装配置(controller节点)
注:当我运行
# su -s /bin/sh -c "glance-manage db_sync" glance这条命令的时候,又出现了No handlers could be found for logger "oslo_config.cfg",这下我也不知道该怎么办了
4.3检验测试
5.添加计算服务
5.1基本概念
1.API:
nova-api service
nova-api-metadata service
2.Compute core:
nova-compute service
nova-sheduler service
nova-conductor module
nova-cert module
3.Networking for VMs:
nova-network worker daemon
4.Console interface:
nova-consoleauth daemon
nova-novncproxy daemon
nova-sqlcehtml5proxy daemon
nova-xvpvncproxy daemon
nova-cert daemon
5.Image management:
nova-objectores daemon
euca2ools client
6.Command-line clients and other interfaces
nova client
7.Other:
the queue
SQL database
5.2安装配置(controller,compute节点)
5.2.1controller 节点
注:
1.监控日志变化命令:talif + 日志文件名
2.nova.conf 中的rabbit_userid必须能使用rabbitmqctl list_users查看到(建议就用默认值guest)
5.2.2compute 节点
注:
1.nova.conf中的rabbit_userid与controller一样
2.我犯的错误:
问题:命令:systemctl start openstack-nova-compute.service服务启动失败
第一次配置nova.conf
rabbit_userid=openstack
rabbit_password=abc123
当我使用systemctl start openstack-nova-compute.service时,我想起了我使用的是rabbitmqctl add_user pdk abc123,并没有添加openstack.
打开rabbitmq@controller.conf看见
=ERROR REPORT==== 7-Jan-2016::02:46:18 ===
closing AMQP connection <0.347.0> (10.10.10.162:38871 -> 10.10.10.162:5672):
{handshake_error,starting,0,
{amqp_error,access_refused,
"AMQPLAIN login refused: user 'openstack' -invalid credentials",
'connection.start_ok'}}
的报错
然后我使用rabbitmqctl add_user openstak abc123
(但我却忘了将openstack的密码注入到虚拟机,rabbitmqctl set_permissions openstack ".*" ".*" ".*")
当我再次使用systemctl start openstack-nova-compute.service仍然失败
打开rabbitmq@controller.log看见
{handshake_error,opening,0,
{amqp_error,access_refused,
"access to vhost '/' refused for user 'openstack'",
'connection.open'}}
解决方式如括号所说
5.3验证nova安装
注:我出现的问题:
使用nova-manage service list
查看所有nova服务均正常运行
然后使用nova service-list或nova image-list等命令时出现
ERROR (ClientException): Unknown Error (HTTP 503) (Request-ID: req-d8fc5de0-5e94-4c7a-b709-72e56988c8d0)的错误
(我tm对天发誓,我绝对是按照文档来安装的)
查看nova-api的日志/var/log/nova/nova-api.log
2016-01-08 02:03:55.433 22901 ERROR keystonemiddleware.auth_token [-] Bad response code while validating token: 400
2016-01-08 02:03:55.433 22901 WARNING keystonemiddleware.auth_token [-] Identity response: {"error": {"message": "Expecting to find id or name in user - the server could not comply with the request since it is either malformed or otherwise incorrect. The client is assumed to be in error.", "code": 400, "title": "Bad Request"}}
2016-01-08 02:03:55.434 22901 CRITICAL keystonemiddleware.auth_token [-] Unable to validate token: Failed to fetch token data from identity server
2016-01-08 02:03:55.435 22901 INFO nova.osapi_compute.wsgi.server [-] 10.10.10.162 "GET /v2/ HTTP/1.1" status: 503 len: 323 time: 0.0204840
说的是身份认证服务因为我信息没给全,不给我token,好了这下问题就出在配置环境变量的shell脚本上(坑爹的是验证身份服务的时候用的是在命令行增加参数的方式,那里并没有出错)
解决方式:详见https://ask.openstack.org/en/question/66097/nova-service-list-fails-with-error-unauthorized-unauthorized-http-401/
6.添加neutron服务
注:这里有个问题,官方文档出了错,详见8
7.添加dashboard服务
注:如果你是按照文档的顺序安装的话,最好别改/etc/openstack-dashboard/local_settings下面的TIME_ZONE,反正我改了之后,httpd服务就起不来,keystone直接gg了
8.启动实例
问题:实例能成功启动,但状态为error,打开debug,查看/var/log/neutron/server.log发现
2016-01-13 04:05:51.852 4004 DEBUG neutron.plugins.ml2.drivers.mech_agent [req-631c9fcf-0727-4c02-94d0-9fef23671c9c 4e62ca8ef39648b2a220601aca6c5692 de18f58f2ed64dc7a066d8dfd04d5595 - - -] Network 65ce1ce9-eccc-48ad-813f-6308f61b05e4 is of type gre but agent compute1 or mechanism driver only support ['local', 'flat', 'vlan']. check_segment_for_agent /usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/mech_agent.py:193
说的是我的网络是gre,但compute1节点或驱动支持的三个选项没有gre.
解决方式:原因出在compute1节点上的ml2的默认配置文件是/etc/neutron/plugins/ml2/openvswitch_agent.ini ,而不是文档写的/etc/neutron/plugins/ml2/ml2_conf.ini,在comput1节点上的/etc/neutron/plugins/ml2/openvswitch_agent.ini的[ovs]下面添加local_ip=10.10.0.166(作为gre tunnel的ip),[agenet]下面添加个tunnel_types = gre
参考:https://www.redhat.com/archives/rdo-list/2015-November/msg00038.html
(2016.1.22更新:
问题:外部网络的主机无法ping通已绑定浮动ip的实例,登录dashboard,发现在连接外网和租户网络(内网)路由上的内部接口,状态为down。
原因:结果在network节点上使用ovs-vsctl show发现并没有tunnel的网桥
解决方式:在network节点上的/etc/neutron/plugin/ml2/openvswitch_agent.ini下的[ovs]添加local_ip = 10.10.0.167(作为gre tunnel的ip),bridge_mappings = external:br-ex;
[agenet]下面添加个tunnel_types = gre
)
9.总结
到这步,openstack的环境差不多可以用了.在安装过程中遇到很多新名词,有的能理解,更多的是模糊或者是完全不知所云,但这并不代表本次手动部署的收获少,安装并不重要,按照文档一步步操作,谁都能装。可是,在安装前,对openstack我完全无从下手,但安装后,我对openstack有了一些认识,下一步,可以从不同的模块入手,通过对一些术语概念了解,加深对openstack的认识。