#!/bin/bash #Initial packages apt update apt install curl apt-transport-https ca-certificates gnupg lsb-release -y # Install Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update apt-get install docker-ce docker-ce-cli containerd.io -y #Install kubectl apt update apt-get install -y apt-transport-https ca-certificates curl curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list apt-get update apt-get install -y kubectl #Install minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb mv minikube_latest_amd64.deb /usr/local/bin dpkg -i /usr/local/bin\/minikube_latest_amd64.deb rm /tmp/minikube_latest_amd64.deb #Install httpie apt -y install httpie jq #Install Portainer docker volume create portainer_data docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce #Add the portainer user to the docker group usermod -aG docker portainer #Define Admin user and Password http POST http://localhost:9000/api/users/admin/init Username="portainer" Password="portainer1234" #Get the admin JWT token jwt=`http POST :9000/api/auth Username="portainer" Password="portainer1234" | jq '.jwt' | sed 's/^.//' | sed 's/.$//'` #Add local Docker endpoint http --form POST :9000/api/endpoints "Authorization: Bearer $jwt" Name="docker" EndpointCreationType=1 #Start minikube sudo -u portainer minikube start --nodes 2 --driver=docker --ports=":30778" --ports=":9001" #Add the metrics server to the minikube cluster sudo -u portainer minikube addons enable metrics-server #Add ingress to the minikube cluster sudo -u portainer minikube addons enable ingress #Add Portainer Agent to the local kind Kubernetes cluster sudo -u portainer curl -qL https://downloads.portainer.io/portainer-agent-k8s-nodeport.yaml -o /home/portainer/portainer-agent-k8s.yaml; sudo -u portainer kubectl apply -f /home/portainer/portainer-agent-k8s.yaml sudo -u portainer rm /home/portainer/portainer-agent-k8s.yaml #Check if the Portainer Agent is running echo "" echo "" while true do agent_state=`sudo -u portainer kubectl get pod -n portainer | awk '{ print $3 }' | tail -1` if [ "$agent_state" != "Running" ]; then echo -ne '⚡ Portainer Agent Not Running yet\r' else break fi sleep 1 done #Get mapped 30778 port from control-plane jwt=`http POST :9000/api/auth Username="portainer" Password="portainer1234" | jq '.jwt' | sed 's/^.//' | sed 's/.$//'` port=`docker port minikube | grep 30778 | head -1 | awk '$1=$1' FS=":" OFS=" " | awk '{ print $4 }'` #Add local Kubernetes endpoint sleep 5 sudo -u portainer http --form POST :9000/api/endpoints "Authorization: Bearer $jwt" Name="kubernetes" URL="tcp://10.0.2.8:$port" EndpointCreationType=2 TLS="true" TLSSkipVerify="true" TLSSkipClientVerify="true" #Housekeeping sed -i /@reboot/d /etc/crontab echo '@reboot root /usr/bin/tmux new-session -d /usr/local/bin/rebuild > /dev/tty1' >> /etc/crontab echo "" echo "Portainer Sandobx installed. Open your browser on http://localhost:9090" echo "Username: portainer" echo "Password: portainer1234"