离线工作

本指南介绍如何在离线/隔离环境中使用 KIND。

您应该首先安装 kind,然后再继续。

使用预构建的节点镜像 🔗︎

KIND 提供了一些预构建的镜像,这些镜像包含创建集群所需的一切,可以在离线环境中使用。

您可以在发布页面上找到可用的镜像标签。请在发布说明中包含来自镜像的@sha256: 镜像摘要

您可以在有网络访问权限时拉取它,或者在另一台机器上拉取它,然后将其传输到目标机器。

➜  ~ docker pull kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62: Pulling from kindest/node
cc5a81c29aab: Pull complete 
81c62728355f: Pull complete 
ed9cffdd962a: Pull complete 
6a46f000fce2: Pull complete 
6bd890da28be: Pull complete 
0d88bd219ffe: Pull complete 
af5240f230f0: Pull complete 
Digest: sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
Status: Downloaded newer image for kindest/node@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
docker.io/kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62

您可以将节点镜像保存到 tarball 中。

➜  ~ docker save -o kind.v1.17.0.tar kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
# or
➜  ~ docker save kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62 | gzip > kind.v1.17.0.tar.gz

将镜像 tarball 传输到机器后,您可以通过docker load 命令加载节点镜像。

➜  ~ docker load -i kind.v1.17.0.tar
Loaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0
# or
➜  ~ docker load -i kind.v1.17.0.tar.gz
Loaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0

为其创建标签

➜  ~ docker image tag kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62 kindest/node:v1.17.0
➜  ~ docker image ls kindest/node
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kindest/node        v1.17.0             ec6ab22d89ef        3 weeks ago         1.23GB

最后,您可以通过指定--image 标志来创建集群。

➜  ~ kind create cluster --image kindest/node:v1.17.0
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.17.0) 🖼
 ✓ 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 question, bug, or feature request? Let us know! https://kind.kubernetes.ac.cn/#community 🙂

构建节点镜像 🔗︎

除了使用预构建的节点镜像外,KIND 还提供了从 Kubernetes 源代码构建节点镜像的功能。

请注意,在镜像构建过程中,您需要下载许多依赖项。建议您至少在线构建一次,以确保这些依赖项已下载到本地。有关更多详细信息,请参阅构建节点镜像

节点镜像反过来是基于基础镜像构建的。

准备 Kubernetes 源代码 🔗︎

您可以克隆 Kubernetes 源代码。

➜  ~ mkdir -p $GOPATH/src/k8s.io
➜  ~ cd $GOPATH/src/k8s.io
➜  ~ git clone https://github.com/kubernetes/kubernetes

构建镜像 🔗︎

➜  ~ kind build node-image --image kindest/node:main --kube-root $GOPATH/src/k8s.io/kubernetes 
Starting to build Kubernetes
...
Image build completed.

镜像构建完成后,您可以通过传递--image 标志来创建集群。

➜  ~ kind create cluster --image kindest/node:main
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:main) 🖼
 ✓ 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 question, bug, or feature request? Let us know! https://kind.kubernetes.ac.cn/#community 🙂

HA 集群 🔗︎

如果您想创建控制平面 HA 集群,则需要创建一个配置文件,并使用此文件启动集群。

➜  ~ cat << EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
# 3 control plane node and 1 workers
nodes:
- role: control-plane
- role: control-plane
- role: control-plane
- role: worker
EOF

请注意,在离线环境中,除了准备节点镜像外,您还需要提前准备 HAProxy 镜像。

您可以在负载均衡器源代码中找到当前正在使用的特定标签。