通过salt的orchestrate runner进行应用编排

目录

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

前面学习了salt的模块和runners,本篇学习一个特别的runner,orchestrate runner。所谓应用编排,就是当多个应用程序分布在不同的节点上并且互相依赖时,如何安排应用程序在不同节点上的启动顺序,如何安排各个程序的依赖。

应用编排是salt的一个特性。使用编排的特性,可以通过使整个应用程序栈在启动时确保某个模块比另外一个依赖它的模块先启动,而保持整个应用程序栈的完整性。例如某个应用是由web服务器和数据库组成的,在启动时应该确保数据库服务比web服务器先启动起来,以确web服务器启动后可以访问到数据库服务。下面就来实现这个过程:
1.首先主机包括一个master和两个minions,minion的名称分别为stgdc1web01和stgdc1dbs01。stgdc1web01的minion包括一个server_type: web的grains,stgdc1dbs01的minion包括一个server_type: db的grains。

2.然后创建两个state,分别名为nginx和mysql,这两个state的目的是分别安装nginx软件和mysql软件,并且使服务正常运行,创建完成后的文件夹结构为及文件内容分别为:

1
2
3
4
5
6
7
8
[root@centos7-A staging]# tree
.
├── mysql
│   └── init.sls
└── nginx
└── init.sls
2 directories, 2 files

nginx/init.sls
1
2
3
4
5
6
7
8
9
10
nginx_package:
pkg.installed:
- name: nginx
nginx_service:
service:
- name: nginx
- running
- enable: True
- require:
- pkg: nginx_package
mysql/init.sls
1
2
3
4
5
6
7
8
9
10
mysql_package:
pkg.installed:
- name: mysql-server
mysql_service:
service:
- name: mysqld
- running
- enable: True
- require:
- pkg: mysql_package

这样便完成了state的创建。

3.state的创建前几篇文章已经都比较熟悉了,下面便到了本篇比较关键的地方,创建orchestration的配置文件。在staging环境的基目录中创建名为orchestration的文件夹,在此文件夹中创建名为stack.sls的文件,文件内容如下:

stack.sls
1
2
3
4
5
6
7
8
9
10
11
12
webserver_deploy:
salt.state:
- tgt: 'server_type:web'
- tgt_type: grain
- sls: nginx
- require:
- salt: dbserver_deploy
dbserver_deploy:
salt.state:
- tgt: 'server_type:db'
- tgt_type: grain
- sls: mysql

上面的文件与普通的state文件非常类似,需要注意的是其中的require字段的内容。此关键字确保mysql的state先于nginx的state执行。其它关键字可以与state文件做类比。
最后的目录结构类似于下面这样:

[root@centos7-A staging]# tree
.
├── mysql
│   └── init.sls
├── nginx
│   └── init.sls
└── orchestration
    └── stack.sls

3 directories, 3 files

4.所有的配置工作都完成了。下面就需要将配置应用到minions上,通过如下命令进行:

[root@centos7-A staging]# salt-run state.orchestrate orchestration.stack \
saltenv=staging
...

上面的整个过程便完成了salt的orchestration。