在LXC内运行kubernetes


在本文中,我将告诉您如何在LXC容器中运行kubernetes master。
该方法在Proxmox上可以很好地工作,并且可以被认为是使用多个向导对kubernetes进行经典部署的替代方法。


为什么要使用proxmox?


因为开箱即用的proxmox提供了许多有用的功能。
Proxmox包括高可用性功能,迁移,自动备份,访问控制,所有这些都可以通过简单的图形界面访问。


您还可以使用单个向导部署最简单的kubernetes配置,proxmox将提供高可用性。
此方法非常适合部署测试或小型集群。


对于较大的部署,建议将etcd放在将使用快速本地磁盘的单独容器中,并将它们组合到群集中。
尽管如此,kubernetes-master本身仍然可以保留为常规的ha容器,它不需要快速存储。


另外,如果您正在阅读本文,则我认为在大多数情况下,您已经在Proxmox上拥有某种基础结构,也许您希望拥有一个用于管理服务的界面。


为什么选择LXC?


Kubernetes将在常规虚拟机内启动而不会出现问题。 但是LXC容器提供了传统虚拟机无法提供的灵活性。


实际上,LXC容器并未提供容器与主机的完全隔离;相反,容器内的所有进程都像普通的主机进程一样启动,只是在单独的命名空间中。


这种方法可以为您提供良好的性能,但在我们的案例中会带来一些限制。


我将在本文中讨论这些限制以及如何处理它们。


构型


由于默认情况下不允许容器自行加载内核模块,因此必须将其配置为直接在虚拟机管理程序上加载。


我们将为Docker使用overlay驱动程序,因此这就是我们所需要的:


 echo overlay >> /etc/modules 

现在,我们需要为我们的容器添加更多权限,以使其能够在其中运行其他容器,并将这些行添加到容器的配置中:


 lxc.apparmor.profile: unconfined lxc.cap.drop: lxc.cgroup.devices.allow: a lxc.mount.auto: proc:rw sys:rw 

v11.0版本开始, kubelet需要主机上所有装载的共享模式。


这个肮脏的技巧将使您可以在LXC容器中执行以下操作:


 echo '#!/bin/sh -e mount --make-rshared /' > /etc/rc.local 

该操作会将mount --make-rshared //etc/rc.local并在每次容器加载时运行它。


另外,如果您打算在proxmox中使用HA-manager,请注意,目前存在一个令人不愉快的错误#1842 ,该错误会在迁移过程中强制杀死容器进程,这可能会生成僵尸进程,甚至阻塞您的存储。


这不好,幸运的是有一个简单的解决方案:


 sed -i 's/forceStop => 1/forceStop => 0/' /usr/share/perl5/PVE/HA/Resources/PVECT.pm 

此外,您可以为泊坞窗添加以下选项:


 --storage-driver overlay2 --iptables=false --ip-masq=false 

docker.service/lib复制到/etc以覆盖其选项:


 cp /{lib,etc}/systemd/system/docker.service 

现在,将这些选项添加到ExecStart部分。


就是说,完成这些步骤之后,标准的kubeadm安装应该可以正常工作。

Source: https://habr.com/ru/post/zh-CN420913/


All Articles