本文永久链接: https://www.xtplayer.cn/kubernetes/use-kind/

简 介

kind 是另一个 Kubernetes SIG 项目,但它与 minikube 有很大区别。它可以将集群迁移到 Docker 容器中,这与生成虚拟机相比,启动速度大大加快。简而言之,kind 是一个使用 Docker 容器节点运行本地 Kubernetes 集群的工具(CLI)。

前期准备

想要顺利完成本教程,你需要在本地系统中准备好以下程序:

  • Go
  • 需要运行的 Docker 服务

安 装

  1. 使用以下命令下载和安装 kind 二进制文件:
GO111MODULE=”on” go get sigs.k8s.io/kind@v0.8.1
  1. 确保 kind 二进制文件是存在
> kind version

kind v0.8.1 go1.14.2 darwin/amd64

现在,我们应该能够使用 kind CLI 来启动一个 Kubernetes 集群:

Usage:
kind [command]Available Commands:
build Build one of [node-image]
completion Output shell completion code for the specified shell
create Creates one of [cluster]
delete Deletes one of [cluster]
export Exports one of [kubeconfig, logs]
get Gets one of [clusters, nodes, kubeconfig]
help Help about any command
load Loads images into nodes
version Prints the kind CLI version

在本文中,我们主要说明 create、get 和 delete 命令。

创建集群

创建默认版本 K8S 集群

执行以下命令即可创建一个集群:

kind create cluster

> kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.18.2)
✓ Preparing nodes
✓ Writing configuration
✓ Starting control-plane
✓ Installing CNI
✓ Installing StorageClass
Set kubectl context to "kind-kind"
You can now use your cluster with:kubectl cluster-info --context kind-kind Have a nice day!

将通过拉取最新的 Kubernetes 节点(v 1.18.2)来创建一个 Kubernetes 集群。刚刚我们已经创建了一个 v 1.18.2 的 Kubernetes 集群。在创建集群的过程中如果我们没有 --name 参数,那么集群名称将会默认设置为 kind

创建指定版本 K8S 集群

我们可以通过传递 --image 参数来部署一个特定版本的 Kubernetes 集群。

使用的命令为:

kind create cluster --image kindest/node:v1.15.6

> kind create cluster --image kindest/node:v1.15.6 --name kind-1.15.6
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.15.6)
✓ Preparing nodes
✓ Writing configuration
✓ Starting control-plane
✓ Installing CNI
✓ Installing StorageClass
Set kubectl context to "kind-kind"
You can now use your cluster with:kubectl cluster-info --context kind-kind Have a nice day!

列出部署的集群

输入命令:

kind get clusters

> kind get clusters
kind
kind-1.15.6

这应该列出我们此前创建的两个不同 K8S 版本的集群。

为 kubectl 设置上下文配置

创建集群之后,kubectl 配置默认指定了最近创建的 K8S 集群。

让我们来检查一下所有可用的上下文配置。

> kubectl config get-contexts
CURRENT NAME CLUSTER
kind-kind kind-kind
* kind-kind-1.15.6 kind-kind-1.15.6

从输出中,我们可以看到,kubectl 上下文配置目前已经被默认设置为最新的集群,即 kind-1.15.6(上下文名称是以 kind 为前缀的)。

要将 kubectl 上下文设置为版本是 1.18.2 的 kind 集群,我们需要进行如下操作:

> kubectl config set-context kind-kind

Context "kind-kind" modified.

要验证 kubectl 是否指向正确的集群,我们需要检查节点:

> kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-1.18.2-control-plane Ready master 8m20s v1.18.2

删除集群

删除某个集群

要删除一个特定的群集,可以通过传递—name 参数去执行删除命令。

命令为:

kind delete cluster --name kind

> kind delete cluster --name kind

Deleting cluster "kind" ...

删除所有集群

如果你想一次性删除所有集群,请执行:

kind delete clusters –all

> kind delete clusters --all

Deleted clusters: ["kind-1.15.6"]

kind 的优势是什么

kind(Kubernetes in Docker)是一个基于 Docker 构建的 Kubernetes 集群的工具。它经过 CNCF 认证,并且支持多节点集群,包括高可用集群。并且支持 Linux、macOS 以及 Windows 操作系统,操作简单,学习成本低,非常适合用来在本地搭建基于 Kubernetes 的开发/测试环境。