swarm-run.sh

#/bin/bash
   
  DOCKER_MACHINE_DRIVER=virtualbox
   
  function create_kvstore {
  echo
  echo "Preparing Key-Value store: etcd ..."
  echo
   
  docker-machine create -d ${DOCKER_MACHINE_DRIVER} swarm-kvstore
   
  eval $(docker-machine env swarm-kvstore)
   
  KVSTORE_IP=$(docker-machine ip swarm-kvstore)
   
  set -xe
  docker run -d \
  -p 2379:2379 -p 2380:2380 -p 4001:4001 \
  --name etcd \
  quay.io/coreos/etcd:v2.3.7 \
  --listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \
  --advertise-client-urls http://${KVSTORE_IP}:2379,http://${KVSTORE_IP}:4001 \
  --initial-advertise-peer-urls http://${KVSTORE_IP}:2380 \
  --initial-cluster default=http://${KVSTORE_IP}:2380 \
  --listen-peer-urls http://0.0.0.0:2380
  set +xe
   
  export KVSTORE="etcd://${KVSTORE_IP}:2379,${KVSTORE_IP}:4001/"
  echo "Key-Value Store is ${KVSTORE}"
  echo "export KVSTORE=${KVSTORE}" > .kvstore.env
  }
   
  function create_node {
  NAME=$1
   
  set -xe
  docker-machine create -d ${DOCKER_MACHINE_DRIVER} \
  --engine-opt="cluster-store=${KVSTORE}" \
  --engine-opt="cluster-advertise=eth1:2376" \
  ${NAME}
  set +xe
  }
   
  function create_nodes {
  Size=$1
  shift
  if [[ ${Size} =~ ^[0-9]+$ ]]; then
  for i in $(seq 0 ${Size})
  do
  create_node "swarm-node${i}"
  done
  else
  echo "Usage: create nodes <size>"
  fi
  }
   
  function create_swarm_manager {
  Node=0
   
  eval $(docker-machine env swarm-node${Node})
   
  set -xe
  docker run -d -t \
  --name swarm_master \
  --restart=always \
  -v /var/lib/boot2docker:/certs:ro \
  -p 3376:3376 \
  swarm manage \
  -H 0.0.0.0:3376 \
  --tlsverify \
  --tlscacert=/certs/ca.pem \
  --tlscert=/certs/server.pem \
  --tlskey=/certs/server-key.pem \
  --advertise $(docker-machine ip swarm-node${Node}):3376 \
  ${KVSTORE}
  set +xe
  }
   
  function create_swarm_worker {
  Node=$1
   
  eval $(docker-machine env swarm-node${Node})
   
  set -xe
  docker run -d \
  --name swarm_worker \
  --restart=always \
  swarm join \
  --advertise $(docker-machine ip swarm-node${Node}):2376 \
  ${KVSTORE}
  set +xe
  }
   
  function create_swarm_workers {
  Size=$1
  shift
  if [[ ${Size} =~ ^[0-9]+$ ]]; then
  for i in $(seq ${Size})
  do
  create_swarm_worker ${i}
  done
  else
  echo "Usage: create workers <size>"
  fi
  }
   
  function create {
  Command=$1
  shift
   
  if [[ -f ".kvstore.env" ]]; then
  source .kvstore.env
  fi
   
  case "${Command}" in
  kvstore) create_kvstore ;;
  nodes) create_nodes $@ ;;
  manager) create_swarm_manager ;;
  workers) create_swarm_workers $@ ;;
  *) echo "Usage: create {kvstore|nodes|manager|workers}" ;;
  esac
  }
   
  function remove_nodes {
  Size=$1
  shift
  if [[ ${Size} =~ ^[0-9]+$ ]]; then
  for i in $(seq 0 ${Size})
  do
  docker-machine rm -y swarm-node${i}
  done
  else
  echo "Usage: remove nodes <size>"
  exit 1
  fi
   
  }
  function remove_swarm {
  Size=$1
  shift
  if [[ ${Size} =~ ^[0-9]+$ ]]; then
  for i in $(seq ${Size})
  do
  eval $(docker-machine env swarm-node${i})
  docker rm -f swarm_worker
  done
  else
  echo "Usage: remove swarm <size>"
  exit 1
  fi
   
  eval $(docker-machine env swarm-node0)
  docker rm -f swarm_master
  }
   
  function remove {
  Command=$1
  shift
  case "${Command}" in
  kvstore)
  docker-machine rm swarm-kvstore
  rm -f .kvstore.env
  ;;
  nodes) remove_nodes $@ ;;
  swarm) remove_swarm $@ ;;
  *) echo "Usage: remove {kvstore|nodes|swarm}" ;;
  esac
  }
   
  function swarm_env {
  case "$1" in
  "")
  echo "export DOCKER_TLS_VERIFY=1"
  echo "export DOCKER_HOST=tcp://$(docker-machine ip swarm-node0):3376"
  echo "export DOCKER_CERT_PATH=$HOME/.docker/machine/machines/swarm-node0"
  echo "# eval \$($0 env)"
  ;;
  "--unset")
  echo "unset DOCKER_TLS_VERIFY"
  echo "unset DOCKER_HOST"
  echo "unset DOCKER_CERT_PATH"
  echo "# eval \$($0 env --unset)"
  ;;
  *)
  echo "Usage: env [--unset]" ;;
  esac
  }
   
  function usage {
  echo "Usage: $0 {create|remove|list|env}"
  echo
  echo "Example:"
  echo " $0 create kvstore"
  echo " $0 create nodes 3"
  echo " $0 create manager"
  echo " $0 create workers 3"
  echo " $0 list"
  echo " eval \$($0 env)"
  echo " docker info"
  echo " docker run ..."
  echo " eval \$($0 env --unset)"
  echo " $0 remove nodes 3"
  echo " $0 remove kvstore"
  }
   
  function main {
  Command=$1
  shift
  case "${Command}" in
  create) create $@ ;;
  remove) remove $@ ;;
  list) docker-machine ls | grep "swarm-" ;;
  env) swarm_env $@ ;;
  *) usage $@ ;;
  esac
  }
   
  main $@
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值