目标:有一个我可以简单运行的yaml部署,kubectl create -f deployment.yaml
它会创建节点,并以我在yaml文件中描述的方式将节点分布在节点上。
目标输出。谷歌云上的3个节点,其中2个节点具有2个前端/后端Pod,第3个节点具有以持久卷运行的数据库。
由于docker-desktop是单节点系统,因此无法在本地进行测试。谷歌云最初将我所有的Pod放在一个节点上,由于缺乏资源,它们没有进行调度。
因此,我查阅了文档,并询问了几个闲置渠道。共识是使用pod / node亲和力和antiAffinity来确保我想要的pod处于我想要的节点上。
这是我正在测试的github仓库,并试图构建我正在描述的东西。我想尽可能地避免与云无关,但是如果我需要更具体地介绍云关键字,请对此发表评论。整个部署分布在每个项目的/ kubernetes目录之间。在添加pod / node关联项之前,它们确实在本地工作。
您在这里寻找的是Kubeadm。这是一个用于引导Kubernetes主节点并将新节点加入集群的工具。这是参考文档,这里是Kubelet及其所有参数的API文档。使用Kubeadm和这些参数,可以构建initConfiguration,clusterConfiguration和nodeConfiguration。
1)创建这三个文件后,将initConfiguration
其clusterConfiguration
放入单个YAML文件中。并放入nodeConfiguration
自己的文件中。将第一个文件放到您的主文件上,将第二个文件放到您的节点上。如果要使用Multi-Master配置进行安装,则在构建配置时请牢记此文档。您还需要负载均衡器,代理或巧妙的DNS欺骗来启用此功能。
2)安装以下软件包:
docker
containerd
kubelet
kubeadm
3)禁用所有交换分区SELinux,并适当配置防火墙。
3)使用您的配置文件在您的Master上引导Kuberneteskubeadm init --config /tmp/master.yml
。
4)使用配置文件将您的工作程序节点添加到集群kubeadm join --config /tmp/node.yml
。
5)安装一个网络插件。
6)使用Kustomize项目部署其余软件。地狱,您甚至可以使用Kustomize管理您的Kubeadm配置文件。我有。您甚至可以将网络插件清单放在这里。
该Kubernetes解决方案完全与云无关,并且所有Kubernetes都是自动化的,但配置不是。我将使用Ansible之类的步骤自动执行1-5步。您将每个步骤声明为剧本中的任务或角色的位置。它支持大量的模块。而且在没有的情况下,Galaxy上存在开源角色。
剩下您的基础架构。使此云不可知是不可能的。没有两个供应商具有相同的API。这就是为什么存在像Kubernetes这样的抽象层的原因。要解决此问题,请尝试成为Cloud Aware。使用Terraform之类的工具为您管理基础架构。然后,将所需的Terraform命令添加到Ansible手册中。
Bam,现在您可以使用单个命令来部署整个基础架构,配置和应用程序。从单个YAML文件:
ansible-playbook -i inventory.ini site.yml
那么,一个单一的YAML文件和一堆其他的角色和模板,剧本和Terraform配置文件。;)
编辑:这是我写的一些利用这些思想和设计原则的开源项目。您至少应该能够从中了解到许多Ansible逻辑。第一种是在裸机服务器上构建单节点群集。后者旨在在Proxmox上构建四节点集群。
两者都与我在此处编写的所有清单完全兼容。这还应为您提供大量的Kustomize和Ansible示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句