老男孩旗下品牌:网校平台

老男孩IT教育,只培养技术精英

全国免费咨询电话:400-609-2893
基于SaltStack+OpenStack的自动化扩容实战【第1篇】

    /    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四大功能之一,用于云管理,可以用来管理众多公有云和私有云,例如:AWSAzure、阿里云等,更多详情可以参考:https://docs.saltstack.com/en/latest/topics/cloud/

 

1.安装salt-cloud

# yum install -y salt-cloud

2.salt-cloudopenstack模块增加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-cloudOpenStack的通信,配置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参数,后面跟上你要创建的云主机配置的IDWeb-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的配置管理,仅仅是做一次状态验证即可。


(0)

分享至