107 lines
3.4 KiB
Bash
Executable File
107 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
REGISTRY_HOST="registry.juwan.xhttp.zip"
|
|
CNPG_VERSION="1.29.0"
|
|
STRIMZI_VERSION="1.0.0"
|
|
REDIS_OP_VERSION="0.24.0"
|
|
MONGODB_OP_VERSION="1.8.0"
|
|
|
|
MODE="${1:-server}"
|
|
|
|
if [ "$MODE" != "server" ] && [ "$MODE" != "agent" ]; then
|
|
echo "usage: $0 [server|agent]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f /root/registry-password ]; then
|
|
echo "need /root/registry-password (zot admin password)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
write_registries() {
|
|
mkdir -p /etc/rancher/k3s
|
|
cat > /etc/rancher/k3s/registries.yaml <<EOF
|
|
mirrors:
|
|
${REGISTRY_HOST}:
|
|
endpoint:
|
|
- "https://${REGISTRY_HOST}"
|
|
configs:
|
|
${REGISTRY_HOST}:
|
|
auth:
|
|
username: admin
|
|
password: $(cat /root/registry-password)
|
|
EOF
|
|
}
|
|
|
|
if [ "$MODE" = "agent" ]; then
|
|
if [ -z "${K3S_URL:-}" ] || [ -z "${K3S_TOKEN:-}" ]; then
|
|
echo "agent mode requires K3S_URL and K3S_TOKEN env" >&2
|
|
echo " on the server: cat /var/lib/rancher/k3s/server/node-token" >&2
|
|
echo " then on agent: K3S_URL=https://<server-ip>:6443 K3S_TOKEN=<token> $0 agent" >&2
|
|
exit 1
|
|
fi
|
|
write_registries
|
|
if ! command -v k3s-agent >/dev/null 2>&1 && ! systemctl is-active --quiet k3s-agent; then
|
|
curl -sfL https://get.k3s.io | K3S_URL="$K3S_URL" K3S_TOKEN="$K3S_TOKEN" sh -
|
|
else
|
|
systemctl restart k3s-agent
|
|
fi
|
|
echo
|
|
echo "k3s agent joined ${K3S_URL}"
|
|
exit 0
|
|
fi
|
|
|
|
if ! systemctl is-active --quiet k3s; then
|
|
curl -sfL https://get.k3s.io | \
|
|
INSTALL_K3S_EXEC="--disable=traefik --write-kubeconfig-mode=644" \
|
|
sh -
|
|
fi
|
|
|
|
if ! command -v helm >/dev/null 2>&1; then
|
|
curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | \
|
|
gpg --dearmor -o /usr/share/keyrings/helm.gpg
|
|
echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" \
|
|
> /etc/apt/sources.list.d/helm-stable-debian.list
|
|
apt-get update
|
|
apt-get install -y helm
|
|
fi
|
|
|
|
write_registries
|
|
systemctl restart k3s
|
|
|
|
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
|
until kubectl get nodes >/dev/null 2>&1; do sleep 2; done
|
|
|
|
K01_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
kubectl apply -f "${K01_DIR}/00-base/"
|
|
|
|
kubectl apply --server-side --force-conflicts -f \
|
|
"https://github.com/cloudnative-pg/cloudnative-pg/releases/download/v${CNPG_VERSION}/cnpg-${CNPG_VERSION}.yaml"
|
|
|
|
kubectl create namespace kafka 2>/dev/null || true
|
|
kubectl apply --server-side --force-conflicts -n kafka \
|
|
-f "https://github.com/strimzi/strimzi-kafka-operator/releases/download/${STRIMZI_VERSION}/strimzi-cluster-operator-${STRIMZI_VERSION}.yaml"
|
|
|
|
helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ 2>/dev/null || true
|
|
helm repo add mongodb https://mongodb.github.io/helm-charts 2>/dev/null || true
|
|
helm repo update
|
|
|
|
helm upgrade --install redis-operator ot-helm/redis-operator \
|
|
--version "${REDIS_OP_VERSION}" \
|
|
--namespace redis-operator --create-namespace
|
|
|
|
helm upgrade --install mongodb-kubernetes mongodb/mongodb-kubernetes \
|
|
--version "${MONGODB_OP_VERSION}" \
|
|
--namespace mongodb-operator --create-namespace \
|
|
--set operator.watchNamespace=juwan
|
|
|
|
kubectl -n cnpg-system rollout status deploy/cnpg-controller-manager --timeout=300s
|
|
kubectl -n kafka rollout status deploy/strimzi-cluster-operator --timeout=300s
|
|
kubectl -n redis-operator rollout status deploy/redis-operator --timeout=300s
|
|
kubectl -n mongodb-operator rollout status deploy/mongodb-kubernetes-operator --timeout=300s
|
|
|
|
echo
|
|
echo "k3s server + 4 operators ready"
|
|
echo "node token: $(cat /var/lib/rancher/k3s/server/node-token)"
|