k3s编译
⑴ 云原生有哪些优势
云原生的优势简单来说有以下几点:
1、实现应用更小体积
对于微服务化架构而言,拥有了更小的体积代表了未来将会是更少的下载带宽,而且更快地分发下载速度,在工作上会提高工作效率,节省更多的工作时间。
2、拥有更快的启动速度
相比传统的单体应用而言,启动速度与运行效率快慢并不是重要的指标,但是对于需要快速迭代、水平扩展的云原生微服务架构应用而言,更快的启动速度就意味着更高的交付效率,和更加快速的回滚,尤其是面对较多应用的时候,可能仅仅才500ms的反应时间也会让用户感觉到延迟,从而造成用户的体验感变差。
3、实际占用资源更少
在实际的运行中占用的资源更低,也就代亏哗族表了更高的部署密度和更低的计算成本,同时,在JVM启动时需要消耗大量CPU资源对字节码进行编译,降低启动时资源消耗,可以减少资源争抢,更好保障其他应用SLA。
4、数据没有固定的存储模式
也就说,在如今的实际使用中,云原生应用和服务既可销弊以用JSON来处理数据,也可以用protocol buffer 或传统的 XML 来构造数据。很大程度上满足了不同的用户需求,无论是操作,还是实际都带来极大的便利性。
5、弹性扩展
云原生架构的主要特点是微服务、容器化、DevOps 、持续交付四个主要的特点,也正因为如此它的资源是可以按照实际情况进行伸缩,这样不但提高资源的利用率,也大大降低了企业成本。
6、系统更加安全强壮
云原生架构依托于容器编排工具(K8S)与微服务的组合,应用就拥有了自动恢复能力、容错能力、故障隔离能力,让应用时刻处于可用的状态。
7、屏蔽底层差异
因为使用了容器化技术,应用运行于容器之中,应用就不需要考虑底层硬件的差异,只要是能运行容器镜像的硬件都可以运行程序,大大简化了开发工芦派作量。同时对运维人员也非常友好,不需要再为环境问题而苦恼。
⑵ 使用 k3s 在 Fedora IoT 上运行 K8S
Fedora IoT 是一个即将发布的、面向物联网的 Fedora 版本。去年 Fedora Magazine 的《 如何使用 Fedora IoT 点亮 LED 灯 》一文第一次介绍了它。从那以后,它与 Fedora Silverblue 一起不断改进,以提供针对面向容器的工作流的不可变基础操作系统。
Kubernetes 是一个颇受欢迎的容器编排系统。它可能最常用在那些能够处理巨大负载的强劲硬件上。不过,它也能在像树莓派 3 这样轻量级的设备上运行。让我们继续阅读,来了解如何运行它。
虽然 Kubernetes 在云计算领域风靡一时,但让它在小型单板机上运行可能并不是常见的。不过,我们有非常明确的理由来做这件事。首先,这是一个不需要昂贵硬件就可以学习并熟悉 Kubernetes 的好方法;其次,由于它的流行性,市面上有 大量应用 进行了预先打包,以用于在 Kubernetes 集群中运行。更不用说,当你遇到问题时,会有大规模的社区用户为你提供帮助。
最后但同样重要的是,即使是在家庭实验室这样的小规模环境中,容器编排也确实能够使事情变得更加简单。虽然在学习曲线方面,这一点并不明显,但这些技能在你将来与任何集群打交道的时候都会有帮助。不管你面对的是一个单节点树莓派集群,还是一个大规模的机器学习场,它们的操作方式都是类似的。
一个“正常”安装的 Kubernetes(如果有这么一说的话)对于物联网来说有点沉重。K8s 的推荐内存配置,是每台机器 2GB!不过,我们也有一些替代品,其中一个新人是 k3s —— 一个轻量级的 Kubernetes 发行版。
K3s 非常特殊,因为它将 etcd 替换成了 SQLite 以满足键值存储需求。还有一点,在于整个 k3s 将使用一个二进制文件分发,而不是每个组件一个。这减少了内存占用并简化了安装过程。基于上述原因,我们只需要 512MB 内存即可运行 k3s,极度适合小型单板电脑!
安装 k3s 非常简单。直接运行安装脚本:
它会下载、安装并启动 k3s。安装完成后,运行以下命令来从服务器获取节点列表:
需要注意的是,有几个选项可以通过环境变量传递给安装脚本。这些选项可以在 文档 中找到。当然,你也完全可以直接下载二进制文件来手动安装 k3s。
对于实验和学习来说,这样已经很棒了,不过单节点的集群也不能算一个集群。幸运的是,添加另一个节点并不比设置第一个节点要难。只需要向安装脚本传递两个环境变量,它就可以找到第一个节点,而不用运行 k3s 的服务器部分。
上面的 example-url 应被替换为第一个节点的 IP 地址,或一个完全限定域名。在该节点中,(用 XXX 表示的)令牌可以在 /var/lib/rancher/k3s/server/node-token 文件中找到。
现在我们有了一个 Kubernetes 集群,我们可以真正做些什么呢?让我们从部署一个简单的 Web 服务器开始吧。
这会从名为 nginx 的容器镜像中创建出一个名叫 my-server 的 部署 (默认使用 docker hub 注册中心,以及 latest 标签)。
为了访问到 pod 中运行的 nginx 服务器,首先通过一个 服务 来暴露该部署。以下命令将创建一个与该部署同名的服务。
服务将作为一种负载均衡器和 Pod 的 DNS 记录来工作。比如,当运行第二个 Pod 时,我们只需指定 my-server(服务名称)就可以通过 curl 访问 nginx 服务器。有关如何操作,可以看下面的实例。
默认状态下,一个服务只能获得一个 ClusterIP(只能从集群内部访问),但你也可以通过把它的类型设置为 LoadBalancer 为该服务申请一个外部 IP。不过,并非所有应用都需要自己的 IP 地址。相反,通常可以通过基于 Host 请求头部或请求路径进行路由,从而使多个服务共享一个 IP 地址。你可以在 Kubernetes 使用 Ingress 完成此操作,而这也是我们要做的。Ingress 也提供了额外的功能,比如无需配置应用即可对流量进行 TLS 加密。
Kubernetes 需要 Ingress 控制器来使 Ingress 资源工作,k3s 包含 Traefik 正是出于此目的。它还包含了一个简单的服务负载均衡器,可以为集群中的服务提供外部 IP。这篇 文档 描述了这种服务:
Ingress 控制器已经通过这个负载均衡器暴露在外。你可以使用以下命令找到它正在使用的 IP 地址。
找到名为 traefik 的服务。在上面的例子中,我们感兴趣的 IP 是 10.0.0.8。
让我们创建一个 Ingress,使它通过基于 Host 头部的路由规则将请求路由至我们的服务器。这个例子中我们使用 xip.io 来避免必要的 DNS 记录配置工作。它的工作原理是将 IP 地址作为子域包含,以使用 10.0.0.8.xip.io 的任何子域来达到 IP 10.0.0.8。换句话说,my-server.10.0.0.8.xip.io 被用于访问集群中的 Ingress 控制器。你现在就可以尝试(使用你自己的 IP,而不是 10.0.0.8)。如果没有 Ingress,你应该会访问到“默认后端”,只是一个写着“404 page not found”的页面。
我们可以使用以下 Ingress 让 Ingress 控制器将请求路由到我们的 Web 服务器的服务。
将以上片段保存到 my-ingress.yaml 文件中,然后运行以下命令将其加入集群:
你现在应该能够在你选择的完全限定域名中访问到 nginx 的默认欢迎页面了。在我的例子中,它是 my-server.10.0.0.8.xip.io。Ingress 控制器会通过 Ingress 中包含的信息来路由请求。对 my-server.10.0.0.8.xip.io 的请求将被路由到 Ingress 中定义为 backend 的服务和端口(在本例中为 my-server 和 80)。
想象如下场景:你的家或农场周围有很多的设备。它是一个具有各种硬件功能、传感器和执行器的物联网设备的异构集合。也许某些设备拥有摄像头、天气或光线传感器。其它设备可能会被连接起来,用来控制通风、灯光、百叶窗或闪烁的 LED。
这种情况下,你想从所有传感器中收集数据,在最终使用它来制定决策和控制执行器之前,也可能会对其进行处理和分析。除此之外,你可能还想配置一个仪表盘来可视化那些正在发生的事情。那么 Kubernetes 如何帮助我们来管理这样的事情呢?我们怎么保证 Pod 在合适的设备上运行?
简单的答案就是“标签”。你可以根据功能来标记节点,如下所示:
一旦它们被打上标签,我们就可以轻松地使用 nodeSelector 为你的工作负载选择合适的节点。拼图的最后一块:如果你想在所有合适的节点上运行 Pod,那应该使用 DaemonSet 而不是部署。换句话说,应为每个使用唯一传感器的数据收集应用程序创建一个 DaemonSet,并使用 nodeSelector 确保它们仅在具有适当硬件的节点上运行。
服务发现功能允许 Pod 通过服务名称来寻找彼此,这项功能使得这类分布式系统的管理工作变得易如反掌。你不需要为应用配置 IP 地址或自定义端口,也不需要知道它们。相反,它们可以通过集群中的命名服务轻松找到彼此。
随着集群的启动并运行,收集数据并控制灯光和气候,可能使你觉得你已经把它完成了。不过,集群中还有大量的计算资源可以用于其它项目。这才是 Kubernetes 真正出彩的地方。
你不必担心这些资源的确切位置,或者去计算是否有足够的内存来容纳额外的应用程序。这正是编排系统所解决的问题!你可以轻松地在集群中部署更多的应用,让 Kubernetes 来找出适合运行它们的位置(或是否适合运行它们)。
为什么不运行一个你自己的 NextCloud 实例呢?或者运行 gitea ?你还可以为你所有的物联网容器设置一套 CI/CD 流水线。毕竟,如果你可以在集群中进行本地构建,为什么还要在主计算机上构建并交叉编译它们呢?
这里的要点是,Kubernetes 可以更容易地利用那些你可能浪费掉的“隐藏”资源。Kubernetes 根据可用资源和容错处理规则来调度 Pod,因此你也无需手动完成这些工作。但是,为了帮助 Kubernetes 做出合理的决定,你绝对应该为你的工作负载添加 资源请求 配置。
尽管 Kuberenetes 或一般的容器编排平台通常不会与物联网相关联,但在管理分布式系统时,使用一个编排系统肯定是有意义的。你不仅可以使用统一的方式来处理多样化和异构的设备,还可以简化它们的通信方式。此外,Kubernetes 还可以更好地对闲置资源加以利用。
容器技术使构建“随处运行”应用的想法成为可能。现在,Kubernetes 可以更轻松地来负责“随处”的部分。作为构建一切的不可变基础,我们使用 Fedora IoT。
via: https://fedoramagazine.org/kubernetes-on-fedora-iot-with-k3s/
作者: Lennart Jern 选题: lujun9972 译者: StdioA 校对: wxy
⑶ 用于本地实验的小型 Kubernetes:k0s、MicroK8s、kind、k3s 和 Minikube
前言
当您希望在本地环境实验 Kubernetes 相关概念或技术,但又不想对生产环境造成风险时,小型 Kubernetes 集群成为了理想的选择。它们适合桌面或笔记本电脑运行,提供了一个安全的沙盒环境来测试想法。市面上涌现出多种解决方案,本文将回顾其中最受欢迎的工具,以帮助您更好地了解它们,并根据需求选择合适工具。
工具1. K0s
K0s 是一个轻量级的 Kubernetes 实现,旨在提供一个易于设置的环境。通过从项目存储库下载其静态构建的单个文件并进行配置,即可启动集群。该文件专为 Linux 编译,只能在该系统上运行。您需要使用命令将文件复制到特定目录,并启动服务。K0s 集成了一个用于连接 Kubernetes API 的 kubectl CLI 工具,允许您创建各种 Kubernetes 对象,如命名空间和部署。要添加节点,您需要在其他服务器上下载和安装 K0s 二进制文件,并生成身份验证令牌。卸载 K0s 时,只需停止服务并从主机中删除相关文件。K0s 使用 containerd 管理容器,并支持 Calico 和 kube-router 作为 CNI。它还提供了自动完成脚本,适用于多种 shell 环境。
工具2. MicroK8s
MicroK8s 是由 Canonical 开发的一个轻量级集群解决方案。与 K0s 类似,集群节点需要手动设置,可在与主节点通过 TCP/IP 连接的任何 Linux 实例上运行。添加新节点同样需要令牌,内置的 kubectl 工具处理 API 交互。MicroK8s 使用默认的 CNI,并支持 42 个 Linux 发行版。安装后,您可以启动集群,同时附带一组可启用和禁用的插件。它还包含一个内部注册表和 microk8s inspect 命令,用于分析集群并生成报告。
工具3. kind
kind 是用于本地运行 Kubernetes 集群的轻量级工具,安装简单,仅需下载可执行文件。创建集群涉及设置 Docker 容器和网络权限,运行 kind create cluster 启动单个节点。kind 使用 Docker 管理容器,并在创建群集时自动配置 kubectl 访问 API。您可以使用配置文件创建更复杂的集群,例如三个节点。卸载时只需调用 kind delete cluster。它支持 Bash、zsh 和 fish 的自动完成脚本,不附带任何插件,但允许使用其他 CNI,例如 Flannel 和 Traefik。
工具4. K3s
K3s 是 Rancher 的 Kubernetes 发行版,名称旨在强调其轻量级和简单性。它与 K0s 和 MicroK8s 类似,但具有更少的功能。启动后,K3s 会创建具有两种角色之一的群集节点。大部分磁盘驱动程序和云提供程序驱动程序已从构建中排除,以减小可执行文件大小。在最简单情况下,您可以使用 Docker Desktop 将群集作为单个节点的一部分运行。k3d 实用程序管理在 Linux 中运行的 K3s 节点。
工具5. Minikube
Minikube 适用于基于 Debian 和 Red Hat 的 Linux 发行版,安装和配置相对简单。它实现了一个本地 Kubernetes 环境,支持 Bash、zsh 和 fish 的自动完成脚本。您可以选择使用的 CNI 插件,并使用命令将节点添加到群集。使用 minikube status 命令查看群集状态。Minikube 还支持多个配置文件的集群,以及一组插件,允许您轻松激活组件,如注册表、入口代理和 Istio。
替代解决方案
本文未涵盖所有小型 Kubernetes 解决方案,但提到了一些较少受欢迎的项目,例如支持的操作系统兼容性。K0s、MicroK8s、K3s 和 Minikube 在 Linux 环境中运行,但借助虚拟化工具,它们也可以在不同操作系统上部署。比较表提供了基本功能摘要,以帮助您根据任务、资源和网络基础设施需求做出选择。