From 88a756fe502932c7048a34da36b0d6041f175d09 Mon Sep 17 00:00:00 2001 From: Ankit Nayan Date: Tue, 23 Feb 2021 17:18:50 +0530 Subject: [PATCH] k8s installation script in progress --- deploy/install.k8s.sh | 256 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 deploy/install.k8s.sh diff --git a/deploy/install.k8s.sh b/deploy/install.k8s.sh new file mode 100644 index 0000000000..062cc8f274 --- /dev/null +++ b/deploy/install.k8s.sh @@ -0,0 +1,256 @@ +#!/bin/bash + +set -o errexit + +is_command_present() { + type "$1" >/dev/null 2>&1 +} + +is_mac() { + [[ $OSTYPE == darwin* ]] +} + + +check_k8s_setup() { + echo "Checking your k8s setup status" + if ! is_command_present kubectl; then + echo "Please install kubectl on your machine" + exit 1 + else + + if ! is_command_present jq; then + install_jq + fi + clusters=`kubectl config view -o json | jq -r '."current-context"'` + if [[ ! -n $clusters ]]; then + echo "Please setup a k8s cluster & config kubectl to connect to it" + exit 1 + fi + k8s_minor_version=`kubectl version --short -o json | jq ."serverVersion.minor" | sed 's/[^0-9]*//g'` + # if [[ $k8s_minor_version < 18 ]]; then + # echo "+++++++++++ ERROR ++++++++++++++++++++++" + # echo "SigNoz deployments require Kubernetes >= v1.18. Found version: v1.$k8s_minor_version" + # echo "+++++++++++ ++++++++++++++++++++++++++++" + # exit 1 + # fi; + fi +} + +install_jq(){ + if [ $package_manager == "brew" ]; then + brew install jq + elif [ $package_manager == "yum" ]; then + yum_cmd="sudo yum --assumeyes --quiet" + $yum_cmd install jq + else + apt_cmd="sudo apt-get --yes --quiet" + $apt_cmd update + $apt_cmd install jq + fi +} + + +check_os() { + if is_mac; then + package_manager="brew" + desired_os=1 + os="Mac" + return + fi + + os_name="$(cat /etc/*-release | awk -F= '$1 == "NAME" { gsub(/"/, ""); print $2; exit }')" + + case "$os_name" in + Ubuntu*) + desired_os=1 + os="ubuntu" + package_manager="apt-get" + ;; + Debian*) + desired_os=1 + os="debian" + package_manager="apt-get" + ;; + Red\ Hat*) + desired_os=1 + os="red hat" + package_manager="yum" + ;; + CentOS*) + desired_os=1 + os="centos" + package_manager="yum" + ;; + *) + desired_os=0 + os="Not Found" + esac +} + + +echo_contact_support() { + echo "Please contact with your OS details and version${1:-.}" +} + +bye() { # Prints a friendly good bye message and exits the script. + set +o errexit + echo "Please share your email to receive support with the installation" + read -rp 'Email: ' email + + while [[ $email == "" ]] + do + read -rp 'Email: ' email + done + + DATA='{ "api_key": "H-htDCae7CR3RV57gUzmol6IAKtm5IMCvbcm_fwnL-w", "type": "capture", "event": "Installation Support", "distinct_id": "'"$SIGNOZ_INSTALLATION_ID"'", "properties": { "os": "'"$os"'", "email": "'"$email"'", "platform": "k8s", "k8s_minor_version": "'"$k8s_minor_version"'" } }' + URL="https://app.posthog.com/capture" + HEADER="Content-Type: application/json" + + + if has_curl; then + curl -sfL -d "$DATA" --header "$HEADER" "$URL" > /dev/null 2>&1 + elif has_wget; then + wget -q --post-data="$DATA" --header="$HEADER" "$URL" > /dev/null 2>&1 + fi + + echo -e "\nExiting for now. Bye! \U1F44B\n" + exit 1 +} + +deploy_app() { + kubectl apply -f "$install_dir/config-template" + kubectl apply -f "$install_dir" +} + +wait_for_application_start() { + local timeout=$1 + address=$custom_domain + if [[ "$ssl_enable" == "true" ]]; then + protocol="https" + else + protocol="http" + fi + # The while loop is important because for-loops don't work for dynamic values + while [[ $timeout -gt 0 ]]; do + if [[ $address == "" || $address == null ]]; then + address=`kubectl get ingress appsmith-ingress -o json | jq -r '.status.loadBalancer.ingress[0].ip'` + fi + status_code="$(curl -s -o /dev/null -w "%{http_code}" $protocol://$address/api/v1 || true)" + if [[ status_code -eq 401 ]]; then + break + else + echo -ne "Waiting for all containers to start. This check will timeout in $timeout seconds...\r\c" + fi + ((timeout--)) + sleep 1 + done + + echo "" +} + + +echo -e "👋 Thank you for trying out SigNoz! " +echo "" + + +# Checking OS and assigning package manager +desired_os=0 +os="" +echo -e "🕵️ Detecting your OS" +check_os +SIGNOZ_INSTALLATION_ID=$(curl -s 'https://api64.ipify.org') + +# Run bye if failure happens +trap bye EXIT + +DATA='{ "api_key": "H-htDCae7CR3RV57gUzmol6IAKtm5IMCvbcm_fwnL-w", "type": "capture", "event": "Installation Started", "distinct_id": "'"$SIGNOZ_INSTALLATION_ID"'", "properties": { "os": "'"$os"'", "platform": "k8s", "k8s_minor_version": "'"$k8s_minor_version"'" } }' + +URL="https://app.posthog.com/capture" +HEADER="Content-Type: application/json" + +if has_curl; then + curl -sfL -d "$DATA" --header "$HEADER" "$URL" > /dev/null 2>&1 +elif has_wget; then + wget -q --post-data="$DATA" --header="$HEADER" "$URL" > /dev/null 2>&1 +fi + +# Check for kubernetes setup +check_k8s_setup + +echo "" +echo "Deploy Appmisth on your cluster" +echo "" + +deploy_app + +wait_for_application_start 60 + + +if [[ $status_code -ne 200 ]]; then + echo "+++++++++++ ERROR ++++++++++++++++++++++" + echo "The containers didn't seem to start correctly. Please run the following command to check containers that may have errored out:" + echo "" + echo -e "sudo docker-compose -f docker/docker-compose-tiny.yaml ps -a" + echo "Please read our troubleshooting guide https://signoz.io/docs/deployment/docker#troubleshooting" + echo "or reach us on SigNoz for support https://join.slack.com/t/signoz-community/shared_invite/zt-lrjknbbp-J_mI13rlw8pGF4EWBnorJA" + echo "++++++++++++++++++++++++++++++++++++++++" + + SUPERVISORS="$(curl -so - http://localhost:8888/druid/indexer/v1/supervisor)" + + DATASOURCES="$(curl -so - http://localhost:8888/druid/coordinator/v1/datasources)" + + DATA='{ "api_key": "H-htDCae7CR3RV57gUzmol6IAKtm5IMCvbcm_fwnL-w", "type": "capture", "event": "Installation Error - Checks", "distinct_id": "'"$SIGNOZ_INSTALLATION_ID"'", "properties": { "os": "'"$os"'", "platform": "k8s", "error": "Containers not started", "SUPERVISORS": '"$SUPERVISORS"', "DATASOURCES": '"$DATASOURCES"' } }' + + URL="https://app.posthog.com/capture" + HEADER="Content-Type: application/json" + + if has_curl; then + curl -sfL -d "$DATA" --header "$HEADER" "$URL" > /dev/null 2>&1 + elif has_wget; then + wget -q --post-data="$DATA" --header="$HEADER" "$URL" > /dev/null 2>&1 + fi + + exit 1 + +else + DATA='{ "api_key": "H-htDCae7CR3RV57gUzmol6IAKtm5IMCvbcm_fwnL-w", "type": "capture", "event": "Installation Success", "distinct_id": "'"$SIGNOZ_INSTALLATION_ID"'", "properties": { "os": "'"$os"'"} }' + URL="https://app.posthog.com/capture" + HEADER="Content-Type: application/json" + + if has_curl; then + curl -sfL -d "$DATA" --header "$HEADER" "$URL" > /dev/null 2>&1 + elif has_wget; then + wget -q --post-data="$DATA" --header="$HEADER" "$URL" > /dev/null 2>&1 + fi + echo "++++++++++++++++++ SUCCESS ++++++++++++++++++++++" + echo "Your installation is complete!" + echo "" + echo "Your frontend is running on 'http://localhost:3000'." + + echo "" + echo "+++++++++++++++++++++++++++++++++++++++++++++++++" + echo "" + echo "Need help Getting Started?" + echo "Join us on Slack https://join.slack.com/t/signoz-community/shared_invite/zt-lrjknbbp-J_mI13rlw8pGF4EWBnorJA" + echo "" + echo "Please share your email to receive support & updates about SigNoz!" + read -rp 'Email: ' email + + while [[ $email == "" ]] + do + read -rp 'Email: ' email + done + + DATA='{ "api_key": "H-htDCae7CR3RV57gUzmol6IAKtm5IMCvbcm_fwnL-w", "type": "capture", "event": "Identify Successful Installation", "distinct_id": "'"$SIGNOZ_INSTALLATION_ID"'", "properties": { "os": "'"$os"'", "email": "'"$email"'", "platform": "k8s" } }' + URL="https://app.posthog.com/capture" + HEADER="Content-Type: application/json" + + if has_curl; then + curl -sfL -d "$DATA" --header "$HEADER" "$URL" > /dev/null 2>&1 + elif has_wget; then + wget -q --post-data="$DATA" --header="$HEADER" "$URL" > /dev/null 2>&1 + fi + +fi + +echo -e "\nThank you!\n"