Configuration
Table of contents
- Overview
- Configuration File Structure
- Configuration Options
- Configuration Profiles
- Examples
- Next Steps
Overview
BeKind can be customized using a YAML configuration file. By default, BeKind looks for configuration at ~/.bekind/config.yaml, but you can specify a custom location using the --config flag.
bekind start --config /path/to/custom/config.yaml
Configuration File Structure
Here’s a complete example showing all available configuration options:
domain: "7f000001.nip.io"
kindImageVersion: "kindest/node:v1.34.0"
helmCharts:
- url: "https://kubernetes.github.io/ingress-nginx"
repo: "ingress-nginx"
chart: "ingress-nginx"
release: "nginx-ingress"
namespace: "ingress-controller"
wait: true
valuesObject:
controller:
hostNetwork: true
kindConfig: |
kind: Cluster
name: my-cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
loadDockerImages:
pullImages: true
images:
- gcr.io/kuar-demo/kuard-amd64:blue
postInstallManifests:
- "file:///path/to/manifest.yaml"
postInstallActions:
- action: restart
kind: Deployment
name: my-deployment
namespace: default
postInstallPatches:
- target:
group: gateway.networking.k8s.io
version: v1
kind: GRPCRoute
name: argocd-server-grpc
namespace: argocd
patch: |
- op: replace
path: /spec/rules/0/backendRefs/0/port
value: 443
Configuration Options
domain
Type: string
Optional: Yes
Description: Domain to use for any ingresses that BeKind might autocreate. Assumes wildcard DNS.
domain: "7f000001.nip.io"
Currently unused/ignored in most workflows, but reserved for future features.
kindImageVersion
Type: string
Optional: Yes
Default: Latest stable KIND node image
Description: The KIND node image to use. This determines which Kubernetes version your cluster will run.
kindImageVersion: "kindest/node:v1.34.0"
You can find available versions on Docker Hub. You can also supply your own public image or a local image.
kindConfig
Type: string (multiline)
Optional: Yes
Description: A custom KIND cluster configuration. This is passed directly to KIND.
kindConfig: |
kind: Cluster
name: my-cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
podSubnet: "10.254.0.0/16"
serviceSubnet: "172.30.0.0/16"
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress=host"
extraPortMappings:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
“Garbage in/garbage out” - BeKind passes this configuration directly to KIND without validation. Errors will come from KIND or the Kubernetes API.
helmStack
Type: array
Optional: Yes
Description: List of Helm stack names to load and install. Each stack references a stack.yaml file in ~/.bekind/helmstack/<stack-name>/.
Stacks are processed before inline helmCharts and allow you to organize and reuse Helm chart configurations across multiple clusters.
See the Helm Charts feature documentation for detailed information about Helm Stacks.
Example:
helmStack:
- name: argocd-cilium
- name: monitoring
This would load charts from:
~/.bekind/helmstack/argocd-cilium/stack.yaml~/.bekind/helmstack/monitoring/stack.yaml
helmCharts
Type: array
Optional: Yes
Description: List of Helm charts to install after cluster creation.
See the Helm Charts feature documentation for detailed information.
Example:
helmCharts:
- url: "https://argoproj.github.io/argo-helm"
repo: "argo"
chart: "argo-cd"
release: "argocd"
namespace: "argocd"
wait: true
version: "5.46.0"
valuesObject:
server:
service:
type: NodePort
loadDockerImages
Type: object
Optional: Yes
Description: Configuration for loading Docker images into the KIND cluster.
See the Loading Docker Images feature documentation for detailed information.
Example:
loadDockerImages:
pullImages: true
images:
- gcr.io/kuar-demo/kuard-amd64:blue
- quay.io/christianh814/simple-go:latest
postInstallManifests
Type: array
Optional: Yes
Description: List of Kubernetes YAML manifest files to apply after cluster setup. Supports both local files (file://) and remote URLs (http:// or https://).
See the Post Install Manifests feature documentation for detailed information.
Example:
postInstallManifests:
- "file:///home/user/k8s/app.yaml"
- "https://example.com/configs/service.yaml"
- "file:///home/user/k8s/ingress.yaml"
postInstallActions
Type: array
Optional: Yes
Description: Actions to perform on Kubernetes resources after installation.
See the Post Install Actions feature documentation for detailed information.
Example:
postInstallActions:
- action: restart
kind: Deployment
name: argocd-server
namespace: argocd
- action: delete
kind: Pod
namespace: default
labelSelector:
app: cleanup
postInstallPatches
Type: array
Optional: Yes
Description: JSON patches to apply to Kubernetes resources after installation. Provides Kustomize-like patching capabilities.
See the Post Install Patches feature documentation for detailed information.
Example:
postInstallPatches:
- target:
group: gateway.networking.k8s.io
version: v1
kind: GRPCRoute
name: argocd-server-grpc
namespace: argocd
patch: |
- op: replace
path: /spec/rules/0/backendRefs/0/port
value: 443
- target:
version: v1
kind: Service
name: my-service
# namespace defaults to "default"
# group defaults to "" (core)
patch: |
- op: add
path: /metadata/labels/app
value: my-app
Configuration Profiles
BeKind supports configuration profiles, which allow you to save and reuse different cluster configurations.
Creating a Profile
Profiles are stored in ~/.bekind/profiles/<profile-name>/config.yaml.
For example, to create an “argocd” profile:
mkdir -p ~/.bekind/profiles/argocd
nano ~/.bekind/profiles/argocd/config.yaml
You can also have multiple YAML configuration files in the same profile directory. All .yaml files in the profile directory will be executed when you run the profile.
Using a Profile
Use the run command to execute a profile:
bekind run argocd
This will look for configuration files in ~/.bekind/profiles/argocd/ and execute each one.
Custom Profile Directory
If your profiles are stored in a different location, use the --profile-dir flag:
bekind run myprofile --profile-dir /path/to/profiles
For example, if your config is at /tmp/foo/config.yaml:
bekind run foo --profile-dir /tmp
Viewing Profile Configuration
To view a profile’s configuration without running it:
bekind run argocd --view
Default Configuration
If you don’t want to use profiles, you can use bekind start with a config file:
bekind start --config ~/.bekind/config.yaml
Or place your config at ~/.bekind/config.yaml and BeKind will use it by default.
Examples
Minimal Configuration
kindImageVersion: "kindest/node:v1.34.0"
Development Cluster with Ingress
domain: "127.0.0.1.nip.io"
kindImageVersion: "kindest/node:v1.34.0"
kindConfig: |
kind: Cluster
name: dev
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
helmCharts:
- url: "https://kubernetes.github.io/ingress-nginx"
repo: "ingress-nginx"
chart: "ingress-nginx"
release: "nginx-ingress"
namespace: "ingress-nginx"
wait: true
Next Steps
Learn more about specific features: