【云原生开发】K8S多集群资源管理平台架构设计

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑

🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。

🏆《博客》:Python全栈,Golang开发,云原生开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏: 云原生开发
景天的主页: 景天科技苑

文章目录

  • K8S多集群管理平台架构设计
    • [1. 如何从零开始写一个完整的项目](#1. 如何从零开始写一个完整的项目)
    • [2. 设计之前,还需要考虑先写前端,还是先写后端?](#2. 设计之前,还需要考虑先写前端,还是先写后端?)
    • [3. 前后端分离项目架构设计](#3. 前后端分离项目架构设计)
    • [4. 涉及到的技术栈](#4. 涉及到的技术栈)
    • [5. 前后端分离域名访问路由设计](#5. 前后端分离域名访问路由设计)
      • [1. 前端路由设计](#1. 前端路由设计)
      • [2. 后端路由设计](#2. 后端路由设计)
    • [6. 前后端数据交互模型设计--后端返回数据](#6. 前后端数据交互模型设计--后端返回数据)
    • [7. 前端提交数据规范](#7. 前端提交数据规范)
    • [8. 元数据存储的设计](#8. 元数据存储的设计)
      • [1. 哪些数据需要存储?](#1. 哪些数据需要存储?)
      • [2. 数据存储到哪里?](#2. 数据存储到哪里?)
      • [3. 元数据的存储格式设计](#3. 元数据的存储格式设计)

K8S多集群管理平台架构设计

云原生(Cloud Native)是一种构建和运行应用程序的方法,充分利用云计算模型的优势,如弹性、可扩展性、高可用性和自动化,以实现更高的应用可靠性、可维护性和可移植性。本文云原生开发是基于golang,vue开发出的一个K8S多集群管理平台,实现web页面对过个K8S集群资源的深度管理。

学一门语言,并不是简单的会写一些脚本,要有拿得出手的成果,作品。

1. 如何从零开始写一个完整的项目

  1. 并不是拿一个做好的项目去改,而是从零开始
  2. 大型项目可能需要进行头脑风暴,列出来所有的功能点,需要或者事件
  3. 需要各种设计,比如架构设计,模型设计,结构设计,ER图设计,EML设计,UI设计
  4. 小组开发肯呢个并不需要这么多人介入进来,比如页面风格可能是我们设计的,接口的风格也是我们自己去定义的
  5. 所以进行项目的开发,并不是向之前学的练习那么简单,上来就直接去写。我们在做项目的时候耗费很多的时间和精力,在前期的准备或者设计中,要不然做到最后,就没办法进行下去,到了难以维护的状态,比
    如说各种不统一,不规范。已经没有办法再维护下去了。
  6. 想要做好一个项目,从设计开始,最后才是工程实现。

2. 设计之前,还需要考虑先写前端,还是先写后端?

  1. 当然,在多人的项目中,可能前后端是同步进行的,但是在我们这个这么卷的年代,可能我们是身兼多职的,前后端都自己写,这时候就要规划下,是先写前端还是先写后端,还是直接一起写?
  2. 一般是先写后端,再写前端,最后再前后端结合一起去完成的
  3. 为什么要先去写后端呢? 因为后端是离数据最近的地方,我们写代码大部分时间都是CRUD。我们在操作数据的时候,需要数据的一种格式或一种规范,有了格式之后,我们才能以最简单最高效的方式去操作这个数据。比如说,我们去创建一个用户,这个用户的数据格式,以什么方式去插入数据,这个肯定会在后端比较清晰的。所以,我们在先写后端的情况下,可以先定义好这些数据格式,前端就可以直接使用我们定义好的数据格式,去渲染页面,传递数据,数据交互。如果我们先去写前端,我们可能是根据自己的理解去定义数据格式,到最后可能和后端联调的时候,能会出现我们在前端定义的数据格式没有办法给后端去使用的,这样的话,我们可能需要再次地去变更数据的格式,变更的话,前端的代码还需要去调整,造成了时间的浪费。
  4. 后端数据定义更加精确,前端可以无需定义Mock函数

3. 前后端分离项目架构设计

我们的项目是一个去管理k8s资源的平台,而且是多集群的管理平台,也就是说我们的平台可以管理很多个K8S集群。

字需要将我们得K8S集群配置到我们的后端控制的范围之内,就可以去操作这个集群当中的很多资源,比如说deployment,daemanset,service,configMap等等。

后端是真实操作集群的服务,前端用来展示页面的,让我们更加直观地去操作我们的集群。

我们的前后端服务都是部署在K8S之上的,因为我们得项目是针对云原生去设计的,所以它会依赖K8S的一些资源,比如它使用了K8S的存储,我们没有用单独的数据库去存数据,我们把K8S当做一个存储的组件,因为K8S已经满足我们得要求了,不用去专门维护一个数据库。不是用docker去启动。我们要部署在K8S之上

所以我们有个InCluster这个集群。我们得后端和前端代码都部署在这个集群之上,然后这两个前后端服务去管理其他的K8S集群

我们这个InCluster集群的网络要和其他被管理集群的网络要通的,一般是6443端口,如果是高可用集群,有个LB的地址。要能通信。

4. 涉及到的技术栈

Golang + Vue + K8s

Git + Gin + JWT + WebSocket

Vue Router + Axios + Pinia + Vite

HTML + CSS + JavaScript

5. 前后端分离域名访问路由设计

我们前端和后端项目是用两个deployment去部署的,也就是说会用到两个pod去启动,我们给这个项目要配置一个域名,比如我们配置kubeeasy.com。我们访问这个域名的时候,就能打开这个管理系统的首页

然后可以在页面上点击操作,调用后端去操作我们得K8S资源,这个时候需要两个路径,根路径是指向前端的,调用页面。前端通过axios去调用后端接口,后端接口路径就是域名加上api为前缀的路径。

1. 前端路由设计

2. 后端路由设计

6. 前后端数据交互模型设计--后端返回数据

后端返回的是json串,一般包含三个字段status message data

无数据返回,data为空。 一条数据,使用data下面的 item。返回多条数据,使用data下面的items

7. 前端提交数据规范

clusterId 表示操作哪个K8S集群,namespace 哪个名称空间

8. 元数据存储的设计

1. 哪些数据需要存储?

2. 数据存储到哪里?

我们把我们的服务部署在了InCluster这个K8S集群之中,K8S本身可以作为存储的,K8S把数据存储到了etcd,所以我们可以通过K8S把数据存储在etcd之中,我们可以用secret或者configmap存储到etcd数据库中

存储数据能不用第三方组件就不用第三方组件,因为第三方组件的故障会带来隐患。K8S一般是高可用集群,比较可靠。我们也不可能为了存储一些配置信息,就去搭建一个高可用的mysql集群,造成了资源浪费。

如果要做多用户,权限分配等,这个时候可能用mysql比较好一些。一般情况下我们将配置信息存储到secret中就可以了

3. 元数据的存储格式设计

我们把每个集群的名称作为集群的ID,最好是英文的。集群的其他一些配置信息,比如集群别名,位置等信息可以放置到annotations里面去。

最重要的信息 kubeconfig要放到data中。

我们可以添加个labels,metadata=true 利用K8S的查询机制,查询出来具有这个标签的所有的secret。

相关推荐
志凌海纳SmartX18 分钟前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总19 分钟前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿1 小时前
k8s 集群安装
云原生·容器·kubernetes
何遇mirror1 小时前
云原生基础-云计算概览
后端·云原生·云计算
颜淡慕潇3 小时前
【K8S系列】kubectl describe pod显示ImagePullBackOff,如何进一步排查?
后端·云原生·容器·kubernetes
Linux运维日记3 小时前
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
linux·docker·云原生·容器·kubernetes
一名路过的小码农5 小时前
ceph 18.2.4二次开发,docker镜像制作
ceph·docker·容器
AI_小站5 小时前
RAG 示例:使用 langchain、Redis、llama.cpp 构建一个 kubernetes 知识库问答
人工智能·程序人生·langchain·kubernetes·llama·知识库·rag
xiangshangdemayi7 小时前
Windows环境GeoServer打包Docker极速入门
windows·docker·容器·geoserver·打包·数据挂载
程序员JerrySUN8 小时前
熟悉的 Docker,陌生的 Podman
linux·docker·容器·系统架构·podman