在本系列文章中,我将使用Raspberry Pi设备作为计算平台的基础来构建kubernetes集群。 Kubernetes是用于部署自动化,容器编排的流行系统; 它包含许多功能(扩展,负载平衡,卷管理,安全性及其他),因此我更喜欢将kubernetes称为生态系统。
在硬件级别上,我将仅使用任何计算机硬件商店中可用的便宜设备:路由器,交换机和存储服务器。
由于kubernetes满足了90%的软件需求,因此我仍然可以使用一些Ansible来实现自动化。现代的路由器,交换机和存储服务器都在UNIX之类的操作系统上运行,因此我也将使用它。
最终,kubernetes集群应该作为云基础架构工作,在这里我可以在类似云的环境中运行应用程序,可以从Internet访问它们,有状态的应用程序将能够使用数据存储层。
硬件设置
- Mikrotik RB760iGS - 路由器,该设备为Kubernetes集群提供Internet连接,VLAN交换,DHCP服务器,NAT,动态DNS等
- 凌华DGS-1005P - 具有4个PoE启用端口的非托管交换机。该交换机通过路由器和Kubernetes节点为Raspberry Pi提供电源和数据链路层交换
- Raspberry Pi 3 B +型 - 带有1.4GHz 64位四核处理器,1GB RAM,千兆以太网的微型计算机
- Raspberry Pi PoE HAT - Raspberry Pi扩展,可通过以太网为设备供电
- microSDHC MIREX(class10)8GB - 具有Raspberry Pi操作系统的SD卡
上图,路由器是白框,交换机是黑框。黄色电缆是上行链路(交换机到路由器的连接)。灰色电缆将Raspberry Pi设备与交换机连接。
软件
- Ubuntu 18.04:操作系统
- Docker Engine:容器runtime
- kubelet:在每个节点上运行的“节点代理”
- kubeadm:用于创建Kubernetes集群的工具
- kubectl:一个命令行界面,用于针对Kubernetes集群运行命令
列表不完整。 Kubernetes具有更多组件:kube-apiserver,kube-scheduler,kube-controller-manager,etcd,kubelet,kube-proxy和不可数的插件。有关详细信息,最好参考官方文档Kubernetes组件。
在这种情况下,kubeadm将在Kubernetes集群初始化时安装它们。
操作系统
Ubuntu 18.04具有用于Raspberry Pi的ARM 64构建和就绪的操作系统映像。 Google使用Kubernetes为ARM 64构建了deb软件包。
容器runtime和Kubernetes组件
我们将Docker Engine用于容器runtime并不奇怪。 尽管rkt,cri-o和其他方法中有替代方法。 但是,仔细观察,我们可以看到Kubernetes使用容器化。
kubelet是节点代理。它与主节点上的kube-apiserver通信,另一方面与本地容器运行时通信,以便将Docker容器作为主命令运行。
kubectl是一个命令行界面,用于针对Kubernetes集群运行命令。它可以在kubernetes中创建/读取/更新/删除资源。例如:
$ kubectl create -f deployment.yaml
$ kubectl create secret generic db-pass --from-file=./password.txt
$ kubectl get pods
$ kubectl --namespace=kube-system edit deployment coredns
$ kubectl delete node node1.kube.local
kubeadm是Kubernetes集群创建工具。在简单的情况下,kubeadm init命令创建一个kubernetes主节点。 kubeadm join命令通过将其与主节点关联来将节点加入集群。
创建集群
Kubernetes主节点和节点配置
设置kubernetes集群
在Kubernetes集群上部署测试应用
互联网网关简介
具有负载平衡功能的Internet网关
动态DNS
内容传递网络