繁体   English   中英

你如何在谷歌云上仅使用 yaml 在单独的节点上部署 kubernetes 集群

[英]How do you deploy a kubernetes cluster on separate nodes using only yaml on google cloud

目标:拥有一个 yaml 部署,我只需在其上运行kubectl create -f deployment.yaml并创建节点,其中 pod 以我在 yaml 文件中描述的方式分布在它们之间。

目标输出。 谷歌云上的 3 个节点,其中 2 个节点带有 2 个 pod 前端/后端,第三个节点带有运行持久卷的数据库。

由于 docker-desktop 是单节点系统,因此无法在本地进行测试。 谷歌云最初将我所有的 Pod 放在一个节点上,由于缺乏资源,他们没有安排。

所以我查阅了文档并询问了几个 slack 频道。 共识是使用 pod/node 亲和性和 antiAffinity 来确保我想要的 pod 在我想要的节点上。

客户端应用程序github

API/DB 应用程序 github

项目开销,k8s+Kustomize

这是我正在测试并尝试构建我所描述的 github 存储库。 我试图尽可能保持与云无关,但如果我需要更具体地使用云关键字,请发表评论。 整个部署分布在每个项目的 /kubernetes 目录中。 在我添加 pod/node 关联项之前,它们确实在本地工作。

您在这里寻找的是Kubeadm 它是一种用于引导 Kubernetes 主节点并将新节点加入集群的工具。 是一个参考文档, 这里Kubelet及其所有参数的 API 文档。 使用 Kubeadm 和这些参数,您可以构建initConfigurationclusterConfigurationnodeConfiguration

1) 创建这三个文件后,将initConfigurationclusterConfiguration放入一个 YAML 文件中。 并将nodeConfiguration放入其自己的文件中。 将第一个文件放在您的主节点上,将第二个文件放在您的节点上。 如果您使用多主配置进行安装,请在构建配置时牢记本文档 您还需要一个负载平衡器代理或巧妙的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 这样的抽象层一开始就存在的原因。 要解决此问题,请尝试改为使用云感知 使用Terraform 之类的工具为您管理基础架构。 然后, 将所需的 Terraform 命令添加到 Ansible playbook 中

Bam,现在您可以使用单个命令部署整个基础架构、配置和应用程序。 单个YAML 文件:

ansible-playbook -i inventory.ini site.yml

那么,一个YAML文件和一堆其他的角色模板剧本Terraform配置文件 ;)

编辑:以下是我编写的一些利用这些想法和设计原则的开源项目。 你至少应该能够从他们那里学到很多 Ansible 逻辑。 第一个是在裸机服务器上构建单节点集群。 后者旨在在 Proxmox 上构建一个四节点集群。

两者都完全适用于我在这里编写的所有清单。 它还应该为您提供丰富的 Kustomize 和 Ansible 示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM