Compare commits
5 Commits
wip/VPA
...
a9ea233c15
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9ea233c15 | ||
|
|
bc69332ca5 | ||
|
|
37fc96023a | ||
|
|
24e56c658a | ||
|
|
bb5add7a10 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
.env.local
|
||||
traefik-values.yaml
|
||||
@@ -10,6 +10,7 @@ export K3S_ENABLE_REGISTRY := env("K3S_ENABLE_REGISTRY", "true")
|
||||
export SERVER_IP := env("K3S_SERVER_IP","192.168.178.45")
|
||||
export AGENT_IP := env("K3S_AGENT_IP","192.168.178.75")
|
||||
export USER := env("K3S_USER","basti")
|
||||
export LONGHORN_NAMESPACE := env("LONGHORN_NAMESPACE","longhorn-system")
|
||||
|
||||
[private]
|
||||
default:
|
||||
@@ -145,4 +146,76 @@ configure-registry:
|
||||
|
||||
echo "Restarting k3s to apply registry configuration..."
|
||||
ssh "${K8S_MASTER_NODE_NAME}" "sudo systemctl restart k3s"
|
||||
echo "✓ Registry configuration applied"
|
||||
echo "✓ Registry configuration applied"
|
||||
|
||||
|
||||
stop:
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
START_TIME=$(date +%s)
|
||||
elapsed() {
|
||||
echo "$(($(date +%s) - START_TIME))s"
|
||||
}
|
||||
nodenames=$(kubectl get nodes -o=jsonpath="{.items[*]['metadata.name']}")
|
||||
for node in ${nodenames}; do
|
||||
kubectl drain "${node}" --ignore-daemonsets --delete-emptydir-data --force --disable-eviction --grace-period=60 --timeout=180s 2>&1 || true
|
||||
kubectl cordon "${node}"
|
||||
echo "Node ${node} stopped."
|
||||
done
|
||||
echo "Drain complete. Nodes are cordoned and drained."
|
||||
|
||||
if helm status longhorn -n ${LONGHORN_NAMESPACE} &>/dev/null; then
|
||||
echo "[$(elapsed)] Waiting for Longhorn volumes to be detached..."
|
||||
TIMEOUT=90
|
||||
ELAPSED=0
|
||||
while [ $ELAPSED -lt $TIMEOUT ]; do
|
||||
|
||||
ATTACHED=$(kubectl get volumes.longhorn.io -n ${LONGHORN_NAMESPACE} -o json 2>/dev/null | \
|
||||
jq -r '.items[] | select(.status.state == "attached") | .metadata.name' 2>/dev/null || true)
|
||||
|
||||
if [ -z "$ATTACHED" ]; then
|
||||
echo "[$(elapsed)] ✓ All Longhorn volumes detached successfully"
|
||||
break
|
||||
fi
|
||||
|
||||
ATTACHED_COUNT=$(echo "$ATTACHED" | grep -c . || echo 0)
|
||||
echo " Still waiting for $ATTACHED_COUNT volume(s) to detach..."
|
||||
sleep 2
|
||||
ELAPSED=$((ELAPSED + 2))
|
||||
done
|
||||
if [ $ELAPSED -ge $TIMEOUT ]; then
|
||||
echo "[$(elapsed)] ⚠ Warning: Timeout waiting for volumes to detach"
|
||||
fi
|
||||
fi
|
||||
|
||||
for node in ${nodenames}; do
|
||||
echo "[$(elapsed)] Stopping and disabling k3s service..."
|
||||
ssh "${node}" "sudo systemctl stop k3s 2>/dev/null || true"
|
||||
ssh "${node}" "sudo systemctl disable k3s 2>/dev/null || true"
|
||||
done
|
||||
|
||||
start:
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
is_schedulable() {
|
||||
node_name="$1"
|
||||
! kubectl get node "$node_name" -o jsonpath='{.spec.unschedulable}' 2>/dev/null | grep -q "true"
|
||||
}
|
||||
|
||||
nodenames=$(kubectl get nodes -o=jsonpath="{.items[*]['metadata.name']}")
|
||||
|
||||
|
||||
for node in ${nodenames}; do
|
||||
echo "Starting k3s service on ${node}..."
|
||||
|
||||
if is_schedulable "$node"; then
|
||||
echo "✓ Node $node is already schedulable"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Uncordoning node $node..."
|
||||
kubectl uncordon "$node" 2>&1 || true
|
||||
|
||||
echo "Wait for every node to become Ready..."
|
||||
done
|
||||
@@ -24,15 +24,19 @@ install:
|
||||
--wait \
|
||||
-f kube-stack-config-values.yaml
|
||||
|
||||
echo "kubectl port-forward svc/kube-prometheus-stack-grafana 8080:80 -n ${PROMETHEUS_NAMESPACE}"
|
||||
echo "kubectl port-forward svc/kube-prometheus-stack-prometheus 9090 -n ${PROMETHEUS_NAMESPACE}"
|
||||
echo "kubectl port-forward svc/kube-prometheus-stack-alertmanager 9093 -n ${PROMETHEUS_NAMESPACE}"
|
||||
|
||||
echo "Get Grafana Password:"
|
||||
echo "kubectl get secret --namespace monitoring -l app.kubernetes.io/component=admin-secret -o jsonpath=\"{.items[0].data.admin-password}\" | base64 --decode ; echo"
|
||||
just KubePrometheusStack::show-ports
|
||||
|
||||
gomplate -f ./grafana-certificate.gomplate.yaml | kubectl apply -f -
|
||||
|
||||
|
||||
uninstall:
|
||||
helm uninstall kube-prometheus-stack -n ${PROMETHEUS_NAMESPACE}
|
||||
helm uninstall kube-prometheus-stack -n ${PROMETHEUS_NAMESPACE}
|
||||
|
||||
show-ports:
|
||||
@echo "kubectl port-forward svc/kube-prometheus-stack-grafana 8080:80 -n ${PROMETHEUS_NAMESPACE}"
|
||||
@echo "kubectl port-forward svc/kube-prometheus-stack-prometheus 9090 -n ${PROMETHEUS_NAMESPACE}"
|
||||
@echo "kubectl port-forward svc/kube-prometheus-stack-alertmanager 9093 -n ${PROMETHEUS_NAMESPACE}"
|
||||
|
||||
@echo "Get Grafana Password:"
|
||||
@echo "kubectl get secret --namespace monitoring -l app.kubernetes.io/component=admin-secret -o jsonpath=\"{.items[0].data.admin-user}\" | base64 --decode ; echo"
|
||||
@echo "kubectl get secret --namespace monitoring -l app.kubernetes.io/component=admin-secret -o jsonpath=\"{.items[0].data.admin-password}\" | base64 --decode ; echo"
|
||||
|
||||
@@ -2,6 +2,7 @@ set fallback:=true
|
||||
|
||||
export CERT_MANAGER_NAMESPACE := env("CERT_MANAGER_NAMESPACE", "cert-manager")
|
||||
export TRAEFIK_NAMESPACE := env("TRAEFIK_NAMESPACE", "traefik")
|
||||
export TRAEFIK_CHART_VERSION := env("TRAEFIK_CHART_VERSION", "v39.0.7")
|
||||
|
||||
add-helm-repos:
|
||||
helm repo add traefik https://helm.traefik.io/traefik --force-update
|
||||
@@ -15,11 +16,14 @@ install:
|
||||
|
||||
just add-helm-repos
|
||||
|
||||
gomplate -f traefik-values-gomplate.yaml -o traefik-values.yaml
|
||||
|
||||
helm upgrade traefik traefik/traefik \
|
||||
--install \
|
||||
--cleanup-on-fail \
|
||||
--namespace ${TRAEFIK_NAMESPACE} \
|
||||
--create-namespace \
|
||||
--version ${TRAEFIK_CHART_VERSION} \
|
||||
--values traefik-values.yaml
|
||||
|
||||
helm upgrade cert-manager jetstack/cert-manager \
|
||||
@@ -59,4 +63,9 @@ status:
|
||||
kubectl get services -n ${CERT_MANAGER_NAMESPACE}
|
||||
echo ""
|
||||
echo "CRDs:"
|
||||
kubectl get crd | grep cert-manager.io
|
||||
kubectl get crd | grep cert-manager.io
|
||||
|
||||
ingressroute:
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
gomplate -f traefik-ingressroute-gomplate.yaml | kubectl apply -f -
|
||||
@@ -1,15 +1,33 @@
|
||||
additionalArguments:
|
||||
- "--serversTransport.insecureSkipVerify=true"
|
||||
- "--log.level=INFO"
|
||||
|
||||
deployment:
|
||||
enabled: true
|
||||
replicas: 1
|
||||
annotations: {}
|
||||
podAnnotations: {}
|
||||
additionalContainers: []
|
||||
initContainers: []
|
||||
|
||||
ports:
|
||||
web:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
http:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
websecure:
|
||||
http:
|
||||
tls:
|
||||
enabled: true
|
||||
|
||||
logs:
|
||||
general:
|
||||
level: DEBUG
|
||||
|
||||
ingressRoute:
|
||||
dashboard:
|
||||
enabled: true
|
||||
entryPoints: [web, websecure]
|
||||
matchRule: Host(`traefik-dashboard.{{ .Env.EXTERNAL_DOMAIN }}`)
|
||||
|
||||
entryPoints:
|
||||
- websecure
|
||||
|
||||
Reference in New Issue
Block a user