Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >比Minikube更快,使用Kind快速创建K8S学习环境

比Minikube更快,使用Kind快速创建K8S学习环境

作者头像
落跑架构师M
发布于 2020-06-29 08:48:02
发布于 2020-06-29 08:48:02
3.2K00
代码可运行
举报
文章被收录于专栏:落跑架构师M落跑架构师M
运行总次数:0
代码可运行

简述

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew install kind

Windows

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
choco install kind

创建 K8S 集群

如果你在 macOS 或 Windows 中使用 Docker 那么至少需要设置 Docker VM 的内存至 6GB,Kind 建议设置为 8GB。 不是不基于虚拟化技术吗?为什么还有 Docker VM? 因为 Docker 其实只支持 Linux,macOS 和 Windwos 是基于虚拟化技术创建了一个 Linux VM。在 Linux 系统上则不存在这些问题。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kind create cluster

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 集群上下文

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 环境中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kind load docker-image nginx nginx

甚至可以为镜像起别名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kind load docker-image nginx nginx:test

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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/

还有其它问题?

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 落跑架构师M 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/12/24
6K2
三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!
使用Kind搭建本地k8s集群
Kind 是 Kubernetes In Docker 的缩写,是使用 Docker 容器部署 Kubernetes 的工具。也是官方推荐的搭建本地集群的工具。
kongxx
2019/09/25
1.4K0
Kubernetes/K8S快速入门之Kind
Kind 文档 https://kind.sigs.k8s.io/docs/user/quick-start/
码客说
2021/03/04
3.9K0
【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind单集群
Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。官方文档中也把 Kind 作为一种本地集群搭建的工具进行推荐。
愚公搬代码
2022/04/27
4290
【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind单集群
使用kind搭建kubernetes
kind是一个非常方便的用于创建kubernetes测试集群的工具,可以使用kind创建的集群来对kubernetes进行测试。
charlieroro
2020/09/28
1.2K1
使用kind搭建kubernetes
使用minikube快速部署单机版k8s
使用minikube部署k8s非常简单,执行minikube start就可以完成k8s部署,执行minikube delete就可以卸载掉k8s。当然要实现如此快速的部署/卸载k8s操作,是有一些前提工作需要准备的,如果部署机器存在代理,则还需要踩一些坑。
langwu 吴英文
2020/05/29
6.2K0
使用minikube快速部署单机版k8s
使用 Kind 在离线环境创建 K8S 集群
Kind 是我很喜欢也一直在参与的项目,我计划将 Kind 相关的文章写成一个系列。这是第二篇。
Jintao Zhang
2020/02/17
8170
K8S 生态周报| KIND v0.8 正式发布
「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s 生态」 ( https://zhuanlan.zhihu.com/container )。
Jintao Zhang
2020/05/15
3640
使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群
Kind(Kubernetes in Docker) 是一个 Kubernetes 孵化项目,Kind 是一套开箱即用的 Kubernetes 环境搭建方案。顾名思义,就是将 Kubernetes 所需要的所有组件,全部部署在一个 Docker 容器中,可以很方便的搭建 Kubernetes 集群。
iMike
2019/09/24
4.5K0
使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群
Kind:一个容器创建K8S开发集群
kind:是一种使用Docker容器节点运行本地Kubernetes集群的工具。该类型主要用于测试Kubernetes,但可用于本地开发或CI。
YP小站
2020/11/03
9320
Kind:一个容器创建K8S开发集群
【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind多节点集群
集群是 Kubernetes 的核心优势:能够在内部或云端跨一组机器(无论是物理机还是虚拟机)调度和运行容器。Kubernetes 容器不受单个计算机的限制。相反,它们是跨整个集群进行抽象。
愚公搬代码
2022/04/29
6960
【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind多节点集群
使用Minikube快速在本地搭建 Kubernetes 单节点集群环境
Minikube是一个轻量级的Kubernetes集群,用于在个人计算机上进行本地开发和测试。它是Kubernetes社区为帮助开发者和学习者更好地学习和体验Kubernetes功能而推出的工具。通过Minikube,用户可以在个人计算机上快速构建和启动Kubernetes集群,从而进行本地开发和测试。Minikube支持在macOS、Linux和Windows平台上运行,并可以使用各类本地虚拟化环境作为驱动。 其支持大部分kubernetes的功能,列表如下
DevOps在路上
2024/01/10
2K0
使用Minikube快速在本地搭建 Kubernetes 单节点集群环境
基于k8s运行wasm的新玩具-krustlet
Krustlet 是基于k8s运行wasm程序的负载,通过亲和性来运行wasm程序,其实现了kubelet api,且兼容了 kubectl logs 和 kubectldelete 命令。
有点技术
2020/07/13
7450
Kind快速部署Kubernetes多集群
Kind架构及原理 Kind 使用一个 container 来模拟一个 node,在 container 里面跑 systemd ,并用 systemd 托管 kubelet 以及 containerd,然后通过容器内部的 kubelet 把其他 K8s 组件,比如 kube-apiserver、etcd、CNI 等跑起来。
废柴阿尤
2023/12/18
8730
Kind快速部署Kubernetes多集群
使用 Kind 构建离线集群安装包
Kind(Kubernetes in Docker) 是一个 Kubernetes 孵化项目,它使用 Docker 为节点进行 Kubernetes 的快速部署,可以方便的搭建 Kubernetes 集群,虽然简单,但也是通过 Kubernetes 一致性认证的安装器,因此用来做测试还是比较可靠的。
崔秀龙
2019/08/29
1.3K0
深入理解 K8S Pod 调试与实践技巧
调试运行中的容器和 Pod 不像直接调试进程那么容易,本文介绍了通过临时容器共享命名空间的方式调试业务容器进程的方法。调试 pod 最简单的方法是在有问题的 pod 中执行命令,并尝试排除故障。这种方法很简单,但有许多缺点。
我的小碗汤
2023/03/20
8470
深入理解 K8S Pod 调试与实践技巧
如何使用K8S快速部署测试环境
对于已经成熟的项目团队,测试环境基本上已经配置完成,开发人员提测后,会有本次提测的版本信息,涉及到项目中哪些工程,包括前端,后端等,不需要太多的配置即可完成测试环境的构建及部署。
漫谈测试
2025/03/29
1660
如何使用K8S快速部署测试环境
K3d vs Kind 谁更适合本地研发
随着 Kubernetes 及其周边生态的发展壮大,新项目层出不穷,越来越多的开发者加入到了开发云原生应用的行列。随之而来的,就是 Kubernetes 极高的复杂度和研发人员想要快速开发云原生应用之间的矛盾。为了解决这个矛盾,同时也为了降低学习 Kubernetes 的门槛,社区出现了各种各样的解决方案。如 minikube 用于生成一个单节点的 k8s VM,而 katacoda 则是在 web 端提供交互式的 k8s 操作教程。
郭旭东
2020/12/30
4.4K0
K3d vs Kind 谁更适合本地研发
使用kind在mac本地搭建k8s及istio
之前使用multipass装ubuntu,然后再用microk8s搭建k8s,这会直接用orbstack及kind在本地搭建k8s及istio
code4it
2023/07/31
1K0
使用kind在mac本地搭建k8s及istio
基础设施即代码·3分钟搭建一套本地K8s集群
本文是第七期DevOps训练营,开营环境准备内容。通过terraform+kind进行本地测试环境Kubernetes集群部署,部署ArgoCD来对后续DevOps工具进行交付。
DevOps云学堂
2023/08/22
6220
基础设施即代码·3分钟搭建一套本地K8s集群
相关推荐
三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验