快速入门
本指南介绍如何开始使用
kind
命令。如果您遇到问题,请参阅 已知问题 指南。
内容 🔗︎
安装 🔗︎
注意:
kind
不需要kubectl
,但您将无法在我们的文档中执行某些示例,除非您安装了它。要安装kubectl
,请参阅上游 kubectl 安装文档。
如果您是 Go 开发人员,您可能会发现 go install 选项 很方便。
否则,我们提供可下载的 发布二进制文件、社区管理的 软件包 和 源代码安装指南。
通常强烈建议使用稳定的标记版本(当前为 v0.23.0),尤其是在 CI 使用中。
如果您正在开发 Kubernetes 本身(在 HEAD 或最新源代码中),您可能需要从 HEAD 安装最新代码。
从发布二进制文件安装 🔗︎
预构建的二进制文件可在我们的 发布页面 上获得。
要安装,请从“资产”中下载适合您平台的二进制文件,然后将其重命名为 kind
(或在 Windows 上可能是 kind.exe
),并将此文件放在您首选的二进制文件安装目录中的 $PATH
中。
在 Linux 上
|
在 macOS 上
|
在 Windows 上的 PowerShell 中
|
从源代码安装 🔗︎
除了上面列出的预构建二进制文件 + 包管理器安装选项之外,您还可以使用 go install sigs.k8s.io/[email protected]
从源代码安装 kind,或者克隆此仓库并从仓库中运行 make build
。
使用 make
安装 🔗︎
使用 make build
不需要安装 Go,并将可重复地构建 kind,二进制文件将位于您克隆的仓库中的 bin/kind
中。
您只需要 make
和标准用户空间实用程序来运行此构建,它将使用我们提供的 gimme
的已售版本自动获取正确的 Go 版本。
然后,您可以调用 ./bin/kind
来使用它,或者将 bin/kind
复制到系统 PATH
中的某个目录中,以便从命令行将其用作 kind
。
make install
将尝试模仿 go install
,并且具有与下面的 go install
相同的路径要求。
使用 go install
安装 🔗︎
使用 Go 安装时,请使用最新的稳定 Go 版本。至少需要 go1.16 或更高版本。
要安装,请使用:go install sigs.k8s.io/[email protected]
。
如果您是从本地源代码克隆构建的,请从克隆的顶层目录使用 go install .
。
go install
通常会将 kind
二进制文件放在 go env GOPATH
下的 bin
目录中,有关此方面的更多信息,请参阅 Go 的 “编译和安装包和依赖项”。如果您在安装后遇到 kind: command not found
错误,您可能需要将该目录添加到 $PATH
中,您可以在 https://gist.github.com/nex3/c395b2f8fd4b02068be37c961301caa7#file-path-md 找到将目录添加到 PATH
的指南。
使用包管理器安装 🔗︎
kind 社区已通过以下包管理器启用安装。
注意:以下是社区支持的努力。
kind
维护人员不参与这些软件包的创建,上游社区对它们的有效性、安全性或内容不作任何声明。
在 macOS 上通过 Homebrew
|
在 macOS 上通过 MacPorts
|
在 Windows 上通过 Chocolatey (https://chocolatey.org/packages/kind)
|
在 Windows 上通过 Scoop (https://scoop.sh/#/apps?q=kind&id=faec311bb7c6b4a174169c8c02358c74a78a10c2)
|
在 Windows 上通过 Winget (https://github.com/microsoft/winget-pkgs/tree/master/manifests/k/Kubernetes/kind)
|
创建集群 🔗︎
创建 Kubernetes 集群就像 kind create cluster
一样简单。
这将使用预构建的 节点镜像 引导 Kubernetes 集群。预构建的镜像托管在 kindest/node
上,但要找到适合特定版本的镜像,您应该查看 发布说明,了解您给定 kind 版本(使用 kind version
检查)的完整镜像列表。
要指定其他镜像,请使用 --image
标志 - kind create cluster --image=...
。
使用不同的镜像可以更改创建的集群的 Kubernetes 版本。
如果您希望使用自定义版本自己构建节点镜像,请参阅 构建镜像 部分。
默认情况下,集群将被赋予 kind
的名称。使用 --name
标志为集群分配不同的上下文名称。
如果您希望 create cluster
命令阻塞,直到控制平面达到就绪状态,您可以使用 --wait
标志并指定超时时间。要使用 --wait
,您必须指定等待时间的单位。例如,要等待 30 秒,请执行 --wait 30s
,要等待 5 分钟,请执行 --wait 5m
等。
可以使用 kind create cluster --help
发现更多用法。
kind 可以自动检测已安装的 docker、podman 或 nerdctl 并选择可用的一个。如果您想关闭自动检测,请使用环境变量 KIND_EXPERIMENTAL_PROVIDER=docker
、KIND_EXPERIMENTAL_PROVIDER=podman
或 KIND_EXPERIMENTAL_PROVIDER=nerdctl
来选择运行时。
与您的集群交互 🔗︎
在 创建集群 后,您可以使用 kubectl 与其交互,方法是使用 kind 生成的配置文件。
默认情况下,集群访问配置存储在 ${HOME}/.kube/config 中,如果未设置 $KUBECONFIG 环境变量。
如果设置了 $KUBECONFIG 环境变量,则将其用作路径列表(您系统上的正常路径分隔规则)。这些路径将合并。当修改值时,它将在定义节的文件中修改。当创建值时,它将在第一个存在的文件中创建。如果链中没有文件存在,则它将在列表中的最后一个文件中创建。
您可以在创建集群时使用 --kubeconfig
标志,然后只加载该文件。该标志只能设置一次,并且不会进行合并。
要查看您创建的所有集群,可以使用 get clusters
命令。
例如,假设您创建了两个集群
kind create cluster # Default cluster context name is `kind`.
...
kind create cluster --name kind-2
当您列出您的 kind 集群时,您将看到类似以下内容
kind get clusters
kind
kind-2
为了与特定集群交互,您只需要在 kubectl 中指定集群名称作为上下文
kubectl cluster-info --context kind-kind
kubectl cluster-info --context kind-kind-2
删除集群 🔗︎
如果您使用 kind create cluster
创建了集群,那么删除同样简单
kind delete cluster
如果未指定 --name
标志,kind 将使用默认集群上下文名称 kind
并删除该集群。
注意:根据设计,请求删除不存在的集群不会返回错误。这是故意的,并且是清理资源的幂等方式。
将镜像加载到您的集群中 🔗︎
Docker 镜像可以使用以下命令加载到您的集群节点中
kind load docker-image my-custom-image-0 my-custom-image-1
注意:如果您使用的是命名集群,您需要指定要将镜像加载到的集群的名称:
kind load docker-image my-custom-image-0 my-custom-image-1 --name kind-2
此外,可以使用以下命令加载镜像存档:kind load image-archive /my-image-archive.tar
这允许以下工作流程
docker build -t my-custom-image:unique-tag ./my-image-dir
kind load docker-image my-custom-image:unique-tag
kubectl apply -f my-manifest-using-my-image:unique-tag
注意:您可以使用
docker exec
获取集群节点上存在的镜像列表docker exec -it my-node-name crictl images
其中
my-node-name
是 Docker 容器的名称(例如kind-control-plane
)。
注意:Kubernetes 默认拉取策略是
IfNotPresent
,除非镜像标签是:latest
或省略(并隐式为:latest
),在这种情况下,默认策略是Always
。IfNotPresent
使 Kubelet 在镜像已存在的情况下跳过拉取镜像。如果您希望加载到节点中的这些镜像按预期工作,请
- 不要使用
:latest
标签和/或
- 在您的容器上指定
imagePullPolicy: IfNotPresent
或imagePullPolicy: Never
。有关更多信息,请参阅 Kubernetes imagePullPolicy。
另请参阅:将 kind 与私有注册表一起使用。
构建镜像 🔗︎
注意:如果您使用的是 Docker Desktop,请务必先阅读 Docker Desktop 设置。
kind 使用 Docker 容器作为“节点”运行本地 Kubernetes 集群。kind 使用 node-image
来运行 Kubernetes 工件,例如 kubeadm
或 kubelet
。node-image
又基于 base-image
构建,后者安装了 Docker 和 Kubernetes 在容器中运行所需的所有依赖项。
目前,如果您在主机上拥有 Kubernetes 源代码($GOPATH/src/k8s.io/kubernetes
),kind 支持使用 source
构建 node-image
的一种默认方法。
您也可以使用以下方法指定不同的 Kubernetes 源代码路径:
kind build node-image /path/to/kubernetes/source
注意:构建 Kubernetes 节点镜像需要构建上游 Kubernetes 所需的一切,我们包装了上游构建。这包括带有 buildx 的 Docker。请参阅:https://git.k8s.io/community/contributors/devel/development.md#building-kubernetes-with-docker
使用 Kubernetes 版本的一种快捷方式是直接指定版本以获取官方的 tar 压缩文件
kind build node-image v1.30.0
如果您更喜欢使用现有的 tar 压缩文件(例如来自 Kubernetes 版本的 tar 压缩文件),您也可以从 URL 或本地目录指定这些文件,例如
kind build node-image https://dl.k8s.io/v1.30.0/kubernetes-server-linux-arm64.tar.gz
kind build node-image $HOME/Downloads/kubernetes-server-linux-amd64.tar.gz
为了避免混淆,您可以使用 --type
参数显式指定构建类型,请参阅以下示例
kind build node-image --type url https://dl.k8s.io/v1.30.0/kubernetes-server-linux-arm64.tar.gz
kind build node-image --type file $HOME/Downloads/kubernetes-server-linux-amd64.tar.gz
kind build node-image --type release v1.30.0
kind build node-image --type source $HOME/go/src/k8s.io/kubernetes/
注意:除了源目录之外的其他模式,即
url
、file
和release
,仅在 kind v0.24 及更高版本中可用。
Docker Desktop 设置 🔗︎
如果您在 macOS 或 Windows 上构建 Kubernetes(例如 - kind build node-image
),那么您需要至少为运行 Docker 引擎的虚拟机 (VM) 分配 6GB 的 RAM。建议使用 8GB。
要更改 Docker for Mac 的资源限制,您需要打开首选项菜单。
现在,转到高级设置页面,并更改那里的设置,请参阅 更改 Docker 的资源限制。
要更改 Docker for Windows 的资源限制,您需要右键单击任务栏上的 Moby 图标,然后选择“设置”。如果您看到“切换到 Linux 容器”,那么您需要先执行此操作,然后再打开“设置”。
现在,转到高级设置页面,并更改那里的设置,请参阅 更改 Docker 的资源限制。
您也可以尝试删除 Docker 引擎留下的任何未使用的數據 - 例如,docker system prune
。
高级 🔗︎
配置您的 kind 集群 🔗︎
有关示例 kind 配置文件,请参阅 kind-example-config。要创建集群时指定配置文件,请使用 --config
标志
kind create cluster --config kind-example-config.yaml
多节点集群 🔗︎
特别是,许多用户可能对多节点集群感兴趣。可以使用以下配置文件内容实现此目的的简单配置
# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
控制平面高可用性 🔗︎
您还可以拥有一个具有多个控制平面节点的集群
# a cluster with 3 control-plane nodes and 3 workers
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker
将端口映射到主机 🔗︎
您可以使用 extraPortMappings
将节点的额外端口映射到主机。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"
protocol: udp # Optional, defaults to tcp
如果使用 NodePort
服务或暴露主机端口的守护进程集,这将很有用。
注意:将 listenAddress
绑定到 127.0.0.1
可能会影响您访问服务的权限。
您可能想查看 Ingress 指南 和 负载均衡器指南。
设置 Kubernetes 版本 🔗︎
您还可以通过设置 node
的容器镜像来设置特定的 Kubernetes 版本。您可以在 发布页面 上找到可用的镜像标签。请使用您所需 Kubernetes 版本的 sha256
shasum,如本示例所示
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55
- role: worker
image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55
在您的集群中启用功能门 🔗︎
功能门是一组键值对,用于描述 alpha 或实验性功能。为了启用门,您必须 自定义您的 kubeadm 配置,这将取决于您要启用的门和组件。示例 kind 配置可以是
|
配置 kind 以使用代理 🔗︎
如果您在需要代理的环境中运行 kind,则可能需要配置 kind 以使用它。
您可以使用以下一个或多个 环境变量 配置 kind 以使用代理(大写优先)
HTTP_PROXY
或http_proxy
HTTPS_PROXY
或https_proxy
NO_PROXY
或no_proxy
注意:如果您设置了代理,它将传递给 kind 节点中的所有内容。
kind
会在将NO_PROXY
传递给节点之前自动将某些地址追加到其中,以便 Kubernetes 组件直接相互连接,但您可能需要根据您的使用情况配置其他地址。
导出集群日志 🔗︎
kind 能够导出所有与 kind 相关的日志,供您探索。要导出默认集群(上下文名称为 kind
)的所有日志
kind export logs
Exported logs to: /tmp/396758314
与所有其他命令一样,如果您想对具有不同上下文名称的集群执行操作,请使用 --name
标志。
如您所见,kind 将集群 kind
的所有日志放置在一个临时目录中。如果您想指定一个位置,只需在命令后添加目录的路径
kind export logs ./somedir
Exported logs to: ./somedir
日志的结构或多或少如下所示
.
├── docker-info.txt
└── kind-control-plane/
├── containers
├── docker.log
├── inspect.json
├── journal.log
├── kubelet.log
├── kubernetes-version.txt
└── pods/
日志包含有关 Docker 主机、运行 kind 的容器、Kubernetes 集群本身等的信息。