覆盆子Pi Homelab配Kubernetes

2020-11-12 02:58:56

在去年的大部分时间里,我一直在我的WiFi路由器上连接的树莓PI 3b上运行Pi-Hole,它非常棒。因此,当新款覆盆子PI 4问世时,我拿起了一款。它放在我的办公桌上,主要是为了方便地访问它的USB端口,这让我可以将它连接到我的一些esp32开发工具包上,并将micropython代码推送到上面。Pi4一直是一个很棒的通用开发环境。

最近,我一直想为“内部”仪表板之类的东西编写一些琐碎的web端点。另外,这也是学习歌郎的一个很好的借口。在当今这个时代,一个停靠码头的戈朗开发环境显然是大势所趋。如果我的开发环境没有停靠,我真的做了什么吗?

所以我们一致认为,对接我的开发环境是可行的。当然,如果我的开发环境是停靠的,我的应用程序部署应该多使用多少容器?再少也不行。但现在我需要一种方法来部署和协调这些容器?我知道呀!。我应该在我的两个圆周率上运行一个Kubernetes集群!还不如把圆周率孔也放上去,能有多难呢?

这篇博客文章讲述了我做了什么,以及我是如何做到的,它的目的有两个-。

这是一张地图,让我可以在需要的时候回溯我的脚步。

所以,我的两个PI都在运行Ubuntu服务器。我决定从头开始,将最新的ubuntu服务器图像闪存到两个Pi的SD卡上。作为一个非常乐观的人,我预计在一天内就能让Pi-hole在这个新的Kubernetes集群上运行,而一天未过滤的广告对于体验来说只是一个很小的代价。唉,将近一周后我才让Pi-Hole再次在我的网络上工作,但太棒了!你可以从我的经验中学到东西!

我对Kubernetes组件在这个项目中的用处并不是很了解--但是,嘿,这就是这些项目给你带来的意义,天哪,我做到了。因此,如果您不理解这些术语中的一些术语,请不要担心,Kubernetes文档页面非常棒!

这些作品都不是原创的。我拼凑了各种来源的指南和漫游资料,才找到了你在这里看到的这个弗兰肯斯坦怪兽般的帖子。你可以在本页末尾找到我使用过的资源的链接。

这个旅程的第一步是确保您的所有机器上都有所需的包。在我的例子中,这是两台机器-Pi4(称为Terminus)和Pi3b(称为Trantor)。你需要码头、库贝莱特、库贝德姆和库贝特。您希望在所有节点上安装此程序。终端将是我的主节点,Trantor将是我的工人。阿西莫夫的粉丝们可能会抗议说,第二基金会毕竟是在特兰托身上,但现在让我们先来看看这个。在集群上的主服务器和辅助服务器上设置静态IP也会有所帮助,但我不会在这里介绍这一点。

使用便捷脚本安装Docker。是的,你盲目地运行你从网上下载的脚本,这是可耻的。

现在需要做一些额外的设置,以便让Kubernetes在Raspberry PI上工作-特别是启用cgroup。您可以通过编辑文件/boot/Firmware/cmdline.txt并在末尾添加以下选项来完成此操作。

Curl-s https://packages.cloud.google.com/apt/doc/apt-key.gpg|sudo apt-key add-cat<;<;eff|sudo tee/etc/apt/Soures.list.d/kubernetes.list Deb https://apt.kubernetes.io/Kubernetes-exial main eof.。

您会注意到我们使用的是Kubernetes-Xenial,这是撰写本文时的最新版本。如果需要,请将其更新到可用的最新版本。

让我们安装我们的主要K8助手。我们还将确保他们被排除在任何系统升级之外。正如Kubernetes文档所说,“kubeadm和kubectl需要特别注意升级。”

Sudo apt update&;&sudo apt install-y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl。

通过仅在主节点上运行以下命令来创建群集。请特别注意--pod-network-CIDR参数。稍后设置法兰绒时,您将需要此CIDR范围。

祝贺你。您现在是裸机Kubernetes集群(只有一个节点)的骄傲所有者。欣赏输出,并考虑运行他们要求您执行的命令。例如,如果您希望kubectl工作起来没有太多麻烦,那么您需要在$HOME/.kube/config中有一个配置文件。还要特别注意kubeadm Join命令,您需要在工作节点上运行该命令。

这些是上一步的输出建议您运行的命令。在主节点上运行此命令,以防不清楚。

在您希望专用于此集群的所有工作节点上运行kubeadm Join命令。我会等你的。

通读本指南,您将很快熟悉kubectl Apply命令。在Kubernetes的说法中,该命令“将配置应用于资源”,通常会提供一个YAML“清单”文件作为参数。

现在我们有了一个集群,但从技术上讲,Kubernetes不知道如何处理这个集群上调度的任何Pod之间的网络连接--至少,这是我所理解的。这就是为什么你需要一个像Flannel这样的插件来为你处理这件事。您可以在此处找到网络和网络策略插件的完整列表。但如果还不清楚,我们会用法兰绒的。

如果在创建集群时指定了pod-network-CIDR参数,则需要使用此CIDR编辑Flannel清单,然后才能将其应用于集群。

在您最喜欢的编辑器中打开该文件,然后找到密钥net-conf.json。使用您的群集的正确CIDR更新此处指定的CIDR。一旦完成,就像这样贴上货单。

要检查这是否有效,请运行以下命令以在集群上运行所有Pod。

您应该看到core-dns和Kube-flannel Pod像这样运行。我每个都有两个Pod,因为我的集群中有两个节点。

命名空间名称就绪状态重新启动agekube-system coredns-f9fd979d6-h9m47 1/1运行1 3d2hkube-system coredns-f9fd979d6-m5jrd 1/1运行1 3d2hkube-system Kube-flannel-ds-2ngxd 1/1运行1 3d2hkube-system Kube-flannel-ds-kqflv 1/1运行1。

命名空间用于隔离运行在同一集群上的实例和服务。我的数据工程师大脑认为集群是一个数据库,名称空间是模式,但我可能错了,也许应该认为集群是单个数据库安装,而名称空间是单独的数据库。或许,引入这种抽象概念是完全错误的。忘掉这一切,让我们继续前进吧。

我们现在有了一个群集,它知道如何处理Pod网络。让我们在上面做点什么吧!Kubernetes仪表盘怎么样,这样你就有了漂亮的东西来展示你的非技术倾向的重要另一半,作为你辛勤工作的成果?

我们将创建一个名称空间来保存与Kubernetes仪表板相关的所有内容。我将命名空间命名为Kubernetes-Dashboard。很有想象力,不是吗?

我们现在将下载Kubernetes仪表板的清单文件,因为我们需要进行一些更改。

我花了几天的时间试图弄清楚为什么货单不能开箱即用,当我试图拉出码头图像时,它总是失败。我做了两件事来解决这个问题-。

对于你们当中有更多K8经验的人,你可能会奇怪为什么我没有尝试使用头盔图表-我尝试了。Kubernetes-Dashboard需要运行两个服务-Dashboard-Metrics-Scrper和Kubernetes-Dashboard。头盔图似乎只显示了库伯内斯的仪表盘。我肯定我做错了什么,但在这一点上,我的耐心正在减弱,我只想继续下去。

显示仪表盘需要一点时间。你可以通过看豆荚旋转来娱乐自己,如下所示-。

一旦您看到dashbaord服务启动并运行,让我们来弄清楚我们是如何实际访问仪表板用户界面的。

我们假设您尚未在本地计算机上配置kubectl,而是在您的(无头)raspberry pi上运行所有这些命令。

首先运行kubectl代理。这将通过HTTP将集群API服务器公开给运行它的主机。此命令的输出应提供暴露API服务器的端口,通常为8001。

现在,让我们在您的笔记本电脑或计算机上设置本地端口转发,以便您可以从浏览器访问仪表板Web用户界面。您希望将发往本地计算机端口8001的流量转发到主节点(在那里运行kubectl代理)的端口8001。

打开您最喜欢的浏览器并导航到http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.You,应该会看到一个登录页面。我们需要一个令牌才能实际访问管理控制面板,令牌与群集上的服务帐户相关联。让我们创建我们的第一个服务帐户。创建一个名为admin-user.yaml的清单文件,其中包含以下内容-。

现在,要将该用户绑定到ClusterRole,以便该用户具有在仪表板上实际查看或执行某些操作的权限,请创建一个名为cluster-ole-binding.yaml的文件,其中包含以下内容-。

ApiVersion:rbac.Authization.k8s.io/v1 Kind:ClusterRoleBinding Metadata:Name:Admin-User Role Ref:apiGroup:rbac.Authization.k8s.io Kind:ClusterRole Name:ClusterAdmin Subjects:-Kind:ServiceAccount Name:Admin-User Namespace:Kubernetes-Dashboard

现在,让我们找出保存该用户令牌的Kubernetes秘密的名称。

找一个叫秘密的部分。您应该会找到一个名为name的密钥,其值类似于ADMIN-USER-TOKEN-XXXXX或类似的。运行以下命令以获取实际令牌。

复制令牌值并将其粘贴到浏览器上仪表板的登录页面中。你应该在里面。完成后,记得终止您的kubectl代理和本地端口转发。

祝贺你!。您已经在Raspberry pi集群上的HomeLab Kubernetes上部署了您的第一个工作负载!

您已经创建了一个裸机Kubernetes集群,使用Flannel设置了容器网络,并在上面部署了Kubernetes Dashboard。

在第2部分中,我们将为裸机集群(MetalLB)设置网络负载均衡器,并了解如何将仪表板公开为具有外部IP的负载平衡服务。

在第3部分中,我们将实际了解如何在该集群上运行PI-Hole(包括启用PI-HOLE DHCP)!