saltstack学习
1. 创建基础镜像
salt-master, 文件名Dockerfile
# VERSION 1.0
# TO_BUILD: docker build -t salt/master . FROM library/ubuntu:16.04 # Update & install packages
RUN sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
&& sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
&& apt-get update \
&& apt-get install software-properties-common -y \
&& add-apt-repository ppa:saltstack/salt -y \
&& apt-get install salt-master -y # COPY ./master /etc/salt/master
COPY ./*.conf /etc/salt/master.d
CMD ["salt-master","start"]
salt-minion, 文件名Dockerfile
# VERSION 1.0
# TO_BUILD: docker build -t salt/minion . FROM library/ubuntu:16.04 # Update & install packages
RUN sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
&& sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
&& apt-get update \
&& apt-get install software-properties-common -y \
&& add-apt-repository ppa:saltstack/salt -y \
&& apt-get install salt-minion -y CMD ["salt-minion","start"]
2. 创建配置文件
salt-master conf, 文件名master.conf
interface: 0.0.0.0
auto_accept: True
hash_type: sha256 file_ignore_regex:
- '/\.svn($|/)'
- '/\.git($|/)' file_ignore_glob:
- '*.pyc'
- '*/somefolder/*.bak'
- '*.swp'
salt-minion conf,文件名minion.conf
master: 172.17.0.2
id: minion-vm1
hash_type: sha256
3. 启动容器
使用shell脚本启动,文件名称create-cluster.sh
#!/bin/bash
# must be args
if [ $# -lt ];then
echo "usage $0 master_name num_of_minion"
exit
fi name=$
master_name='master__'$name # check the container name
cname=$(docker ps -a| grep $master_name$ | awk '{print $NF}')
cid=$(docker ps -a| grep $master_$name$ | awk '{print $1}')
if [ "$cname" = "$master_name" ];then
echo "contain name $name exist, id is $cid."
exit
fi # the 2nd arg must be digit
if [ "$2" -gt ] >/dev/null;then
echo "there will be create $2 minion."
num=$
else
echo "usage $0 master_name num_of_minion"
echo "$2 is not a number"
exit
fi # create master
mkdir -p /docker/cluster/$name/master/master.d
cp /docker/Docker/salt\ master/master.conf /docker/cluster/$name/master/master.d/master.conf
msg=$(docker run -d --name=$master_name -v /docker/cluster/$name/master/master.d:/etc/salt/master.d salt/master) # check if container is create success
mcid=$(docker ps| grep $master_name$ | awk '{print $1}')
if [ -z $mcid ];then
echo "master create faild!"
exit
fi master_ip=$(docker exec -it $mcid ip a | grep "global eth0" | awk '{print $2}' | awk -F '/' '{print $1}')
if [ -z $master_ip ];then
echo "could not find master ip in container, id = $mcid !"
exit
fi
echo "master ip is $master_ip" #create minion
for i in `seq $num`; do
minion_name='node__'${name}'__'${i}
mkdir -p /docker/cluster/$name/node$i/minion.d
cp /docker/Docker/salt\ minion/minion.conf /docker/cluster/$name/node$i/minion.d/minion.conf
sed -i -e 's/id: minion-vm1/id: minion-'${minion_name}'/' /docker/cluster/$name/node$i/minion.d/minion.conf
sed -i -e 's/master: 172.17.0.2/master: '"${master_ip}"'/' /docker/cluster/$name/node$i/minion.d/minion.conf
cid=$(docker run -d --name=$minion_name -v /docker/cluster/$name/node$i/minion.d:/etc/salt/minion.d salt/minion) # check if container is create success
cid=$(docker ps| grep $minion_name$ | awk '{print $1}')
if [ -z $cid ];then
echo "node$i create faild!"
exit
fi
done # show the result
x='#'
echo "docker exec -it $mcid salt-key -L"
minion_name="minion-$minion_name"
for i in `seq `; do
printf "starting:[%-100s]%d%%\r" $x $i
x=#$x
node=$(docker exec -it $mcid salt-key -L | grep $minion_name)
if [ -n "$node" ];then
break
fi
sleep
done if [ $i -le ];then
while [ $i -le ]; do
printf "starting:[%-100s]%d%%\r" $x $i
x=#$x
i=$(($i+))
done
fi
printf "\n"
if [ -n "$node" ];then
echo "create cluster success"
else
echo "please check manually with command:\ndocker exec -it $mcid salt-key -L"
fi
执行脚本 sh ./create-cluster.sh master_name 5
# 创建一个集群,包含5个minion
4.检查创建是否成功
docker exec -it 54e509d81808 salt-key -L
# 执行结果如下
Accepted Keys:
minion-node__test__1
minion-node__test__2
minion-node__test__3
minion-node__test__4
minion-node__test__5
Denied Keys:
Unaccepted Keys:
Rejected Keys:
docker ps
# 执行结果如下
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77fb1000c0b3 salt/minion "salt-minion start" minutes ago Up minutes node__test__5
557a50f73902 salt/minion "salt-minion start" minutes ago Up minutes node__test__4
0c5dca2b207a salt/minion "salt-minion start" minutes ago Up minutes node__test__3
b08afc8fe496 salt/minion "salt-minion start" minutes ago Up minutes node__test__2
480d9b517766 salt/minion "salt-minion start" minutes ago Up minutes node__test__1
54e509d81808 salt/master "salt-master start" minutes ago Up minutes master__test
saltstack学习的更多相关文章
- saltstack学习篇
参考链接:http://sofar.blog.51cto.com/353572/1596960/ http://sofar.blog.51cto.com/353572/1596960/ 自动化运维工具 ...
- saltstack学习笔记1 --安装
salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...
- Saltstack学习之二:target与模块方法的运行
对象的管理 saltstack系统中我们的管理对象叫做target,在master上我们可以采用不同的target去管理不同的minion,这些target都是通过去管理和匹配minion的id来做的 ...
- saltstack学习之一:服务架构以及相关配置安装运行
概要 saltstack是基于Python开发的C/S架构的一款批量管理工具,底层采用动态的连接总线(ZeroMQ消息队列pub/sub方式通信),使用ssl证书签发的方式进行认证管理,使其可以用于编 ...
- Saltstack学习笔记--安装
实验环境: 两台RHEL 7.2 192.168.75.135 master .minion 192.168.75.136 minion 确保机器的防火墙及seli ...
- SaltStack学习笔记之安装zabbix_agentd(jinja和pillar)
一.环境说明 机器 IP 主机名 Master 192.168.0.23 minion.saltstack.com Minion 192.168.0.35 minion-node2.saltstack ...
- saltstack学习笔记--grains基本操作
查看当前已经定义的监控项: [root@master ~]# salt "192.168.75.135" grains.items 192.168.75.135: ---- ...
- SaltStack学习系列之State安装Nginx+PHP环境
目录结构 |-- pillar | |-- nginx | | `-- nginx.sls #nginx变量(key:value) | `-- top.sls `-- salt|-- init #初始 ...
- SaltStack学习系列之Nginx部署
目录结构 |-- nginx | |-- files #放包文件的 | | |-- admin_22.conf | | |-- fastcgi_params | | |-- jim_fix_param ...
随机推荐
- Ubantu下面命令听歌(豆瓣fm)
在Linux下一直是不太方便的事情,下面推荐一个方法: 终端中输入以下命令安装豆瓣fm: >> sudo pip install douban.fm >> sudo apt-g ...
- java中new关键字和newInstance()方法有什么区别?
1.new可以调用带参数的构造函数,newInstance不可以. 2.new 是 java 的关键字,用来构造一个类的实例.而 newInstance 是 Class 的一个方法,不过两个写法的效果 ...
- Servlet 获取 ApplicationContext
一般使用Spring完成了注入,在Service或SpringMVC 中可以通过注解的形式来获取 Spring的已经注入的Spring的bean如下所示: @Resource(name = " ...
- IDE-Sublime【1】-JsFormat插件格式化缩进问题
JsFormat插件格式化Javascript代码的快捷键是ctrl+alt+f,发现默认缩进2个空格,但习惯上是4个空格,这里需要手动设置一下. 操作步骤: 1.打开Preferences-> ...
- WPF画线问题,几千条以后就有明显的延迟了。
我现在是这么画的,class A { private GeometryGroup _lines; private Path _path; public A() { _path.Data = ...
- Boom.TV完成350万美元融资,目标直指VR电竞直播
3D在线电竞直播平台Boom.tv刚刚宣布已经完成350万美元的融资,该平台旨在让观众在任何设备以任意视角观看电竞比赛,并将支持VR版本. 这家位于美国加州红木城的初创公司成立于2015年,由Gupt ...
- Android 摇一摇 之 传感器片
要监视原始的传感器数据,你需要实现两个通过SensorEventListener接口暴露的回调方法:onAccuracyChanged()和onSensorChanged(). 传感器数据的速度值,这 ...
- Codeforces Round #245 (Div. 2) A - Points and Segments (easy)
水到家了 #include <iostream> #include <vector> #include <algorithm> using namespace st ...
- Codeforces Round #215 (Div. 2) A. Sereja and Coat Rack
#include <iostream> #include <vector> #include <algorithm> using namespace std; in ...
- ACM: HDU 1285 确定比赛名次 - 拓扑排序
HDU 1285 确定比赛名次 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...