Add bootstrapper base

This commit is contained in:
Kasper Juul Hermansen 2022-12-10 22:08:07 +01:00
commit 88d112b47b
Signed by: kjuulh
GPG Key ID: 0F95C140730F2F23
20 changed files with 258 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

4
README.md Normal file
View File

@ -0,0 +1,4 @@
# Clank bootstrapper
- Links:
[preparations](https://github.com/syself/cluster-api-provider-hetzner/blob/main/docs/topics/preparation.md)

4
clusterapi/.gitignore vendored Executable file
View File

@ -0,0 +1,4 @@
variables.sh
keys/
manifest.json
output/

16
clusterapi/add-ccm.sh Executable file
View File

@ -0,0 +1,16 @@
#!/bin/bash
set -e
. variables.sh
helm repo add syself https://charts.syself.com
helm repo update syself
CILIUM_VERSION=1.12.2
KUBECONFIG=$CAPH_WORKER_CLUSTER_KUBECONFIG helm upgrade --install ccm syself/ccm-hcloud --version 1.0.11 \
--namespace kube-system \
--set secret.name=hetzner \
--set secret.tokenKeyName=hcloud \
--set privateNetwork.enabled=false

13
clusterapi/add-cni.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/bash
set -e
. variables.sh
helm repo add cilium https://helm.cilium.io/
CILIUM_VERSION=1.12.2
KUBECONFIG=$CAPH_WORKER_CLUSTER_KUBECONFIG helm upgrade --install cilium cilium/cilium --version "$CILIUM_VERSION" \
--namespace kube-system \
-f https://raw.githubusercontent.com/syself/cluster-api-provider-hetzner/main/templates/cilium/cilium.yaml

15
clusterapi/add-csi.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
set -e
. variables.sh
cat << EOF > output/csi-values.yaml
storageClasses:
- name: hcloud-volumes
defaultStorageClass: true
reclaimPolicy: Retain
EOF
KUBECONFIG=$CAPH_WORKER_CLUSTER_KUBECONFIG helm upgrade --install csi syself/csi-hcloud --version 0.2.0 \
--namespace kube-system -f output/csi-values.yaml

9
clusterapi/get-config.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
set -e
. variables.sh
mkdir -p output/
clusterctl get kubeconfig "$CLUSTER_NAME" > $CAPH_WORKER_CLUSTER_KUBECONFIG

View File

@ -0,0 +1,31 @@
#!/bin/bash
set -e
. variables.sh
sleep 20
OUTPUT_TEMPLATE=/tmp/clusterapi/clank-management.yaml
rm -rf "/tmp/clusterapi/" || true
echo "templating management cluster"
mkdir -p /tmp/clusterapi/
clusterctl generate cluster "$CLUSTER_NAME" > "$OUTPUT_TEMPLATE"
nvim /tmp/clusterapi/clank-management.yaml
read -p "Continue? (N/y) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
echo "aborting"
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
fi
kubectl apply -f "$OUTPUT_TEMPLATE"
kubectl wait --for=jsonpath='{.status.phase}'=Provisioned "cluster/$CLUSTER_NAME"
echo "cluster has been provisioned"

7
clusterapi/initialize.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
set -e
rm -rf output
clusterctl init --core cluster-api --bootstrap kubeadm --control-plane kubeadm --infrastructure hetzner

15
clusterapi/latest-releases.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
set -e
PROVIDER_OWNER=syself
PROVIDER_REPO=cluster-api-provider-hetzner
PROVIDER="$PROVIDER_OWNER/$PROVIDER_REPO"
echo "listing newest releases (includes pre-releases)"
gh release list -R "$PROVIDER"
echo
echo "view the most recent release"
newest=$(gh release list -R syself/cluster-api-provider-hetzner -L 1 | tail -n +1 | awk '{print $1}')
gh release view "$newest" -R "$PROVIDER"

11
clusterapi/load-secret.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
set -e
. variables.sh
echo "loading HCLOUD_TOKEN"
kubectl create secret generic hetzner --from-literal=hcloud=$HCLOUD_TOKEN
kubectl patch secret hetzner -p '{"metadata":{"labels":{"clusterctl.cluster.x-k8s.io/move":""}}}'

17
clusterapi/move-cluster.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/bash
set -e
. variables.sh
echo "initializing cluster api in management cluster"
export KUBECONFIG=output/workload-kubeconfig
clusterctl init --core cluster-api --bootstrap kubeadm --control-plane kubeadm --infrastructure hetzner
echo "switching back to helm"
export KUBECONFIG=~/.kube/config
clusterctl move --to-kubeconfig $CAPH_WORKER_CLUSTER_KUBECONFIG
echo "move done"

27
clusterapi/pack-image.sh Executable file
View File

@ -0,0 +1,27 @@
#!/bin/bash
set -e
. variables.sh
RELEASE_VERSION="1.0.0-beta.10"
TEMPLATE_VERSION=$KUBERNETES_VERSION-ubuntu-22-04-containerd
PROVIDER_OWNER=syself
PROVIDER_REPO=cluster-api-provider-hetzner
OUTPUT_DIR=/tmp/clusterapi
PROVIDER="$PROVIDER_OWNER/$PROVIDER_REPO"
OUTPUT_FILE=output.tar.gz
OUTPUT="$OUTPUT_DIR/$OUTPUT_FILE"
rm -rf "$OUTPUT_DIR" || true
gh release download "v$RELEASE_VERSION" \
-R "$PROVIDER" \
--archive tar.gz \
-O "$OUTPUT"
(cd $OUTPUT_DIR ; tar -xzf "$OUTPUT_FILE")
packer build "$OUTPUT_DIR/$PROVIDER_REPO-$RELEASE_VERSION/templates/node-image/$TEMPLATE_VERSION/image.json"

2
flux/.gitignore vendored Executable file
View File

@ -0,0 +1,2 @@
keys/
variables.sh

18
flux/bootstrap.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
set -e
. variables.sh
#eval "$(ssh-agent -s)"
#ssh-add keys/id_clank_management
flux bootstrap git \
--url="https://$MANAGEMENT_GITOPS_REPO" \
--branch="main" \
--path="clusters/clank-management" \
--kubeconfig="$CAPH_WORKER_CLUSTER_KUBECONFIG" \
--username="kjuulh" \
--password="$GITEA_TOKEN" \
--token-auth=true

7
flux/generate-keypair.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
set -e
mkdir -p keys/
ssh-keygen -t ed25519 -C "clank_management@kjuulh.io" -f "keys/id_clank_management"

16
kind/create-kind.sh Executable file
View File

@ -0,0 +1,16 @@
#!/bin/bash
#
. kind.sh
kind create cluster --name "$CLUSTER_NAME"
until kubectl cluster-info --context "kind-$CLUSTER_NAME"
do
echo "waiting for cluster to come online..."
sleep 1
done
echo "checking nodes"
kubectl get nodes
kubectl wait --for=condition=ready nodes/clank-boostrap-control-plane

5
kind/delete-kind.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
. kind.sh
kind delete cluster --name "$CLUSTER_NAME"

3
kind/kind.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
CLUSTER_NAME=clank-boostrap

37
run.sh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/bash
set -e
echo "setting up kind"
pushd kind
./delete-kind.sh || true
./create-kind.sh
popd
echo "setting up boostrap cluster api"
pushd clusterapi
./initialize.sh
./load-secret.sh
./initialize-hetzner.sh
./get-config.sh
./add-cni.sh
./add-ccm.sh
./add-csi.sh
./move-clusters.sh
popd
echo "installing flux"
pushd flux
./bootstrap.sh
popd