Skip to content

Instantly share code, notes, and snippets.

@Skarlso
Created January 22, 2022 15:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Skarlso/99fcf76c06a2e14580fb50b6548c2fed to your computer and use it in GitHub Desktop.
Save Skarlso/99fcf76c06a2e14580fb50b6548c2fed to your computer and use it in GitHub Desktop.
Local test kind cluster with registry
#!/bin/bash
set -o errexit
create() {
set +e
kind get clusters | grep "${NAME}"
exitCode=$?
set -e
if [ $exitCode -eq "0" ]; then
echo "kind cluster already exists"
kubectl config use-context "kind-${NAME}"
exit 0
fi
# create registry container unless it already exists
reg_name='kind-registry'
reg_port='5000'
running="$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)"
if [ "${running}" != 'true' ]; then
docker run \
-d --restart=always -p "127.0.0.1:${reg_port}:5000" --name "${reg_name}" \
registry:2
fi
# create a cluster with the local registry enabled in containerd
cat <<EOF | kind create cluster --wait 2m0s --name ${NAME} --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:${reg_port}"]
endpoint = ["http://${reg_name}:${reg_port}"]
EOF
# connect the registry to the cluster network
# (the network may already be connected)
docker network connect "kind" "${reg_name}" || true
# Document the local registry
# https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/generic/1755-communicating-a-local-registry
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: local-registry-hosting
namespace: kube-public
data:
localRegistryHosting.v1: |
host: "localhost:${reg_port}"
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
EOF
}
delete() {
kind delete cluster --name "${NAME}"
}
usage() { echo "Usage: $0 [-h help] [-a <delete|[create]>] [-n <kind-test>]" 1>&2; exit 1; }
NAME="kind-test"
ACTION="create"
while getopts ":a:n:h" o; do
case "${o}" in
a)
ACTION="${OPTARG}"
;;
n)
NAME="${OPTARG}"
;;
h)
usage
exit 0
;;
*)
echo "Invalid flag ${OPTARG};"
usage
exit 1
esac
done
shift $((OPTIND-1))
if [[ "${ACTION}" == "create" ]]; then
create
elif [[ "${ACTION}" == "delete" ]]; then
delete
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment