# oeDeploy **Repository Path**: wangkui35/oeDeploy ## Basic Information - **Project Name**: oeDeploy - **Description**: 好用的自动化部署工具 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-12-04 - **Last Updated**: 2024-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## oedp设计 # 1 总体方案 ## 1.1 整体设计思路 ### 1.1.1 简易设计框图 ![](.\pic\oedp介绍图.PNG) oedp作应用快速安装部署平台,提供如下能力: 1. 插件库:实现应用快速安装的基础,应用提供部署的基本能力就可按照基本规范进行oedp 插件化改造,oedp本身对插件的能力进行解析和调度执行 2. 应用碎片化部署能力自动ansible化改造:针对不具备自动化安装的应用,指定安装步骤进行配置,oedp工具解析,自动转换成ansible playbook配置 3. 应用一键安装能力集成:支持具备一键脚本安装部署/ansible自动化安装部署的快速插件集成 4. 分发能力:oedp支持应用部署在对应host上的的一键分发 5. ansible集成: 目前oedp的一些基础能力基于ansible进行改造 ## 1.2 oedp plugin插件 插件目录结构如下: ``` {name}-{version} |-- main.yaml |-- config.yml `-- workspace/ ``` | 文件或者目录名 | 介绍 | |-------------|---------------------------------------------------------| | config.yaml | 包含主机相关的配置,如ip、密码、密钥、端口号等。还包含了应用的一些部署相关的配置,支持jinjia2语言 | | main.yaml | oedp识别应用安装流程的主配置文件 | | workspace | 应用的能力库 | ## 1.3 命令列表 + `oedp init `:**(待实现)** 初始化一个插件 + `-p|--project `:必须,指定初始化路径 + `-l|--local `:可选,指定一个路径为本地源 + `-f|--force`:可选,强制覆盖路径,如果路径存在,会先删除其中的所有文件再初始化 + `oedp list`:列举有哪些可用的插件 + `-l|--local `:可选,指定一个路径为本地源 + `oedp info`:查看一个项目的详细信息 + `-p|--project `:可选,指定一个项目,如果没有指定就使用当前路径 + `oedp run `:执行一个项目的方法 + `-p|--project `:可选,指定一个项目,如果没有指定就使用当前路径 + `oedp check`:**(待实现)** 恢复一个项目的配置文件到初始状态 + `-p|--project `:可选,指定一个项目,如果没有指定就使用当前路径 + `-f|--force`:强制恢复配置文件,强制删除原有占用位置的文件,适用于原有位置被目录占据的情形 # 2 公共功能分析 ## 2.1 日志管理模块 ## 2.2 构建模块 ## 2.3 安装部署模块 ## 2.4 工具文件路径 + `/var/oedp/log/`:日志文件路径 + `/var/oedp/plugin/`:插件缓存路径 + `/usr/lib/oedp/src/`:源码路径 + `/etc/oedp/config`:配置文件路径 缓存路径中,所有插件都按照`-`的格式命名,例如`/var/oedp/plugin/k8s-1.31.1` # 3 各功能模块分析 ## 3.1 k8s 自动化插件 ### 3.1.1 k8s 自动化安装部署 #### 3.1.1.1 设计思路 梳理所有的依赖组件包,提前下载缓存到本地;对外呈现待部署节点相关的配置文件,供使用者填写部署节点ip相关的信息;复用ansible的多节点分发能力, 梳理k8s多节点集群安装部署步骤,将下载的相关组件分发到对应节点并部署,同时利用ansible playbook将集群初始化和节点加入集群的所有相关动作串连起来, 实现k8s集群的自动化安装部署。 #### 3.1.1.2 实现分析 ![](.\pic\k8s自动化时序图.PNG) **deploy-main.yml:**
ansible playbook主配置文件,管理palybook所有play执行的顺序,各play顺序如下:
prepare(all) -> k8s-mater init -> k8s-worker cluster join -> deploy calico
**all:prepare**
step1:各节点OS系统配置
1、关闭防火墙、selinux、swap
2、加载ipvs相关ko,开启路由转发
3、分发k8s相关的依赖包并在各节点安装
step2:containerd基础环境安装部署
1、分发containerd的二进制和配置到各节点
2、containerd服务配置以及服务拉起
step3:kubelet基础环境安装部署
1、分发kubeadm、kubectl、kubelet以及crictl二进制文件到各节点
2、kubeadm生成kubelet配置文件并拉起kubelet服务
step4:k8s相关容器镜像导入
1、k8s相关组件的容器镜像分发到各节点
2、各容器镜像导入
**k8s-mater init**
k8s matser节点初始化
**k8s-worker cluster join**
k8s 各worker节点加入到集群
**deploy calico**
1、分发calico的组件到各节点
2、calico插件各节点部署
#### 3.1.1.3 实体关系分析 ansible playbook配置视图: ```angular2html workspace |-- roles | |-- prepare | |-- base | |--tasks | |-- main.yml | |-- containerd | |--tasks | |-- main.yml | |-- kubernetes | |--tasks | |-- main.yml | |-- images | |--tasks | |-- main.yml | |--master | |-- tasks | |-- main.yml | |--worker | |-- tasks | |-- main.yml | |--plugin | |-- calico | |-- tasks | |-- main.yml ``` ### 3.1.2 k8s 自动化卸载 #### 3.1.2.1 设计思路 #### 3.1.2.2 实现分析 #### 3.1.2.3 模块接口定义 ### 3.1.3 k8s 插件自动化能力集成oedeploy ## 3.2 kubeflow 自动化插件 ## 文件路径 ### main.yaml 以k8s部署插件的yaml为例: ```yaml name: kubernetes version: 1.31.1 description: install kubernetes 1.31.1 action: install: description: install kubernetes tasks: - name: install kubernetes playbook: init-k8s.yml vars: variables.yml scope: all delete: description: delete kubernetes tasks: - name: delete kubernetes playbook: delete-k8s.yml vars: variables.yml scope: all ``` # 4 部署流程示例 以自动化部署k8s为例: ## 4.1 获取部署插件 **以下功能暂未实现:** ~~执行`install`命令以获取插件并初始化一个项目到家目录:~~ ```shell oedp install kubernetes-1.31.1 -p ~ ``` **当前暂时采用以下方案:** 手动获取插件包,其文件名应当为`kubernetes-1.31.1.tar.gz`,并解压在家目录下,确保家目录下出现了目录`kubernetes-1.31.1/`。 ## 4.2 查看插件详细信息 执行`info`命令以查看插件详细信息: ```shell oedp info -p ~/kubernetes-1.31.1 ``` ## 4.x 安装依赖 **此步骤仅当前版本需执行:** 执行以下命令以安装依赖: ```shell ~/kubernetes-1.31.1/workspace/env-setup ``` ## 4.3 配置节点信息 修改项目配置文件,根据实际情况配置节点信息,同时需要确保控制节点可用ssh访问待部署节点: ```shell vim ~/kubernetes-1.31.1/config.yaml ``` ## 4.4 执行部署 执行以下命令以开始自动化部署: ```shell oedp run install -p ~/kubernetes-1.31.1 ``` 执行以下命令以卸载k8s: ```shell oedp run delete -p ~/kubernetes-1.31.1 ```