The start.sh script is using kwok and Go.
To delete the cluster: kowkctl delete cluster --name fake
| #!/usr/bin/env bash | |
| set -exuo pipefail | |
| command -v kwok > /dev/null || { echo "need to install kwok -> brew install kwok "; exit 1 ; } | |
| TMP=~/tmp | |
| KUBE_VERSION="v1.27.1" | |
| function main { | |
| mkdir -p "$TMP" && cd "$TMP" | |
| wget https://dl.k8s.io/"$KUBE_VERSION"/kubernetes-src.tar.gz -O - | tar xz | |
| # | |
| # wget https://dl.k8s.io/"$KUBE_VERSION"/kubernetes-src.tar.gz && \ | |
| # tar xzf kubernetes-src.tar.gz | |
| make WHAT=cmd/kube-apiserver | |
| make WHAT=cmd/kube-controller-manager | |
| make WHAT=cmd/kube-scheduler | |
| KUBE_BIN="$TMP/_output/local/bin/$(go env GOOS)/$(go env GOARCH)" | |
| kwokctl create cluster \ | |
| --name fake \ | |
| --runtime binary \ | |
| --kube-admission \ | |
| --kube-authorization \ | |
| --kubeconfig "$TMP"/kubeconfig \ | |
| --kube-controller-manager-binary "$KUBE_BIN"/kube-controller-manager \ | |
| --kube-apiserver-binary "$KUBE_BIN"/kube-apiserver \ | |
| --kube-scheduler-binary "$KUBE_BIN"/kube-scheduler | |
| pushd "$TMP" > /dev/null | |
| for i in $(seq 1 10); | |
| do | |
| export NODE="node-$i" | |
| cat << EOH >> node.yaml | |
| --- | |
| apiVersion: v1 | |
| kind: Node | |
| metadata: | |
| annotations: | |
| kwok.x-k8s.io/node: fake | |
| node.alpha.kubernetes.io/ttl: "0" | |
| labels: | |
| beta.kubernetes.io/arch: amd64 | |
| beta.kubernetes.io/os: linux | |
| kubernetes.io/arch: arm64 | |
| kubernetes.io/hostname: ${NODE} | |
| kubernetes.io/os: linux | |
| kubernetes.io/role: agent | |
| node-role.kubernetes.io/agent: "" | |
| type: kwok-controller | |
| name: ${NODE} | |
| spec: | |
| EOH | |
| done | |
| kubectl --context kwok-fake --kubeconfig "$TMP"/kubeconfig apply -f "$TMP"/node.yaml | |
| echo | |
| echo "To access the cluster:" | |
| echo | |
| echo " export KUBECONFIG=$TMP/kubeconfig" | |
| echo | |
| echo | |
| } | |
| main |