Shipyard部署

shipyard是一个docker的管理平台,新版本更新后,功能有很大的提升。

部署方式:容器部署master+slave

一:管理端master部署:#sh shipyard_master.sh

shipyard_master.sh#!/bin/bash

#######################################

#Need Images

#shipyard/shipyard:latest

#swarm:latest

#ehazlett/docker-proxy:latest

#alpine:latest

#microbox/etcd:latest

#rethinkdb

#######################################

if [ "$1" != "" ] && [ "$1" = "-h" ]; then

echo "Shipyard Deploy uses the following environment variables:"

echo "  ACTION: this is the action to use (deploy, upgrade, node, remove)"

echo "  DISCOVERY: discovery system used by Swarm (only if using 'node' action)"

echo "  IMAGE: this overrides the default Shipyard p_w_picpath"

echo "  PREFIX: prefix for container names"

echo "  SHIPYARD_ARGS: these are passed to the Shipyard controller container as controller args"

echo "  TLS_CERT_PATH: path to certs to enable TLS for Shipyard"

echo "  PORT: specify the listen port for the controller (default: 8080)"

echo "  PROXY_PORT: port to run docker proxy (default: 2375)"

exit 1

fi

if [ -z "`which docker`" ]; then

echo "You must have the Docker CLI installed on your \$PATH"

echo "  See http://docs.docker.com for details"

exit 1

fi

ACTION=${ACTION:-deploy}

IMAGE=${IMAGE:-shipyard/shipyard:latest}

PREFIX=${PREFIX:-shipyard}

SHIPYARD_ARGS=${SHIPYARD_ARGS:-""}

TLS_CERT_PATH=${TLS_CERT_PATH:-}

CERT_PATH="/etc/shipyard"

PROXY_PORT=${PROXY_PORT:-2375}

SWARM_PORT=3375

SHIPYARD_PROTOCOL=http

SHIPYARD_PORT=${PORT:-8080}

DISCOVERY_BACKEND=etcd

DISCOVERY_PORT=4001

DISCOVERY_PEER_PORT=7001

ENABLE_TLS=0

CERT_FINGERPRINT=""

LOCAL_CA_CERT=""

LOCAL_SSL_CERT=""

LOCAL_SSL_KEY=""

LOCAL_SSL_CLIENT_CERT=""

LOCAL_SSL_CLIENT_KEY=""

SSL_CA_CERT=""

SSL_CERT=""

SSL_KEY=""

SSL_CLIENT_CERT=""

SSL_CLIENT_KEY=""

show_cert_help() {

echo "To use TLS in Shipyard, you must have existing certificates."

echo "The certs must be named ca.pem, server.pem, server-key.pem, cert.pem and key.pem"

echo "If you need to generate certificates, see https://github.com/ehazlett/certm for examples."

}

check_certs() {

if [ -z "$TLS_CERT_PATH" ]; then

return

fi

if [ ! -e $TLS_CERT_PATH ]; then

echo "Error: unable to find certificates in $TLS_CERT_PATH"

show_cert_help

exit 1

fi

if [ "$PROXY_PORT" = "2375" ]; then

PROXY_PORT=2376

fi

SWARM_PORT=3376

SHIPYARD_PROTOCOL=https

LOCAL_SSL_CA_CERT="$TLS_CERT_PATH/ca.pem"

LOCAL_SSL_CERT="$TLS_CERT_PATH/server.pem"

LOCAL_SSL_KEY="$TLS_CERT_PATH/server-key.pem"

LOCAL_SSL_CLIENT_CERT="$TLS_CERT_PATH/cert.pem"

LOCAL_SSL_CLIENT_KEY="$TLS_CERT_PATH/key.pem"

SSL_CA_CERT="$CERT_PATH/ca.pem"

SSL_CERT="$CERT_PATH/server.pem"

SSL_KEY="$CERT_PATH/server-key.pem"

SSL_CLIENT_CERT="$CERT_PATH/cert.pem"

SSL_CLIENT_KEY="$CERT_PATH/key.pem"

CERT_FINGERPRINT=$(openssl x509 -noout -in $LOCAL_SSL_CERT -fingerprint -sha256 | awk -F= '{print $2;}')

if [ ! -e $LOCAL_SSL_CA_CERT ] || [ ! -e $LOCAL_SSL_CERT ] || [ ! -e $LOCAL_SSL_KEY ] || [ ! -e $LOCAL_SSL_CLIENT_CERT ] || [ ! -e $LOCAL_SSL_CLIENT_KEY ]; then

echo "Error: unable to find certificates"

show_cert_help

exit 1

fi

ENABLE_TLS=1

}

# container functions

start_certs() {

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-certs \

-v $CERT_PATH \

alpine \

sh)

if [ $ENABLE_TLS = 1 ]; then

docker cp $LOCAL_SSL_CA_CERT $PREFIX-certs:$SSL_CA_CERT

docker cp $LOCAL_SSL_CERT $PREFIX-certs:$SSL_CERT

docker cp $LOCAL_SSL_KEY $PREFIX-certs:$SSL_KEY

docker cp $LOCAL_SSL_CLIENT_CERT $PREFIX-certs:$SSL_CLIENT_CERT

docker cp $LOCAL_SSL_CLIENT_KEY $PREFIX-certs:$SSL_CLIENT_KEY

fi

}

remove_certs() {

docker rm -fv $PREFIX-certs > /dev/null 2>&1

}

get_ip() {

SHIPYARD_IP=`docker run --rm --net=host alpine ip route get 8.8.8.8 | awk '{ print $7;  }'`

}

start_discovery() {

get_ip

ID=$(docker run \

-ti \

-d \

-p 4001:4001 \

-p 7001:7001 \

--restart=always \

--name $PREFIX-discovery \

microbox/etcd:latest -addr $SHIPYARD_IP:$DISCOVERY_PORT -peer-addr $SHIPYARD_IP:$DISCOVERY_PEER_PORT)

}

remove_discovery() {

docker rm -fv $PREFIX-discovery > /dev/null 2>&1

}

start_rethinkdb() {

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-rethinkdb \

rethinkdb)

}

remove_rethinkdb() {

docker rm -fv $PREFIX-rethinkdb > /dev/null 2>&1

}

start_proxy() {

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="-e SSL_CA=$SSL_CA_CERT -e SSL_CERT=$SSL_CERT -e SSL_KEY=$SSL_KEY -e SSL_SKIP_VERIFY=1"

fi

# Note: we add SSL_SKIP_VERIFY=1 to skip verification of the client

# certificate in the proxy p_w_picpath.  this will pass it to swarm that

# does verify.  this helps with performance and avoids certificate issues

# when running through the proxy.  ultimately if the cert is invalid

# swarm will fail to return.

ID=$(docker run \

-ti \

-d \

-p $PROXY_PORT:$PROXY_PORT \

--hostname=$HOSTNAME \

--restart=always \

--name $PREFIX-proxy \

-v /var/run/docker.sock:/var/run/docker.sock \

-e PORT=$PROXY_PORT \

--volumes-from=$PREFIX-certs $TLS_OPTS\

ehazlett/docker-proxy:latest)

}

remove_proxy() {

docker rm -fv $PREFIX-proxy > /dev/null 2>&1

}

start_swarm_manager() {

get_ip

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="--tlsverify --tlscacert=$SSL_CA_CERT --tlscert=$SSL_CERT --tlskey=$SSL_KEY"

fi

EXTRA_RUN_OPTS=""

if [ -z "$DISCOVERY" ]; then

DISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"

EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"

fi

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-swarm-manager \

--volumes-from=$PREFIX-certs $EXTRA_RUN_OPTS \

swarm:latest \

m --replication --addr $SHIPYARD_IP:$SWARM_PORT --host tcp://0.0.0.0:$SWARM_PORT $TLS_OPTS $DISCOVERY)

}

remove_swarm_manager() {

docker rm -fv $PREFIX-swarm-manager > /dev/null 2>&1

}

start_swarm_agent() {

get_ip

if [ -z "$DISCOVERY" ]; then

DISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"

EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"

fi

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-swarm-agent $EXTRA_RUN_OPTS \

swarm:latest \

j --addr $SHIPYARD_IP:$PROXY_PORT $DISCOVERY)

}

remove_swarm_agent() {

docker rm -fv $PREFIX-swarm-agent > /dev/null 2>&1

}

start_controller() {

#-v $CERT_PATH:/etc/docker:ro \

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="--tls-ca-cert $SSL_CA_CERT --tls-cert=$SSL_CERT --tls-key=$SSL_KEY --shipyard-tls-ca-cert=$SSL_CA_CERT --shipyard-tls-cert=$SSL_CERT --shipyard-tls-key=$SSL_KEY"

fi

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-controller \

--link $PREFIX-rethinkdb:rethinkdb \

--link $PREFIX-swarm-manager:swarm \

-p $SHIPYARD_PORT:$SHIPYARD_PORT \

--volumes-from=$PREFIX-certs \

$IMAGE \

--debug \

server \

--listen :$SHIPYARD_PORT \

-d tcp://swarm:$SWARM_PORT $TLS_OPTS $SHIPYARD_ARGS)

}

wait_for_available() {

set +e

IP=$1

PORT=$2

echo Waiting for Shipyard on $IP:$PORT

docker pull ehazlett/curl > /dev/null 2>&1

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="-k"

fi

until $(docker run --rm ehazlett/curl --output /dev/null --connect-timeout 1 --silent --head --fail $TLS_OPTS $SHIPYARD_PROTOCOL://$IP:$PORT/ > /dev/null 2>&1); do

printf '.'

sleep 1

done

printf '\n'

}

remove_controller() {

docker rm -fv $PREFIX-controller > /dev/null 2>&1

}

if [ "$ACTION" = "deploy" ]; then

set -e

check_certs

get_ip

echo "Deploying Shipyard"

echo " -> Starting Database"

start_rethinkdb

echo " -> Starting Discovery"

start_discovery

echo " -> Starting Cert Volume"

start_certs

echo " -> Starting Proxy"

start_proxy

echo " -> Starting Swarm Manager"

start_swarm_manager

echo " -> Starting Swarm Agent"

start_swarm_agent

echo " -> Starting Controller"

start_controller

wait_for_available $SHIPYARD_IP $SHIPYARD_PORT

echo "Shipyard available at $SHIPYARD_PROTOCOL://$SHIPYARD_IP:$SHIPYARD_PORT"

if [ $ENABLE_TLS = 1 ] && [ ! -z "$CERT_FINGERPRINT" ]; then

echo "SSL SHA-256 Fingerprint: $CERT_FINGERPRINT"

fi

echo "Username: admin Password: shipyard"

elif [ "$ACTION" = "node" ]; then

set -e

if [ -z "$DISCOVERY" ]; then

echo "You must set the DISCOVERY environment variable"

echo "with the discovery system used with Swarm"

exit 1

fi

check_certs

echo "Adding Node"

echo " -> Starting Cert Volume"

start_certs

echo " -> Starting Proxy"

start_proxy

echo " -> Starting Swarm Manager"

start_swarm_manager $DISCOVERY

echo " -> Starting Swarm Agent"

start_swarm_agent

echo "Node added to Swarm: $SHIPYARD_IP"

elif [ "$ACTION" = "upgrade" ]; then

set -e

check_certs

get_ip

echo "Upgrading Shipyard"

echo " -> Pulling $IMAGE"

docker pull $IMAGE

echo " -> Upgrading Controller"

remove_controller

start_controller

wait_for_available $SHIPYARD_IP 8080

echo "Shipyard controller updated"

elif [ "$ACTION" = "remove" ]; then

# ignore errors

set +e

echo "Removing Shipyard"

echo " -> Removing Database"

remove_rethinkdb

echo " -> Removing Discovery"

remove_discovery

echo " -> Removing Cert Volume"

remove_certs

echo " -> Removing Proxy"

remove_proxy

echo " -> Removing Swarm Agent"

remove_swarm_agent

echo " -> Removing Swarm Manager"

remove_swarm_manager

echo " -> Removing Controller"

remove_controller

echo "Done"

else

echo "Unknown action $ACTION"

exit 1

fi

二:部署slave端(添加host)#sh shipyard_slave.sh

shipyard_slave.sh   (修改DISCOVERY=etcd://master_ip:4001)

#!/bin/bash

#######################################

#Need Images

#shipyard/shipyard:latest

#swarm:latest

#ehazlett/docker-proxy:latest

#alpine:latest

#microbox/etcd:latest

#rethinkdb

#######################################

ACTION=node

#######################################

#IP is master ip

DISCOVERY=etcd://10.64.5.167:4001

#######################################

if [ "$1" != "" ] && [ "$1" = "-h" ]; then

echo "Shipyard Deploy uses the following environment variables:"

echo "  ACTION: this is the action to use (deploy, upgrade, node, remove)"

echo "  DISCOVERY: discovery system used by Swarm (only if using 'node' action)"

echo "  IMAGE: this overrides the default Shipyard p_w_picpath"

echo "  PREFIX: prefix for container names"

echo "  SHIPYARD_ARGS: these are passed to the Shipyard controller container as controller args"

echo "  TLS_CERT_PATH: path to certs to enable TLS for Shipyard"

echo "  PORT: specify the listen port for the controller (default: 8080)"

echo "  PROXY_PORT: port to run docker proxy (default: 2375)"

exit 1

fi

if [ -z "`which docker`" ]; then

echo "You must have the Docker CLI installed on your \$PATH"

echo "  See http://docs.docker.com for details"

exit 1

fi

ACTION=${ACTION:-deploy}

IMAGE=${IMAGE:-shipyard/shipyard:latest}

PREFIX=${PREFIX:-shipyard}

SHIPYARD_ARGS=${SHIPYARD_ARGS:-""}

TLS_CERT_PATH=${TLS_CERT_PATH:-}

CERT_PATH="/etc/shipyard"

PROXY_PORT=${PROXY_PORT:-2375}

SWARM_PORT=3375

SHIPYARD_PROTOCOL=http

SHIPYARD_PORT=${PORT:-8080}

DISCOVERY_BACKEND=etcd

DISCOVERY_PORT=4001

DISCOVERY_PEER_PORT=7001

ENABLE_TLS=0

CERT_FINGERPRINT=""

LOCAL_CA_CERT=""

LOCAL_SSL_CERT=""

LOCAL_SSL_KEY=""

LOCAL_SSL_CLIENT_CERT=""

LOCAL_SSL_CLIENT_KEY=""

SSL_CA_CERT=""

SSL_CERT=""

SSL_KEY=""

SSL_CLIENT_CERT=""

SSL_CLIENT_KEY=""

show_cert_help() {

echo "To use TLS in Shipyard, you must have existing certificates."

echo "The certs must be named ca.pem, server.pem, server-key.pem, cert.pem and key.pem"

echo "If you need to generate certificates, see https://github.com/ehazlett/certm for examples."

}

check_certs() {

if [ -z "$TLS_CERT_PATH" ]; then

return

fi

if [ ! -e $TLS_CERT_PATH ]; then

echo "Error: unable to find certificates in $TLS_CERT_PATH"

show_cert_help

exit 1

fi

if [ "$PROXY_PORT" = "2375" ]; then

PROXY_PORT=2376

fi

SWARM_PORT=3376

SHIPYARD_PROTOCOL=https

LOCAL_SSL_CA_CERT="$TLS_CERT_PATH/ca.pem"

LOCAL_SSL_CERT="$TLS_CERT_PATH/server.pem"

LOCAL_SSL_KEY="$TLS_CERT_PATH/server-key.pem"

LOCAL_SSL_CLIENT_CERT="$TLS_CERT_PATH/cert.pem"

LOCAL_SSL_CLIENT_KEY="$TLS_CERT_PATH/key.pem"

SSL_CA_CERT="$CERT_PATH/ca.pem"

SSL_CERT="$CERT_PATH/server.pem"

SSL_KEY="$CERT_PATH/server-key.pem"

SSL_CLIENT_CERT="$CERT_PATH/cert.pem"

SSL_CLIENT_KEY="$CERT_PATH/key.pem"

CERT_FINGERPRINT=$(openssl x509 -noout -in $LOCAL_SSL_CERT -fingerprint -sha256 | awk -F= '{print $2;}')

if [ ! -e $LOCAL_SSL_CA_CERT ] || [ ! -e $LOCAL_SSL_CERT ] || [ ! -e $LOCAL_SSL_KEY ] || [ ! -e $LOCAL_SSL_CLIENT_CERT ] || [ ! -e $LOCAL_SSL_CLIENT_KEY ]; then

echo "Error: unable to find certificates"

show_cert_help

exit 1

fi

ENABLE_TLS=1

}

# container functions

start_certs() {

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-certs \

-v $CERT_PATH \

alpine \

sh)

if [ $ENABLE_TLS = 1 ]; then

docker cp $LOCAL_SSL_CA_CERT $PREFIX-certs:$SSL_CA_CERT

docker cp $LOCAL_SSL_CERT $PREFIX-certs:$SSL_CERT

docker cp $LOCAL_SSL_KEY $PREFIX-certs:$SSL_KEY

docker cp $LOCAL_SSL_CLIENT_CERT $PREFIX-certs:$SSL_CLIENT_CERT

docker cp $LOCAL_SSL_CLIENT_KEY $PREFIX-certs:$SSL_CLIENT_KEY

fi

}

remove_certs() {

docker rm -fv $PREFIX-certs > /dev/null 2>&1

}

get_ip() {

SHIPYARD_IP=`docker run --rm --net=host alpine ip route get 8.8.8.8 | awk '{ print $7;  }'`

}

start_discovery() {

get_ip

ID=$(docker run \

-ti \

-d \

-p 4001:4001 \

-p 7001:7001 \

--restart=always \

--name $PREFIX-discovery \

microbox/etcd:latest -addr $SHIPYARD_IP:$DISCOVERY_PORT -peer-addr $SHIPYARD_IP:$DISCOVERY_PEER_PORT)

}

remove_discovery() {

docker rm -fv $PREFIX-discovery > /dev/null 2>&1

}

start_rethinkdb() {

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-rethinkdb \

rethinkdb)

}

remove_rethinkdb() {

docker rm -fv $PREFIX-rethinkdb > /dev/null 2>&1

}

start_proxy() {

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="-e SSL_CA=$SSL_CA_CERT -e SSL_CERT=$SSL_CERT -e SSL_KEY=$SSL_KEY -e SSL_SKIP_VERIFY=1"

fi

# Note: we add SSL_SKIP_VERIFY=1 to skip verification of the client

# certificate in the proxy p_w_picpath.  this will pass it to swarm that

# does verify.  this helps with performance and avoids certificate issues

# when running through the proxy.  ultimately if the cert is invalid

# swarm will fail to return.

ID=$(docker run \

-ti \

-d \

-p $PROXY_PORT:$PROXY_PORT \

--hostname=$HOSTNAME \

--restart=always \

--name $PREFIX-proxy \

-v /var/run/docker.sock:/var/run/docker.sock \

-e PORT=$PROXY_PORT \

--volumes-from=$PREFIX-certs $TLS_OPTS\

ehazlett/docker-proxy:latest)

}

remove_proxy() {

docker rm -fv $PREFIX-proxy > /dev/null 2>&1

}

start_swarm_manager() {

get_ip

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="--tlsverify --tlscacert=$SSL_CA_CERT --tlscert=$SSL_CERT --tlskey=$SSL_KEY"

fi

EXTRA_RUN_OPTS=""

if [ -z "$DISCOVERY" ]; then

DISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"

EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"

fi

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-swarm-manager \

--volumes-from=$PREFIX-certs $EXTRA_RUN_OPTS \

swarm:latest \

m --replication --addr $SHIPYARD_IP:$SWARM_PORT --host tcp://0.0.0.0:$SWARM_PORT $TLS_OPTS $DISCOVERY)

}

remove_swarm_manager() {

docker rm -fv $PREFIX-swarm-manager > /dev/null 2>&1

}

start_swarm_agent() {

get_ip

if [ -z "$DISCOVERY" ]; then

DISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"

EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"

fi

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-swarm-agent $EXTRA_RUN_OPTS \

swarm:latest \

j --addr $SHIPYARD_IP:$PROXY_PORT $DISCOVERY)

}

remove_swarm_agent() {

docker rm -fv $PREFIX-swarm-agent > /dev/null 2>&1

}

start_controller() {

#-v $CERT_PATH:/etc/docker:ro \

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="--tls-ca-cert $SSL_CA_CERT --tls-cert=$SSL_CERT --tls-key=$SSL_KEY --shipyard-tls-ca-cert=$SSL_CA_CERT --shipyard-tls-cert=$SSL_CERT --shipyard-tls-key=$SSL_KEY"

fi

ID=$(docker run \

-ti \

-d \

--restart=always \

--name $PREFIX-controller \

--link $PREFIX-rethinkdb:rethinkdb \

--link $PREFIX-swarm-manager:swarm \

-p $SHIPYARD_PORT:$SHIPYARD_PORT \

--volumes-from=$PREFIX-certs \

$IMAGE \

--debug \

server \

--listen :$SHIPYARD_PORT \

-d tcp://swarm:$SWARM_PORT $TLS_OPTS $SHIPYARD_ARGS)

}

wait_for_available() {

set +e

IP=$1

PORT=$2

echo Waiting for Shipyard on $IP:$PORT

docker pull ehazlett/curl > /dev/null 2>&1

TLS_OPTS=""

if [ $ENABLE_TLS = 1 ]; then

TLS_OPTS="-k"

fi

until $(docker run --rm ehazlett/curl --output /dev/null --connect-timeout 1 --silent --head --fail $TLS_OPTS $SHIPYARD_PROTOCOL://$IP:$PORT/ > /dev/null 2>&1); do

printf '.'

sleep 1

done

printf '\n'

}

remove_controller() {

docker rm -fv $PREFIX-controller > /dev/null 2>&1

}

if [ "$ACTION" = "deploy" ]; then

set -e

check_certs

get_ip

echo "Deploying Shipyard"

echo " -> Starting Database"

start_rethinkdb

echo " -> Starting Discovery"

start_discovery

echo " -> Starting Cert Volume"

start_certs

echo " -> Starting Proxy"

start_proxy

echo " -> Starting Swarm Manager"

start_swarm_manager

echo " -> Starting Swarm Agent"

start_swarm_agent

echo " -> Starting Controller"

start_controller

wait_for_available $SHIPYARD_IP $SHIPYARD_PORT

echo "Shipyard available at $SHIPYARD_PROTOCOL://$SHIPYARD_IP:$SHIPYARD_PORT"

if [ $ENABLE_TLS = 1 ] && [ ! -z "$CERT_FINGERPRINT" ]; then

echo "SSL SHA-256 Fingerprint: $CERT_FINGERPRINT"

fi

echo "Username: admin Password: shipyard"

elif [ "$ACTION" = "node" ]; then

set -e

if [ -z "$DISCOVERY" ]; then

echo "You must set the DISCOVERY environment variable"

echo "with the discovery system used with Swarm"

exit 1

fi

check_certs

echo "Adding Node"

echo " -> Starting Cert Volume"

start_certs

echo " -> Starting Proxy"

start_proxy

echo " -> Starting Swarm Manager"

start_swarm_manager $DISCOVERY

echo " -> Starting Swarm Agent"

start_swarm_agent

echo "Node added to Swarm: $SHIPYARD_IP"

elif [ "$ACTION" = "upgrade" ]; then

set -e

check_certs

get_ip

echo "Upgrading Shipyard"

echo " -> Pulling $IMAGE"

docker pull $IMAGE

echo " -> Upgrading Controller"

remove_controller

start_controller

wait_for_available $SHIPYARD_IP 8080

echo "Shipyard controller updated"

elif [ "$ACTION" = "remove" ]; then

# ignore errors

set +e

echo "Removing Shipyard"

echo " -> Removing Database"

remove_rethinkdb

echo " -> Removing Discovery"

remove_discovery

echo " -> Removing Cert Volume"

remove_certs

echo " -> Removing Proxy"

remove_proxy

echo " -> Removing Swarm Agent"

remove_swarm_agent

echo " -> Removing Swarm Manager"

remove_swarm_manager

echo " -> Removing Controller"

remove_controller

echo "Done"

else

echo "Unknown action $ACTION"

exit 1

fi

php curlesslcacert,Shipyard集群化docker管理平台部署相关推荐

  1. Rancher集群化docker管理平台部署、特性及破坏性测试。

    http://8941355.blog.51cto.com/8931355/1712683 rancher是一个docker集群化管理平台,相对于mesos和k8s架构,rancher的部署管理非常简 ...

  2. 【360开源】Wayne:企业级可视化多集群Kubernetes一站式管理平台

    宣言 Wayne是由360搜索云平台团队开发的,一个通用的.基于Web的Kubernetes多集群一站式可视化管理平台.内置了丰富多样的功能,满足企业的通用需求,同时插件化的方式可以方便集成定制化功能 ...

  3. 发布一个免费的 Elasticsearch 多集群监控和管理平台 - 极限数据平台

    随着单个 Elasticsearch 集群规模的越来越大,大家要么在拆集群的路上,要么是已经是多套集群了, 据路边社消息,一个公司超过5个集群的情况已经变得非常普遍,而管理多个集群着实是有点痛苦,比如 ...

  4. 【云原生】第十篇--Docker主机集群化方案 Docker Swarm

    Docker主机集群化方案 Docker Swarm 一.docker swarm介绍 二.docker swarm概念与架构 2.1 架构 2.2 概念 三.docker swarm集群部署 3.1 ...

  5. docker.10-Docker主机集群化方案 Docker Swarm

    Docker主机集群化方案 Docker Swarm 一.docker swarm介绍 Docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个 ...

  6. Docker Swarm集群secrets中管理敏感数据

    在Swarm集群中管理敏感数据 以往管理敏感数据的姿势通常是 密钥放镜像中.设置环境变量.volume动态挂载等.Docker目前提供了secrets管理功能,用户可以在Swarm集群中安全地管理密码 ...

  7. docker集群——介绍Mesos+Zookeeper+Marathon的Docker管理平台

    容器为用户打开了一扇通往新世界的大门,真正进入这个容器的世界后,却发现新的生态系统如此庞大.在生产使用中,不论个人还是企业,都会提出更复杂的需求.这时,我们需要众多跨主机的容器协同工作,需要支持各种类 ...

  8. .netcore 如何获取系统中所有session_集群化部署,Spring Security 要如何处理 session 共享?

    前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我 ...

  9. rancher安装mysql_四、rancher搭建Mysql集群化部署,做到同步备份

    一.Rancher基础镜像查找: 1.基础镜像操作地址:https://hub.docker.com/r/library/mariadb/ 2.选择自己需要的镜像进行搜索,里面有对应版本:也有最新的如 ...

  10. 如何实现 集群化/Session 复制-doc(cluster-howto.html)

    源文档链接: http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 翻译日期: 2014年3月19日 翻译人员: 铁锚 感受: Tomc ...

最新文章

  1. vim删除文件所有内容
  2. linux c 内存操作函数 简介
  3. vue 中使用promise
  4. 概率统计笔记:威沙特分布(Wishart Distribution)
  5. 更改IE浏览器默认的源文件编辑器
  6. SugarCRM 在Html中增加超连接按钮
  7. Java线程同步的一些例子
  8. word文档相关使用
  9. python实现简单小游戏_python实现简单井字棋小游戏
  10. python绘制三维图散点图_python matplotlib模块——绘制三维图形、三维数据散点图...
  11. Android7.1 audio 播放流程(三十五)
  12. Careercup - Facebook面试题 - 4907555595747328
  13. Atitit usrQC27模块化的规范模块化法 v4 t77 目录 1. 模块化层级(软件项目 1 1.1. 子项目》命名空间package机制》类》类文件》方法函数级别》语句 1 2. 常见的
  14. oracle驱动的区别吗,oracle10g下JDBC驱动包的区别
  15. Chrome谷歌浏览器离线安装包下载
  16. matlab下载ar人脸库,AR ar人脸数据库,经典的 用于 检测与识别。 Graph Recognize 图形/文字 274万源代码下载- www.pudn.com...
  17. 视频会议软件Zoom存在安全隐患,我们是否需要停止使用
  18. DPDK 无锁ring, 详解
  19. mac宽带连接找不到pppoe服务器,macbookAIR 使用以太网转接头连接宽带… - Apple 社区...
  20. scratch躲避球

热门文章

  1. 刘夏真的简历中国科学院计算机所,刘夏_广西医科大学研究生导师信息
  2. cpan mysql dbd_安装PERL cpan DBD::mysql错误笔记
  3. VSCode 的扩展包C/C++ IntelliSense, debugging, and code browsing的IntelliSense功能无法使用,远程服务器linux上面的不能用
  4. 计科实训 餐馆点菜系统
  5. linux 输入两个命令,Linux两条命令touch、vi
  6. PS图片中字体或图像的颜色替换
  7. 立创eda学习笔记一:pcb板基础知识
  8. 银河麒麟V10 远程桌面
  9. aardio部署_aardio学习笔记-变量与常量
  10. APP界面设计规范:如何定义视觉规范