如何在笔记本电脑上运行Kubernetes集群

2020-05-17 08:35:13

想要集装箱吗?了解如何使用OKD在笔记本电脑上设置和运行Kubernetes容器集群。

你一直在用你最喜欢的搜索引擎搜索互联网,比如DuckDuckGo,了解你能了解到的所有关于集装箱的信息-这种感觉在过去几年里席卷了科技行业。到目前为止,您已经听说过Kubernetes,它是目前最流行的容器管理平台。也许你在艰难的道路上偶然遇到了库伯内斯,甚至可能是一些库伯内斯的指导课程。

也许你自己经历了弄清楚这件事的过程。当你盯着谷歌、亚马逊和其他公司的产品时,你会自言自语地说,肯定有更简单的方法!";当你盯着谷歌、亚马逊和其他公司的产品时,你会对自己说。您已经很好地了解了为什么要使用它们,甚至可能已经部署了一些集装箱化的应用程序,而且这些应用程序还在运行。太棒了!一路上,你开始读到或听到关于容器编排的书,然后你沿着那里的每个点击诱饵链接走进了兔子洞。

如果看着这些提供商会让你的钱包受伤,或者你和我一样,更愿意让你的数据在你的控制之下,不要害怕!OpenShift可以提供帮助!经过进一步搜索,您发现了红帽提供的OpenShift Container Platform。虽然他们确实提供60天的试用期,但你并不是真的想把信用卡存档。也许你不想和推销员打交道。不管怎样,我有一个解决方案给你。与RedHat做的几乎所有事情一样,有一个名为OpenShift OKD的开源社区项目。

我喜欢开源。尽管我在红帽工作了将近五年,但我仍然运行所有东西的上游版本。我喜欢更贴近社区,从我的日常工作中开始一些公司联系。此外,我喜欢我的工作的一个部分是将复杂的流程分解成容易理解和可重复的部分。

为了工作,我周而复始地出差。虽然我在家里有一个由各种现成部件组成的坚实的实验室,但有时客户端站点不允许我使用VPN。对于这样的情况,我必须想出一种方法来在我的笔记本电脑上可靠地运行环境。我还必须确保这个环境是NAT&39;D,这样对于外界来说,连接到WiFi的只是我的笔记本电脑。

本指南向您介绍如何使用运行libvirt的单个虚拟机管理程序在2+节点群集上运行OpenShift。我找到的大多数指南只有一部分是完整的。无论是OCP版本之间的差异,还是不同的用例,都需要另一种处理方式。

最终,我喜欢选择一个复杂的话题,直截了当地走一遍,边走边解释。像所有其他作者一样,我也有缺陷,因为当我对这个过程过于熟悉时,我没有充分详细地解释事情。我确实努力根据反馈进行更正,以便给你留下一个清晰、简洁的指南,解释正在发生的事情,这样它就不是一个简单的猴子看到猴子做的指南。

如果您对本指南的NAT&D部分不感兴趣(即您有标准网络布局),请跳过下面的步骤1、2A、2B。

在强制门户(即酒店或其他强制门户)的限制下工作,该门户不允许来自桥接虚拟机的多个连接)。

我假设您知道如何设置某种虚拟机管理程序(如果跳过NAT-ing部分)。

我假设您正在尝试创建一个封闭的环境(即,您没有使用集中式DNS/DHCP/Web服务器)。

要设置主机,请为所有虚拟机创建桥接网络,以便在以下位置与其自身通信:

nmcli con shownmcli con add ifname br0类型网桥con-name br0nmcli con add type bridge-lave ifname eno1 master br0nmcli con up br0nmcli con Modify";bridge-br0";ifname br0 type ethernetIP4 10.120.120.1/24。

这应该是桥接网络所需的全部内容,以便让nlibvirt来宾使用。

此虚拟机独立于OpenShift安装。它托管OpenShift所需的服务,但不受安装(或缺少)OKD4的影响。

此VM应该有两个网卡,一个位于网桥上,另一个位于NAT接口上。在我的示例中,我设置了以下内容:

在指定为网关的访客上,确保sysctl打开以进行数据包转发。数据包转发允许网关充当转发和路由流量的路由器。

接下来,用Firewalld创建两个区域。外部区域需要绑定到libvirt NAT上可以访问互联网的接口。此接口/区域还应确保启用伪装:

nmcli con mod${Internal}ipv4.address";10.120.120.250/24";nmcli con mod${Internal}ipv4.dns-search";lab-cluster.okd4.lab";nmcli con mod${Internal}connection.autoconnect yesnmcli con mod${Internal}ipv4方法手册。

我已决定允许内部区域上的内部流量,而不是开放所有单个端口。这样做风险自负。

确保禁用systemd解析,并且网络管理器使用默认DNS设置:

我们正在安装此项目保存一些命令所需的所有软件包。

因为HAProxy绑定到端口80,所以我们需要将Apache移到不同的端口。8080号端口是一个合理的选择:

将Apache端口添加到内部防火墙。如果已将内部设置为接受所有内容,则不需要执行此操作:

对于此安装,核心操作系统文件是从https://getfedora.org/coreos/download/下载的,我使用的是裸机映像。

我们将使用符号链接,以便在更新CoreOS映像时不必更改配置文件。另外,创建一个指向最新版本的符号链接,这样我们就不必每次发布都更新PXE菜单:

dnsmasq的大部分设置在其配置文件中完成。但是,在单个主OKD4部署中,我发现达到了并发DNS请求的最大数量。默认值为150。要增加这个值,您需要编辑位于/etc/systemd/system/multi-user.target.wants/dnsmasq.service的systemd单元文件,使其如下所示:

完成后,我们就可以开始编辑dnsmasq.conf文件了。此文件位于CentOS 8上的/etc/dnsmasq.conf。Dnsmasq同时用于DHCP和DNS。Dnsmasq实现官方的DHCP选项。查看此页面,因为它有助于您理解文件中的dhcp-option=设置。而dnsmasq中的一些DHCP选项有漂亮的名称。为了保持一致性,我避免使用它们,因为下面使用的几个选项没有漂亮的名称。dhcp-option的语法如下:

务必要知道,Fedora CoreOS DHCP客户端当前不使用发送名称。这意味着当主机从DHCP服务器接收其主机名和IP时,它不会向dnsmasq的DNS部分注册。这导致我使用dnsmasq静态设置IP。这是使用标记来完成的,如下所示:

标记MAC地址后,您可以使用此标记帮助识别主机。以下是发送到新虚拟机的主机名:

我不打算深入讨论OpenShift 4的所有要求。您可以在官方文档中找到这些要求。对于DNS,您需要具备:

指向路由器前面的负载平衡器的通配符条目(在我们的示例中,它是由HAProxy处理的网关IP)。

我们将在dnsmasq中使用host-record选项对其进行配置。此选项位于以下文件的底部:

#在来宾上为默认NAT接口设置DNSMasq#dnsmasq.conf#将此设置为侦听内部interfacelisten-address=::1,127.0.0.1,10.120.120.250interface=enp2s0expand-hosts#这是群集将位于的域ondomain=lab-cluster.okd4.lab#上游DNS服务器.。这应该是您的computer/laptopserver=192.168.122.1local=/okd4.lab/local=/lab-cluster.okd4.lab/#上的libvirt NAT#接口设置通配符DNS以指向内部接口#HAProxy将在此interfaceaddress=/.apps.lab-cluster.okd4.lab/10.120.120.250dhcp-range=10.120.120.20,10.120.120.220,12hdhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases#上侦听指定要服务的PXE二进制文件和地址#the pxeserver(此主机)dhcp-boot=pxelinux.0,pxeserver,10.120.120.250#DHCP选项3是路由器DHCP-Option=3,10.120.120.250#DHCP选项6是DNS服务器DHCP-Option=6,10.120.120.250#DHCP选项28是广播地址DHCP-Option=28,10.120.120.255#标记需要该集合。设置具有特定tagdhcp-mac=set:bootstrap,52:54:00:15:30:f2dhcp-mac=set:master,52:54:00:06:94:85dhcp-mac=set:worker,52:54:00:82:fc:9e#的mac地址将标记与特定主机名匹配#dhcp选项12是要分发给客户端的主机名dhcp-option=Tag:Bootstrap,12,bootstrap.lab-cluster.okd4.labdhcp-option=tag:master,12,master-0.lab-cluster.okd4.labdhcp-option=tag:worker,12,worker-0.lab-cluster.okd4.labdhcp-host=52:54:00:15:30:f2,10.120.120.99dhcp-host=52:54:00:06:94:85,10.120.120.50dhcp-host=52:54:00:82:fc:9e,10.120.120.60#-dhcp选项是用于调试的详细日志记录日志-dhcppxe-Prompt=";按F8进入菜单。";,10pxe-SERVICE=x86PC,";PXE启动服务器";,pxelinuxenable-tftptftp-root=/var/lib/tftpboot#设置etcd的服务记录。通常在#srv recordsrv-host=_etcd-server-ssl._tcp.lab-cluster.okd4.lab,etcd-0.lab-cluster.okd4.lab、2380、0、10#主机记录选项中有3个或更多条目链接dnshost-record=52:54:00:dd:5e:07,10.120.120.250,bastion.okd4.labhost-record=52:54:00:15:30:f2,10.120.120.99,bootstrap.lab-cluster.okd4.labhost-record=52:54:00:06:94:85,10.120.120.50,的MAC、IP和主机名。master-0.lab-cluster.okd4.labhost-record=52:54:00:06:94:85,10.120.120.50,etcd-0.lab-cluster.okd4.labhost-record=52:54:00:82:fc:9e,10.120.120.60,Worker-0.lab-cluster.okd4.lab#这些主机记录供api.lab-cluster.okd4.lab,10.120.120.250,3600host-record=bastion.okd4.lab,和api-int指向HAProxyhost-Record=bastion.okd4.lab,api-int.lab-cluster.okd4.lab,10.120.120.250,3600。

复制上述文件的内容,覆盖/etc/dnsmasq.conf,然后重新启动服务:sudo systemctl Restart dnsmasq。

注意:不要忘记更改上述文件中的MAC地址,使其与您的虚拟机的MAC地址相匹配。

由于OKD代表企业解决方案的社区版本,因此假定负载平衡器在您的环境中运行。为此,我们将使用一个名为HAProxy的软件负载平衡器。它的设置相对简单明了。

首先要做的是确保SELinux允许所需的HAProxy端口:

语义端口-a-tttp_port_t-ptcp 6443语义端口-a-tttp_port_t-p tcp 22623

端口6443是用于主机到主机通信、访问Web UI以及使用oc命令行实用程序的API端口。

端口22623为加入群集的新主机提供配置文件。这两个端口都是集群成功运行的必备端口,假设负载均衡中都有多个后端。

#HAProxy配置节#全局settings#--globalmaxconn 20000log/dev/log local0 infochroot/var/lib/haproxypidfile/var/run/haproxy.piduser haproxygroup haproxydaemon#打开stats unixsocketstats套接字/var/lib/haproxy/stats#。--#的共同默认值是所有';监听';和';后端';节将#Use if not在其block#--defaultsmode中指定httplog全局选项httplog选项dontlognull选项转发除127.0.0.0/8选项重新调度重试3timeout http-request 10stimeout队列1mtimeout连接10stimeout客户端300 stimeout服务器300stimeout http-Keep-live 10stimeout check 10smaxconn 20000前端控制。-plan-apibind*:6443 mode tcpdefault_backend control-plan-apioption tcplogbackend control-plan-apiBalance源模式tcpserver master-0 master-0.lab-cluster.okd4.lab:6443 checkserver bootstrap bootstrap.lab-cluster.okd4.lab:6443检查备份前端control-plan-bootstrapbind*:22623mode tcpdefault_backend control-Plane-boot23mode。入口-路由器-httpoption tcplog后端入口-路由器-httpBalance源模式tcpserver worker-0 worker-0.lab-cluster.okd4.lab:80 check前端入口-路由器-httpsbind*:443模式tcpdefault_backend入口-路由器-httpsoption tcplogbackend入口-路由器-httpsBalance源模式tcpserver worker-0 worker-0.lab-cluster.okd4.lab:443 check。

我在单个工作节点上运行入口路由器。这需要在安装前后对OpenShift进行一些调整。这反映在上面的HAProxy配置中,标题为后端入口-路由器-https。如果您使用更多节点,只需将节点定义添加到HAProxy配置中相应的后端部分。

每当您重新启动dnsmasq时,HAProxy都容易失败,并且它无法在重新启动期间解析主机,无论多么短暂。此外,我还观察到,在重新启动时,HAProxy有时会因为同样的原因而无法启动。解决方案是在dnsmasq运行之后简单地重新启动它(尽管您可以选择编辑HAProxy的systemd服务单元,以确保它在dnsmasq之后启动)。

下面的文件引用了Apache托管的资源,因此我们希望确保菜单具有用于拉入的端口8080。由于HAProxy正在监听两个标准Web端口(80和443),因此在前面的步骤中,我们告诉Apache监听端口8080。

#master PXE fileUI menu.c32DEFAULT fedcosTIMEOUT 100MENU title RedHat CoreOS Node InstallationMENU TABMSG按Enter键引导,或按Tab键编辑菜单项LABEL fedcos和菜单标签install fedcos/kernel http://bastion.okd4.lab:8080/fedcos/installer-kernel/INITRD http://bastion.okd4.lab:8080/fedcos/installer-initramfs.img/append console=tty0控制台=ttyS0 IP=dhcp rd.nednet=1 coreos.。/IGNING/MASTER.ign coreos.inst.image_url=http://bastion.okd4.lab:8080/fedcos/metal.raw.gz核心.inst.install_dev=vdaIPAPPEND 2。

注意:您应该为您拥有的每台主机创建此文件。文件名应该是带有';-';而不是';:';>;的01-<;Mac地址。dnsmasq租约如下所示:

因此,请使用第五个字段与TFTP服务器匹配。给定MAC地址52:54:00:06:94:85,文件的完整路径将为/var/lib/tftpboot/pxelinux.cfg/01-52-54-00-06-94-85。

在OCP4和OKD中设置环境的步骤几乎相同。主要区别在于:

如果您的母版少于三个,则需要手动编辑etcd仲裁保护。

解压缩二进制文件并将其放入/bin中(或更改路径以使二进制文件存在)。

目前,似乎唯一有效的版本是2020年01月28日022517。我还试过其他几个,但都没有成功。通过运行以下命令确保您拥有正确的版本:

Pull密钥对于OKD是可选的。但是,它们对测试特定操作符很有帮助。我建议在安装之前对拉入密码进行60天的评估。从这里获取您的拉动秘诀。

确保所有变量都不为空!本指南的其余部分依赖于环境变量来填充配置文件。

下面的cat命令用上面创建的shell变量替换变量。这是用于创建清单和点火文件的初始群集配置YAML文件。

CAT<;<;EOF>;install-config.yaml.bakapiVersion:v1baseDomain:${base_domain}COMPUTE:-HYPERTHREADING:已启用群集名称:Worker群集副本:${Number_of_Worker_VMS}控制平面:*Hyperthreading:已启用群集名称:主群集副本:${Number_of_Master_VMS}元数据:群集名称:${CLUSTER_NAME}网络:${CLUSTER_NAME}群集网络:${CLUSTER_NETWORK}.。{}FIPS:FALSE PULLSET:${PULL_SECRET}${sshKey:${SSH_KEY}FEOF。

我们创建备份的原因是,运行openShift-install命令将消耗该文件,并且我们希望拥有该文件的副本,以备重新开始或创建新群集时使用。

我已经使用OKD 4.4.x运行了几个测试,尝试调整入口控制器和CVO的清单。调整这些文件而不是使用现有的IGN文件似乎会导致引导程序机器在从服务器收到DHCP响应后挂起,因此我们将在安装后步骤中进行这些调整。

接下来,生成将使用清单目录的Ignition配置。将这些Ignition配置复制到相应的Apache目录:

最后,PXE启动虚拟机。如果一切配置正确,群集将开始自行配置。

在资源有限的计算机上,仅启动引导和主VM。引导过程完成后,您可以启动Worker/Infra/Compute节点并关闭引导计算机。完成此操作可能需要相当长的时间(30分钟或更长时间)。

只要您在启动进程的同一天与群集交互,就可以运行以下命令来导出与群集交互所需的KUBECONFIG变量:

要监视初始安装过程,请执行以下操作。bootstrap-Complete命令将告诉您何时停止引导计算机是安全的。install-Complete命令只是每隔一段时间检查一次API,以确保一切都已完成。

在添加工作节点期间,您可能会看到它没有准备好,甚至没有列出。使用以下命令查看状态。

当新服务器试图加入集群时,通常存在由所述服务器发出的证书签名请求,以便集群信任新节点。如果您看不到节点,并且有挂起的CSR,则需要批准它们。

一旦工人出现在列表中,就给它贴上标签,以便入口操作员可以继续操作:

最后,观察集群操作符。根据网速和系统资源的不同,此过程最多可能需要几个小时才能完成。

OC获取群集运算符NAME应用程序、云凭据应用程序、应用程序版本、可用版本和正在降级的SINCE认证版本、已降级的版本、已降级的SINCE认证版本、已降级的版本、已降级版本、已降级。3.1%TRUE_PRODUCT_FUSE_FUSE_PROFUSE_PROFUSE_FULL_FUSE_FULL_FIRESS_FIRED_FIRESS_FIRED_FIRESS_FIRED 4.3.1_FIRESS_FIRED_FIRESS_FIRESS*4.3.1_FUBLISE_FUSICE_FIRESS_FIRESS*4.3.1_FULL_FULL_FIRESS_FIRESS**4.3.1%_FUBLICE。3.1%True:虚假信息;18hingress;虚假信息;真信息;11minsight;;虚假信息:19hkube-apiserver;虚假信息:4.3.1%;虚假信息:19hkube-apiserver;虚假信息:4.3.1%;虚假信息:19hkube-apiserver;虚假信息;虚假信息:4.3.1%;虚假信息:19hkube--蜂窝;信息:4.3.1%;虚假信息:19hkube--蜂群:33.1%;虚假信息:19hkube--蜂群:43.1%。*TRUE_FUBE_FUBLE_FALSE_FUBLE_FIRESS_FUBLY_FUBLE_MANAGER_FIRESS_FUBLE_BUBLE_PROFIBE_FULL_FUBLE_FIRESS_FIRESS_FUBLE_FIRESS_FULL_FUBLE_FUBLE_FUBLISE_FUBLE_MUBLE_MANAGER_FUBLICE_FUTERS_FUBLE_FUBLE_。错误代码:错误代码:19hMachine-config*4.3.1*。

..