1. 创建基础镜像

2. 创建配置文件

3. 启动容器

4. 检查创建是否成功

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学习的更多相关文章

  1. saltstack学习篇

    参考链接:http://sofar.blog.51cto.com/353572/1596960/ http://sofar.blog.51cto.com/353572/1596960/ 自动化运维工具 ...

  2. saltstack学习笔记1 --安装

    salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...

  3. Saltstack学习之二:target与模块方法的运行

    对象的管理 saltstack系统中我们的管理对象叫做target,在master上我们可以采用不同的target去管理不同的minion,这些target都是通过去管理和匹配minion的id来做的 ...

  4. saltstack学习之一:服务架构以及相关配置安装运行

    概要 saltstack是基于Python开发的C/S架构的一款批量管理工具,底层采用动态的连接总线(ZeroMQ消息队列pub/sub方式通信),使用ssl证书签发的方式进行认证管理,使其可以用于编 ...

  5. Saltstack学习笔记--安装

    实验环境: 两台RHEL 7.2 192.168.75.135          master .minion 192.168.75.136          minion 确保机器的防火墙及seli ...

  6. SaltStack学习笔记之安装zabbix_agentd(jinja和pillar)

    一.环境说明 机器 IP 主机名 Master 192.168.0.23 minion.saltstack.com Minion 192.168.0.35 minion-node2.saltstack ...

  7. saltstack学习笔记--grains基本操作

    查看当前已经定义的监控项: [root@master ~]# salt "192.168.75.135" grains.items 192.168.75.135:     ---- ...

  8. SaltStack学习系列之State安装Nginx+PHP环境

    目录结构 |-- pillar | |-- nginx | | `-- nginx.sls #nginx变量(key:value) | `-- top.sls `-- salt|-- init #初始 ...

  9. SaltStack学习系列之Nginx部署

    目录结构 |-- nginx | |-- files #放包文件的 | | |-- admin_22.conf | | |-- fastcgi_params | | |-- jim_fix_param ...

随机推荐

  1. 利用StringList对象来管理这些动态生成的对象

    如果程序需要动态创建大量的对象,那么我们可以利用StringList对象来管理这些动态生成的对象.1.创建StringList对象:OBJ := TStringList.Create; 2.保存动态生 ...

  2. JS实现选择不同select标签option值的验证

    js实现不同select标签option值的验证 功能描述: 选择中文时,匹配中文的正则表达式,选择英文选项是匹配英文的表达式,并且有对应的提示信息. html代码片段: <select id= ...

  3. OpenCV播放视频带滚动条(3)

      演示 :一个带有滚动条的播放视频的代码.   #include "stdafx.h" #include <opencv2/core/core.hpp> #inclu ...

  4. POST和GET的区别

    1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过H ...

  5. 20145308刘昊阳 《Java程序设计》实验四 Android环境搭建 实验报告

    20145308刘昊阳 <Java程序设计>实验四 Android环境搭建 实验报告 实验名称 Android环境搭建 实验内容 搭建Android环境 运行Android 修改代码,能输 ...

  6. topcoder SRM 623 DIV2 CatchTheBeatEasy

    比较简单的一题,纠结比较久的是把my_cmp和my_minus放在类中,利用sort函数会出现 no matching function for call to ""sort(st ...

  7. Android -- shape 定义控件的属性

    <shape> <!-- 实心 --> <solid android:color="#ff9d77"/> <!-- 渐变 --> & ...

  8. Java教程-Java 程序员们值得一看的好书推荐

    学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资 ...

  9. LongListSelector with bindable SelectedItem

    using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using Microso ...

  10. Eclipse for Mac 常用快捷键

    为了提高开发效率,Eclipse 为我们提供了许多快捷键,它们能够帮助我们快速和方便的完成一些繁琐的操作.在这里只提供 Eclipse for Mac 的常用快捷键. Command + O:显示大纲 ...