Kind 是我很喜欢也一直在参与的项目,我计划将 Kind 相关的文章写成一个系列。这是第二篇。node
同时,本文也可做为 《Kubernetes 从上手到实践》 第四节内容的补充,搭配食用效果更佳~git
Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器做为 Node 并将 Kubernetes 部署至其中的一个工具。如今包括 Kubernetes 自身在内的不少云原生基础项目都将 Kind 应用于自身的 e2e 测试或项目的入门示例中。github
默认状况下使用 Kind 建立 Kubernetes 集群,只须要先安装好 Kind 执行 kind create cluster
即可, Kind 会自动下载所需的 Docker 镜像,并启动集群。docker
可是,在某些状况下,咱们也会有须要在离线环境中启动 Kubernetes 集群的需求。本篇文章我来为你介绍两种使用 Kind 在离线环境建立 Kubernetes 集群的方式。bash
Kind 在每次发布版本时,会同时构建并发布默认使用的镜像,目前托管在 Docker Hub 上。建议你使用在每次 ReleaseNote 中指定了 shasum 的镜像。网络
当你在离线环境中想要使用 Kind 预构建的镜像建立集群时,你能够在任意可联网的机器上或目标机器上有网络的状况下,提早下载该镜像,并拷贝至须要建立集群的目标机器上。并发
若是你的机器上已经安装了 Docker,那能够直接使用 docker pull
命令下载镜像:工具
(MoeLove) ➜ ~ 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
复制代码
接下来,你可使用 docker save
命令,将镜像保存为一个 tar 包:post
(MoeLove) ➜ ~ docker save -o kind.v1.17.0.tar kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
复制代码
若是你以为镜像体积太大,而且你也已经安装了 gzip 的话,可使用如下命令,将镜像保存为经 gzip 格式的压缩包。测试
(MoeLove) ➜ ~ docker save kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62 | gzip > kind.v1.17.0.tar.gz
复制代码
在目标机器上,你可使用 docker load
命令将镜像加载至 docker daemon 的存储中:
(MoeLove) ➜ ~ docker load -i kind.v1.17.0.tar
Loaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0
# 或者
➜ ~ docker load -i kind.v1.17.0.tar.gz
Loaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0
复制代码
至此,你即可以经过如下命令,使用已经导入的镜像来建立集群:
(MoeLove) ➜ ~ kind create cluster --image kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62
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.sigs.k8s.io/#community 🙂
复制代码
PS:在下载 Docker 镜像的步骤中,若是你没有安装 Docker,那你也能够有其余选择,好比使用 skopeo 之类的工具。
若是你在对 Kubernetes 进行开发,或是 Kind 维护团队没有发布特定 Kubernetes 版本的预构建的镜像,那你能够自行构建镜像。
须要注意的是,构建镜像时须要网络和必定的磁盘空间。你能够在构建完镜像后,使用上一节提到的办法在离线环境使用。
须要提早准备好 kind 的源代码
(MoeLove) ➜ ~ mkdir -p $GOPATH/src/sigs.k8s.io
(MoeLove) ➜ ~ cd $GOPATH/src/sigs.k8s.io
(MoeLove) ➜ ~ git clone https://github.com/kubernetes-sigs/kind
复制代码
接下来即可使用如下命令构建 base 镜像了。
(MoeLove) ➜ ~ kind build base-image --image kindest/base:latest --source $GOPATH/src/sigs.k8s.io/kind/images/base
Building base image in: /tmp/kind-base-image147474678
Starting Docker build ...
...
Successfully tagged kindest/base:latest
Docker build completed.
复制代码
构建完 base 镜像,还须要以此镜像做为基础构建 node 镜像。
使用此方法,须要你提早准备好 Kubernetes 源代码,你能够参考 Kubernetes 项目的说明下载 Kubernetes 源代码,或者将源代码拷贝至目标机器的对应位置。
(MoeLove) ➜ ~ mkdir -p $GOPATH/src/k8s.io
(MoeLove) ➜ ~ cd $GOPATH/src/k8s.io
(MoeLove) ➜ ~ git clone https://github.com/kubernetes/kubernetes
复制代码
接下来你即可以使用如下命令构建 node 镜像了
(MoeLove) ➜ ~ kind build node-image --base-image kindest/base:latest --image kindest/node:latest --kube-root $GOPATH/src/k8s.io/kubernetes
Starting to build Kubernetes
+++ [0205 11:21:38] Verifying Prerequisites....
...
Image build completed.
复制代码
镜像构建成功后,即可使用此镜像来建立集群了。
(MoeLove) ➜ ~ kind create cluster --image kindest/node:latest
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:latest) 🖼
✓ 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.sigs.k8s.io/#community 🙂
复制代码
检查集群节点信息
(MoeLove) ➜ ~ kubectl get node
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready master 40s v1.18.0-alpha.0.3222+4b294079458a72
复制代码
能够看到集群版本是当前 kubernetes 源码的版本了。
本文介绍了两类使用 Kind 建立 Kubernetes 集群的方法,分别是使用 Kind 预发布的镜像和使用 Kubernetes 源代码构建镜像。
以上两种方法,镜像中均已包含建立 Kubernetes 集群所需的所有资源,无需再额外下载。(这也是和以前版本最大的区别)
能够经过下面二维码订阅个人文章公众号【MoeLove】