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 ...
随机推荐
- node read file fs
var fs = require("fs") fs.readFile("file.txt","UTF-8",function(err,dat ...
- 九校联考 终&启
one term's ending... class:12 school:130...130...130... 至今没有看到九校的排名,如果九校排名正常的话,那yyhs的学生也太可怕了...估计要三百 ...
- Mongoose学习参考文档——基础篇
Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model ...
- UVA 393
The Doors Description You are to find the length of the shortest path through a chamber containing o ...
- 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 ...
- Codeforces Beta Round #35 (Div. 2) E. Parade(扫描线)
题目链接 只要会做,周长并,这题肯定有思路. 有个小地方敲错了,细心啊,扫描线,有一段时间没写过了,还有注意排序的问题,很重要. #include <iostream> #include ...
- Android -- 简单广播接收与发送(1)
1. 效果图
- Maven_非法字符: '\ufeff' 解决方案
Idea在maven打包时报非法字符: '\ufeff' ,但打开报错的类看没有问题,后来发现是隐蔽字符BOM的问题,解决办法是用Notepad++打开这个类,然后改变编码格式为UTF-8 无DOM ...
- Jquery_AjaxFileUpload插件的使用记录
功能需求:Spring MVC框架下,实现无刷新页面上传图片,并展示图片预览效果 直接上代码: 1.图片预览效果 <%@ page contentType="text/html;cha ...
- 基于SVG的JS地图插件
一:D3(Data-Driven Documents) 官网地址:http://d3js.org/ 功能非常强大(不支持IE8) D3 是最流行的可视化库之一,它被很多其他的表格插件所使用.它允许绑定 ...