• saltstack学习


    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"]
    View Code

    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"]
    View Code

    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'
    View Code

    salt-minion conf,文件名minion.conf

    master: 172.17.0.2
    id: minion-vm1
    hash_type: sha256
    View Code

    3. 启动容器

    使用shell脚本启动,文件名称create-cluster.sh

    #!/bin/bash
    # must be 2 args
    if [ $# -lt 2 ];then
        echo "usage $0 master_name num_of_minion"
        exit
    fi
    
    name=$1
    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 0 ] 2>/dev/null;then 
        echo "there will be create $2 minion." 
        num=$2
    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 100`; do
        printf "starting:[%-100s]%d%%
    " $x $i
        x=#$x
        node=$(docker exec -it $mcid salt-key -L | grep $minion_name)
        if [ -n "$node" ];then
             break
        fi
        sleep 5
    done
    
    if [ $i -le 100 ];then
        while [ $i -le 100 ]; do
            printf "starting:[%-100s]%d%%
    " $x $i
            x=#$x
            i=$(($i+1))
        done
    fi
    printf "
    "
    if [ -n "$node" ];then
        echo "create cluster success"
    else
        echo "please check manually with command:
    docker exec -it $mcid salt-key -L"
    fi
          
    View Code

    执行脚本 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"   32 minutes ago      Up 32 minutes                           node__test__5
    557a50f73902        salt/minion         "salt-minion start"   32 minutes ago      Up 32 minutes                           node__test__4
    0c5dca2b207a        salt/minion         "salt-minion start"   32 minutes ago      Up 32 minutes                           node__test__3
    b08afc8fe496        salt/minion         "salt-minion start"   32 minutes ago      Up 32 minutes                           node__test__2
    480d9b517766        salt/minion         "salt-minion start"   32 minutes ago      Up 32 minutes                           node__test__1
    54e509d81808        salt/master         "salt-master start"   32 minutes ago      Up 32 minutes                           master__test
  • 相关阅读:
    《最小割模型在信息学竞赛中的应用》最大权闭合图
    《最小割模型在信息学竞赛中的应用》最优标号
    《最小割模型在信息学竞赛中的应用》网络战争
    P3254 圆桌问题
    P2766 最长不下降子序列问题
    P2754 星际转移问题
    洛谷P2756 飞行员配对方案问题
    状态压缩dp 炮兵阵地
    状态压缩—玉米田
    CCF 202006-2 稀疏向量
  • 原文地址:https://www.cnblogs.com/liubin0509/p/6183501.html
Copyright © 2020-2023  润新知