From fb0ba6f92dc5f36807969958d018de7ea3c0302b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=B4=E5=9F=BA=E9=B1=BC?= Date: Tue, 8 Jul 2025 09:46:26 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit ce9df7576ca44211b353e8bcf9bd1720b439b5c6) --- docs/zh/command.md | 84 ++++---- docs/zh/develop_instruction.md | 359 +++++++++++++++++++++++++++------ docs/zh/use_case.md | 8 +- 3 files changed, 340 insertions(+), 111 deletions(-) diff --git a/docs/zh/command.md b/docs/zh/command.md index f423569..7d9f52f 100644 --- a/docs/zh/command.md +++ b/docs/zh/command.md @@ -25,7 +25,7 @@ ## `oedp list` -列举源中可用的插件。 +列举插件源中可用的插件。 ## `oedp init [plugin]` @@ -41,7 +41,7 @@ | `--dir [path]` | `-d` | N | 项目的父路径,若不存在则创建。如果未指定项目路径与父路径,则父路径默认取当前目录 | | `--force` | `-f` | N | 强制覆盖路径,请谨慎使用;如果路径存在,会先删除该路径中的所有文件,再初始化 | -示例:假设当前路径为家目录`~`,如下5个命令的效果,都是初始化了一个目录为`~/kubernetes-1.31.1`的 oeDeploy 插件。 +示例:假设当前路径为家目录`~`,如下5个命令执行后,都是初始化了一个目录为`~/kubernetes-1.31.1`的 oeDeploy 插件。 ````bash oedp init kubernetes-1.31.1 @@ -53,13 +53,16 @@ oedp init kubernetes-1.31.1 -d ~ ## `oedp repo` -插件源管理。支持本地插件源、远端插件源。 +插件源管理。 -| 选项 | 功能说明 | -| -------------------- | ---------------------- | +- 支持本地插件源、远端插件源。 +- 插件源不可重名。 + +| 选项 | 功能说明 | +| ------------------ | ---------------------- | | `list` | 查询所有已配置的插件源 | | `update` | 更新插件索引缓存 | -| `set [name] [url]` | 修改插件源地址 | +| `set [name] [url]` | 增加/修改插件源地址 | | `del [name]` | 删除插件源 | | `enable [name]` | 使能插件源 | | `disable [name]` | 去使能插件源 | @@ -76,32 +79,20 @@ url = file:///root/.oedp/plugins/ enabled = false ```` -## `oedp check [action]`(开发中) - -检查项目中指定方法的检查项,默认为当前路径。 - -| 选项 | 简写 | 是否必需 | 功能说明 | -| -------------------- | ------ | -------- | ------------------------ | -| `--project [path]` | `-p` | N | 项目路径,默认为当前路径 | - -## `oedp clean`(开发中) - -清理所有临时插件文件。 - # # `oedp`工具相关文件与路径 -| 路径 | 说明 | -| --------------------------------- | ---------------------- | -| `/etc/oedp/config/` | 配置文件路径 | -| `/etc/oedp/config/repo/cache/` | 插件源索引文件缓存路径 | -| `/etc/oedp/config/repo/repo.conf` | 插件源配置文件 | -| `/usr/lib/oedp/src/` | 源码路径 | -| `/var/oedp/log/` | 日志文件路径 | -| `/var/oedp/plugin/` | 插件缓存路径 | +| 路径 | 说明 | +| --------------------------------- | ------------------------------------------------------------ | +| `/etc/oedp/config/` | 配置文件路径 | +| `/etc/oedp/config/repo/cache/` | 插件源索引文件缓存路径,每个已经生效的插件源都会生成一个`.yaml`文件 | +| `/etc/oedp/config/repo/repo.conf` | 插件源配置文件 | +| `/usr/lib/oedp/src/` | 源码路径 | +| `/var/oedp/log/` | 日志文件路径 | +| `/var/oedp/plugin/` | 插件缓存路径 | -# # 插件源 +# # oeDeploy 插件源 -## 格式说明 +## 插件源格式说明 oeDeploy 支持从可访问的插件源自动获取安装部署插件,并初始化到本地。 @@ -109,7 +100,7 @@ oeDeploy 支持从可访问的插件源自动获取安装部署插件,并初 oeDeploy 提供了脚本 `tools/make_repo_index/make_repo_index.py`,用于自动生成 `index.yaml`。 -`index.yaml`格式如下: +`index.yaml`示例如下: ```yaml --- @@ -144,25 +135,26 @@ plugins: ... ``` +首层字段含义: + +| 字段 | 含义 | +| ------------ | ------------------------------------------------------------ | +| `plugins` | 含有多个插件名称(默认字母序排序),一个插件名称中可能包含多个不同版本的插件(默认根据版本号倒序排序) | +| `apiversion` | 索引文件格式的版本号。保留字段,暂不生效。默认值 `v1`。 | + 插件字段含义: -| 字段 | 含义 | 获取方式 | -| ------------- | ------------------------------------------------------------ | ------------------------------ | -| `name` | 插件名称。允许插件名称中带有版本号,表示软件本身的版本,而非插件的版本。 | 读取main.yaml | -| `version` | 插件版本号。 | 读取main.yaml | -| `updated` | 插件更新的时间,格式为`%Y-%m-%dT%H:%M:%S%z`。允许为空。 | 读取main.yaml | -| `description` | 插件介绍。允许为空。 | 读取main.yaml | -| `icon` | 插件图标地址,用于Web端显示。允许为空。 | 读取main.yaml | -| `type` | 插件类型。保留字段,暂不生效。默认值 `app`。 | 读取main.yaml | -| `sha256sum` | 插件文件sha256数值,用于下载时的完整性校验。 | `sha256sum xxx.tar.gz`命令查询 | -| `size` | 插件文件大小,单位Bytes。 | 压缩包实际大小 | -| `urls` | 插件下载地址,可以有多个。所有url地址都必须在当前插件源目录的范围内。 | 前缀与相对路径的拼接结果 | - -其他字段: - -| 字段 | 含义 | 获取方式 | -| -------------- | --------------------------------------------------------- | -------- | -| `apiversion` | 索引文件格式的版本号。保留字段,暂不生效。默认值 `v1`。 | 脚本生成 | +| 字段 | 含义 | 获取方式 | +| ------------- | ------------------------------------------------------------ | ------------------------------- | +| `name` | 插件名称。允许插件名称中带有版本号,表示软件本身的版本,而非插件的版本。 | 与插件压缩包同名(不带.tar.gz) | +| `version` | 插件版本号,并非所部署软件的版本号。 | 读取main.yaml | +| `updated` | 插件更新的时间,格式为`%Y-%m-%dT%H:%M:%S%z`。允许为空。 | 插件压缩包最后修改时间 | +| `description` | 插件介绍。允许为空。 | 读取main.yaml | +| `icon` | 插件图标地址,用于Web端显示。允许为空。 | 读取main.yaml | +| `type` | 插件类型。保留字段,暂不生效。默认值 `app`。 | 读取main.yaml | +| `sha256sum` | 插件文件sha256数值,用于下载时的完整性校验。 | sha256计算 | +| `size` | 插件文件大小,单位Bytes。 | 压缩包实际大小 | +| `urls` | 插件下载地址,可以有多个。所有url地址都必须在当前插件源目录的范围内。 | 前缀与相对路径的拼接结果 | ## 插件源构建方式 diff --git a/docs/zh/develop_instruction.md b/docs/zh/develop_instruction.md index 3176ec5..e063e5c 100644 --- a/docs/zh/develop_instruction.md +++ b/docs/zh/develop_instruction.md @@ -1,10 +1,12 @@ # oeDeploy 插件开发 -## 1 oeDeploy 插件介绍 +## 1 oeDeploy 插件概念介绍 -oeDeploy 插件(plugin)是 oedp 工具中提供自动化部署能力的组件,将复杂的部署流程 ansible 化来实现自动化部署。插件中可能会集成多种部署操作(action),例如安装、卸载、环境清理等,每一个部署操作都会对应一个或多个 ansible playbook。插件的所有可配置项都应当集中配置,以降低使用者的学习成本和开发者的维护成本。 +- oeDeploy 插件(plugin)是 oedp 工具中提供自动化部署能力的组件,将复杂的部署流程脚本化来实现自动化部署。 +- 一个插件中可能会集成多种部署操作(action),例如安装、卸载、环境清理等。 +- 每一个部署操作都会对应一个或多个步骤(task),每个步骤对应一个部署脚本(例如 ansible 的 playbook)。 -## 2 插件目录结构 +## 2 oeDeploy 插件目录结构 oeDeploy 插件目录名称,即插件名称,可以包含版本号(表示软件本身的版本,而非插件的版本) @@ -17,33 +19,46 @@ oeDeploy 插件目录名称,即插件名称,可以包含版本号(表示 | doc | 目录 | 承载插件相关的用户文档。该目录非必需。 | | workspace | 目录 | 承载了软件安装部署所使用的所有文件、源码、二进制、脚本、playbook等等。目录内结构不做限制。 | -## 3 main.yaml +## 3 `main.yaml` -`main.yaml`主要用于记录插件的关键信息,包括:名称(`name`)、版本(`version`)、介绍(`description`)、操作(`action`)等,当用户执行 `oedp info` 命令时,`oedp` 工具会读取并解析该文件,然后向用户展示其详细信息。 +`main.yaml`主要用于记录插件的关键信息,包括:名称(`name`)、版本(`version`)、插件介绍(`description`)、操作(`action`)等。 -- `action` 字段是一个字典(key-value map),每一个 key 将作为操作的名称。在下方的案例中,用户可以通过 `oedp run install`、`oedp run delete`、`oedp run clean` 命令行来触发对应的执行步骤(`tasks`)。 -- 每一个具体操作中,`description` 项是该操作的说明,用于在执行 `oedp info` 命令时向用户展示;而 `tasks` 项中则记录该操作的具体步骤,为一个列表,执行该操作时,将按顺序执行每一项步骤。 -- 在每个步骤中,开发者应当指定该步骤需要执行的 `playbook` 的路径,也可以在 `vars` 中指定变量文件的路径,`vars` 字段不是必需的。这里所填写的路径都是 `workspace` 目录的相对路径。此外,可以指定 `scope`,即该步骤需要执行的主机组,默认为 all。 -- 在下方的案例中,当用户执行了 `oedp run install` 命令,工具会按顺序执行如下命令: - `ansible-playbook set-env.yml -i config.yaml -e variables.yml --limit all` - `ansible-playbook init-k8s.yml -i config.yaml -e variables.yml --limit all` - 这里的 `config.yaml` 会在下文介绍。 +- 当用户执行`oedp info`命令时,`oedp`工具会读取并解析该文件,向用户展示相关信息。 +- 当用户执行`oedp run xxxx`命令时,`oedp`工具会根据`action`字段中的内容,执行对应的自动化脚本。 + +### 3.1 `main.yaml`格式说明: + +- `action`字段中包含了一个或者多个操作。 +- 每一个具体操的key是操作名称,`description` 项是该操作的介绍,`tasks`中承载该操作所需执行的具体步骤(一个列表),当该操作被用户触发,将按顺序执行每一步骤。 +- 每一个步骤包含如下几个字段: + `name`:步骤名称,必填字段。 + `playbook`:表示用`ansible-playbook`执行对应的脚本,内容为 playbook 的路径(基于`workspace`目录的相对路径)。必填字段。目前仅支持`playbook`这一种模式。 + `vars`:脚本执行时所读取的配置文件路径(基于`workspace`目录的相对路径)。非必填字段。 + `scope`:限定了需要执行该步骤的节点,即主机组(在`config.yaml`中定义)。必填字段,通常默认为`all`。 +- 当用户执行了命令行`oedp run `,`oedp`工具会按顺序逐一执行这个操作下的所有的步骤(`tasks`)。 +- 在`playbook`模式下,每个步骤等价于如下命令行: + +```bash +ansible-playbook .yaml -i config.yaml -e @.yaml --limit +``` + +### 3.2 `main.yaml`举例说明: ```yaml -name: kubernetes -version: 1.31.1 -description: install kubernetes 1.31.1 +name: kubernetes-1.31.1 # 插件名称 +version: 1.0.0 # 插件版本号 +description: install kubernetes 1.31.1 # 插件描述 action: - install: - description: install kubernetes + install: # 操作install + description: install kubernetes # 操作install的描述 tasks: - - name: prepare for install - playbook: set-env.yml - scope: all - - name: install kubernetes - playbook: init-k8s.yml - vars: variables.yml - scope: all + - name: prepare for install # 操作install的第1个步骤 + playbook: set-env.yml # 当前步骤所执行的playbook文件(基于workspace目录的相对路径) + scope: all # 执行当前步骤的主机组名称(在config.yaml中定义) + - name: install kubernetes # 操作install的第2个步骤 + playbook: init-k8s.yml # 当前步骤所执行的playbook文件(基于workspace目录的相对路径) + vars: variables.yml # 当前步骤所读取的配置文件(基于workspace目录的相对路径) + scope: all # 执行当前步骤的主机组名称(在config.yaml中定义) delete: description: delete kubernetes tasks: @@ -58,72 +73,289 @@ action: scope: all ``` -## 4 config.yaml +- 在这个示例中,当用户执行了 `oedp run install` 命令,工具会按顺序执行如下命令: + `ansible-playbook set-env.yml -i config.yaml --limit all` + `ansible-playbook init-k8s.yml -i config.yaml -e @variables.yml --limit all` +- 用户可以通过`oedp run install`、`oedp run delete`、`oedp run clean`命令行来触发对应的操作。 + +## 4 `config.yaml` + +部署脚本在执行过程中的可调整参数都在同一个配置文件`config.yaml`中承载,降低使用者的学习成本和开发者的维护成本。 + +- `config.yaml`包含部署环境的节点信息(主机组),以及部署软件相关的参数配置。 +- `config.yaml`遵循 ansible 的 inventory 文件配置规则,工具在执行 ansible playbook 时直接作为 inventory 传入。 +- 需要注意,`config.yaml`是对普通用户暴露的唯一配置文件,应当注意美观,避免歧义,并保留尽可能详细的注释说明。 +- 在`playbook`模式下,通过如下命令行的方式导入`config.yaml`中的配置: + +```bash +ansible-playbook .yaml -i config.yaml -e @.yaml --limit +``` + +### 4.1 `config.yaml`示例1:本地部署 -`config.yaml`是插件中的用户配置文件,主要包含主机组的节点信息,以及部署软件相关的信息,遵循 ansible 的 inventory 文件配置规则,工具在执行 ansible playbook 时直接作为 inventory 传入。 +```yaml +all: + hosts: + localhost: + ansible_connection: local + vars: + deepseek_version: 8b + ollama_download_url: + amd64: https://repo.oepkgs.net/openEuler/rpm/openEuler-24.03-LTS/contrib/oedp/files/ollama-linux-amd64.tgz + arm64: https://repo.oepkgs.net/openEuler/rpm/openEuler-24.03-LTS/contrib/oedp/files/ollama-linux-arm64.tgz + ollama_download_path: /root/tmp # 下载的目标路径 + modelfile_download: https://repo.oepkgs.net/openEuler/rpm/openEuler-24.03-LTS/contrib/oedp/files/DeepSeek-R1-Distill-Llama-8B-Q4_K_M.gguf + modelfile_download_path: /root/tmp # 下载的目标路径 + # 模型参数 + parameter: + temperature: 0.7 + top_p: 0.7 + top_k: 30 + num_ctx: 4096 + num_thread: 4 # 线程数,建议不超过CPU核数 + num_gpu: 0 # GPU数 0 for none, -1 for all. + download_checksum: true # 是否打开sha256sum校验 + download_timeout: 600 # 下载大文件时的超时时间(秒) + download_retry: 6 # 下载大文件重试次数 + ansible_ssh_common_args: '-o StrictHostKeyChecking=no' +``` -需要注意,`config.yaml` 是对普通用户暴露的唯一配置文件,应当注意美观,避免歧义,并保留适当的注释说明。 +### 4.2 `config.yaml`示例2:单节点部署 + +```yaml +all: + hosts: + host1: + ansible_host: 127.0.0.1 # 远端IP + ansible_port: 22 # 端口号 + ansible_user: root # 用户名 + ansible_password: "" # 密码 + vars: + ansible_ssh_common_args: '-o StrictHostKeyChecking=no' + + kubectl_apply: pytorch-deployment.yaml + namespace: pytorch-namespace + replicas: 1 + containers: + http: + name: http-container + image: hub.oepkgs.net/oedeploy/pytorch/pytorch:latest # amd64 + workspace_mount: /tmp + service: + port: 8080 + target_port: 8080 + node_port: 30699 + training: + epoch: 2 # 训练轮数 +``` + +### 4.3 `config.yaml`示例3:多节点部署 + +```yaml +all: + hosts: + host1: + ansible_host: 192.168.1.101 + ansible_port: 22 + ansible_user: root + ansible_password: "" + architecture: amd64 # e.g. [ amd64, arm64 ] + host2: + ansible_host: 192.168.1.102 + ansible_port: 22 + ansible_user: root + ansible_password: "" + architecture: amd64 # e.g. [ amd64, arm64 ] + vars: + version: 3.9.0 + download_url: https://get.helm.sh/ + temp_path: /tmp + install_path: /usr/local/bin + force_install: yes + ansible_ssh_common_args: '-o StrictHostKeyChecking=no' +``` + +### 4.4 `config.yaml`示例4:多节点分组部署 ```yaml all: children: masters: hosts: - 172.27.76.114: # master node IP - ansible_host: 172.27.76.114 # master node IP + HOST1: # e.g. 192.168.10.1 + ansible_host: 192.168.10.1 # e.g. 192.168.10.1 ansible_port: 22 ansible_user: root - ansible_password: PASSWORD - architecture: amd64 # amd64 or arm64 - oeversion: 24.03-LTS # 22.03-LTS or 24.03-LTS + ansible_password: "" + architecture: amd64 # e.g. [ amd64, arm64 ] + oeversion: 24.03-LTS # e.g. [ 22.03-LTS, 24.03-LTS ] + runtime: docker # e.g. [ docker, containerd ] workers: hosts: - 172.27.70.60: # worker node IP - ansible_host: 172.27.70.60 # worker node IP + HOST2: + ansible_host: 192.168.10.2 ansible_port: 22 ansible_user: root - ansible_password: PASSWORD + ansible_password: "" architecture: amd64 oeversion: 24.03-LTS - 172.27.72.90: # worker node IP - ansible_host: 172.27.72.90 # worker node IP + runtime: docker + HOST3: + ansible_host: 192.168.10.3 ansible_port: 22 ansible_user: root - ansible_password: PASSWORD + ansible_password: "" architecture: amd64 oeversion: 24.03-LTS + runtime: docker + new-workers: # new-workers字段不可删除 + hosts: vars: - init_cluster_force: "true" - service_cidr: 10.96.0.0/16 - pod_cidr: 10.244.0.0/16 - certs_expired: 3650 - has_deployed_containerd: "false" + ansible_ssh_common_args: '-o StrictHostKeyChecking=no' + + init_cluster_force: "true" # e.g. [ "true", "false" ] 强制初始化集群 + remove_master_no_schedule_taints: "true" + service_cidr: 10.96.0.0/16 # 服务网段 + pod_cidr: 10.244.0.0/16 # pod ip 网段 + certs_expired: 3650 # 证书过期时间 + # lb_kube_apiserver_ip: + lb_kube_apiserver_port: 8443 + has_deployed_containerd: "false" # e.g. [ "true", "false" ] 是否已有 containerd + + # 以下参数需要与build过程中的host.ini保持一致,如果不涉及请忽视 + kubernetes_version: 1.31.1 + calico_version: 3.28.2 + pause_image: "registry.k8s.io/pause:3.10" +``` + +## 5 `workspace`目录 + +`workspace`目录中承载了部署脚本的主体内容,目录结构不做限制。 + +- `main.yaml`和 `config.yaml`涉及的各种文件、源码、二进制、脚本、playbook,都在`workspace`目录中承载,开发者可自定义其中的子目录。 + +- `workspace`目录视为整个插件执行过程的根目录。 + +### 5.1 `workspace`示例 + +这里有一个用于部署nginx服务的 oeDeploy 插件 + +`config.yaml`内容如下: + +```yaml +name: nginx +version: 1.25.3 +description: Install and configure nginx web server +action: + install: + description: Install nginx and start service + tasks: + - name: Install nginx via yum + playbook: install.yml + - name: Configure and start nginx + playbook: configure.yml +``` + +`config.yaml`的内容如下: + +```yaml +all: + hosts: + 127.0.0.1: + ansible_host: 127.0.0.1 + ansible_port: 22 + ansible_user: root # 必须为root用户 + ansible_password: "" + vars: + nginx_port: 80 ansible_ssh_common_args: "-o StrictHostKeyChecking=no" ``` -## 5 workspace +`workspace`目录下包含如下文件: -`workspace` 目录中承载了部署脚本的主体内容,目录结构不做限制,需要与 `main.yaml`和 `config.yaml`中的各参数对应。 +1. `install.yml`:用于安装nginx及其他依赖软件 +2. `configure.yml`:用于配置nginx参数并启动nginx服务 +3. `nginx.conf.j2`:作为配置nginx参数的模板。虽然未在`config.yaml`中体现,但会在`configure.yml`中被使用。 -`workspace` 目录视为整个插件执行过程中的根目录。 +`install.yml`的内容如下: -当前示例中,`workspace`中的目录结构为: +```yaml +--- +- hosts: all + become: yes + tasks: + - name: Install nginx + yum: + name: nginx + state: present + - name: Ensure nginx is running and enabled + service: + name: nginx + state: started + enabled: yes +``` -```text -workspace -|-- roles -| `-- ... -|-- clean-k8s.yml -|-- delete-k8s.yml -|-- init-k8s.yml -|-- set-env.yml -|-- variables.yml -`-- ... +`configure.yml`的内容如下: + +```yaml +--- +- hosts: all + become: yes + tasks: + - name: Generate nginx configuration + template: + src: nginx.conf.j2 + dest: /etc/nginx/nginx.conf + owner: root + group: root + mode: '0644' + - name: Validate nginx configuration + command: nginx -t + register: nginx_test + changed_when: false + notify: restart nginx + - name: Restart nginx + service: + name: nginx + state: restarted + when: nginx_test.rc == 0 +``` + +`nginx.conf.j2`的内容如下: + +```jinja2 +worker_processes auto; +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 65; + + server { + listen {{ nginx_port }}; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + } +} ``` ## 6 插件打包 -如果要发布插件供用户使用,需要将插件打包成 `{plugin_name}.tar.gz` 的格式,压缩包的名称和包内目录的名称要对应,且解压后应当仅生成一个目录,例如: +如果要发布插件供其他用户使用,需要将插件打包成`{plugin_name}.tar.gz`的格式,压缩包的名称与插件名称保持一致,且解压后应当仅生成一个目录,例如: ```text kubernetes-1.31.1.tar.gz @@ -133,8 +365,13 @@ kubernetes-1.31.1.tar.gz `-- workspace/ ``` -当前示例中,使用如下命令行完成打包: +通常可以使用如下命令行完成打包: -````bash +```bash tar zcvf kubernetes-1.31.1.tar.gz kubernetes-1.31.1/ -```` +``` + +## 7 插件开发Tips + +- 如果 ansible 脚本中涉及文件的跨节点拷贝,建议在拷贝之前,在目标节点上安装软件包`python3-libselinux` +- 为了部署的流畅性,建议在`config.yaml`中的`vars`字段增加配置项`ansible_ssh_common_args: '-o StrictHostKeyChecking=no'`,从而关闭严格的 HostKey 校验。 diff --git a/docs/zh/use_case.md b/docs/zh/use_case.md index 3132b3a..00bd555 100644 --- a/docs/zh/use_case.md +++ b/docs/zh/use_case.md @@ -139,7 +139,7 @@ ansible_host: 192.168.124.17 # 远端IP ansible_port: 22 # 端口号 ansible_user: root # 用户名 - ansible_password: passwd # 密码 + ansible_password: "" # 密码 vars: docker_download_url: @@ -239,7 +239,7 @@ # ansible_host: 127.0.0.1 # 远端IP # ansible_port: 22 # 端口号 # ansible_user: root # 用户名 - # ansible_password: PASSWORD # 密码 + # ansible_password: "" # 密码 vars: deepseek_version: 8b # ollama 官方下载地址: https://ollama.com/download/ollama-linux-amd64.tgz,注意区分amd64和arm64 @@ -371,7 +371,7 @@ # 部署节点用户 ansible_user: root # 目前仅支持 root 用户 # 部署节点密码 - ansible_password: PASSWORD + ansible_password: "" vars: ansible_ssh_common_args: '-o StrictHostKeyChecking=no' @@ -482,7 +482,7 @@ ansible_host: 192.168.1.101 # master 节点的 IP ansible_port: 22 # ssh 的端口 ansible_user: root # ssh 的用户,非root用户需要 sudo 权限 - ansible_password: PASSWORD # 上述用户的密码 + ansible_password: "" # 上述用户的密码 vars: temp_path: /tmp namespace: kuberay # 命名空间 -- Gitee