离线工作
本指南介绍如何在离线/隔离环境中使用 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 镜像。
您可以在负载均衡器源代码中找到当前正在使用的特定标签。