⚠️ This page is a stub! We’re working on it! ⚠️
Configuration
We know this is currently a bit lacking right now and will expand it over time - PRs welcome!
To configure kind cluster creation, you will need to create a config file. This file follows Kubernetes conventions for versioning etc.
A minimal valid config is:
Any given version of kind may support different versions which will have different options and behavior. This is why we must always specify the version.
This mechanism is inspired by Kubernetes resources and component config.
To use this config, place the contents in a file config.yaml
and then run kind create cluster --config=config.yaml
from the same directory.
Cluster-Wide Options
The following high level options are available.
NOTE: not all options are documented yet! We will fix this with time, PRs welcome!
Kubernetes can be enabled cluster-wide across all Kubernetes components with the following config:
### Runtime Config Kubernetes API server runtime-config can be toggled using the
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
featureGates:
# any feature gate can be enabled here with “Name”: true
# or disabled here with “Name”: false
# not all feature gates are tested, however
“CSIMigration”: true
runtimeConfig
key, which maps to the --runtime-config
kube-apiserver flag. This may be used to e.g. disable beta / alpha APIs.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 runtimeConfig: “api/alpha”: “false”
### Networking Multiple details of the cluster’s networking can be customized under the
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
runtimeConfig:
“api/alpha”: “false”
networking
field.
#### IP Family
KIND has limited support for IPv6 (and soon dual-stack!) clusters, you can switch from the default of IPv4 by setting:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: ipFamily: ipv6
NOTE: you may need to to enable ipv6 in order to use this. IPv6 does not work on docker for mac because port forwarding ipv6 is not yet supported in docker for mac. #### API Server The API Server listen address and port can be customized with: kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: # WARNING: It is _strongly_ recommended that you keep this the default # (127.0.0.1) for security reasons. However it is possible to change this. apiServerAddress: “127.0.0.1” # By default the API server listens on a random open port. # You may choose a specific port but probably don’t need to in most cases. # Using a random port makes it easier to spin up multiple clusters. apiServerPort: 6443
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
ipFamily: ipv6
> > > Security Goose Says: > > NOTE: You should really think thrice before exposing your kind cluster publicly! kind does not ship with state of the art security or any update strategy (other than disposing your cluster and creating a new one)! We strongly discourage exposing kind to anything other than loopback. #### Pod Subnet You can configure the subnet used for pod IPs by setting kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: podSubnet: “10.244.0.0/16” #### Service Subnet You can configure the Kubernetes service subnet used for service IPs by setting kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: serviceSubnet: “10.96.0.0/12”
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
# WARNING: It is strongly recommended that you keep this the default
# (127.0.0.1) for security reasons. However it is possible to change this.
apiServerAddress: “127.0.0.1”
# By default the API server listens on a random open port.
# You may choose a specific port but probably don’t need to in most cases.
# Using a random port makes it easier to spin up multiple clusters.
apiServerPort: 6443
#### Disable Default CNI KIND ships with a simple networking implementation (“kindnetd”) based around standard CNI plugins (
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
serviceSubnet: “10.96.0.0/12”
ptp
, host-local
, …) and simple netlink routes.
This CNI also handles IP masquerade.
You may disable the default to install a different CNI. This is a power user feature with limited support, but many common CNI manifests are known to work, e.g. Calico.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: # the default CNI will not be installed disableDefaultCNI: true
#### kube-proxy mode You can configure the kube-proxy mode that will be used, between iptables and ipvs. By default iptables is used kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: kubeProxyMode: “ipvs”
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
disableDefaultCNI: true
### Nodes The
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
kubeProxyMode: “ipvs”
kind: Cluster
object has a nodes
field containing a list of node
objects. If unset this defaults to:
nodes:
# one node hosting a control plane
- role: control-plane
You can create a multi node cluster with the following config:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 # One control plane node and three “workers”. # # While these will not add more real compute capacity and # have limited isolation, this can be useful for testing # rolling updates etc. # # The API-server and other control plane components will be # on the control-plane node. # # You probably don’t need this unless you are testing Kubernetes itself. nodes: - role: control-plane - role: worker - role: worker - role: worker
You can also set a specific Kubernetes version by setting the
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
# One control plane node and three “workers”.
#
# While these will not add more real compute capacity and
# have limited isolation, this can be useful for testing
# rolling updates etc.
#
# The API-server and other control plane components will be
# on the control-plane node.
#
# You probably don’t need this unless you are testing Kubernetes itself.
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
node
‘s container image. You can find available image tags on the releases page. Please include the @sha256:
from the image in the release notes, as seen in this example:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55
## Per-Node Options
The following options are available for setting on each entry in nodes
.
NOTE: not all options are documented yet! We will fix this with time, PRs welcome!
### Extra Mounts
Extra mounts can be used to pass through storage on the host to a kind node for persisting data, mounting through code etc.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane # add a mount from /path/to/my/files on the host to /files on the node extraMounts: - hostPath: /path/to/my/files/ containerPath: /files