如何创建http端口监听_比Minikube更快,使用Kind快速创建K8S学习环境

2023-11-18

简述

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-PATHkind.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 或想监听的 IPhttp://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/

还有其它问题?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建http端口监听_比Minikube更快,使用Kind快速创建K8S学习环境 的相关文章

  • RabbitMQ --- SpringAMQP

    一 简介 SpringAMQP是基于RabbitMQ封装的一套模板 并且还利用SpringBoot对其实现了自动装配 使用起来非常方便 SpringAmqp的官方地址 Spring AMQP SpringAMQP提供了三个功能 自动声明队列
  • gitlab down: redis: 0s, normally up, want up; run:log

    突然发现gitlab不能访问了 报错505 1 查看gitlab的状态 发现redis的状态是down gitlab ctl status down redis 0s normally up want up run log 解决 启动red
  • matlab中global的用法

    Matlab 中子函数不传参直接调用主函数global变量方法 在一个m文件里要调用一个函数 自定义的 但是我希望这个函数能利用并修改workspace中的变量 m文件中的 可是函数的变量全是局部的 无法修改工作区的变量 该怎么办 同时在
  • KMP算法最浅显理解——一看就明白

    说明 KMP算法看懂了觉得特别简单 思路很简单 看不懂之前 查各种资料 看的稀里糊涂 即使网上最简单的解释 依然看的稀里糊涂 我花了半天时间 争取用最短的篇幅大致搞明白这玩意到底是啥 这里不扯概念 只讲算法过程和代码理解 KMP算法求解什么
  • Artec独立三维(3D)扫描软件

    最新版本 Artec Studio 9 1 中文界面 您是否想将自己的Kinect作为 3D 三维扫描仪来使用呢 ArtecStudio9 1为您提供解决方案 它可以和微软的Kinect 华硕的 Xtion XtionProLive以及其他
  • Uncaught SyntaxError: Unexpected end of input

    Uncaught SyntaxError Unexpected end of input 最近做项目遇到这样一个问题Uncaught SyntaxError Unexpected end of input Unexpected end of
  • mysql有没有flashback_Flashback for MySQL 5.7

    实现原理 flashback的概念最早出现于Oracle数据库 用于快速恢复用户的误操作 flashback for MySQL用于恢复由DML语句引起的误操作 目前不支持DDL语句 例如下面的语句 DELETE FROM XXX UPDA
  • xsync 集群同步工具

    前言 在配置集群时 往往需要将文件拷贝到各个机器 一来二去就很麻烦 我们可以使用 xsync 工具同时进行多台机器同步数据 环境准备 我们准备三台虚拟机 他们的 IP 分别为 192 168 56 2 192 168 56 3 192 16
  • python 日期和时间处理(time,datetime模块讲解)

    在现实生活中 我们常常遇到时间序列任务 所以今天讲解下日期和时间处理 Python 日期时间 datetime 1 获取当前时间 import datetime datetime object datetime datetime now p
  • 颜色的 HSL 表示

  • 【vue】图片加载动画效果

    加载后 一种是图片由浅到深 一种是闪光加载效果消失
  • tmux使用

    tmux使用 需求 ssh链接不稳定 若直接在ssh终端中运行某个长时间的程序 会被中断 使用tmux 即使ssh服务中断 tmux中的程序依旧运行着 常用命令汇总 开启一个tmux页面 tmux 开启一个tmux页面 自定义名字 tmux
  • Flutter Divider

    不设置高度 会在线的top和bottom占据一点空间 Divider thickness 1 h color Color 0xFF3D3D3E 设置height之后就正常了 上下没有间距了 Divider thickness 1 h hei
  • Docker未授权访问漏洞(www.hetianlab.com)

    什么是Docker Docker是一个开源的引擎 可以轻松的为任何应用创建一个轻量级的 可移植的 自给自足的容器 开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署 包括VMs 虚拟机 bare metal OpenStack 集
  • Uncaught TypeError: Cannot Read Property

    这是 JavaScript 开发人员最常遇到的错误 当你读取一个属性或调用一个未定义对象的方法时 Chrome 中就会报出这样的错误 导致这个错误发生的原因有很多 常见的一种情况是在渲染 UI 组件时 不正确地初始化状态 我们来看一个真实的
  • getifaddrs, freeifaddrs manual

    GETIFADDRS 3 Linux Programmer s Manual GETIFADDRS 3 NAME top getifaddrs freeifaddrs get interface addresses SYNOPSIS top
  • Java 结构化数据处理开源库 SPL

    现代Java应用架构越来越强调数据存储和处理分离 以获得更好的可维护性 可扩展性以及可移植性 比如火热的微服务就是一种典型 这种架构通常要求业务逻辑要在Java程序中实现 而不是像传统应用架构中放在数据库中 应用中的业务逻辑大都会涉及结构化
  • 专栏推介:《Hi3861网络编程实验》

    引言 本文是鸿蒙专栏 Hi3861网络编程实验 中的第一篇 从这个专栏的名称不难看出 这里面有三个关键词 鸿蒙 即 鸿蒙操作系统 Hi3861 海思生产的一款处理器 网络编程 也就是说 这个专栏就是带着大家做一些网络编程实验 实验代码是基于
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者

随机推荐

  • 测试用例--等价类划分、边界值法

    一 测试用例 案例 test case test instance 1 定义 是在测试执行之前 由测试人员编写的指导测试过程的重要文档 主要包括 用例编号 测试目的 测试步骤 用例描述 预期结果 2 介绍编写测试用例的7种方法 1 等价类划
  • js中常见的错误

    js运行报错 首现我们要先学会查看在哪里查看错误 打开页面点击鼠标右键审查元素 检查 打开控制台 然后根据上面的提示 读取 相关信息 然后读取自己哪里错了 最后寻找相应代码进行修改 1 未定义错误 Uncaught ReferenceErr
  • this指向的一个题

    妈呀啊啊啊啊啊啊啊啊啊啊啊 真的要崩溃 看视频的时候看到了一个this指向的题 想了半个小时 真的被自己蠢到 怎么会有人这么笨啊 function a xx this x xx return this var x a 5 var y a 6
  • 尝试爬取LOL英雄技能属性--01

    首先我们找到一个LOL英雄的全部展示的页面 http lol kuai8 com hero 恕瑞玛 your king has return hah hah金克丝长得不错 点击一下http lol kuai8 com hero 3 html
  • Arduino ESP32自平衡小车制作实现(不需编码器)

    1 mpu6050陀螺仪角度方向和静态平衡角度测试 说明 1 陀螺仪补偿值的计算 试时提前用calcGyroOffsets true 函数计算出 补偿值 知道mpu6050的补偿值后用setGyroOffsets 直接设置补偿值 避免每次开
  • 生成指定长度的随机字符串(数组和字母组合)

    brief getRandomCode 生成指定长度的随机字符串 数组和字母组合 param codelength 指定字符串长度 return 生成的字符串 QString getRandomCode int codelength con
  • 通过git clone批量下载huggingface模型和数据集

    目录 前言 一 配置git全局代理 可选 1 配置http或socks5代理 2 取消代理配置 二 下载步骤 问题 前言 想要下载huggingface的模型 却发现只能一个个文件下载非常不方便 又或者官方提供的api不好用或者下载不下来
  • 浏览器有哪些进程?浏览器进程,渲染进程,网络进程,渲染进程有哪些线程?

    浏览器进程 渲染进程有哪些线程 在浏览器中打开两个页面 会开启几个进程 1个浏览器进程 1个网络进程 一个GPU进程 通常一个Tab页对应一个渲染进程 但有其它情况 1 如果页面中有iframe的话 iframe也会运行在单独的进程中 2
  • 实现SSM简易商城项目的登录注册功能

    实现SSM简易商城项目的登录注册功能 项目背景介绍 在互联网时代 电商行业蓬勃发展 越来越多的人开始关注电子商务 为了实现一个简易商城项目 我们选择了SSM框架作为项目的基础架构 SSM分别代表了Spring SpringMVC和MyBat
  • 睿智的目标检测24——Keras搭建Mobilenet-SSD目标检测平台

    睿智的目标检测24 Keras搭建Mobilenet SSD目标检测平台 更新说明 学习前言 什么是SSD目标检测算法 源码下载 SSD实现思路 一 预测部分 1 主干网络介绍 2 从特征获取预测结果 3 预测结果的解码 4 在原图上进行绘
  • 【编译部署】使用Visual Studio编译Linux平台程序/动态库(远程连接)

    文章目录 1 背景 2 使用的环境 3 配置步骤 3 1 安装 Visual Studio 工具集 3 2 创建解决方案 3 3 Linux 端准备工作 3 4 测试编译和运行 5 添加附加包含和附加库 1 背景 由于日常在 Windows
  • 论文笔记:Hankel Matrix Factorization for Tagged Time Series to Recover Missing Values during Blackouts

    ICDE 2019 0 摘要 在执行时间序列分析时 恢复时间序列中的缺失值至关重要 而本文研究的blackouts问题 即在一定时期内丢失所有数据 是最紧迫和最具挑战性的问题之一 现有的时间序列缺失值恢复方法无法正确处理这个问题 但在这项工
  • 数组和指针笔试题解析之【数组】

    目录 前言 1 一维数组 2 字符数组 2 1题型一 2 2题型二 2 3题型三 3 二维数组 前言 1 数组名的意义 sizeof 数组名 这里的数组名表示整个数组 计算的是整个数组的大小 单位是字节 数组名 这里的数组名表示整个数组 取
  • win10连接蓝牙耳机_蓝牙耳机兼容性是什么?哪个牌子蓝牙耳机连接稳定续航高_...

    2020年10月21日 10 08 作者 网络 编辑 王动 不论我们何时走在街上 总能看到有人佩戴着耳机摇头晃脑 似乎沉浸在音乐的世界里无法自拔 但在众多手机去掉的耳机接口后 大多数人开始将目光投向蓝牙耳机 希望能够重获快乐 只是 并非所有
  • pyltp的本地安装

    0 电脑配置 win 8 1 64位操作系统 python 2 7 1 使用pip安装pyltp 运行安装命令 pip install pyltp 第一次失败 缺少Visual C 9 0 参考资料 https blog csdn net
  • Android,页面3秒自东跳转和点击跳转显示

    先打开ADT程序创建 创建文件 如图 命名为Day01 注意大小写 注意改名字不要重复 在res layout中找到 下面第一个是视图 第二个是对视图进行编辑点击第二个进行编辑 把
  • 多线程面试总结

    总结 每个对象有一个监视器锁monitor 线程进入同步方法时尝试获取monitor的所有权 其他线程进入阻塞状态 该线程释放monitor的所有权后其他线程重新尝试获取monitor的所有权 只能有一个线程对同步监视器加锁 1 多线程的问
  • React报错误及其解决方案

    1 Import in body of module reorder to top import first 解决方案 import开头代码写在最前面
  • 微信支付之扫码支付相关代码(Java)(转载)

    最近开发网站过程 需要引入支付过程 第三方支付中最火的莫过于支付宝支付和微信支付 下边借助微信支付官网上的文档 写一下接入微信支付之扫码支付的流程 相对支付宝支付而言 微信支付的开发文档写的相当的low demo写的一点都不简洁 下边写一下
  • 如何创建http端口监听_比Minikube更快,使用Kind快速创建K8S学习环境

    简述 K8S 如火如荼的发展着 越来越多人想学习和了解 K8S 但是由于 K8S 的入门曲线较高很多人望而却步 然而随着 K8S 生态的蓬勃发展 社区也呈现了越来越多的部署方案 光针对生产可用的环境就有好几种部署方案 对于用来测试和学习环境