-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathinstall.sh
More file actions
116 lines (99 loc) · 4.63 KB
/
Copy pathinstall.sh
File metadata and controls
116 lines (99 loc) · 4.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env bash
# Aborta a execução em caso algum comando termine com o status diferente de zero
set -e
# Executar como root
if [ "$(id -u)" -ne 0 ]; then
( echo "Execute com sudo ou como root" ; exit 1 )
fi
[[ ${REPO} ]] || ( echo "REPO de instalação não informado" ; exit 1 )
[[ ${BRANCH} ]] || export BRANCH=main
[[ ${INSTALL_URL} ]] || ( echo "URL de instalação não informada" ; exit 1 )
[[ ${ARGOCD_VERSION} ]] || ( ARGOCD_VERSION="7.8.23" )
# Identifica o sistema operacional em uso
case "$(uname -s)" in
Linux*) OS="linux" ;;
*) OS="unknown" ;;
esac
# Identifica a arquitetura em uso
ARCH_RAW=$(uname -m)
case "$ARCH_RAW" in
x86_64) ARCH="amd64" ;;
*) ARCH="unknown" ;;
esac
# Identifica a distribuição em uso
DISTRO=$(grep -Po '^ID_LIKE=\K.*' /etc/os-release)
case "$DISTRO" in
debian) DISTRO="debian-like" ;;
*) DISTRO="unknown" ;;
esac
# Identifica a necessidade de instalar o kubectl
command -v kubectl &> /dev/null || \
( if [ "$OS" == "linux" ]; then
curl -sLO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/${ARCH}/kubectl"
chmod +x kubectl
mv kubectl /usr/local/bin/
command -v kubectl &> /dev/null || ( echo "Kubectl não pode ser instalado" ; exit 1 )
else
echo "Não consigo instalar kubectl neste sistema operacional"
exit 1
fi )
# Identifica a necessidade de instalar o docker
docker run --rm hello-world &> /dev/null || (\
if [ "$OS" == "linux" ]; then
if [ "$DISTRO" == "debian-like" ]; then
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker run --rm hello-world &> /dev/null || ( echo "Docker não pode ser instalado" ; exit 1 )
fi
else
echo "Não consigo instalar docker neste sistema operacional"
exit 1
fi )
# Identifica a necessidade de instalar o k3s
command -v k3s &> /dev/null || (\
if [ "$OS" == "linux" ]; then
curl -sfL https://get.k3s.io | sh -
command -v k3s &> /dev/null || ( echo "K3s não pode ser instalado" ; exit 1 )
else
echo "Não consigo instalar k3s neste sistema operacional"
exit 1
fi )
# Identifica a necessidade de instalar o helm
command -v helm &> /dev/null || (\
if [ "$OS" == "linux" ]; then
curl -s https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
command -v helm &> /dev/null || ( echo "Helm não pode ser instalado" ; exit 1 )
else
echo "Não consigo instalar helm neste sistema operacional"
exit 1
fi )
# Template RabbitMQ
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
helm repo add argo https://argoproj.github.io/argo-helm
helm upgrade --install argocd argo/argo-cd --version ${ARGOCD_VERSION} -n argocd --create-namespace --set server.extraArgs={--insecure}
kubectl apply -f https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCH}/apps/argo/ingress.yaml
if [[ ${APPS} ]]; then
for APP in $APPS; do
kubectl apply -f https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCH}/apps/${APP}/app.yaml -n argocd
done
fi
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
kubectl patch svc kube-prometheus-grafana -n monitoring -p '{"spec": {"type": "NodePort"}}'
echo "\nK3S Node IP\n"
kubectl get node -o wide | awk -v OFS='\t\t' '{print $1, $6}'
echo "Portas dos serviços\n"
export ALERT_MANAGER_PORT=$(kubectl get svc/kube-prometheus-kube-prome-alertmanager -o jsonpath="{range .spec.ports[*]} {.name} {.nodePort}" -n monitoring)
export ARGOCD_PORT=$(kubectl get svc/argocd-server -o jsonpath="{.spec.ports[1].name} {.spec.ports[1].nodePort}" -n argocd)
export GRAFANA_PORT=$(kubectl get svc/kube-prometheus-grafana -o jsonpath="{.spec.ports[0].name} {.spec.ports[0].nodePort}" -n monitoring)
export PROMETHEUS_PORT=$(kubectl get svc/kube-prometheus-kube-prome-prometheus -o jsonpath="{range .spec.ports[*]} {.name} {.nodePort}" -n monitoring)
export RABBITMQ_PORT=$(kubectl get svc/rabbitmq -o jsonpath="{range .spec.ports[*]} {.name} {.nodePort}" -n rabbitmq)
echo "ArgoCD: ${ARGOCD_PORT}\nGrafana: ${GRAFANA_PORT}\nPrometheus: ${PROMETHEUS_PORT}\nAlert Manager: ${ALERT_MANAGER_PORT}\nRabbitMQ: ${RABBITMQ_PORT}\n"
echo "Utilize o ip do k3s e as portas para acessar os serviços do homelab"