本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou

JmilkFan:minxihou的技术博文方向是 算法&Openstack自动化 ,写得很好,值得推荐。

这是个在多物理服务器上部署openstack例子:

目录

  • 目录
  • 先决条件Linux网络
    • 1 最小化安装系统
    • 2 网络配置
  • 安装shake和bake
    • 1 添加devstack用户
    • 2 设置ssh
    • 3 下载devstack
    • 4 配置集群控制节点
    • 5 配置计算节点
    • 6 部署完之后的清理工作
  • stack上增加其他功能性选项
    • 1 配置其他用户
    • 2 Swift节点
    • 3 卷
    • 4 系统日志
    • 5 使用不同repo源与分支
  • 注意事项
    • 1 重置网桥
    • 2 设置MySQL数据库密码
    • 3 动态迁移

1 先决条件Linux&网络

1.1 最小化安装系统

你需要一个刚安装好的Linux系统。你可以直接下载最小化的Ubuntu版本,devstack会下载安装所有额外的依赖关系。同样也支持网络安装Fedora,Centos/RHEL.安装几个包用于引导程序配置。

apt-get install -y git sudo || yum install -y git sudo

1.2 网络配置

在实验中我们只需要反复的使用openstack的FlatDHCP网络控制器所以我们只需要一个单网络。不使用DHCP,要保证网络处在它自己的网段内。主机IP和前端IP池将会设在同一个网段内。如下设置了一个示例:

* Gateway: 192.168.42.1
* Physical nodes: 192.168.42.11-192.168.42.99
* Floating IPs: 192.168.42.128-192.168.42.254

在每个节点配置静态IP。对于Ubuntu来说配置网络需要编辑/etc/network/interfaces

auto eth0
iface eth0 inet staticaddress 192.168.42.11netmask 255.255.255.0gateway 192.168.42.1

对于Fedora,Centos/RHEL版本的Linux来说修改/etc/sysconfig/network-scripts/ifcfg-eth0:

BOOTPROTO=static
IPADDR=192.168.42.11
NETMASK=255.255.255.0
GATEWAY=192.168.42.1

2 安装shake和bake

2.1 添加devstack用户

openstack运行需要使用非root用户该用户可以通过sudo来访问root,对于这个非root用户来说用户名没有特别的限制。在这里我们使用stack来作为用户名。每个节点都必须使用相同的用户名(uuid也尽量保持一致)来部署openstack。如果你在安装系统的时候就设置了用户那你可以直接使用它,用sudo指令进入用户。如果没有创建stack用户的话需要进系统把这个用户创建出来。

groupadd stack
useradd -g stack -s /bin/bash -d /opt/stack -m stack

在安装部署openstack的时候stack用户会修改很多系统的操作,这样我们需要stack用户拥有sudo到root并且无需输入密码的特权。

echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

从这里开始使用stack用户。登入和登出都使用stack用户。

2.2 设置ssh

在每个节点上设置stack的秘钥用于stack访问每个节点。

mkdir ~/.ssh; chmod 700 ~/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys

2.3 下载devstack

找到devstack的最新版

git clone https://git.openstack.org/openstack-dev/devstack
cd devstack

到目前为止以上的操作适用于你要部署集群中的每个节点。从现在开始在集群控制节点(又名头结点)和计算节点上配置有一些差异。

2.4 配置集群控制节点

集群控制节点上跑着所有openstack的服务。在集群控制节点devstack的local.conf文件中做如下配置。

[[local|localrc]]
HOST_IP=192.168.42.11
FLAT_INTERFACE=eth0
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.42.128/25
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=labstack
DATABASE_PASSWORD=supersecret
RABBIT_PASSWORD=supersecret
SERVICE_PASSWORD=supersecret

在多节点的配置文件中子网段前十个IP地址一般预留作为虚机私网网段的IP地址。把如下命令加入到local.sh文件中,在每次stack.sh运行完之后运行local.sh。

for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done

运行devstack的部署脚本。

./stack.sh

在一连串运行之后。当stack.sh部署完成的时候终端会输出一个总结的信息,其中包括了各个端点使用的URL,账户和密码信息。最近一次运行stack.sh脚本的日志会被存放到stack.sh.log中。

2.5 配置计算节点

计算节点只运行openstack的计算服务。针对充当计算节点角色的机器,我们需要添加一个local.conf文件在计算节点的devstack中,配置如下:

[[local|localrc]]
HOST_IP=192.168.42.12 # change this per compute node
FLAT_INTERFACE=eth0
FIXED_RANGE=10.4.128.0/20
FIXED_NETWORK_SIZE=4096
FLOATING_RANGE=192.168.42.128/25
MULTI_HOST=1
LOGFILE=/opt/stack/logs/stack.sh.log
ADMIN_PASSWORD=labstack
DATABASE_PASSWORD=supersecret
RABBIT_PASSWORD=supersecret
SERVICE_PASSWORD=supersecret
DATABASE_TYPE=mysql
SERVICE_HOST=192.168.42.11
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
ENABLED_SERVICES=n-cpu,n-net,n-api-meta,c-vol
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN

注意:n-api-meta服务只是源数据服务api的一个版本。启用这个服务是需要的因为计算节点不会创建到控制节点源数据服务的路由路径。
之后我们只需要运行./stack.sh

./stack.sh

2.6 部署完之后的清理工作

现在关闭openstack相应的服务已经变得非常简单了,只需要运行 unstack.sh脚本。

./unstack.sh

更加深度的清除工作我们可以使用clean.sh脚本。这种模式清除可以删除掉一些明确有问题的包,并且修改掉原有部署的数据库和消息队列管理器。可以理解为深度清理。

./clean.sh

有些时候正在运行的实例可能无法被清理,Devstack会尝试清除正在运行的实例但有时候仍然需要手动来完成清除操作。

sudo rm -rf /etc/libvirt/qemu/inst*
sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy

3 stack上增加其他功能性选项

3.1 配置其他用户

devstack创建了两个openstack账号(一个是admin一个是demo)同时创建了两个对应的project(命名依旧一个是admin一个是demo)。admin的作用就像admin字面意思上一样,一个特权管理账户这个账户同时包含在了admin和demo的项目里面。demo账户作为一个普通用户账户它只包含在了demo项目里面。通过dashboard我们可以自定义的创建我们所需要的openstack账户。有些时候在dashboard里面创建账户会比在脚本里面定义创建会更快捷方便一些。尤其你每次执行stack.sh脚本的时候这些设置的账户就会被再次更改。比较成熟的做法是遵循以下脚本配置:

# Get admin creds
. openrc admin admin# List existing projects
openstack project list# List existing users
openstack user list# Add a user and project
NAME=bob
PASSWORD=BigSecret
PROJECT=$NAME
openstack project create $PROJECT
openstack user create $NAME --password=$PASSWORD --project $PROJECT
openstack role add Member --user $NAME --project $PROJECT
# The Member role is created by stack.sh
# openstack role list

3.2 Swift节点

Swift,openstack类储存对象。swift需要大量的存储资源,这个项目在devstack自动化部署的时候是默认禁止的。在devstack中支持swift的最小化安装,这样可以用于测试swift功能。为了真正测试多节点的swift,如下附加的参数设置是必要的。在local.conf文件中写入尽可能简单的开启swift配置参数。

enable_service s-proxy s-object s-container s-account

swift是openstack的类存储对象服务,swift将会把它的数据文件存放到SWIFT_DATA_DIR中(设定的默认值/opt/stack/data/swift).划分分区的数据大小由SWIFT_LOOPBACK_DISK_SZIE来确定(这样实际上是挂载了一个本地文件夹供swift来使用)。swift的配置文件由SWIFT_CONF_DIR参数决定(默认值为/ect/swift)。以上所说的这些配置都可以在local.conf文件中通过修改配置项来实现。

3.3 卷

devstack会自动使用现有stack-volumes的LVM卷来作为云主机的存储卷。如果stack-volumes不存在,那么devstack会自动创建一个10GB大小的本地卷来作为存储卷使用。这样在openstack创建云主机的时候因为卷的数量和规模而被限制了创建个数和大小。卷的大小可以通过修改local.conf中的VOLUME_BACKING_FILE_SIZE来扩大。
stack-volumes卷能在任何支持Linux的LVM功能的物理机上预先创建出来。卷组名可以通过localrc中的VOLUME_GROUP参数进行修改。想要清除之前运行的内容,部分工作需要依靠stack.sh这个脚本,该脚本可以删除VOLUME_GROUP中以VOLUME_GROUP_PREFIX开头的所有逻辑卷。 在设置VOLUME_GROUP的时候不建议使用根卷组。

创建卷组的细节取决于你所用到的物理服务器,在系统层面上指令如下所示

pvcreate /dev/sdc
vgcreate stack-volumes /dev/sdc

3.4 系统日志

devstack通过使用参数ryslog可以跨节点的来收集日志。默认情况下是这个参数是关闭的,要打开的话需要在local.conf中写入SYSLOG=True.SYSLOG_HOST默认的IP地址继承了HOST_IP参数的IP地址。在计算节点设置收集日志的IP地址必须只想keystone控制节点,这样能够统一的收集日志。以下例子指出如何在计算节点添加输出日志的条目值:

SYSLOG_HOST=192.168.42.11

3.5 使用不同repo源与分支

在stackrc中定义了devstack自动化部署时候所要下载openstack服务所要用到的默认repo源与分支。自从这个文件加入了devstack自动部署文件中我们只需要在这个文件中设置我们想使用的repo源和相对应的git分支,则部署的时候就会按照我们配置的repo和分支生效。但是在stackrc中设定的值都是可以在local.conf中重新定义的。
针对创建一个特定的openstack服务选用不同的repo源和分支,最简单的办法就是在local.conf文件中修改针对这个服务的*_REPO和*_BARNCH参数。
再修改了repo源和分支之后,如果你在local.conf中没有设置RECLONE参数,则需要从/opt/stack目录中删除相关服务的文件目录,然后用git来重新根据你设定的repo源和分支来重新克隆代码。
例如,我想从nova主分支树下拉取候选发行版的nova分支,可用如下操作:

NOVA_BRANCH=rc-proposed

从一个实验分支下拉取一个glance的分支则需要使用如下参数:

GLANCE_BRANCH=try-something-big
GLANCE_REPO=https://github.com/mcuser/glance.git

4 注意事项

4.1 重置网桥

如何重置网桥配置

sudo brctl delif br100 eth0.926
sudo ip link set dev br100 down
sudo brctl delbr br100

4.2 设置MySQL数据库密码

如果你忘记设置数据库root密码你可以遵循以下做法:

mysqladmin -u root -pnova password 'supersecret'

4.3 动态迁移

默认配置动态迁移的URL

[libvirt]
live_migration_uri = qemu+ssh://stack@%s/system

每个计算节点间因该要互相交换秘钥
1.在“源”主机中root用户的公钥(形如/root/.ssh/id_rsa.pub)需要复制到”目标”服务器stack用户目录认证秘钥文件夹下(~stack/.ssh/authorized_keys)。可以通过手动的在”源”主机中复制目标目录下的文件到”目标”主机对应的文件目录中来实现这个目标。如果你为stack用户做了密码配置同样的可以通过以下的命令来完成秘钥交换。

ssh-copy-id -i /root/.ssh/id_rsa.pub stack@DESTINATION

2.“目标主机”公用的ECDSA秘钥(/etc/ssh/ssh_host_ecdsa_key.pub)需要放入”源”主机的超级用户的known_hosts文件夹中(/root/.ssh/know_hosts).在“源”主机中通过使用以下命令可以完成需求(注意需要使用主机名)

ssh-keyscan -H DEST_HOSTNAME | sudo tee -a /root/.ssh/known_hosts

本质上,做这两步的操作是为了能够让每一个计算节点中的root用户公钥存在于其他计算节点stack用户的authorized_keys文件中,其次为了让每个计算节点中的公共ECDSA秘钥存在于其他计算节点的root用户knows_hosts文件夹中。请注意,如果root或者stack用户没有SSH秘钥,可以用以下命令生成一个:

ssh-keygen -t rsa

以上的配置是必须的当动态迁移设置的参数live_migration_uri是以root身份来使用的”qemu:///system”系列的URL。

Devstack 多节点自动化部署相关推荐

  1. Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三)

    Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三) 目录 Jenkins 之 单节点 搭建自动化部署项目环境 与 实战测试 (三) Jenkins 服务器 环境 ...

  2. Devstack单节点环境实战配置

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...

  3. 自动化部署shell01

    自动化部署--shell脚本--1 传统部署方式 1.纯手工scp 2.纯手工登录git pull .svn update 3.纯手工xftp往上拉 4.开发给打一个压缩包,rz上去.解压 传统部署缺 ...

  4. jenkins运行日志时间与linux,持续集成之Jenkins结合脚本实现代码自动化部署及一键回滚至上一版本...

    一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负载均衡器删除.解压.复制配置文件.创建软连接.测试每一台web服务器.将we ...

  5. 利用 Chef 在 Red Hat Enterprise Linux 上自动化部署 Mariadb Galera Cluster

    简介 Chef Chef提供了一套自动化安装和配置软件的工具.它允许开发者以模块化的方式(cookbook)来定义软件的安装和配置流程(recipe),以及流程中的可定制参数(attribute).当 ...

  6. ansible自动化部署(一)

    ansible自动化部署 最近因为工作需要学习了ansible,把这几天所学的东西做了个总结,和大家分享一下: 1.什么是ansible?ansible能干什么? ansible是新出现的自动化运维工 ...

  7. 运维与自动化系列③自动化部署基础与shell脚本实现

    自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器 纯手工登录git服务器执行git pull或svn服务器执行svn upd ...

  8. gitlab ci 自动化部署_前端gitLab加jenkins自动化构建和部署,以及服务器常用的linux命令行操作,免密登录...

    常用的linux命令行操作 将项目部署到服务器后,需要查看文件是否已经部署成功,已经对文件进行增删改查操作,就需要用到命令行操作,常用操作如下: ll 罗列出当前文件或目录的详细信息,含有时间.读写权 ...

  9. Java自动部署maven_Maven+Tomcat8 实现自动化部署的方法

    本文介绍了maven+tomcat8 实现自动化部署的方法,分享给大家,具体如下: 1.配置tomcat-users.xml 首先在tomcat里配置deploy的用户(tomcat根目录/conf/ ...

最新文章

  1. 本地navicat连接阿里云数据库
  2. phpStorm无法使用svn1.8的解决办法
  3. 第二次冲刺团队进展报告七
  4. Fortran 入门——函数调用
  5. 容器学习 之 dockerfile 命令(七)
  6. 【Linux】- 守护进程的启动方法
  7. 轮询数据库 java_谁做过定时任务,轮询查询数据。
  8. django 1.8 官方文档翻译:14-5 信号
  9. 本科是最底层?学历真的那么重要么?
  10. 转:jdk动态代理实现
  11. 基于stc15f2k60s2芯片单片机编程(流水灯)
  12. html历史记录代码,js 实现浏览历史记录示例
  13. android运行ios应用程序,Cider让你在安卓手机上运行iOS应用
  14. c语言编写时钟图案,用C语言绘制电子时钟图案
  15. SQL学习笔记(06)_SELECT INTO
  16. U-boot2022.07 imx6q 移植 - SPL-DTC-DCD
  17. 在visio中不借助公式编辑器在字母上方打波浪线
  18. XTTS,又一个值得你重视的Oracle数据库迁移升级利器
  19. uniapp实现倒计时
  20. LeetCode/LintCode 题解丨一周爆刷字符串:神奇字符串

热门文章

  1. 微信 php 接口 函数,PHP的json_encode函数应用到微信接口有关问题(include \uxxxx will create fail)...
  2. mysql删除没有索引页_InnoDB中没有主键是如何运转的
  3. gson解析json maven_Gson解析Json
  4. 不同分类算法的优缺点是什么?(值得推荐)
  5. Tensorflow安装与测试
  6. Elon Musk的OpenAI用VR训练机器人:解锁更多复杂动作!
  7. i卡来了!英特尔公布游戏独显出货时间表,放话今年要卖400万张
  8. 广州Robotaxi铁三角又落地,文远知行商业化通行证摊牌
  9. 中国工程院谭建荣:人工智能应用得再好,最核心的算法不行,创新能力就不行丨MEET2021...
  10. 中文分词最佳记录刷新了,两大模型分别解决中文分词及词性标注问题丨已开源...