-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart.sh
More file actions
148 lines (115 loc) · 4.28 KB
/
Copy pathstart.sh
File metadata and controls
148 lines (115 loc) · 4.28 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env bash
set -euo pipefail
CLUSTER_NAME="gili"
NAMESPACE="java-html-project"
TRAEFIK_NAMESPACE="traefik"
GATEWAY_API_VERSION="v1.5.1"
command -v kind >/dev/null 2>&1 || { echo "kind is required"; exit 1; }
command -v kubectl >/dev/null 2>&1 || { echo "kubectl is required"; exit 1; }
command -v docker >/dev/null 2>&1 || { echo "docker is required"; exit 1; }
echo "========================"
echo "Build Docker images"
echo "========================"
docker build --no-cache -t java-html-frontend:latest frontend/
docker build --no-cache -t java-html-backend:latest backend/
echo "========================"
echo "Create kind cluster"
echo "========================"
if kind get clusters | grep -q "^${CLUSTER_NAME}$"; then
echo "Cluster ${CLUSTER_NAME} already exists. Deleting it first..."
kind delete cluster --name "${CLUSTER_NAME}"
fi
kind create cluster --config cluster/kind-cluster.yaml
echo "========================"
echo "Install Gateway API CRDs"
echo "========================"
kubectl apply -f "https://github.com/kubernetes-sigs/gateway-api/releases/download/${GATEWAY_API_VERSION}/standard-install.yaml"
echo "========================"
echo "Install Traefik Gateway RBAC"
echo "========================"
kubectl apply -f k8s/traefik-gateway-rbac.yaml
echo "========================"
echo "Load images into kind"
echo "========================"
kind load docker-image java-html-frontend:latest --name "${CLUSTER_NAME}"
kind load docker-image java-html-backend:latest --name "${CLUSTER_NAME}"
echo "========================"
echo "Label worker nodes"
echo "========================"
kubectl label node gili-worker tier=frontend --overwrite || true
kubectl label node gili-worker2 tier=backend --overwrite || true
kubectl label node gili-worker3 tier=gateway --overwrite || true
echo "========================"
echo "Install Traefik (manifest-only)"
echo "========================"
kubectl apply -f k8s/traefik-proxy.yaml
echo "========================"
echo "Apply app manifests"
echo "========================"
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/backend-deployment.yaml
kubectl apply -f k8s/backend-service.yaml
kubectl apply -f k8s/frontend-deployment.yaml
kubectl apply -f k8s/frontend-service.yaml
echo "========================"
echo "Apply Gateway API resources"
echo "========================"
kubectl apply -f k8s/gatewayclass.yaml
kubectl apply -f k8s/gateway.yaml
kubectl apply -f k8s/frontend-httproute.yaml
kubectl apply -f k8s/backend-httproute.yaml
echo "========================"
echo "Wait for Traefik"
echo "========================"
kubectl rollout status deployment/traefik -n "${TRAEFIK_NAMESPACE}"
echo "========================"
echo "Wait for app deployments"
echo "========================"
kubectl rollout status deployment/java-backend -n "${NAMESPACE}"
kubectl rollout status deployment/html-frontend -n "${NAMESPACE}"
echo "========================"
echo "Current resources"
echo "========================"
kubectl get nodes
echo
kubectl get pods -n "${TRAEFIK_NAMESPACE}" -o wide
echo
kubectl get pods -n "${NAMESPACE}" -o wide
echo
kubectl get svc -n "${TRAEFIK_NAMESPACE}"
echo
kubectl get svc -n "${NAMESPACE}"
echo
kubectl get gatewayclass
echo
kubectl get gateway -n "${NAMESPACE}"
echo
kubectl get httproute -n "${NAMESPACE}"
echo "========================"
echo "Install Monitoring Stack"
echo "========================"
kubectl apply -f monitoring/namespace.yaml
kubectl apply -f monitoring/prometheus.yaml
kubectl apply -f monitoring/prometheus-rbac.yaml
kubectl apply -f monitoring/grafana.yaml
echo "========================"
echo "Wait for monitoring"
echo "========================"
kubectl rollout status deployment/prometheus -n monitoring
kubectl rollout status deployment/grafana -n monitoring
echo "========================"
echo "Done"
echo "========================"
echo "Add to /etc/hosts:"
echo "127.0.0.1 java-html.local"
echo "127.0.0.1 api.java-html.local"
echo "Then test:"
echo "Frontend: http://java-html.local:8080"
echo "Backend: http://api.java-html.local:8080"
echo 'curl -H "Host: java-html.local" http://127.0.0.1:8080/resourcelist.html'
echo 'curl -H "Host: api.java-html.local" http://127.0.0.1:8080/'
echo "Prometheus: http://localhost:9090"
echo "Grafana: http://localhost:3000"
echo "login:"
echo "user: admin"
echo "pass: admin"