diff options
Diffstat (limited to 'tools/kubernetes/demo_deploy.sh')
-rw-r--r-- | tools/kubernetes/demo_deploy.sh | 176 |
1 files changed, 120 insertions, 56 deletions
diff --git a/tools/kubernetes/demo_deploy.sh b/tools/kubernetes/demo_deploy.sh index 187caa2..dba500b 100644 --- a/tools/kubernetes/demo_deploy.sh +++ b/tools/kubernetes/demo_deploy.sh @@ -16,12 +16,10 @@ #. What this is: Complete scripted deployment of an experimental kubernetes-based #. cloud-native application platform. When complete, kubernetes and the following #. will be installed: -#. - helm and dokuwiki as a demo helm cart based application +#. - helm and dokuwiki as a demo helm chart based application #. - prometheus + grafana for cluster monitoring/stats #. - cloudify + kubernetes plugin and a demo hello world (nginx) app installed -#. will be setup with: -#. Prometheus dashboard: http://<master_public_ip>:9090 -#. Grafana dashboard: http://<master_public_ip>:3000 +#. - OPNFV VES as an ONAP-compatible monitoring platform #. #. Prerequisites: #. - Ubuntu server for kubernetes cluster nodes (master and worker nodes) @@ -35,68 +33,134 @@ #. <key>: name of private key for cluster node ssh (in current folder) #. <hosts>: space separated list of hostnames managed by MAAS #. <master>: IP of cluster master node -#. <workers>: space separated list of agent node IPs +#. <workers>: space separated list of worker node IPs #. <pub-net>: CID formatted public network #. <priv-net>: CIDR formatted private network (may be same as pub-net) #. <ceph-mode>: "helm" or "baremetal" #. <ceph-dev>: disk (e.g. sda, sdb) or folder (e.g. "/ceph") #. <extras>: optional name of script for extra setup functions as needed +#. +#. See tools/demo_deploy.sh in the OPNFV VES repo for additional environment +#. variables (mandatory/optional) for VES -key=$1 -nodes="$2" -master=$3 -workers="$4" -priv_net=$5 -pub_net=$6 -ceph_mode=$7 -ceph_dev=$8 -extras=$9 +function run() { + start=$((`date +%s`/60)) + $1 + step_end "$1" +} -source ~/models/tools/maas/deploy.sh $1 "$2" $9 -eval `ssh-agent` -ssh-add $key -if [[ "x$extras" != "x" ]]; then source $extras; fi -scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $key ubuntu@$master:/home/ubuntu/$key -echo "$0 $(date): Setting up kubernetes..." -scp -r -o StrictHostKeyChecking=no ~/models/tools/kubernetes/* \ - ubuntu@$master:/home/ubuntu/. -ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$master <<EOF +function step_end() { + end=$((`date +%s`/60)) + runtime=$((end-start)) + log "step \"$1\" duration = $runtime minutes" +} + +function run_master() { + start=$((`date +%s`/60)) + ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ + ubuntu@$k8s_master <<EOF exec ssh-agent bash -ssh-add $key -bash k8s-cluster.sh all "$workers" $priv_net $pub_net $ceph_mode $ceph_dev +ssh-add $k8s_key +$1 EOF -# TODO: Figure this out... Have to break the setup into two steps as something -# causes the ssh session to end before the prometheus setup, if both scripts -# are in the same ssh session -echo "Setting up Prometheus..." -ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$master mkdir -p \ - /home/ubuntu/models/tools/prometheus -scp -r -o StrictHostKeyChecking=no ~/models/tools/prometheus/* \ - ubuntu@$master:/home/ubuntu/models/tools/prometheus -ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$master <<EOF -exec ssh-agent bash -ssh-add $key -cd models/tools/prometheus -bash prometheus-tools.sh all "$workers" + step_end "$1" +} + +extras=$9 + +cat <<EOF >~/k8s_env.sh +k8s_key=$1 +k8s_nodes="$2" +k8s_master=$3 +k8s_workers="$4" +k8s_priv_net=$5 +k8s_pub_net=$6 +k8s_ceph_mode=$7 +k8s_ceph_dev=$8 +export k8s_key +export k8s_nodes +export k8s_master +export k8s_workers +export k8s_priv_net +export k8s_pub_net +export k8s_ceph_mode +export k8s_ceph_dev EOF -echo "$0 $(date): Setting up cloudify..." +source ~/k8s_env.sh +env | grep k8s_ + +source ~/models/tools/maas/deploy.sh $k8s_key "$k8s_nodes" $extras +eval `ssh-agent` +ssh-add $k8s_key +scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $k8s_key \ + ubuntu@$k8s_master:/home/ubuntu/$k8s_key +scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ~/k8s_env.sh \ + ubuntu@$k8s_master:/home/ubuntu/. + +echo; echo "$0 $(date): Setting up kubernetes master..." +scp -r -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ + ~/models/tools/kubernetes/* ubuntu@$k8s_master:/home/ubuntu/. +run_master "bash k8s-cluster.sh master" + +echo; echo "$0 $(date): Setting up kubernetes workers..." +run_master "bash k8s-cluster.sh workers \"$k8s_workers\"" + +echo; echo "$0 $(date): Setting up helm..." +run_master "bash k8s-cluster.sh helm" + +echo; echo "$0 $(date): Verifying kubernetes+helm install..." +run_master "bash k8s-cluster.sh demo start nginx" +run_master "bash k8s-cluster.sh demo stop nginx" + +echo; echo "$0 $(date): Setting up ceph-helm" +run_master "bash k8s-cluster.sh ceph \"$k8s_workers\" $k8s_priv_net $k8s_pub_net $k8s_ceph_mode $k8s_ceph_dev" + +echo; echo "$0 $(date): Verifying kubernetes+helm+ceph install..." +run_master "bash k8s-cluster.sh demo start dokuwiki" + +echo; echo "Setting up Prometheus..." +scp -r -o StrictHostKeyChecking=no ~/models/tools/prometheus/* \ + ubuntu@$k8s_master:/home/ubuntu/. +run_master "bash prometheus-tools.sh all \"$k8s_workers\"" + +echo; echo "$0 $(date): Setting up cloudify..." scp -r -o StrictHostKeyChecking=no ~/models/tools/cloudify \ - ubuntu@$master:/home/ubuntu/. -ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$master \ - bash cloudify/k8s-cloudify.sh prereqs -ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$master \ - bash cloudify/k8s-cloudify.sh setup -source ~/models/tools/cloudify/k8s-cloudify.sh demo start $master - -echo "$0 $(date): All done!" -export NODE_PORT=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$master kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services dw-dokuwiki) -export NODE_IP=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$master kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}") + ubuntu@$k8s_master:/home/ubuntu/. +run_master "bash cloudify/k8s-cloudify.sh prereqs" +run_master "bash cloudify/k8s-cloudify.sh setup" + +echo; echo "$0 $(date): Verifying kubernetes+helm+ceph+cloudify install..." +run "bash $HOME/models/tools/cloudify/k8s-cloudify.sh demo start" + +echo; echo "$0 $(date): Setting up VES" +# not re-cloned if existing - allows patch testing locally +if [[ ! -d ~/ves ]]; then + git clone https://gerrit.opnfv.org/gerrit/ves ~/ves +fi +ves_influxdb_host=$k8s_master:8086 +export ves_influxdb_host +ves_grafana_host=$k8s_master:3000 +export ves_grafana_host +ves_grafana_auth=admin:admin +export ves_grafana_auth +ves_kafka_hostname=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$k8s_master hostname) +export ves_kafka_hostname +ves_loglevel=$ves_loglevel +export ves_loglevel +# Can't pass quoted strings in commands +start=$((`date +%s`/60)) +bash $HOME/ves/tools/demo_deploy.sh $k8s_key $k8s_master "$k8s_workers" +step_end "bash $HOME/ves/tools/demo_deploy.sh $k8s_key $k8s_master \"$k8s_workers\"" + +echo; echo "$0 $(date): All done!" +export NODE_PORT=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$k8s_master kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services dw-dokuwiki) +export NODE_IP=$(ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@$k8s_master kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}") echo "Helm chart demo app dokuwiki is available at http://$NODE_IP:$NODE_PORT/" # TODO update Cloudify demo app to have public exposed service address -port=$( bash ~/models/tools/cloudify/k8s-cloudify.sh port nginx $master) -echo "Cloudify-deployed demo app nginx is available at http://$master:$port" -echo "Prometheus UI is available at http://$master:9090" -echo "Grafana dashboards are available at http://$master:3000 (login as admin/admin)" -echo "Grafana API is available at http://admin:admin@$master:3000/api/v1/query?query=<string>" -echo "Kubernetes API is available at https://$master:6443/api/v1/" -echo "Cloudify API access example: curl -u admin:admin --header 'Tenant: default_tenant' http://$master/api/v3.1/status" +port=$( bash ~/models/tools/cloudify/k8s-cloudify.sh port nginx $k8s_master) +echo "Cloudify-deployed demo app nginx is available at http://$k8s_master:$port" +echo "Prometheus UI is available at http://$k8s_master:9090" +echo "Grafana dashboards are available at http://$ves_grafana_host (login as $ves_grafana_auth)" +echo "Grafana API is available at http://$ves_grafana_auth@$ves_influx_host/api/v1/query?query=<string>" +echo "Kubernetes API is available at https://$k8s_master:6443/api/v1/" +echo "Cloudify API access example: curl -u admin:admin --header 'Tenant: default_tenant' http://$k8s_master/api/v3.1/status" |