- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Kind: 如何快速搭建本地 K8s 开发环境?由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
上篇文章中我们讲到了 k8s 中有哪些扩展点,开始 Operator 开发相关之前我们需要先把本地环境搭建好 。
。
开始之前需要先检查一下 。
1.是否已经安装好了 Docker 环境 。
2.是否已经安装好了 Golang 环境, Go 版本最好 >= 1.15 。
。
2.1 安装 。
如果本地存在 Golang 环境可以直接执行下方命令进行安装 。
如果不想通过源码安装可以查看官方文档直接安装编译好的二进制文件 。
执行下方命令可以输出 kind 的版本就表示安装好了 。
2.2 创建一个 K8s 集群 。
使用下方命令即可创建一个简单的单节点 K8s 集群 。
集群的创建时间和你的网络环境以及机器的性能有关系,kind 会去 docker hub 上拉取 kindest/node 镜像,这个镜像大概有 400M 的大小,当出现下方的提示的时候就说明集群创建好了 。
我们可以使用 kind get clusters 获取我们创建的集群列表,kind 支持创建多个集群,不手动指定集群名称的时候默认名为 kind ,我们也可以像下面一样在创建集群的时候使用 --name 指定集群名称 。
可以看到我们两个集群都创建好了 。
现在我们只需要一个集群,所以可以先使用 kind delete clusters mohuishou 将刚刚创建的集群先删除掉 。
2.3 使用集群 。
下面我们来看一下 kubectl 的常用命令是否都可以正常使用,并且部署一个简单的 web 服务试试 。
查看集群信息 。
可以看到我们 k8s master 地址和 dns 的地址,注意一般情况下我们只创建一个集群不需要指定 --context cluster name 但是创建了多个集群时这个基本就是必须的一个命令了。如果不加这个参数可能会报下面的错误 。
这是因为 kubectl默认连接的 apiserver 地址是 localhost:8080但是我们的 apiserver 地址不是这个所以报错.
为什么我们使用 --context cluster-name 就可以了呢?
这是因为 kind 在创建集群的时候会修改 $HOME/.kube/config 的配置,将集群的 apiserver 地址,证书等相关信息都自动写入进去了 。
每次命令都要加上这个参数好麻烦怎么办?
我们可以使用 kubectl config use-context context-name 来进行设置,设置好了之后我们后续就不用每次都加上 –context 的参数了,同时还可以通过 kubectl config current-context 查询我们当前默认操作的集群是哪一个 。
查看集群节点列表 。
可以发现我们部署的是一个单节点的 v1.20.2 的集群 。
部署一个 Nginx 服务 。
使用下方代码创建一个 nginx.yml 文件,然后使用 kubectl apply -f nginx.yml 就可以完成部署了 。
查看当前 deployment 的状态 。
查看 pod 的状态 。
由于我们没有做服务暴露,所以是不能直接访问对应的服务的,我们可以用 kubectl提供的端口转发功能来讲流量从本地转发给 k8s 集群 。
我们访问 http://localhost:30080 就会发现这个熟悉的 nginx 界面 。
image-20210424210804343 。
到这里可以发现我们集群已经是可以使用了 。
2.4 进阶使用 。
2.4.1 创建一个多节点的集群 。
kind 默认创建的是一个单节点的集群,我们可以通过修改配置创建一个高可用的集群,我们创建一个 3 个 master 节点,两个 worker 节点的集群 。
看一下节点即可验证 。
2.4.2 Load Image 。
一般来说我们在 k8s 内部署应用需要先把容器镜像推送到到镜像仓库当中,这样在本地开发的时候相对来说会比较麻烦,特别是镜像比较大的时候,往返会有两次网络消耗,为了解决这个问题我们可以使用 kind load 镜像的功能直接把镜像.
排坑指南:load image 成功,但是部署 pod 报错 。
这个问题之前卡了我很久,还是有点坑 。
1.进入节点查看: 镜像是否存在 。
2.如果镜像存在,也就是我们上面看到的情况,这时候就要检查一下我们部署的 yaml 文件 。
是否存在: imagePullPolicy: Always 如果我们没有改 yaml 的话默认会是这个配置,这个配置会导致每次都去镜像仓库拉取镜像,改成 imagePullPolicy: IfNotPresent 就可以了 。
3.如果镜像不存在:这时候要检查一下有没有指定 cluster-name,在存在多个集群的情况下可能没有加载到我们想要的集群,加上 --name cluster-name 即可 。
总结 。
kind 在创建集群的时候实际上使用的是 kubeadm 所以还可以修改 kubeadm 的配置来修改默认的镜像地址,节点标签污点等信息,除此之外还可以配置 PV/PVC CNI 插件等配置,如果有需求的话可以查阅 kind 的官方文档 。
不过要注意的是 kind 不支持给运行的集群添加节点,如果需要多节点集群的话得提前规划好节点数量 。
参考文献 。
原文地址:https://mp.weixin.qq.com/s/N5RdUxUx4f58qXKL5ha0OQ 。
最后此篇关于Kind: 如何快速搭建本地 K8s 开发环境?的文章就讲到这里了,如果你想了解更多关于Kind: 如何快速搭建本地 K8s 开发环境?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在文档中找不到答案,所以我在这里问。 在 Grails 中,当您创建应用程序时,您会默认获得生产、开发等环境。 如果您想为生产构建 WAR,您可以运行以下任一命令: grails war 或者 gr
我们组织的网站正在迁移到 Sitecore CMS,但我们正在努力以某种方式为开发人员 (4)、设计师 (4)、QA 人员 (3)、作者 (10-15) 和批准者 (4-10) 设置环境在他们可以独立
如何在WinCVS中设置CVSROOT环境变量? 最佳答案 简单的回答是:您不需要。 CVSROOT 环境变量被高估了。 CVS(NT) 只会在确定存储库连接字符串的所有其他方法都已用尽时才使用它。人
我最近完成了“learnyouahaskell”一书,现在我想通过构建 yesod 应用程序来应用我所学到的知识。 但是我不确定如何开始。 关于如何设置 yesod 项目似乎有两个选项。一是Stack
在这一章中,我们将讨论创建 C# 编程所需的工具。我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一下 C#
运行Ruby 代码需要配置 Ruby 编程语言的环境。本章我们会学习到如何在各个平台上配置安装 Ruby 环境。 各个平台上安装 Ruby 环境 Linux/Unix 上的 Ruby 安装
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个这样的计算(请注意,这只是非常简化的、缩减版的、最小的可重现示例!): computation <- function() # simplified version! { # a lo
我使用环境作为哈希表。键是来自常规文本文档的单词,值是单个整数(某个其他结构的索引)。 当我加载数百万个元素时,更新和查找都变慢了。下面是一些代码来显示行为。 看起来从一开始的行为在 O(n) 中比在
我正在构建一个 R 包并使用 data-raw和 data存储预定义的库 RxODE楷模。这非常有效。 然而,由此产生的.rda文件每代都在变化。某些模型包含 R 环境,并且序列化似乎包含“创建时间”
(不确定问题是否属于这里,所以道歉是为了) 我很喜欢 Sublime Text ,我经常发现 Xcode 缺少一些文本/数据处理的东西。我可能有不止一个问题—— 'Command +/' 注释代码但没
我正在使用 SF2,并且创建了一些有助于项目调试的路由: widget_debug_page: path: /debug/widget/{widgetName} defau
我创建了一个名为 MyDjangoEnv 的 conda 环境。当我尝试使用 source activate MyDjangoEnv 激活它时,出现错误: No such file or direct
有没有办法区分从本地机器运行的包和从 Cordova 应用商店安装的包? 例如,我想像这样设置一个名为“evn”的 JavaScript 变量: if(cordovaLocal){ env = 'de
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我的任务是使用 java 和 mysql 开发一个交互式网站:使用 servlet 检索和处理数据,applet 对数据客户端进行特殊处理,并处理客户端对不同数据 View 的请求。 对于使用 jav
这按预期工作: [dgorur@ted ~]$ env -i env [dgorur@ted ~]$ 这样做: [dgorur@ted ~]$ env -i which date which: no
我想进行非常快速的搜索,看来使用哈希(通过环境)是最好的方法。现在,我得到了一个在环境中运行的示例,但它没有返回我需要的内容。 这是一个例子: a system.time(benchEnv(), g
我想开始开发 OpenACC 程序,我有几个问题要问:是否可以在 AMD gpu 上执行 OpenACC 代码? 如果是这样,我正在寻找适用于 Windows 环境的编译器。我花了将近一个小时什么也没
这可能看起来很奇怪,但是有没有办法制作机器(linux/unix 风格 - 最好是 RHEL)。我需要控制机器的速度以确保代码在非常慢的系统上工作并确定正确的断点(在时间方面)。 我能做到的一种方法是
我是一名优秀的程序员,十分优秀!