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. zoom作用

    转自:http://www.cnblogs.com/top5/archive/2011/07/11/2103343.html css中的zoom的作用1.检查页面的标签是否闭合不要小看这条,也许折腾了 ...

  2. [bzoj2118]墨墨的等式【dijk+堆】

    10/30的update:如果是冲着dijk的板子来的,建议看多校联考contest中第二场day2的T2,那边的写法比较优秀... --------------------------------- ...

  3. 关于把世界坐标投射到屏幕上转换为屏幕2D坐标

    如果使用使用Project World to Screen 在一些分辨率一下就出现坐标错误. 比如我设置的UMG分辨率为1280*720,但是他的(1280,720)的坐标并不在UMG的右下角的边缘上 ...

  4. django 安装

    git clone https://github.com/django/django.git 或者到django的官网下载 然后 python setup.py install

  5. Android开发之详解五大布局

    http://bbs.chinaunix.net/thread-3654213-1-1.html 为了适应各式各样的界面风格,Android系统提供了5种布局,这5种布局分别是: LinearLayo ...

  6. Notification Once

    Notification Once 前段时间整理项目中的AppDelegate,发现很多写在- application:didFinishLaunchingWithOptions:中的代码都只是为了在 ...

  7. 六、雪花《苹果iOS实例编程入门教程》

    该app为应用的功能为制作一场雪景 现版本 SDK 8.4 Xcode 纲要:- UIImageView 的运用- onTimer 代码运用- onAnimation 代码运用 运行Xcode 选择 ...

  8. Go语言练习:网络编程实例——简易图片上传网站

    1.代码结构 2.运行实例 1.代码结构 $ tree . ├── photoweb.go ├── public │   ├── css │   ├── images │   └── js ├── u ...

  9. nmap的script参数列表

    在新的nmap版本中,添加了script功能的使用.在nmap的安装目录的share/nmap/scripts中,已经有将61个写好的脚本提供. 具体的用法可以参考:http://nmap.org/b ...

  10. Ajax注册验证js代码

    分享jquery网站:http://www.css88.com/jqapi-1.9/focusout/ $(document).ready(function() { var bool_user = f ...