Skip to content

Instantly share code, notes, and snippets.

@pentago
Last active March 16, 2022 21:13
Show Gist options
  • Save pentago/785dbe6251fba12bd37505daad583a57 to your computer and use it in GitHub Desktop.
Save pentago/785dbe6251fba12bd37505daad583a57 to your computer and use it in GitHub Desktop.
k3d-multi
SHELL := /bin/sh
help: ## Usage: 'make <target>' where target is: new, up, down, all, tf, destroy, clean.
@egrep '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
new: clean ## Provisions k3s cluster
@k3d cluster create --config config.yaml
up: ## Starts k3s cluster
@k3d cluster start k3d --all
down: ## Stops k3s cluster
@k3d cluster stop k3d --all
all: clean ## Provisions k3s cluster and runs Terraform
@k3d cluster create --config config.yaml && sleep 30 && terraform init && terraform apply -auto-approve
tf: ## Runs Terraform manifest
@terraform init -upgrade && terraform apply -auto-approve -target=module.local
destroy: ## Destroys k3s clusters
@k3d cluster delete --all
clean: ## Destroys clusters and cleans Terraform leftovers
@k3d cluster delete --all && rm -rf .terraform* terraform.* && rm -rf ~/.kube/k3d-*
kubeconfig-single:
@export KUBECONFIG=$HOME/.kube/k3d.yaml
kubeconfig-multi:
@export KUBECONFIG=$HOME/.kube/k3d-gitops.yaml:$HOME/.kube/k3d-development.yaml:$HOME/.kube/k3d-production.yaml
kubeconfig-default:
@export KUBECONFIG=$HOME/.kube/config
.ONESHELL:
multi: clean kubeconfig-multi ## Create k3s multi-cluster setup
@k3d cluster create \
--servers 1 \
--agents 1 \
--api-port 64432 \
--network multicluster \
--image rancher/k3s:v1.21.6-k3s1 \
--token superSecretToken \
--timeout 60s \
--port 8082:80@loadbalancer:0 \
--port 4432:443@loadbalancer:0 \
--k3s-arg "--kube-apiserver-arg=feature-gates=EphemeralContainers=true@server:0" \
--k3s-arg "--kube-scheduler-arg=feature-gates=EphemeralContainers=true@server:0" \
--k3s-arg "--kubelet-arg=feature-gates=EphemeralContainers=true@agent:0" \
--k3s-arg "--cluster-cidr=10.1.0.0/16@server:0" \
--k3s-arg "--service-cidr=10.0.0.0/16@server:0" \
--k3s-arg "--etcd-disable-snapshots@server:0" \
--k3s-arg "--tls-san=k3d-development-serverlb@server:0" \
--k3s-arg "--disable=traefik@server:0" \
--k3s-arg "--disable=network-policy@server:0" \
--k3s-arg "--disable=cloud-controller@server:0" \
--k3s-node-label tier=server@server:0 \
--k3s-node-label tier=worker@agent:0 \
--k3s-node-label worker=a@agent:0 \
--wait development; \
\
k3d kubeconfig get development > /Users/dzhi/.kube/k3d-development.yaml; \
\
k3d cluster create \
--servers 1 \
--agents 1 \
--api-port 64433 \
--network multicluster \
--image rancher/k3s:v1.21.6-k3s1 \
--token superSecretToken \
--timeout 60s \
--port 8083:80@loadbalancer:0 \
--port 4433:443@loadbalancer:0 \
--k3s-arg "--kube-apiserver-arg=feature-gates=EphemeralContainers=true@server:0" \
--k3s-arg "--kube-scheduler-arg=feature-gates=EphemeralContainers=true@server:0" \
--k3s-arg "--kubelet-arg=feature-gates=EphemeralContainers=true@agent:0" \
--k3s-arg "--cluster-cidr=10.1.0.0/16@server:0" \
--k3s-arg "--service-cidr=10.0.0.0/16@server:0" \
--k3s-arg "--etcd-disable-snapshots@server:0" \
--k3s-arg "--tls-san=k3d-production-serverlb@server:0" \
--k3s-arg "--disable=traefik@server:0" \
--k3s-arg "--disable=network-policy@server:0" \
--k3s-arg "--disable=cloud-controller@server:0" \
--k3s-node-label tier=server@server:0 \
--k3s-node-label tier=worker@agent:0 \
--k3s-node-label worker=a@agent:0 \
--wait production; \
\
k3d kubeconfig get production > /Users/dzhi/.kube/k3d-production.yaml; \
\
k3d cluster create \
--servers 1 \
--agents 1 \
--api-port 64431 \
--network multicluster \
--image rancher/k3s:v1.21.6-k3s1 \
--token superSecretToken \
--timeout 60s \
--port 8081:80@loadbalancer:0 \
--port 4431:443@loadbalancer:0 \
--k3s-arg "--kube-apiserver-arg=feature-gates=EphemeralContainers=true@server:0" \
--k3s-arg "--kube-scheduler-arg=feature-gates=EphemeralContainers=true@server:0" \
--k3s-arg "--kubelet-arg=feature-gates=EphemeralContainers=true@agent:0" \
--k3s-arg "--cluster-cidr=10.1.0.0/16@server:0" \
--k3s-arg "--service-cidr=10.0.0.0/16@server:0" \
--k3s-arg "--etcd-disable-snapshots@server:0" \
--k3s-arg "--tls-san=k3d-gitops-serverlb@server:0" \
--k3s-arg "--disable=traefik@server:0" \
--k3s-arg "--disable=network-policy@server:0" \
--k3s-arg "--disable=cloud-controller@server:0" \
--k3s-node-label tier=server@server:0 \
--k3s-node-label tier=worker@agent:0 \
--k3s-node-label worker=a@agent:0 \
--wait gitops; \
\
k3d kubeconfig get gitops > /Users/dzhi/.kube/k3d-gitops.yaml \
dev-cluster-development: ## Applies module 'dev-cluster-development'
@terraform init -upgrade \
&& terraform apply -auto-approve -target=module.dev-cluster-development \
&& sed -i '' 's/0\.0\.0\.0/k3d-development-serverlb/g' /Users/dzhi/.kube/k3d-development.yaml
dev-cluster-production: ## Applies module 'dev-cluster-production'
@terraform init -upgrade \
&& terraform apply -auto-approve -target=module.dev-cluster-production \
&& sed -i '' 's/0\.0\.0\.0/k3d-production-serverlb/g' /Users/dzhi/.kube/k3d-production.yaml
dev-cluster-gitops: ## Applies module 'dev-cluster-gitops'
@terraform init -upgrade \
&& terraform apply -auto-approve -target=module.dev-cluster-gitops \
&& sed -i '' 's/0\.0\.0\.0/k3d-gitops-serverlb/g' /Users/dzhi/.kube/k3d-gitops.yaml \
&& argocd login argocd.glorify.lan:4431 --grpc-web --username admin --password 'midnajt blu'
dev-clusters: dev-cluster-development dev-cluster-production dev-cluster-gitops ## Applies all dev cluster modules
multi-all: clean multi kubeconfig-multi dev-cluster-development dev-cluster-production dev-cluster-gitops ## Create k3s multi-cluster setup and applies Terarform
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment