DevStack配置过程
DevStack一致致力于通过最少的配置完成最多的功能。因为各个项目加入了新的特性,新的项目加入,还有不同的组合需要测试,选项的数目已经飞速地膨胀了。DevStack的传统做法是从localrc文件得到所有的本地化的配置和定制信息。传递给各个项目的配置变量的数目也在增加。原有的机制 在2013年10月引入了一个新的配置方式(参看https://review./#/c/46768/),希望能够简化配置过程,达到下列目的:
local.conf新的配置文件是local.conf,和旧的localrc文件在同一个目录。它是一个修正后的INI格式文件,引入了meta-section头来承载额外的信息。
新的头格式与通常的INI节的头格式相似,但是用的是双括号 [[ | ]] 其中是stack.sh里定义的某个阶段名称(phase name),而是配置文件的文件名。文件名在stack.sh文件中已经通过eval命令操作,所以所有的环境变量的值都可用。强烈建议使用头结构中的项目配置文件变量(参考后面的NOVA_CONF示例)。如果配置文件的路径不存在就会被跳过。 已定义的阶段有:
这个文件是严格按照顺序处理的;meta-section可以被指定多次,但是文件中任何重复的设置只有最后一个被采用。 [[post-config|$NOVA_CONF]] [DEFAULT] use_syslog = True [osapi_v3] enabled = False
一个特定的meta-section [[local|localrc]] FIXED_RANGE=10.254.1.0/24 ADMIN_PASSWORD=speciale LOGFILE=$DEST/logs/stack.sh.log 注意Q_PLUGIN_CONF_FILE是特别的,因为它默认为是不以/字符开头的。需要加一个/. [[post-config|/$Q_PLUGIN_CONF_FILE]] 还要注意到localrc部分是一个shell脚本的片段来执行source命令的,所以要按照shell脚本的规则,尤其是等号两边不要留空格。 最小配置 尽管stack.sh的local.conf里面没有localrc部分也可以运行的挺好,设置几个最基本的参数会更好一些。这里给出一个最小配置的例子,包含了经常需要的一些值:
[[local|localrc]] ADMIN_PASSWORD=secrete DATABASE_PASSWORD=$ADMIN_PASSWORD RABBIT_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=$ADMIN_PASSWORD SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50 #FIXED_RANGE=172.31.1.0/24 #FLOATING_RANGE=192.168.20.0/25 #HOST_IP=10.3.4.5 如果这些*—PASSWORD变量没有在这里设置,那么运行stack.sh时会提示你输入。文件中网段范围必须不能和主机使用的任何网段有重叠。网段的重叠并不少见,因为RFC-1918中规定的“私有”网段在局域网中和Nova的固定与浮动地址范围中被广为使用。 HOST_IP通常是在stack.sh脚本第一次运行时自动检测,但是后续运行时可能因为IP从一个以太网端口被移动到主机上的一个网桥而不太确定。在这里设置HOST_IP还可以被openrc用来设置OS_AUTH_URL。 默认情况下HOST_IP没有设置。 常见的配置变量安装目录Installation Directory 默认设置: DevStack的安装目录由DEST变量指定。 在localrc的前面部分设定后,后面的一些变量也可以引用它。即使你不改变默认值,设置这个变量可能也是有用的。 DEST=/opt/stack Git库文件 Libraries from Git 默认设置: ``LIBS_FROM_GIT=”“`` 默认情况下devstack通过git安装OpenStack服务器组件,但是通过pypi发布的版本安装客户端库文件。如果你想装一个服务器开发环境,这样是适当的。但是如果你想看看未发布的版本对系统有什么影响,可以用git从它的upstream,或是本地git树安装devstack。多个库文件可以用逗号隔开。 LIBS_FROM_GIT=python-keystoneclient,oslo.config 虚拟环境 Virtual Environments 默认设置:``USE_VENV=False`` 将USE_VENV设为True可以开启使用Python虚拟环境。这样在PROJECT_VENV阵列中定义的每个项目生成venvs。
默认设置: PROJECT_VENV阵列中的每一项包含有给这个项目的venv的目录名。阵列的索引是项目名称。如果想要的话,多个项目可以使用相同的venv。 PROJECT_VENV["glance"]=${GLANCE_DIR}.venv
默认设置: 一个用逗号分隔的列表,指示每个venv需要安装的额外软件包。各个项目经常不在它的requirements.txt中指定那些”可选的”,只适用于特定配置的特定的软件包。默认情况下,开启的数据库会加上它的Python绑定。 开启日志 Enable Logging 默认配置:``LOGFILE=”” LOGDAYS=7 LOG_COLOR=True`` 默认情况下stack.sh的运行结果只是在运行时显示在控制台上。可以指定LOGFILE到一个全路径的文件名,运行的结果除了在控制台上显示之外,还会写入文件中。每次运行stack.sh文件,log文件中会加入一个时间戳。 LOGFILE=$DEST/logs/stack.sh.log
如果将 LOGDAYS=1 有些项目的日志 (Nova, Cinder, etc) 默认用颜色标记。
(如果下面没有设置 LOG_COLOR=False 用日志记录服务的输出 Logging the Service Output 默认配置:``LOGDIR=”“`` DevStack会用日志记录服务启动时标准输出设备上的内容。使用screen命令时,就记录screen窗口中的内容。没有用screen时,就是将服务进程的标准输出stdout重定向到LOGDIR下的文件。 LOGDIR=$DEST/logs 注意用``DEST``变量来确定主安装目录,这是为什么我们建议在``local.conf``文件中设定DEST。 开启系统日志 Enabling Syslog 默认配置:``SYSLOG=False SYSLOG_HOST=$HOST_IP SYSLOG_PORT=516`` 把所有服务的日志都记录到单一的系统日志文件syslog中可能会比较方便。设定SYSLOG=True来开启这一功能。如果不是本地主机来记录日志,可以通过SYSLOG_HOST和SYSLOG_PORT来指定记录日志的远程主机。 SYSLOG=True SYSLOG_HOST=$HOST_IP SYSLOG_PORT=516 每次都进行干净的安装 A clean install every time 默认配置:``RECLONE=”“`` 默认情况下stack.sh只在项目不存在于$DEST目录下的情况下才克隆项目的repos。如果把RECLONE设为yes,那么stack.sh每次运行时都会更新所有的repo。这样就不需要手工移除repos来保证$GIT_BASE下的软件都是最新的。 RECLONE=yes 更新由pip安装的软件包 Upgrade packages installed by pip 默认配置:``PIP_UPGRADE=”“`` 默认情况下stack.sh只在没有安装Python或是当前安装版本不满足特定需求时才安装Python。如果将PIP_UPGRADE设为True,那么现有的Python软件包将被升级到满足要求的最新的版本。 PIP_UPGRADE=True Swift 默认配置: SWIFT_HASH=”“ SWIFT_REPLICAS=1 SWIFT_DATA_DIR=$DEST/data/swift
Swift现在被用来做存储S3近似类型对象的后台。开启后Nova的对象存储objectstore 设定Swift的哈希值是需要的,如果开启了Swift后会提示你输入,所以最好设定为某一确定值: SWIFT_HASH=66a3d6b56c1f479c8b4e70ab 开发环境下默认的replicas数目设为1来降低系统开销。为了更好地模拟一个生产环境设为3或更高。 SWIFT_REPLICAS=3
默认情况下Swift的数据被保存在 SWIFT_DATA_DIR=$DEST/data/swift 注意:以前只要开启”Swift“就可以启动Swift服务了。但是提供不了良好的服务粒度,尤其是在多主机环境下,已经被考虑弃用了。有些服务的组合现在检查特定的Swift服务,旧的全部接收的模式不再能正确工作。(黄金甲注:原文the old blanket acceptance will longer work correctly. 英文好像没这么写的,怀疑will后面少了no). 服务目录后端 Service Catalog Backend 默认设置:``KEYSTONE_CATALOG_BACKEND=sql`` DevStack采用Keystone的sql服务目录后端。 也有另一个可替换的template后端。但是,它不支持keystone命令行的service-*和endpoint-*命令。要实现这些功能需要启用sql后端。 KEYSTONE_CATALOG_BACKEND=template DevStack的默认配置是sql模式,在files/keystone_data.sh里设定。 Cinder 默认设置: VOLUME_GROUP=”stack-volumes” VOLUME_NAME_PREFIX=”volume-” VOLUME_BACKING_FILE_SIZE=10250M 用来存放Cinder管理的卷的逻辑卷组由VOLUME_GROUP指定,逻辑卷的名字前缀由VOLUME_NAME_PREFIX指定,卷的后端文件大小由VOLUME_BACKING_FILE_SIZE指定。 VOLUME_GROUP="stack-volumes" VOLUME_NAME_PREFIX="volume-" VOLUME_BACKING_FILE_SIZE=10250M 多主机安装DevStack 默认配置:``MULTI_HOST=False`` 要在多台主机上运行DevStack,需要在每台主机的local.conf文件中有一个定制的部分。主节点master和单主机安装是一样的。从节点slave开启的服务少一些,有一些关于主机的变量指向主节点。 主节点Master MULTI_HOST=True 从节点Slave MYSQL_HOST=w.x.y.z RABBIT_HOST=w.x.y.z GLANCE_HOSTPORT=w.x.y.z:9292 ENABLED_SERVICES=n-vol,n-cpu,n-net,n-api IP版本 默认配置:IP_VERSION=4 这个设置可以用来将租户的数据网络指定为IPv4、IPv6或是同时有IPv4和IPv6,方法是把IP_VERSION设成IP_VERSION=4、IP_VERSION=6或是IP_VERSION=4+6。这个功能需要通过下列选项启动Neutron网络服务: disable_service n-net enable_service q-svc q-agt q-dhcp q-l3 下列的可选变量可以用来调整默认的IPv6行为: IPV6_RA_MODE=slaac IPV6_ADDRESS_MODE=slaac FIXED_RANGE_V6=fd$IPV6_GLOBAL_ID::/64 IPV6_PRIVATE_NETWORK_GATEWAY=fd$IPV6_GLOBAL_ID::1 注意:``FIXED_RANGE_V6`` 和 ``IPV6_PRIVATE_NETWORK_GATEWAY`` 可以设为任意有效的IPv6前缀。默认值使用自动生成的 ``IPV6_GLOBAL_ID``来遵守 RFC 4193. 示例
[[post-config|$CINDER_CONF]] [DEFAULT] periodic_interval = 60
[[local|localrc]] FIXED_RANGE=10.254.1.0/24 NETWORK_GATEWAY=10.254.1.1 LOGDAYS=1 LOGDIR=$DEST/logs LOGFILE=$LOGDIR/stack.sh.log ADMIN_PASSWORD=quiet DATABASE_PASSWORD=$ADMIN_PASSWORD RABBIT_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=$ADMIN_PASSWORD SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50 插件DevStack有几个插件机制用来支持方便地添加项目与特性。 Extras.d Hooks这些钩子(hook)是stack.sh/unstack.sh/clean.sh中运行过程中的特定点的服务调用的扩展。很多高级别项目在DevStack中是通过这种机制实施的。 Extras.d中的脚本基本上是调度lib目录下的脚本中的功能。这些脚本的命名以两位数字(位数不足用0补充)为前缀,来控制调用的顺序。脚本的文件名后缀是.sh。 DevStack为它自己保留了序列数字00-09和90-99。 下面是一个模板,显示控制程序和可能的命令行参数: # template.sh - DevStack extras.d dispatch script template # check for service enabled if is_service_enabled template; then
fi 可选参数有:
外部主机存放的插件 Externally Hosted Plugins基于extras.d钩子,DevStack支持一个标准化的机制来包含由外部软件库的插件。插件的借口要求如下: 一个外部的git软件库包含有devstack/最高层目录。在目录里可以有两个文件。
你的设置需要包含插件所需的enable_service
当用户需要覆盖全局变量来定制他们的环境是要小心。通常只有当一个变量是没有的或是空的时候,才给它指定一个默认值。例如用bash的语法
插件注册是通过在local.conf的localrc部分增加下列内容: [[local|localrc]] enable_plugin [GITREF]
一个示例: enable_plugin ec2api git://git./stackforge/ec2api Plugin for gate jobs所有希望用于gate job的OpenStack插件都必须存在于OpenStack的gerrit中。在openstack或是stackforge的命名空间里都是可以的。这样就允许测试插件,同时提供与上层git软件库错误的网络隔离(我们经常遇到这个问题)。 理想情况下插件会在测试的项目中被实现为devstack目录。例如,stackforge/ec2-api项目在它的目录树(tree)中有插件支持。 有些情况下没有所谓的”project tree“(比如说集成一个后端的存储配置,例如ceph或是glusterfs)。也可以建立一个专门的stackforge/devstack-plugin-FOO项目来存放插件。 注意任务必须不可以在测试中要求对软件库进行克隆。测试必须要在PROJECTS变量中列出它们的软件库repository,来让devstack-gate可用于测试。更多的信息可以从project creator的指南中获取。 虚拟机管理程序HypervisorHypervisor插件相当新,把大部分的hypervisor的配置浓缩到一个地方。 最初的插件实现是为了Docker支持,是一个对所需支持的有用的模板。插件被放置到lib/nova_plugin中,命名为hypervisor-,这里name是VIRT_DRIVER的值。插件必须要定义以下功能:
系统软件包DevStack提供一个框架在执行的早期阶段安装软件包。这些软件包可能在一个插件中被定义为按行分隔的一些文件。 在很多发行版本中支持的软件包安装工具是apt和yum。要允许一个插件钩进来并安装其所依赖的软件包,软件包要列在插件repository的最上一层的下列地方:
|
|
来自: LZS2851 > 《OpenStack》