diff --git a/cluster/ubuntu/build.sh b/cluster/ubuntu/build.sh index 0908c138e0f..2de21889d81 100755 --- a/cluster/ubuntu/build.sh +++ b/cluster/ubuntu/build.sh @@ -26,12 +26,15 @@ function cleanup { } trap cleanup SIGHUP SIGINT SIGTERM +KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. +pushd ${KUBE_ROOT}/cluster/ubuntu + mkdir -p binaries/master mkdir -p binaries/minion # flannel -echo "Download flannel release ..." FLANNEL_VERSION=${FLANNEL_VERSION:-"0.4.0"} +echo "Prepare flannel ${FLANNEL_VERSION} release ..." if [ ! -f flannel.tar.gz ] ; then curl -L https://github.com/coreos/flannel/releases/download/v${FLANNEL_VERSION}/flannel-${FLANNEL_VERSION}-linux-amd64.tar.gz -o flannel.tar.gz tar xzf flannel.tar.gz @@ -40,11 +43,9 @@ cp flannel-${FLANNEL_VERSION}/flanneld binaries/master cp flannel-${FLANNEL_VERSION}/flanneld binaries/minion # ectd -echo "Download etcd release ..." - ETCD_VERSION=${ETCD_VERSION:-"2.0.12"} ETCD="etcd-v${ETCD_VERSION}-linux-amd64" - +echo "Prepare etcd ${ETCD_VERSION} release ..." if [ ! -f etcd.tar.gz ] ; then curl -L https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${ETCD}.tar.gz -o etcd.tar.gz tar xzf etcd.tar.gz @@ -52,9 +53,8 @@ fi cp $ETCD/etcd $ETCD/etcdctl binaries/master # k8s -echo "Download kubernetes release ..." KUBE_VERSION=${KUBE_VERSION:-"1.0.3"} - +echo "Prepare kubernetes ${KUBE_VERSION} release ..." if [ ! -f kubernetes.tar.gz ] ; then curl -L https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v${KUBE_VERSION}/kubernetes.tar.gz -o kubernetes.tar.gz tar xzf kubernetes.tar.gz @@ -73,4 +73,5 @@ cp kubernetes/server/kubernetes/server/bin/kubectl binaries/ rm -rf flannel* kubernetes* etcd* -echo "Done! All your commands locate in ./binaries dir" +echo "Done! All your commands locate in kubernetes/cluster/ubuntu/binaries dir" +popd \ No newline at end of file diff --git a/cluster/ubuntu/util.sh b/cluster/ubuntu/util.sh index 46aab077a5e..fddde6ccbe3 100755 --- a/cluster/ubuntu/util.sh +++ b/cluster/ubuntu/util.sh @@ -23,8 +23,6 @@ MASTER="" MASTER_IP="" MINION_IPS="" -KUBECTL_PATH=${KUBE_ROOT}/cluster/ubuntu/binaries/kubectl - # Assumed Vars: # KUBE_ROOT function test-build-release { @@ -252,7 +250,6 @@ EOF # KUBE_MASTER # KUBE_MASTER_IP function detect-master { - KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. source "${KUBE_ROOT}/cluster/ubuntu/${KUBE_CONFIG_FILE-"config-default.sh"}" setClusterInfo KUBE_MASTER=$MASTER @@ -267,7 +264,6 @@ function detect-master { # Vars set: # KUBE_MINION_IP_ADDRESS (array) function detect-minions { - KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. source "${KUBE_ROOT}/cluster/ubuntu/${KUBE_CONFIG_FILE-"config-default.sh"}" KUBE_MINION_IP_ADDRESSES=() @@ -291,13 +287,12 @@ function detect-minions { # Instantiate a kubernetes cluster on ubuntu function kube-up() { - KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. source "${KUBE_ROOT}/cluster/ubuntu/${KUBE_CONFIG_FILE-"config-default.sh"}" - # ensure the binaries are downloaded + # ensure the binaries are well prepared if [ ! -f "ubuntu/binaries/master/kube-apiserver" ]; then - echo "warning: not enough binaries to build k8s, please run build.sh in cluster/ubuntu first" - exit 1 + echo "No local binaries for kube-up, downloading... " + "${KUBE_ROOT}/cluster/ubuntu/build.sh" fi setClusterInfo @@ -350,7 +345,7 @@ function provision-master() { create-kube-controller-manager-opts "${MINION_IPS}"; \ create-kube-scheduler-opts; \ create-flanneld-opts "127.0.0.1"; \ - sudo -p '[sudo] password to copy files and start master: ' cp ~/kube/default/* /etc/default/ && sudo cp ~/kube/init_conf/* /etc/init/ && sudo cp ~/kube/init_scripts/* /etc/init.d/ ;\ + sudo -p '[sudo] password to start master: ' cp ~/kube/default/* /etc/default/ && sudo cp ~/kube/init_conf/* /etc/init/ && sudo cp ~/kube/init_scripts/* /etc/init.d/ ;\ sudo groupadd -f -r kube-cert; \ sudo ~/kube/make-ca-cert.sh ${MASTER_IP} IP:${MASTER_IP},IP:${SERVICE_CLUSTER_IP_RANGE%.*}.1,DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.cluster.local; \ sudo mkdir -p /opt/bin/ && sudo cp ~/kube/master/* /opt/bin/; \ @@ -371,7 +366,7 @@ function provision-minion() { create-kubelet-opts "${1#*@}" "${MASTER_IP}" "${DNS_SERVER_IP}" "${DNS_DOMAIN}"; \ create-kube-proxy-opts "${MASTER_IP}"; \ create-flanneld-opts "${MASTER_IP}"; \ - sudo -p '[sudo] password to copy files and start node: ' cp ~/kube/default/* /etc/default/ && sudo cp ~/kube/init_conf/* /etc/init/ && sudo cp ~/kube/init_scripts/* /etc/init.d/ \ + sudo -p '[sudo] password to start node: ' cp ~/kube/default/* /etc/default/ && sudo cp ~/kube/init_conf/* /etc/init/ && sudo cp ~/kube/init_scripts/* /etc/init.d/ \ && sudo mkdir -p /opt/bin/ && sudo cp ~/kube/minion/* /opt/bin; \ sudo service flanneld start; \ sudo -b ~/kube/reconfDocker.sh "i";" @@ -395,7 +390,7 @@ function provision-masterandminion() { create-kubelet-opts "${MASTER_IP}" "${MASTER_IP}" "${DNS_SERVER_IP}" "${DNS_DOMAIN}"; create-kube-proxy-opts "${MASTER_IP}";\ create-flanneld-opts "127.0.0.1"; \ - sudo -p '[sudo] password to copy files and start master: ' cp ~/kube/default/* /etc/default/ && sudo cp ~/kube/init_conf/* /etc/init/ && sudo cp ~/kube/init_scripts/* /etc/init.d/ ; \ + sudo -p '[sudo] password to start master: ' cp ~/kube/default/* /etc/default/ && sudo cp ~/kube/init_conf/* /etc/init/ && sudo cp ~/kube/init_scripts/* /etc/init.d/ ; \ sudo groupadd -f -r kube-cert; \ sudo ~/kube/make-ca-cert.sh ${MASTER_IP} IP:${MASTER_IP},IP:${SERVICE_CLUSTER_IP_RANGE%.*}.1,DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.cluster.local; \ sudo mkdir -p /opt/bin/ && sudo cp ~/kube/master/* /opt/bin/ && sudo cp ~/kube/minion/* /opt/bin/; \ @@ -405,7 +400,6 @@ function provision-masterandminion() { # Delete a kubernetes cluster function kube-down { - KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. source "${KUBE_ROOT}/cluster/ubuntu/${KUBE_CONFIG_FILE-"config-default.sh"}" source "${KUBE_ROOT}/cluster/common.sh" @@ -416,10 +410,10 @@ function kube-down { { echo "Cleaning on node ${i#*@}" if [[ "${roles[${ii}]}" == "ai" || "${roles[${ii}]}" == "a" ]]; then - ssh -t $i 'pgrep etcd && sudo -p "[sudo] password for cleaning etcd data: " service etcd stop && sudo rm -rf /infra*; + ssh -t $i 'pgrep etcd && sudo -p "[sudo] password to stop master: " service etcd stop && sudo rm -rf /infra*; sudo rm -rf /opt/bin/etcd* /etc/init/etcd.conf /etc/init.d/etcd /etc/default/etcd' elif [[ "${roles[${ii}]}" == "i" ]]; then - ssh -t $i 'pgrep flanneld && sudo -p "[sudo] password for stopping flanneld: " service flanneld stop' + ssh -t $i 'pgrep flanneld && sudo -p "[sudo] password to stop node: " service flanneld stop' else echo "unsupported role for ${i}" fi @@ -436,7 +430,8 @@ function kube-down { # Perform common upgrade setup tasks function prepare-push() { - if [[ $KUBE_VERSION == "" ]]; then + # Use local binaries for kube-push + if [[ "${KUBE_VERSION}" == "" ]]; then if [[ ! -d "${KUBE_ROOT}/cluster/ubuntu/binaries" ]]; then echo "No local binaries.Please check" exit 1 @@ -446,15 +441,20 @@ function prepare-push() { fi else # Run build.sh to get the required release - pushd ubuntu - source "build.sh" - popd + export KUBE_VERSION + "${KUBE_ROOT}/cluster/ubuntu/build.sh" fi } # Update a kubernetes master with required release function push-master { source "${KUBE_ROOT}/cluster/ubuntu/${KUBE_CONFIG_FILE-"config-default.sh"}" + + if [[ ! -f "${KUBE_ROOT}/cluster/ubuntu/binaries/master/kube-apiserver" ]]; then + echo "There is no required release of kubernetes, please check first" + exit 1 + fi + setClusterInfo ii=0 for i in ${nodes}; do @@ -491,6 +491,12 @@ function push-master { # Update a kubernetes node with required release function push-node() { source "${KUBE_ROOT}/cluster/ubuntu/${KUBE_CONFIG_FILE-"config-default.sh"}" + + if [[ ! -f "${KUBE_ROOT}/cluster/ubuntu/binaries/minion/kubelet" ]]; then + echo "There is no required release of kubernetes, please check first" + exit 1 + fi + node_ip=${1} setClusterInfo ii=0 @@ -541,10 +547,10 @@ function kube-push { { echo "Cleaning on node ${i#*@}" if [[ "${roles[${ii}]}" == "ai" || "${roles[${ii}]}" == "a" ]]; then - ssh -t $i 'pgrep etcd && sudo -p "[sudo] password for cleaning etcd data: " service etcd stop; + ssh -t $i 'pgrep etcd && sudo -p "[sudo] password to stop master: " service etcd stop; sudo rm -rf /opt/bin/etcd* /etc/init/etcd.conf /etc/init.d/etcd /etc/default/etcd' || true elif [[ "${roles[${ii}]}" == "i" ]]; then - ssh -t $i 'pgrep flanneld && sudo -p "[sudo] password for stopping flanneld: " service flanneld stop' || true + ssh -t $i 'pgrep flanneld && sudo -p "[sudo] password to stop node: " service flanneld stop' || true else echo "unsupported role for ${i}" fi