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. node read file fs

    var fs = require("fs") fs.readFile("file.txt","UTF-8",function(err,dat ...

  2. 九校联考 终&启

    one term's ending... class:12 school:130...130...130... 至今没有看到九校的排名,如果九校排名正常的话,那yyhs的学生也太可怕了...估计要三百 ...

  3. Mongoose学习参考文档——基础篇

    Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model ...

  4. UVA 393

    The Doors Description You are to find the length of the shortest path through a chamber containing o ...

  5. Leetcode Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  6. Codeforces Beta Round #35 (Div. 2) E. Parade(扫描线)

    题目链接 只要会做,周长并,这题肯定有思路. 有个小地方敲错了,细心啊,扫描线,有一段时间没写过了,还有注意排序的问题,很重要. #include <iostream> #include ...

  7. Android -- 简单广播接收与发送(1)

    1. 效果图

  8. Maven_非法字符: '\ufeff' 解决方案

    Idea在maven打包时报非法字符: '\ufeff' ,但打开报错的类看没有问题,后来发现是隐蔽字符BOM的问题,解决办法是用Notepad++打开这个类,然后改变编码格式为UTF-8  无DOM ...

  9. Jquery_AjaxFileUpload插件的使用记录

    功能需求:Spring MVC框架下,实现无刷新页面上传图片,并展示图片预览效果 直接上代码: 1.图片预览效果 <%@ page contentType="text/html;cha ...

  10. 基于SVG的JS地图插件

    一:D3(Data-Driven Documents) 官网地址:http://d3js.org/ 功能非常强大(不支持IE8) D3 是最流行的可视化库之一,它被很多其他的表格插件所使用.它允许绑定 ...