base on Kubernetes IN Docker - local clusters for testing Kubernetes <p align="center"><img alt="kind" src="./logo/logo.png" width="300px" /></p> # Please see [Our Documentation](https://kind.sigs.k8s.io/docs/user/quick-start/) for more in-depth installation etc. kind is a tool for running local Kubernetes clusters using Docker container "nodes". kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI. If you have [go] 1.16+ and [docker], [podman] or [nerdctl] installed `go install sigs.k8s.io/[email protected] && kind create cluster` is all you need! ![](site/static/images/kind-create-cluster.png) kind consists of: - Go [packages][packages] implementing [cluster creation][cluster package], [image build][build package], etc. - A command line interface ([`kind`][kind cli]) built on these packages. - Docker [image(s)][images] written to run systemd, Kubernetes, etc. - [`kubetest`][kubetest] integration also built on these packages (WIP) kind bootstraps each "node" with [kubeadm][kubeadm]. For more details see [the design documentation][design doc]. **NOTE**: kind is still a work in progress, see the [1.0 roadmap]. ## Installation and usage For a complete [install guide] see [the documentation here][install guide]. You can install kind with `go install sigs.k8s.io/[email protected]`. **NOTE**: please use the latest go to do this. KIND is developed with the latest stable go, see [`.go-version`](./.go-version) for the exact version we're using. This will put `kind` in `$(go env GOPATH)/bin`. If you encounter the error `kind: command not found` after installation then you may need to either add that directory to your `$PATH` as shown [here](https://golang.org/doc/code.html#GOPATH) or do a manual installation by cloning the repo and run `make build` from the repository. Without installing go, kind can be built reproducibly with docker using `make build`. Stable binaries are also available on the [releases] page. Stable releases are generally recommended for CI usage in particular. To install, download the binary for your platform from "Assets" and place this into your `$PATH`: On Linux: ```console # For AMD64 / x86_64 [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-$(uname)-amd64 # For ARM64 [ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-$(uname)-arm64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind ``` On macOS via Homebrew: ```console brew install kind ``` On macOS via MacPorts: ```console sudo port selfupdate && sudo port install kind ``` On macOS via Bash: ```console # For Intel Macs [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-darwin-amd64 # For M1 / ARM Macs [ $(uname -m) = arm64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-darwin-arm64 chmod +x ./kind mv ./kind /some-dir-in-your-PATH/kind ``` On Windows: ```powershell curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.31.0/kind-windows-amd64 Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe # OR via Chocolatey (https://chocolatey.org/packages/kind) choco install kind ``` To use kind, you will need to [install docker]. Once you have docker running you can create a cluster with: ```console kind create cluster ``` To delete your cluster use: ```console kind delete cluster ``` <!--TODO(bentheelder): improve this part of the guide--> To create a cluster from Kubernetes source: - ensure that Kubernetes is cloned in `$(go env GOPATH)/src/k8s.io/kubernetes` - build a node image and create a cluster with: ```console kind build node-image kind create cluster --image kindest/node:latest ``` Multi-node clusters and other advanced features may be configured with a config file, for more usage see [the docs][user guide] or run `kind [command] --help` ## Community Please reach out for bugs, feature requests, and other issues! The maintainers of this project are reachable via: - [Kubernetes Slack] in the [#kind] channel - [filing an issue] against this repo - The Kubernetes [SIG-Testing Mailing List] Current maintainers are [@aojea], [@BenTheElder], and [@stmcginnis] - feel free to reach out if you have any questions! Pull Requests are very welcome! If you're planning a new feature, please file an issue to discuss first. Check the [issue tracker] for `help wanted` issues if you're unsure where to start, or feel free to reach out to discuss. 🙂 See also: our own [contributor guide] and the Kubernetes [community page]. ## Why kind? - kind supports multi-node (including HA) clusters - kind supports building Kubernetes release builds from source - support for make / bash or docker, in addition to pre-published builds - kind supports Linux, macOS and Windows - kind is a [CNCF certified conformant Kubernetes installer](https://landscape.cncf.io/?selected=kind) ### Code of conduct Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct]. <!--links--> [go]: https://golang.org/ [go-supported]: https://golang.org/doc/devel/release.html#policy [docker]: https://www.docker.com/ [podman]: https://podman.io/ [nerdctl]: https://github.com/containerd/nerdctl [community page]: https://kubernetes.io/community/ [Kubernetes Code of Conduct]: code-of-conduct.md [Go Report Card Badge]: https://goreportcard.com/badge/sigs.k8s.io/kind [Go Report Card]: https://goreportcard.com/report/sigs.k8s.io/kind [conformance tests]: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md [packages]: ./pkg [cluster package]: ./pkg/cluster [build package]: ./pkg/build [kind cli]: ./main.go [images]: ./images [kubetest]: https://github.com/kubernetes/test-infra/tree/master/kubetest [kubeadm]: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/ [design doc]: https://kind.sigs.k8s.io/docs/design/initial [user guide]: https://kind.sigs.k8s.io/docs/user/quick-start [SIG-Testing Mailing List]: https://groups.google.com/forum/#!forum/kubernetes-sig-testing [issue tracker]: https://github.com/kubernetes-sigs/kind/issues [filing an issue]: https://github.com/kubernetes-sigs/kind/issues/new [Kubernetes Slack]: http://slack.k8s.io/ [#kind]: https://kubernetes.slack.com/messages/CEKK1KTN2/ [1.0 roadmap]: https://kind.sigs.k8s.io/docs/contributing/1.0-roadmap [install docker]: https://docs.docker.com/install/ [@BenTheElder]: https://github.com/BenTheElder [@munnerz]: https://github.com/munnerz [@aojea]: https://github.com/aojea [@amwat]: https://github.com/amwat [@stmcginnis]: https://github.com/stmcginnis [contributor guide]: https://kind.sigs.k8s.io/docs/contributing/getting-started [releases]: https://github.com/kubernetes-sigs/kind/releases [install guide]: https://kind.sigs.k8s.io/docs/user/quick-start/#installation [modules]: https://github.com/golang/go/wiki/Modules ", Assign "at most 3 tags" to the expected json: {"id":"6548","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"