/ 2017-07-13
本文是我参加318 DevOps Days北京站,上午我在DevOps训练营中演示的其中一个案例的第一篇,本篇主要介绍如何使用salt-cloud自动化创建OpenStack云主机,剩下内容陆续发出。
总体自动化扩容流程:
如果从总体上理解自动化扩容,分为两大部分:
1. 扩容决策判断(决策树设计)。
2. 执行自动化扩容流程。
扩容方式:
实战部分先把最重要的扩容决策判断放下,介绍了如何使用开源工具执行自动化扩容流程,整体又分为两个类型的扩容方案(基于物理机暂且不谈):
1. 基于虚拟机的扩容(本文内容)。
2. 基于容器的扩容(后期推出)。
基于虚拟机的扩容流程简介:
1. 通过salt-cloud调用OpenStack 创建虚拟机。
2. 通过API调用Saltstack 配置运行环境(其实只是检查和验证,因为运行环境需要在镜像中提前定义好)。
3. 通过API调用Zabbix增加监控,和对应模板。
4. 通过API调用部署系统部署当前版本的代码。
5. 调用API测试接口,测试服务健康状态。
6. 加入对应集群。
7. 通知(短信、邮件)。
salt-cloud自动化创建OpenStack虚拟机
不要怀疑,神奇的魔法要从SaltStack开始。虽然说写个脚本调用OpenStack API创建虚拟机没什么大不了,但是如果你不用编写一行代码就可以管理OpenStack应该是一个不错的注意,接下来我们要讲的salt-cloud正是如此。
salt-cloud介绍
salt-cloud是SaltStack四大功能之一,用于云管理,可以用来管理众多公有云和私有云,例如:AWS、Azure、阿里云等,更多详情可以参考:https://docs.saltstack.com/en/latest/topics/cloud/
1.安装salt-cloud
# yum install -y salt-cloud
2.为salt-cloud的openstack模块增加keystoneV3支持。
最新版本的salt-cloud目前还不支持OpenStack Keystone V3版本,但是官方已经处理了,未正式发布,可以使用最新的代码替换。
# git clone https://github.com/saltstack/salt.git
# rm -f /usr/lib/python2.7/site-packages/salt/cloud/clouds/openstack.py*
# cp salt/salt/cloud/clouds/openstack.py /usr/lib/python2.7/site-packages/salt/cloud/clouds/
3.链接OpenStack
如果需要使用salt-cloud创建OpenStack虚拟机首先,你需要配置salt-cloud与OpenStack的通信,配置Keystone的地址和验证信息。
# vim /etc/salt/cloud.providers.d/openstack.conf
my-openstack-config:
minion:
master: 192.168.56.12
# Configure the OpenStack driver
identity_url: http://192.168.56.11:5000/v2.0/tokens
compute_name: nova
protocol: ipv4
compute_region: RegionOne
# Configure Openstack authentication credentials
user: demo
password: demo
# tenant is the project name
tenant: demo
#注意,在2015.8.0版本中由以前版本的provider改成了driver。如果低于这个版本请注意。
driver: openstack
# skip SSL certificate validation (default false)
ssh_interface: private_ips
insecure: false
4.测试与OpenStack的通信
下面我们通过salt-cloud获取openstack的信息来测试配置是否正常。
# salt-cloud --list-images openstack
# salt-cloud --list-size openstack
如果openstack的通信没有问题,那么就可以正常的输出OpenStack的镜像和云主机的类型。那么我们下一步就可以和OpenStack交互了。
创建云主机配置文件
我们使用Salt-Cloud创建OpenStack云主机并不是需要手动指定云主机的相关配置,而且预先定义好配置文件,然后直接使用配置文件创建云主机,比如下面,我们编写一个云主机的profile,注意格式依然是YAML。
# vim /etc/salt/cloud.profiles.d/web.conf
openstack_web:
provider: my-openstack-config
#设置云主机类型,注意使用权限
size: m1.tiny
#设置创建该云主机使用的镜像名称
image: cirros-0.3.1-x86_64-uec
#指定云主机使用的网络,注意是network id。
networks:
- fixed:
- bc82c434-4781-4d3f-832b-4b12aed5d9e2
#设置访问的密钥对,需要提前设置好。
ssh_key_name: test
#设置密钥对的私钥
ssh_key_file: /etc/test.pem
ssh_interface: private_ips
#如果设置了minion,那么创建虚拟机完毕后会自动安装salt-minion并设置我们指定的grains。
minion:
master: base.example.com
append_domain: example.com
grains:
role: webserver
创建云主机
下面我们就可以创建虚拟机。使用-p参数,后面跟上你要创建的云主机配置的ID。Web-node1为云主机的名称。使用-l debug可以把整个创建过程都列出来,方便我们查看。
# salt-cloud -p openstack_web web-node1
注意,虚拟机创建成功后,虚拟机创建完毕后,可以在/tmp/bootstrap-salt.log找到saltstack相关日志。
Salt Bootstrap
Salt-Cloud强大之处不仅仅,可以让我们直接创建OpenStack云主机,默认会使用salt bootstrap为我们安装上salt-minion。根据在上面profile里面的定义,我们给新创建的云主机分配了一个grains。然后就可以通过grains进行配置管理。
# salt -G 'role:web-node' test.ping
api-node1.example.com:
True
由于默认的salt bootstrp是通过外网下载,进行salt的安装工作,你可以对该脚本进行自定义,编写符合内部需要的脚本。
删除云主机
# salt-cloud -d api-node1
总结和下一步
现在你已经可以使用salt-cloud连接openstack自动化的创建了一台虚拟机,接下来的步骤就是使用saltstack对该虚拟机的运行环境进行初始化,注意:根据不可变基础设施的理论。如果你对环境有变化,应该是重新构建你的OpenStack镜像,这样SaltStack的配置管理,仅仅是做一次状态验证即可。
(14)