背景

Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。现在包括 Kubernetes 自身在内的很多云原生基础项目都将 Kind 应用于自身的 e2e 测试或项目的入门示例中。

默认情况下使用 Kind 创建 Kubernetes 集群,只需要先安装好 Kind 执行 kind create cluster 便可, Kind 会自动下载所需的 Docker 镜像,并启动集群。

但是,在某些情况下,我们也会有需要在离线环境中启动 Kubernetes 集群的需求。本篇文章我来为你介绍两种使用 Kind 在离线环境创建 Kubernetes 集群的方式。

使用预构建镜像

Kind 在每次发布版本时,会同时构建并发布默认使用的镜像,目前托管在 Docker Hub 上。建议你使用在每次 ReleaseNote 中指定了 shasum 的镜像。

当你在离线环境中想要使用 Kind 预构建的镜像创建集群时,你可以在任意可联网的机器上或目标机器上有网络的情况下,提前下载该镜像,并拷贝至需要创建集群的目标机器上。

如果你的机器上已经安装了 Docker,那可以直接使用 docker pull 命令下载镜像:

(MoeLove) ➜  ~ docker pull kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62: Pulling from kindest/nodecc5a81c29aab: Pull complete 81c62728355f: Pull complete ed9cffdd962a: Pull complete 6a46f000fce2: Pull complete 6bd890da28be: Pull complete 0d88bd219ffe: Pull complete af5240f230f0: Pull complete Digest: sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62Status: Downloaded newer image for kindest/node@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62docker.io/kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62

接下来,你可以使用 docker save 命令,将镜像保存为一个 tar 包:

(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.tarLoaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0# 或者➜  ~ docker load -i kind.v1.17.0.tar.gzLoaded image ID: sha256:ec6ab22d89efc045f4da4fc862f6a13c64c0670fa7656fbecdec5307380f9cb0

至此,你便可以通过以下命令,使用已经导入的镜像来创建集群:

(MoeLove) ➜  ~ kind create cluster --image kindest/node:v1.17.0@sha256:9512edae126da271b66b990b6fff768fbb7cd786c7d39e86bdf55906352fdf62Creating 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-kindHave a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 

PS:在下载 Docker 镜像的步骤中,如果你没有安装 Docker,那你也可以有其他选择,比如使用 skopeo 之类的工具。

自行构建镜像

如果你在对 Kubernetes 进行开发,或是 Kind 维护团队没有发布特定 Kubernetes 版本的预构建的镜像,那你可以自行构建镜像。

需要注意的是,构建镜像时需要网络和一定的磁盘空间。你可以在构建完镜像后,使用上一节提到的办法在离线环境使用。

构建 base 镜像

需要提前准备好 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/baseBuilding base image in: /tmp/kind-base-image147474678Starting Docker build ......Successfully tagged kindest/base:latestDocker build completed.

构建完 base 镜像,还需要以此镜像作为基础构建 node 镜像。

构建 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/kubernetesStarting 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-kindHave a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 

检查集群节点信息

(MoeLove) ➜  ~ kubectl get node NAME                 STATUS   ROLES    AGE   VERSIONkind-control-plane   Ready    master   40s   v1.18.0-alpha.0.3222+4b294079458a72

可以看到集群版本是当前 kubernetes 源码的版本了。

总结

本文介绍了两类使用 Kind 创建 Kubernetes 集群的方法,分别是使用 Kind 预发布的镜像和使用 Kubernetes 源代码构建镜像。

以上两种方法,镜像中均已包含创建 Kubernetes 集群所需的全部资源,无需再额外下载。(这也是和之前版本最大的区别)

系列文章

  • 使用 Kind 搭建你的本地 Kubernetes 集群​: https://zhuanlan.zhihu.com/p/60464867

(使用了 0.2.0 版本,部分内容已过期)

推荐阅读

  • How to Test a Kubernetes PR with KIND​mauilion.dev: https://mauilion.dev/posts/kind-k8s-testing/

欢迎订阅我的文章公众号【MoeLove】

k8s 离线安装_使用 Kind 在离线环境创建 K8S 集群相关推荐

  1. centos redis 升级版本_带你来搭建虚拟机和Redis集群,记得收藏

    来源于公众号Java爱好者社区 , 作者东升的思考 1.前言 我们看到分析 Redis 使用或原理的文章不少,但是完整搭建一套独立的 Redis 集群环境的介绍,并不是很多或者说还不够详细. 那么,本 ...

  2. Linux下安装Weblogic10.3.6并创建简单集群测试

    Linux下安装Weblogic10.3.6并创建简单集群进行测试 一.卸载随系统安装的openjdk 1.先查看安装的jdk信息,常用命令有rpm -qa | grep java, rpm -qa  ...

  3. k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常)

    k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常) 参考文章: (1)k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常) (2)https://ww ...

  4. k8s 离线安装_阿里开源 k8s 事件通知服务

    背景 在 Kubernetes 开源生态中,资源监控有 metrics-server.Prometheus等,但这些监控并不能实时推送 Kubernetes 事件,监控准确性也不足.当 kuberne ...

  5. zlib 离线安装_黑板派Python扩展库安装与常见问题解决完整指南

    点击蓝字 ! 关注我们 "Python小屋"编程比赛正式开始 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国, ...

  6. python urllib3离线安装_全球Python库下载前10名

    Python的简洁性,不仅仅在于其语法简单,还有各种python库函数的支持,为大家节省了大量的时间和精力,所以网上有人戏称python的编程者为调包侠.但是你知道全球最受欢迎的python库嘛?今天 ...

  7. python模块离线安装_离线安装db2的python模块ibm_db

    1.为什么要离线安装 没网,在银行工作,服务器环境配置,完全离线(本来五分钟搞定的事情,非要搞一天.我服!!) 2.安装步骤 视情况而定. 3.一个下载db2的client包,官网下载http://w ...

  8. pip 离线安装_安装不上python的模块怎么办?别怕,我这有妙招!

    之前我们介绍过如何在Python中安装第三方的包: Python以第三方包丰富而著称,你想要的功能几乎都可以通过pip命令安装,避免什么都要自己重新造轮子尬尴. 但是pip安装有两个常见问题,第一是下 ...

  9. centos7离线安装oracle11g,CentOS 7.5离线安装Oracle 11gR2

    操作系统:CentOS 7.5 64bit,安装方式为gnome Desktop,附加系统工具以及兼容X Window安装包 Oracle版本:11gR2 Oracle11gR2官方文档链接 安装系统 ...

最新文章

  1. php压制错误的代码,为什么要压制PHP错误?
  2. 理解JVM如何使用Windows和Linux上的本机内存
  3. 2022年中国在线视频行业研究报告
  4. 揭秘“21世纪最性感的职业”:数学、编程、沟通和商业技能一个都不能少!...
  5. MongoDB数据库的介绍和连接(非常详细、易懂)
  6. Java 读取文件方法大全
  7. 全年CCF级别会议列表
  8. 敏捷开发快速入门(四):Scrum开发流程
  9. JSP——猜英文小写字母的Web小游戏
  10. 怎么把raw转换成jpg格式?推荐两个raw转jpg的方法
  11. js+HTML实现组织结构图
  12. 基于Python的信用评分卡模型-give me some credit数据集,AUC 0.93 KS 0.71
  13. Springboot+Redis初体验
  14. mqtt 传文件断开连接的原因_mqtt服务器连上就断开
  15. html中怎么实现水平居中,css 怎么实现 div水平居中 呢?
  16. can转串口 LCNET PRO RS-232485 ——专为电力用和矿用设计的 CAN 转 RS-232 和 CAN 转 RS-485 转换器
  17. Android10.0(Q) 默认应用设置(电话、短信、浏览器、主屏幕应用)
  18. 用python将网上的文章转存为PDF文档,保存电脑上慢慢看
  19. Python位置参数、默认参数、可变参数、关键字参数、命名关键字参数、命名位置参数
  20. mt7620芯片处理器核心资料

热门文章

  1. Kubernetes学习总结(9)—— 基础架构的未来是 K8s,那么 K8s 的未来在何方?
  2. Docker学习总结(52)—— Docker容器环境变量相关知识点的总结
  3. MyBatis学习总结(22)——Mybatis自增长ID获取
  4. Nginx学习总结(7)——Nginx配置HTTPS 服务器
  5. python安装库pandas_安装python的第三方库 geopandas
  6. javabean更新到mysql_javabean连mysql 数据库更新问题
  7. linux磁盘管理(挂载,分区)
  8. 约束布局(ConstraintLayout)1.1.2 版本的新特性
  9. 网管必杀技之VLAN的网络管理
  10. Git添加多个SSH key公钥