简述

K8S 如火如荼的发展着,越来越多人想学习和了解 K8S,但是由于 K8S 的入门曲线较高很多人望而却步。

然而随着 K8S 生态的蓬勃发展,社区也呈现了越来越多的部署方案,光针对生产可用的环境就有好几种部署方案,对于用来测试和学习环境也同样提供了好几种简单可用的方案。

今天我们来介绍一种用于测试、学习环境快速搭建 K8S 环境的方案:Kind。

Kind 的官网是:https://kind.sigs.k8s.io/

那么 Kind 相比于 Minikube 有什么优势呢?

基于 Docker 而不是虚拟化

运行架构图如下:



Kind 不是打包一个虚拟化镜像,而是直接讲 K8S 组件运行在 Docker。带来了什么好处呢?

  1. 不需要运行 GuestOS 占用资源更低。
  2. 不基于虚拟化技术,可以在 VM 中使用。
  3. 文件更小,更利于移植。

支持多节点 K8S 集群和 HA

Kind 支持多角色的节点部署,你可以通过配置文件控制你需要几个 Master 节点,几个 Worker 节点,以更好的模拟生产中的实际环境。

安装 Kind

Kind 的安装非常简单,只有一个二进制文件,如果大家嫌麻烦,可以直接去 GitHub releases 上下载二进制文件即可。

下面的安装方式来自 Kind 文档 https://kind.sigs.k8s.io/docs/user/quick-start/

macOS / Linux

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.8.1/kind-$(uname)-amd64
chmod +x ./kind
mv ./kind /some-dir-in-your-PATH/kind

macOS / Linux 使用 Homebrew

brew install kind

Windows

curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.8.1/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe

Windows 使用 Chocolatey

choco install kind

创建 K8S 集群

如果你在 macOS 或 Windows 中使用 Docker 那么至少需要设置 Docker VM 的内存至 6GB,Kind 建议设置为 8GB。

不是不基于虚拟化技术吗?为什么还有 Docker VM?

因为 Docker 其实只支持 Linux,macOS 和 Windwos 是基于虚拟化技术创建了一个 Linux VM。在 Linux 系统上则不存在这些问题。

最简单的情况,我们使用一条命令就能创建出一个单节点的 K8S 环境

kind create cluster

可是呢,默认配置有几个限制大多数情况是不满足实际需要的,默认配置的主要限制如下:

  1. APIServer 只监听了 127.0.0.1,也就意味着在 Kind 的本机环境之外无法访问 APIServer
  2. 由于国内的网络情况关系,Docker Hub 镜像站经常无法访问或超时,会导致无法拉取镜像或拉取镜像非常的慢

这边提供一个配置文件来解除上诉的限制:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
apiServerAddress: "<API_SERVER_ADDRESS>"
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["http://f1361db2.m.daocloud.io"]

API_SERVER_ADDRESS 配置局域网 IP 或想监听的 IP

http://f1361db2.m.daocloud.io 配置 Docker Hub 加速镜像站点

更多的配置(多节点,节点中运行的 K8S 组件版本,APIServer 监听端口,Pod、Service 子网,kubeProxy 模式,端口映射,本地卷持久化)可以查看 Kind 的文档

https://kind.sigs.k8s.io/docs/user/configuration/

创建完成效果如下:

如果长时间卡在 Ensuring node image (kindest/node:v1.18.2) 这个步骤,可以使用 docker pull kindest/node:v1.18.2 来得到镜像拉取进度条。

复制集群配置文件

Kind 创建集群完成后会将集群的访问配置写入到 ~/.kube/config 中,可以复制或加入到有 kubectl 工具的环境中。

切换 kubectl 集群上下文

kubectl cluster-info --context kind-kind

如何访问 K8S 中的 IP

我们在 K8S 中部署应用程序,一般有 4 种方式访问他们。

  1. 直接访问 PodIP
  2. 通过 Service 的 ClusterIP 访问
  3. 通过 Service 的 NodePort 访问
  4. 通过 Ingress Service NodePort 访问

其中方式 1、2 需要访问客户端在 K8S 网络环境内。方式 3、4 其实是一种,通过机器的端口映射来触达应用。

个人觉得直接访问 IP+端口更为方便,这边不对 Ingress 做过多的介绍,大家可以看 Kind 关于 Ingress 的文档。

https://kind.sigs.k8s.io/docs/user/ingress/

这边介绍通过 kubectl port-forward 端口转发的方式访问 K8S 中的应用。

部署一个 Nginx Deployment 和 Service

yaml 如下:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- name: 80-tcp
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP
kubectl create nginx.yaml
kubectl port-forward service/nginx 8080:80

效果如下

可以看到我们将本地的 8080 转发到了 nginx service 的 80 端口,这时访问本地的 8080 端口就可以访问到 service nginx 的 80 端口。

常见问题

Kind 能在一台机器上创建多个 K8S 集群吗?

可以的,kind create cluster 提供了 --name 参数,可以为 K8S 集群设置名称。

但是要注意 API Server 的监听地址/端口不能重复或被占用。

怎么设置指定的 K8S 版本?

kind create cluster 提供了 --image 参数,可以设置 kindest/node 镜像的版本,一般与 K8S 发布的版本一一对应,具体提供了哪些版本可以去 DockerHub 上查看。

https://hub.docker.com/r/kindest/node/tags

这个功能很酷,在做兼容性测试的时候可以创建一个目标版本的集群进行测试,真是不要太方便。

我的应用镜像没有发布到镜像库如何在 K8S 中使用?

可以通过如下几种方式:

  1. kind load
  2. 本地镜像库
  3. 私有镜像库

一般来说可以通过 kind load 将客户机上的镜像加载到 K8S 环境中去。例如将本机的 nginx 镜像加载到 Kind 的 K8S 环境中。

kind load docker-image nginx nginx

甚至可以为镜像起别名

kind load docker-image nginx nginx:test

具体使用方式可以访问 cli 的帮助

kind load -h
kind load docker-image -h
kind load image-archive -h

Kind 的本地镜像库使用方式见文档:https://kind.sigs.k8s.io/docs/user/local-registry/

私有镜像库使用方式见文档:https://kind.sigs.k8s.io/docs/user/private-registries/

还有其它问题?

还有遇到其它问题,欢迎给我留言。

比Minikube更快,使用Kind快速创建K8S学习环境的更多相关文章

  1. ML-Agents(二)创建一个学习环境

    ML-Agents(二)创建一个学习环境 一.前言 上一节我们讲了如何配置ML-Agents环境,这一节我们创建一个示例,主要利用Reinforcement Learning(强化学习). 如上图,本 ...

  2. AWS EKS 创建k8s生产环境实例

    #AWS EKS 创建k8s生产环境实例 在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具创建e ...

  3. 教你如何用Docker快速搭建深度学习环境

    本教程搭建集 Tensorflow.Keras.Coffe.PyTorch 等深度学习框架于一身的环境,及jupyter. 本教程使用nvidia-docker启动实例,通过本教程可以从一个全新的Ub ...

  4. 如何使用 Kind 快速创建 K8s 集群?

    作者|段超 来源|尔达 Erda 公众号 ​ 导读:Erda 作为一站式云原生 PaaS 平台,现已面向广大开发者完成 70w+ 核心代码全部开源!在 Erda 开源的同时,我们计划编写<基于 ...

  5. Create-React-App创建antd-mobile开发环境

    Facebook 官方推出Create-React-App脚手架,基本可以零配置搭建基于webpack的React开发环境,内置了热更新等功能. 详细文档可前往链接:Create-React-App文 ...

  6. 在.NET中快速创建一个5GB、10GB或更大的空文件

    对于通过UDP进行打文件传输的朋友应该首先会考虑到一个问题,那就是由于UDP并不会根据先来先到原则进行发送,也许你发送端发送的时候是以包1和包2的顺序传输的,但接收端可能以包2和包1 的顺序来进行接收 ...

  7. 【快学springboot】1.快速创建springboot项目

    若图片查看异常,请前往掘金查看:https://juejin.im/post/5d00e793f265da1b614ff10b 使用spring initialize工具快速创建springboot项 ...

  8. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  9. CSS 和 JS 动画哪个更快

    基于Javascript的动画暗中同CSS过渡效果一样,甚至更加快,这怎么可能呢?而Adobe和Google持续发布的富媒体移动网站的性能可媲美本地应用,这又怎么可能呢? 本文逐一遍览了基于Javas ...

随机推荐

  1. Java实现 LeetCode 126 单词接龙 II

    126. 单词接龙 II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则: ...

  2. Java实现 LeetCode 11 盛最多水的容器

    11. 盛最多水的容器 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) ...

  3. java实现BellmanFord算法

    1 问题描述 何为BellmanFord算法? BellmanFord算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求取含负权图的单源最短 ...

  4. Java实现 洛谷 P1426 小鱼会有危险吗

    import java.util.LinkedList; import java.util.Scanner; public class Main { private static Scanner ci ...

  5. React 为什么要把事件挂载到 document 上 & 事件机制源码分析

    前言 我们都知道 React 组件绑定事件的本质是代理到 document 上,然而面试被问到,为什么要这么设计,有什么好处吗? 我知道肯定不会是因为虚拟 DOM 的原因,因为 Vue 的事件就能挂载 ...

  6. 使用vw进行移动端适配(nuxt项目)

    基于nuxt 2.0.0 一.安装postcss-px-to-viewport npm安装 npm install postcss-px-to-viewport --save-dev 或 yarn安装 ...

  7. TD课程通的最终版评价

    相较之前的软件,功能得到了完善,同时也修复了BUG,还增加了辅助工具,可以查询一周的占用情况,省空间,很方便. 添加课程表的功能也得到了完善,同时增加了链接到教务系统的功能,方便查询相关的课程.问题是 ...

  8. Centos 7 k8s Deployment新副本控制器

    一.概念 Kubernetes提供了一种更加简单的更新RC和Pod的机制,叫做Deployment.通过在Deployment中描述你所期望的集群状态,Deployment Controller会将在 ...

  9. 什么?你还不会身份证号码验证?最全的身份证正则验证js

    话不多说上代码 //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 function cidInfo(code) { var city={11:" ...

  10. Trouble and solution

    Prevent the CTRL from rebooting in loop killall scm watch echo 1 > /dev/watchdog& Install Git ...