From 8c1973fff39398b8021607d28b11a9037a0f73e9 Mon Sep 17 00:00:00 2001 From: chopupu <1123478123@qq.com> Date: Thu, 8 May 2025 19:44:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E8=8C=83KubeOS=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KubeOS/public_sys-resources/icon-note.gif | Bin 394 -> 0 bytes .../.markdownlint.json | 0 docs/zh/docs/cloud/kubeos/kubeos/_toc.yaml | 14 ++ .../docs/cloud/kubeos/kubeos/about_kubos.md | 5 +- ...7\344\273\266\345\270\203\345\261\200.png" | Bin ...345\231\250OS\346\236\266\346\236\204.png" | Bin .../kubeos/installation_and_deployment.md | 45 ++--- .../kubeos/kubeos/kubeos_image_creation.md | 123 +++++------- .../kubeos/kubeos}/overview.md | 0 .../cloud/kubeos/kubeos/usage_instructions.md | 178 +++++++++--------- 10 files changed, 161 insertions(+), 204 deletions(-) delete mode 100644 docs/zh/docs/KubeOS/public_sys-resources/icon-note.gif rename docs/zh/docs/cloud/{container_runtime => kubeos}/.markdownlint.json (100%) create mode 100644 docs/zh/docs/cloud/kubeos/kubeos/_toc.yaml rename "docs/zh/docs/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" => docs/zh/docs/cloud/kubeos/kubeos/about_kubos.md (98%) rename "docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" => "docs/zh/docs/cloud/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" (100%) rename "docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" => "docs/zh/docs/cloud/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" (100%) rename "docs/zh/docs/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" => docs/zh/docs/cloud/kubeos/kubeos/installation_and_deployment.md (77%) rename "docs/zh/docs/KubeOS/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" => docs/zh/docs/cloud/kubeos/kubeos/kubeos_image_creation.md (72%) rename docs/zh/docs/{KubeOS => cloud/kubeos/kubeos}/overview.md (100%) rename "docs/zh/docs/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" => docs/zh/docs/cloud/kubeos/kubeos/usage_instructions.md (70%) diff --git a/docs/zh/docs/KubeOS/public_sys-resources/icon-note.gif b/docs/zh/docs/KubeOS/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmZ?wbhEHblx7fPSjxcg=ii?@_wH=jwxy=7CMGH-B`L+l$wfv=#>UF#$gv|VY%C^b zCQFtrnKN(Bo_%|sJbO}7RAORe!otL&qo<>yq_Sq+8Xqqo5h0P3w3Lvb5E(g{p01vl zxR@)KuDH0l^z`+-dH3eaw=XqSH7aTIx{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|> diff --git a/docs/zh/docs/cloud/container_runtime/.markdownlint.json b/docs/zh/docs/cloud/kubeos/.markdownlint.json similarity index 100% rename from docs/zh/docs/cloud/container_runtime/.markdownlint.json rename to docs/zh/docs/cloud/kubeos/.markdownlint.json diff --git a/docs/zh/docs/cloud/kubeos/kubeos/_toc.yaml b/docs/zh/docs/cloud/kubeos/kubeos/_toc.yaml new file mode 100644 index 000000000..1a6979dc0 --- /dev/null +++ b/docs/zh/docs/cloud/kubeos/kubeos/_toc.yaml @@ -0,0 +1,14 @@ +label: 容器OS升级用户指南 +isManual: true +description: KubeOS是专为容器化业务涉及的轻量级操作系统,支持原子化升级,确保版本一致性,降低运维复杂性 +sections: + - label: 概述 + href: ./overview.md + - label: 认识容器OS升级 + href: ./about_kubeos.md + - label: 安装与部署 + href: ./installation_and_deployment.md + - label: 使用方法 + href: ./usage_instructions.md + - label: 容器OS镜像制作指导 + href: ./kubeos_image_creation.md diff --git "a/docs/zh/docs/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" b/docs/zh/docs/cloud/kubeos/kubeos/about_kubos.md similarity index 98% rename from "docs/zh/docs/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" rename to docs/zh/docs/cloud/kubeos/kubeos/about_kubos.md index 5a9622e00..f70e17fd3 100644 --- "a/docs/zh/docs/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" +++ b/docs/zh/docs/cloud/kubeos/kubeos/about_kubos.md @@ -24,19 +24,16 @@ openEuler 容器 OS 升级工具通过 kubernetes operator 扩展机制控制容 - os-agent:接收来自 proxy 的信息,从 OSImage Server 下载用于更新的容器 OS 镜像,然后进行升级并重启节点。 - ### 容器 OS 文件系统 **图 2** 容器 OS 文件系统布局 ![](./figures/容器OS文件布局.png) - - 如图所示,容器 OS 包含四个分区: - boot 分区:grub2文件分区 - Persist 分区:用于存放持久性用户数据,容器 OS 升级时,该分区的数据也会保留。 - 两个 root 分区:容器 OS 采用双分区模式,将 root 分区划分为 rootA 和 rootB。假定初始化时,系统运行在 rootA 分区上,当进行系统更新时,会下载新系统到 rootB 分区,grub会有两个启动项分别为A,B,将 grub 默认启动项设置为B,最后会重启虚拟机。虚拟机启动后容器 OS 将运行在刚更新过的 rootB 分区上。 -容器OS的root文件系统为只读,用户的持久化数据存放在Persist持久化数据分区 。 \ No newline at end of file +容器OS的root文件系统为只读,用户的持久化数据存放在Persist持久化数据分区 。 diff --git "a/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" "b/docs/zh/docs/cloud/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" similarity index 100% rename from "docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" rename to "docs/zh/docs/cloud/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" diff --git "a/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" "b/docs/zh/docs/cloud/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" similarity index 100% rename from "docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" rename to "docs/zh/docs/cloud/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" diff --git "a/docs/zh/docs/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" b/docs/zh/docs/cloud/kubeos/kubeos/installation_and_deployment.md similarity index 77% rename from "docs/zh/docs/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" rename to docs/zh/docs/cloud/kubeos/kubeos/installation_and_deployment.md index e67869981..06d746816 100644 --- "a/docs/zh/docs/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" +++ b/docs/zh/docs/cloud/kubeos/kubeos/installation_and_deployment.md @@ -2,27 +2,6 @@ 本章介绍如何安装和部署容器 OS 升级工具。 - - -- [安装与部署](#安装与部署) - - [软硬件要求](#软硬件要求) - - [硬件要求](#硬件要求) - - [软件要求](#软件要求) - - [环境准备](#环境准备) - - [安装容器OS升级工具](#安装容器os升级工具) - - [部署容器OS升级工具](#部署容器os升级工具) - - [制作os-operator和os-proxy镜像](#制作os-operator和os-proxy镜像) - - [环境准备](#环境准备-1) - - [操作步骤](#操作步骤) - - [制作容器OS虚拟机镜像](#制作容器os虚拟机镜像) - - [注意事项](#注意事项) - - [操作步骤](#操作步骤-1) - - [部署CRD,operator和proxy](#部署crdoperator和proxy) - - [注意事项](#注意事项-1) - - [操作步骤](#操作步骤-2) - - - ## 软硬件要求 ### 硬件要求 @@ -44,7 +23,7 @@ 1. 配置 openEuler 24.03-LTS-SP1 yum 源: - ``` + ```sh [openEuler24.03-LTS-SP1] # openEuler 24.03-LTS-SP1 官方发布源 name=openEuler24.03-LTS-SP1 baseurl=http://repo.openeuler.org/openEuler-24.03-LTS-SP1/everything/$basearch/ @@ -59,7 +38,7 @@ yum install KubeOS KubeOS-scripts -y ``` -> ![](./public_sys-resources/icon-note.gif)**说明**: +> [!NOTE]说明 > > 容器 OS 升级工具会安装在 /opt/kubeOS 目录下,包括os-operator,os-proxy,os-agent二进制,制作容器 OS 工具及相应配置文件 。 @@ -140,7 +119,7 @@ #### 注意事项 -* 以虚拟机镜像为例,如需进行物理机的镜像制作请见《[容器OS镜像制作指导](./容器OS镜像制作指导.md)》。 +* 以虚拟机镜像为例,如需进行物理机的镜像制作请见《[容器OS镜像制作指导](./kubeos_image_creation.md)》。 * 制作容器OS 镜像需要使用 root 权限。 * 容器OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 * 使用默认 rpmlist 制作的容器OS虚拟机镜像,默认保存在调用`kbimg`路径下的`scripts-auto`文件夹内,该分区至少有 25GiB 的剩余磁盘空间。 @@ -148,7 +127,7 @@ #### 操作步骤 -制作容器OS 虚拟机镜像使用 kbimg,命令详情请见《[容器OS镜像制作指导](./容器OS镜像制作指导.md)》。 +制作容器OS 虚拟机镜像使用 kbimg,命令详情请见《[容器OS镜像制作指导](./kubeos_image_creation.md)》。 制作容器OS 虚拟机镜像的步骤如下: @@ -166,9 +145,9 @@ 容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts/scripts-auto 目录下生成: - - raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2560MiB,持久化分区<15GB。 - - qcow2 格式的系统镜像 system.qcow2。 - - 可用于升级的根文件系统 kubeos.tar。 + * raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2560MiB,持久化分区<15GB。 + * qcow2 格式的系统镜像 system.qcow2。 + * 可用于升级的根文件系统 kubeos.tar。 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机场景,不支持 x86 架构的虚拟机使用 legacy 启动模式启动。 @@ -176,12 +155,12 @@ #### 注意事项 -* 请先部署 Kubernetes 集群,部署方法参考[《openEuler 24.03-LTS-SP1 Kubernetes 集群部署指南》](../Kubernetes/Kubernetes.md)。 +* 请先部署 Kubernetes 集群,部署方法参考[《openEuler 24.03-LTS-SP1 Kubernetes 集群部署指南》](../../cluster_deployment/kubernetes/overview.md)。 -- 集群中准备进行升级的 Worker 节点的 OS 需要为使用上一节方式制作出来的容器 OS,如不是,请用 system.qcow2重新部署虚拟机,虚拟机部署请见[《openEuler 24.03-LTS-SP1 虚拟化用户指南》](../Virtualization/virtualization.md),Master节点目前不支持容器 OS 升级,请用openEuler 24.03-LTS-SP1部署Master节点。 -- 部署 OS 的 CRD(CustomResourceDefinition),os-operator,os-proxy 以及 RBAC (Role-based access control) 机制的 YAML 需要用户自行编写。 -- operator 和 proxy 部署在 kubernetes 集群中,operator 应部署为 deployment,proxy 应部署为daemonset。 -- 尽量部署好 kubernetes 的安全措施,如 rbac 机制,pod 的 service account 和 security policy 配置等。 +* 集群中准备进行升级的 Worker 节点的 OS 需要为使用上一节方式制作出来的容器 OS,如不是,请用 system.qcow2重新部署虚拟机,虚拟机部署请见[《openEuler 24.03-LTS-SP1 虚拟化用户指南》](../../../Virtualization/virtualization.md),Master节点目前不支持容器 OS 升级,请用openEuler 24.03-LTS-SP1部署Master节点。 +* 部署 OS 的 CRD(CustomResourceDefinition),os-operator,os-proxy 以及 RBAC (Role-based access control) 机制的 YAML 需要用户自行编写。 +* operator 和 proxy 部署在 kubernetes 集群中,operator 应部署为 deployment,proxy 应部署为daemonset。 +* 尽量部署好 kubernetes 的安全措施,如 rbac 机制,pod 的 service account 和 security policy 配置等。 #### 操作步骤 diff --git "a/docs/zh/docs/KubeOS/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" b/docs/zh/docs/cloud/kubeos/kubeos/kubeos_image_creation.md similarity index 72% rename from "docs/zh/docs/KubeOS/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" rename to docs/zh/docs/cloud/kubeos/kubeos/kubeos_image_creation.md index 332404fef..2d921b34c 100644 --- "a/docs/zh/docs/KubeOS/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" +++ b/docs/zh/docs/cloud/kubeos/kubeos/kubeos_image_creation.md @@ -1,36 +1,5 @@ # 容器OS镜像制作指导 -- [容器OS镜像制作指导](#容器os镜像制作指导) - - [简介](#简介) - - [命令介绍](#命令介绍) - - [命令格式](#命令格式) - - [配置文件说明](#配置文件说明) - - [from\_repo](#from_repo) - - [admin\_container](#admin_container) - - [pxe\_config](#pxe_config) - - [users](#users) - - [copy\_files](#copy_files) - - [grub](#grub) - - [systemd\_service](#systemd_service) - - [chroot\_script](#chroot_script) - - [disk\_partition](#disk_partition) - - [persist\_mkdir](#persist_mkdir) - - [dm\_verity](#dm_verity) - - [使用说明](#使用说明) - - [注意事项](#注意事项) - - [KubeOS OCI 镜像制作](#kubeos-oci-镜像制作) - - [注意事项](#注意事项-1) - - [使用示例](#使用示例) - - [KubeOS 虚拟机镜像制作](#kubeos-虚拟机镜像制作) - - [注意事项](#注意事项-2) - - [使用示例](#使用示例-1) - - [KubeOS 物理机安装所需镜像及文件制作](#kubeos-物理机安装所需镜像及文件制作) - - [注意事项](#注意事项-3) - - [使用示例](#使用示例-2) - - [附录](#附录) - - [异常退出清理方法](#异常退出清理方法) - - [详细toml配置文件示例](#详细toml配置文件示例) - ## 简介 kbimg是KubeOS部署和升级所需的镜像制作工具,可以使用kbimg制作KubeOS docker,虚拟机和物理机镜像。 @@ -195,11 +164,11 @@ Options: * 不支持并发执行。如果使用脚本`&`连续执行可能会出现异常情况。制作过程中碰到异常掉电或中断后无法清理环境时,可参考[异常退出清理方法](#异常退出清理方法)清理后重新制作。 * 容器 OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 * dm-verity使用说明: - * 仅支持虚拟机场景,暂不支持物理机环境。 - * 不支持通过 HTTP/HTTPS 服务器下载升级镜像进行系统升级。仅支持从容器镜像仓库下载升级镜像进行升级。 - * 启动虚拟机时,必须配置使用 virtio 类型设备。 - * 启用dm-verity功能的升级容器镜像不可用于升级未开启dm-verity的容器OS。同理,未启动dm-verity功能的升级容器镜像不可用于升级开启dm-verity功能的容器OS。在集群内,部分节点开启dm-verity功能,部分未开启,需要用户控制下发对应的升级镜像。 - * 制作升级容器镜像和虚拟机镜像时,推荐使用相同的密钥(配置`keys_dir`为先前制作镜像时创建的密钥文件路径。配置`efi_key`或`grub_key`一致不能保证密钥文件是一模一样的)。若密钥不一致,在切换备用分区时可能导致证书校验失败,从而无法启动系统。出现证书校验失败问题时,需要重新导入备用分区证书进行修复。 + * 仅支持虚拟机场景,暂不支持物理机环境。 + * 不支持通过 HTTP/HTTPS 服务器下载升级镜像进行系统升级。仅支持从容器镜像仓库下载升级镜像进行升级。 + * 启动虚拟机时,必须配置使用 virtio 类型设备。 + * 启用dm-verity功能的升级容器镜像不可用于升级未开启dm-verity的容器OS。同理,未启动dm-verity功能的升级容器镜像不可用于升级开启dm-verity功能的容器OS。在集群内,部分节点开启dm-verity功能,部分未开启,需要用户控制下发对应的升级镜像。 + * 制作升级容器镜像和虚拟机镜像时,推荐使用相同的密钥(配置`keys_dir`为先前制作镜像时创建的密钥文件路径。配置`efi_key`或`grub_key`一致不能保证密钥文件是一模一样的)。若密钥不一致,在切换备用分区时可能导致证书校验失败,从而无法启动系统。出现证书校验失败问题时,需要重新导入备用分区证书进行修复。 ### KubeOS OCI 镜像制作 @@ -244,8 +213,8 @@ version = "v1" ``` * 结果说明 - * 制作完成后,通过`docker images`查看制作出来的KubeOS容器镜像 - * update-boot.img/update-root.img/update-hash.img: 仅在dm-verity模式下生成,可忽略。 + * 制作完成后,通过`docker images`查看制作出来的KubeOS容器镜像 + * update-boot.img/update-root.img/update-hash.img: 仅在dm-verity模式下生成,可忽略。 ### KubeOS 虚拟机镜像制作 @@ -292,10 +261,10 @@ version = "v1" * 结果说明 容器 OS 镜像制作完成后,会在 ./scripts-auto 目录下生成 - * system.qcow2: 用于启动虚拟机的qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB 。 - * system.img: 用于启动虚拟机的img 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB 。 - * kubeos.tar: 用于升级的根文件系统tar包。 - * update-boot.img/update-root.img/update-hash.img: 仅在dm-verity模式下生成,可忽略。 + * system.qcow2: 用于启动虚拟机的qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB 。 + * system.img: 用于启动虚拟机的img 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB 。 + * kubeos.tar: 用于升级的根文件系统tar包。 + * update-boot.img/update-root.img/update-hash.img: 仅在dm-verity模式下生成,可忽略。 ### KubeOS 物理机安装所需镜像及文件制作 @@ -390,49 +359,49 @@ version = "v1" ``` * 结果说明 - * initramfs.img: 用于pxe启动用的 initramfs 镜像 - * kubeos.tar: pxe安装所用的根分区文件系统 + * initramfs.img: 用于pxe启动用的 initramfs 镜像 + * kubeos.tar: pxe安装所用的根分区文件系统 ## 附录 ### 异常退出清理方法 -1. 若在使用`kbimg`制作镜像过程中,异常退出,无法清理环境,可使用如下方法进行清理: - -```bash -function unmount_dir() { - local dir=$1 - if [ -L "${dir}" ] || [ -f "${dir}" ]; then - echo "${dir} is not a directory, please check it." - return 1 - fi - if [ ! -d "${dir}" ]; then +1.若在使用`kbimg`制作镜像过程中,异常退出,无法清理环境,可使用如下方法进行清理: + + ```bash + function unmount_dir() { + local dir=$1 + if [ -L "${dir}" ] || [ -f "${dir}" ]; then + echo "${dir} is not a directory, please check it." + return 1 + fi + if [ ! -d "${dir}" ]; then + return 0 + fi + local real_dir=$(readlink -e "${dir}") + local mnts=$(awk '{print $2}' < /proc/mounts | grep "^${real_dir}" | sort -r) + for m in ${mnts}; do + echo "Unmount ${m}" + umount -f "${m}" || true + done return 0 - fi - local real_dir=$(readlink -e "${dir}") - local mnts=$(awk '{print $2}' < /proc/mounts | grep "^${real_dir}" | sort -r) - for m in ${mnts}; do - echo "Unmount ${m}" - umount -f "${m}" || true - done - return 0 -} -ls -l ./scripts-auto/test.lock && rm -rf ./scripts-auto/test.lock -unmount_dir ./scripts-auto/rootfs/proc -unmount_dir ./scripts-auto/rootfs/sys -unmount_dir ./scripts-auto/rootfs/dev/pts -unmount_dir ./scripts-auto/rootfs/dev -unmount_dir ./scripts-auto/mnt/boot/grub2 -unmount_dir ./scripts-auto/mnt -rm -rf ./scripts-auto/rootfs ./scripts-auto/mnt -``` + } + ls -l ./scripts-auto/test.lock && rm -rf ./scripts-auto/test.lock + unmount_dir ./scripts-auto/rootfs/proc + unmount_dir ./scripts-auto/rootfs/sys + unmount_dir ./scripts-auto/rootfs/dev/pts + unmount_dir ./scripts-auto/rootfs/dev + unmount_dir ./scripts-auto/mnt/boot/grub2 + unmount_dir ./scripts-auto/mnt + rm -rf ./scripts-auto/rootfs ./scripts-auto/mnt + ``` -2. 如果执行以上命令仍然无法删除目录,可尝试先调用如下命令,再重新执行第一步的命令。 +2.如果执行以上命令仍然无法删除目录,可尝试先调用如下命令,再重新执行第一步的命令。 -```bash -fuser -kvm ./scripts-auto/rootfs -fuser -kvm ./scripts-auto/mnt -``` + ```bash + fuser -kvm ./scripts-auto/rootfs + fuser -kvm ./scripts-auto/mnt + ``` ### 详细toml配置文件示例 diff --git a/docs/zh/docs/KubeOS/overview.md b/docs/zh/docs/cloud/kubeos/kubeos/overview.md similarity index 100% rename from docs/zh/docs/KubeOS/overview.md rename to docs/zh/docs/cloud/kubeos/kubeos/overview.md diff --git "a/docs/zh/docs/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" b/docs/zh/docs/cloud/kubeos/kubeos/usage_instructions.md similarity index 70% rename from "docs/zh/docs/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" rename to docs/zh/docs/cloud/kubeos/kubeos/usage_instructions.md index 6c143abda..5811ed4e7 100644 --- "a/docs/zh/docs/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" +++ b/docs/zh/docs/cloud/kubeos/kubeos/usage_instructions.md @@ -1,57 +1,37 @@ # 使用方法 - - -- [使用方法](#使用方法) - - [注意事项](#注意事项) - - [OS CR参数说明](#os-cr参数说明) - - [升级指导](#升级指导) - - [配置(Settings)指导](#配置settings指导) - - [回退指导](#回退指导) - - [使用场景](#使用场景) - - [手动回退指导](#手动回退指导) - - [工具回退指导](#工具回退指导) - - [附录](#附录) - - [Setting 列表](#setting-列表) - - [kernel Settings](#kernel-settings) - - [Grub Settings](#grub-settings) - - [kubelet配置](#kubelet配置) - - [containerd配置](#containerd配置) - - [Pam Limits配置](#pam-limits配置) - - ## 注意事项 * 公共注意事项 - * 仅支持虚拟机和物理机x86和arm64 UEFI场景。 - * 使用kubectl apply通过YAML创建或更新OS的CR时,不建议并发apply,当并发请求过多时,kube-apiserver会无法处理请求导致失败。 - * 如用户配置了容器镜像仓的证书或密钥,请用户保证证书或密钥文件的权限最小。 + * 仅支持虚拟机和物理机x86和arm64 UEFI场景。 + * 使用kubectl apply通过YAML创建或更新OS的CR时,不建议并发apply,当并发请求过多时,kube-apiserver会无法处理请求导致失败。 + * 如用户配置了容器镜像仓的证书或密钥,请用户保证证书或密钥文件的权限最小。 * 升级注意事项 - * 升级为所有软件包原子升级,默认不提供单包升级能力。 - * 升级为双区升级的方式,不支持更多分区数量。 - * 当前暂不支持跨大版本升级。 - * 单节点的升级过程的日志可在节点的 /var/log/messages 文件查看。 - * 请严格按照提供的升级和回退流程进行操作,异常调用顺序可能会导致系统无法升级或回退。 - * 节点上containerd如需配置ctr使用的私有镜像,请将配置文件host.toml按照ctr指导放在/etc/containerd/certs.d目录下。 - * 使用OCI 镜像升级和mtls双向认证仅支持 openEuler 22.09 及之后的版本。 - * nodeselector、executionmode、timewindow和timeinterval 仅支持openEuler 24.09及之后版本。 - * KubeOS 24.03-LTS-SP1 版本与历史版本不兼容。 - * 使用从http/https服务器下载升级镜像功能需要同步使用对应版本镜像制作工具。 + * 升级为所有软件包原子升级,默认不提供单包升级能力。 + * 升级为双区升级的方式,不支持更多分区数量。 + * 当前暂不支持跨大版本升级。 + * 单节点的升级过程的日志可在节点的 /var/log/messages 文件查看。 + * 请严格按照提供的升级和回退流程进行操作,异常调用顺序可能会导致系统无法升级或回退。 + * 节点上containerd如需配置ctr使用的私有镜像,请将配置文件host.toml按照ctr指导放在/etc/containerd/certs.d目录下。 + * 使用OCI 镜像升级和mtls双向认证仅支持 openEuler 22.09 及之后的版本。 + * nodeselector、executionmode、timewindow和timeinterval 仅支持openEuler 24.09及之后版本。 + * KubeOS 24.03-LTS-SP1 版本与历史版本不兼容。 + * 使用从http/https服务器下载升级镜像功能需要同步使用对应版本镜像制作工具。 * 配置注意事项 - * 用户自行指定配置内容,用户需保证配置内容安全可靠 ,尤其是持久化配置(kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next、kubernetes.kubelet、container.containerd、pam.limits),KubeOS不对参数有效性进行检验。 - * opstype=config时,若osversion与当前集群节点的OS版本不一致,配置不会进行。 - * 当前仅支持kernel参数临时配置(kernel.sysctl)、持久化配置(kernel.sysctl.persist)和grub cmdline配置(grub.cmdline.current和grub.cmdline.next)、kubelet配置(kubernetes.kubelet)、containerd配置(container.containerd)和pam limits配置(pam.limits)。 - * 持久化配置会写入persist持久化分区,升级重启后配置保留;kernel参数临时配置重启后不保留。 - * 配置grub.cmdline.current或grub.cmdline.next时,如为单个参数(非key=value格式参数),请指定key为该参数,value为空。 - * 进行配置删除(operation=delete)时,key=value形式的配置需保证key、value和实际配置一致。 - * 配置不支持回退,如需回退,请修改配置版本和配置内容,重新下发配置。 - * 配置出现错误,节点状态陷入config时,请将配置版本恢复成上一版本并重新下发配置,从而使节点恢复至idle状态。 但是请注意:出现错误前已经配置完成的参数无法恢复。 - * 在配置grub.cmdline.current或grub.cmdline.next时,若需要将已存在的“key=value”格式的参数更新为只有key无value格式,比如将“rd.info=0”更新成rd.info,需要先删除“key=value”,然后在下一次配置时,添加key。不支持直接更新或者更新删除动作在同一次完成。 + * 用户自行指定配置内容,用户需保证配置内容安全可靠 ,尤其是持久化配置(kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next、kubernetes.kubelet、container.containerd、pam.limits),KubeOS不对参数有效性进行检验。 + * opstype=config时,若osversion与当前集群节点的OS版本不一致,配置不会进行。 + * 当前仅支持kernel参数临时配置(kernel.sysctl)、持久化配置(kernel.sysctl.persist)和grub cmdline配置(grub.cmdline.current和grub.cmdline.next)、kubelet配置(kubernetes.kubelet)、containerd配置(container.containerd)和pam limits配置(pam.limits)。 + * 持久化配置会写入persist持久化分区,升级重启后配置保留;kernel参数临时配置重启后不保留。 + * 配置grub.cmdline.current或grub.cmdline.next时,如为单个参数(非key=value格式参数),请指定key为该参数,value为空。 + * 进行配置删除(operation=delete)时,key=value形式的配置需保证key、value和实际配置一致。 + * 配置不支持回退,如需回退,请修改配置版本和配置内容,重新下发配置。 + * 配置出现错误,节点状态陷入config时,请将配置版本恢复成上一版本并重新下发配置,从而使节点恢复至idle状态。 但是请注意:出现错误前已经配置完成的参数无法恢复。 + * 在配置grub.cmdline.current或grub.cmdline.next时,若需要将已存在的“key=value”格式的参数更新为只有key无value格式,比如将“rd.info=0”更新成rd.info,需要先删除“key=value”,然后在下一次配置时,添加key。不支持直接更新或者更新删除动作在同一次完成。 ## OS CR参数说明 -在集群中创建类别为OS的定制对象,设置相应字段。类别OS来自于[安装和部署章节](./安装与部署.md)创建的CRD对象,字段及说明如下: +在集群中创建类别为OS的定制对象,设置相应字段。类别OS来自于[安装和部署章节](./installation_and_deployment.md)创建的CRD对象,字段及说明如下: * imageurl指定的地址里包含协议,只支持http或https协议。imageurl为https协议时为安全传输,imageurl为http地址时,需指定flagSafe为true,即用户明确该地址为安全时,才会下载镜像。如imageurl为http地址且没有指定flagSafe为true,默认该地址不安全,不会下载镜像并且在升级节点的日志中提示用户该地址不安全。 * 对于imageurl,推荐使用https协议,使用https协议需要升级的机器已安装相应证书。如果镜像服务器由用户自己维护,需要用户自己进行签名,并保证升级节点已安装对应证书。用户需要将证书放在容器OS```/etc/KubeOS/certs```目录下。地址由管理员传入,管理员应该保证网址的安全性,推荐采用内网地址。 @@ -60,11 +40,11 @@ * 当有OS的nodeselector为all-label时,集群只能存在这一个OS的有效实例(有效实例为存在与这个OS对应的节点)。 * nodeselector不配置的OS也只能有一个,因为nodeselector不配置时认为是对没有label的节点进行操作。 * timewinterval参数说明: - * 参数不设置时默认为15s。 - * 参数设置为0时,由于k8s controller-runtime的rate limit限制,operator下发任务的时间间隔会逐渐增加直至1000s。 - * 并行时为每批次operator下发升级/配置的时间间隔。 - * 在串行时为每批次节点串行升级完毕后与下次升级/配置下发的时间间隔,批次内部的时间间隔为15s。 - * OS的实例字段进行更新会立刻触发operator。 + * 参数不设置时默认为15s。 + * 参数设置为0时,由于k8s controller-runtime的rate limit限制,operator下发任务的时间间隔会逐渐增加直至1000s。 + * 并行时为每批次operator下发升级/配置的时间间隔。 + * 在串行时为每批次节点串行升级完毕后与下次升级/配置下发的时间间隔,批次内部的时间间隔为15s。 + * OS的实例字段进行更新会立刻触发operator。 | 参数 |参数类型 | 参数说明 | 使用说明 | 是否必选 | | -------------- | ------ | ------------------------------------------------------------ | ----- | ---------------- | @@ -91,7 +71,8 @@ ## 升级指导 1.编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如下,假定将上面的YAML保存到upgrade_v1alpha1_os.yaml; - * 使用磁盘镜像进行升级 + +* 使用磁盘镜像进行升级 ```yaml apiVersion: upgrade.openeuler.org/v1alpha1 @@ -114,9 +95,10 @@ clientkey: client certificate key ``` - * 使用容器镜像进行升级 - * 使用容器镜像进行升级前请先制作升级所需的容器镜像,制作方式请见[《容器OS镜像制作指导》](./容器OS镜像制作指导.md)中 [KubeOS OCI 镜像制作](./容器OS镜像制作指导.md#kubeos-oci-镜像制作)。 - * 节点容器引擎为docker + * 使用容器镜像进行升级 + * 使用容器镜像进行升级前请先制作升级所需的容器镜像,制作方式请见[《容器OS镜像制作指导》](./kubeos-image-creation.md)中 [KubeOS OCI 镜像制作](./kubeos-image-creation.md#kubeos-oci-镜像制作)。 + + 节点容器引擎为docker ``` yaml apiVersion: upgrade.openeuler.org/v1alpha1 @@ -157,9 +139,9 @@ ``` * 升级并且进行配置的示例如下: - * 以节点容器引擎为containerd为例,升级方式对配置无影响,upgradeconfigs在升级前起效,sysconfigs在升级后起效,配置参数说明请见[配置(Settings)指导](#配置settings指导)。 - * 升级并且配置时opstype字段需为upgrade。 - * upgradeconfig为升级之前执行的配置,sysconfigs为升级机器重启后执行的配置,用户可按需进行配置。 + * 以节点容器引擎为containerd为例,升级方式对配置无影响,upgradeconfigs在升级前起效,sysconfigs在升级后起效,配置参数说明请见[配置(Settings)指导](#配置settings指导)。 + * 升级并且配置时opstype字段需为upgrade。 + * upgradeconfig为升级之前执行的配置,sysconfigs为升级机器重启后执行的配置,用户可按需进行配置。 ```yaml apiVersion: upgrade.openeuler.org/v1alpha1 @@ -201,11 +183,13 @@ - key: kernel param key4 value: kernel param value4 ``` + * 设置nodeselector、timewindow、timeinterval、executionmode升级部分节点示例如下: - * 以节点容器引擎为containerd为例,升级方式对节点筛选无影响。 - * 需要进行升级的节点需包含key为`upgrade.openeuler.org/node-selector`的label,nodeselector的值为该label的value,即假定nodeselector值为kubeos,则只对包含`upgrade.openeuler.org/node-selector=kubeos`的label的worker节点进行升级。 - * nodeselector、timewindow、timeinterval、executionmode对配置和回滚同样有效。 - * 节点添加label、修改label、删除label和查看label命令示例如下: + * 以节点容器引擎为containerd为例,升级方式对节点筛选无影响。 + * 需要进行升级的节点需包含key为`upgrade.openeuler.org/node-selector`的label,nodeselector的值为该label的value,即假定nodeselector值为kubeos,则只对包含`upgrade.openeuler.org/node-selector=kubeos`的label的worker节点进行升级。 + * nodeselector、timewindow、timeinterval、executionmode对配置和回滚同样有效。 + * 节点添加label、修改label、删除label和查看label命令示例如下: + ``` shell # 为节点kubeos-node1增加label kubectl label nodes kubeos-node1 upgrade.openeuler.org/node-selector=kubeos-v1 @@ -216,7 +200,9 @@ # 查看节点的label kubectl get nodes --show-labels ``` - * yaml示例如下: + + * yaml示例如下: + ```yaml apiVersion: upgrade.openeuler.org/v1alpha1 kind: OS @@ -259,7 +245,7 @@ kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' ``` -> ![](./public_sys-resources/icon-note.gif)**说明**: +> [!NOTE]说明 > > 如果后续需要再次升级,与上面相同对 upgrade_v1alpha1_os.yaml 的 相应字段进行相应修改。 @@ -328,26 +314,26 @@ | value | string | 参数值 | key=value形式的参数中,value不能为空,不建议配置含空格、tab键的字符串,具体请看附录下的[Settings列表](#setting-列表)中对每种配置类型对value的说明。 | key=value形式的参数必选 | | operation | string | 对参数进行的操作 | 仅对kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next类型的参数生效。默认为添加或更新。仅支持配置为delete,代表删除已存在的参数(key=value需完全一致才能删除)。 | 否 | - * upgradeconfigs与sysconfigs参数相同,upgradeconfigs为升级/回退前进行的配置,仅在upgrade/rollback场景起效,sysconfigs既支持只进行配置,也支持在升级/回退重启后进行配置。 + * upgradeconfigs与sysconfigs参数相同,upgradeconfigs为升级/回退前进行的配置,仅在upgrade/rollback场景起效,sysconfigs既支持只进行配置,也支持在升级/回退重启后进行配置。 * 使用说明 - * 编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如上,假定将上面的YAML保存到upgrade_v1alpha1_os.yaml。 + * 编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如上,假定将上面的YAML保存到upgrade_v1alpha1_os.yaml。 - * 查看配置之前的节点的配置的版本和节点状态(NODESTATUS状态为idle)。 + * 查看配置之前的节点的配置的版本和节点状态(NODESTATUS状态为idle)。 ```shell kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' ``` - * 执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行配置,再次查看节点状态(NODESTATUS变成config)。 + * 执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行配置,再次查看节点状态(NODESTATUS变成config)。 ```shell kubectl apply -f upgrade_v1alpha1_os.yaml kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' ``` - * 再次查看节点的配置的版本确认节点是否配置完成(NODESTATUS恢复为idle)。 + * 再次查看节点的配置的版本确认节点是否配置完成(NODESTATUS恢复为idle)。 ```shell kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' @@ -381,7 +367,7 @@ ``` * 回退至上一版本 - * OS回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置osversion为上一版本,opstype为rollback,回退至上一版本(即切换至上一分区)。YAML示例如下: + * OS回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置osversion为上一版本,opstype为rollback,回退至上一版本(即切换至上一分区)。YAML示例如下: ```yaml apiVersion: upgrade.openeuler.org/v1alpha1 @@ -401,7 +387,7 @@ mtls: true ``` - * 配置回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置sysconfigs/upgradeconfigs的version为上一版本,回退至上一版本(已配置的参数无法回退)。YAML示例如下: + * 配置回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置sysconfigs/upgradeconfigs的version为上一版本,回退至上一版本(已配置的参数无法回退)。YAML示例如下: ```yaml apiVersion: upgrade.openeuler.org/v1alpha1 @@ -468,6 +454,7 @@ ``` * kernel.sysctl.persist: 设置持久化内核参数,key/value表示内核参数的key/value,key与value均不能为空且key不能包含“=”, configpath为配置文件路径,支持新建(需保证父目录存在),如不指定configpath默认修改/etc/sysctl.conf,示例如下: + ```yaml configs: - model: kernel.sysctl.persist @@ -488,16 +475,16 @@ linux /boot/vmlinuz root=/dev/sda2 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3 ``` - * 在dm-verity模式下,grub.cmdline配置下发无效。 + * 在dm-verity模式下,grub.cmdline配置下发无效。 - * KubeOS使用双分区,grub.cmdline.current/next支持对当前分区或下一分区进行配置: + * KubeOS使用双分区,grub.cmdline.current/next支持对当前分区或下一分区进行配置: - * grub.cmdline.current:对当前分区的启动项参数进行配置。 - * grub.cmdline.next:对下一分区的启动项参数进行配置。 + * grub.cmdline.current:对当前分区的启动项参数进行配置。 + * grub.cmdline.next:对下一分区的启动项参数进行配置。 - * 注意:升级/回退前后的配置,始终基于升级/回退操作下发时的分区位置进行current/next的区分。假设当前分区为A分区,下发升级操作并在sysconfigs(升级重启后配置)中配置grub.cmdline.current,重启后进行配置时仍修改A分区对应的grub cmdline。 + * 注意:升级/回退前后的配置,始终基于升级/回退操作下发时的分区位置进行current/next的区分。假设当前分区为A分区,下发升级操作并在sysconfigs(升级重启后配置)中配置grub.cmdline.current,重启后进行配置时仍修改A分区对应的grub cmdline。 - * grub.cmdline.current/next支持“key=value”(value不能为空),也支持单key。若value中有“=”,例如“root=UUID=some-uuid”,key应设置为第一个“=”前的所有字符,value为第一个“=”后的所有字符。 配置方法示例如下: + * grub.cmdline.current/next支持“key=value”(value不能为空),也支持单key。若value中有“=”,例如“root=UUID=some-uuid”,key应设置为第一个“=”前的所有字符,value为第一个“=”后的所有字符。 配置方法示例如下: ```yaml configs: @@ -526,11 +513,11 @@ #### kubelet配置 * kuberntes.kubelet: 配置节点kubelet的配置文件中的参数,参数说明和约束如下: - * 仅支持```KubeletConfiguration```中的配置参数。 - * 节点kubelet配置文件需要为yaml格式的文件。 - * 如不指定configpath,默认配置文件路径为```/var/lib/kubelet/config.yaml```,并且需要注意的是配置文件的路径需要与kubelet启动时的```-- config```参数指定的路径一致才能生效,用户需保证配置文件路径有效。 - * kubelet配置的value参数类型支持为空/null、int、float、string、boolean和数组。当为数组时,数组元素允许重复,数组参数进行更新时会追加到已有数组中。如需修改数组中的元素,需要先删除数组,再新增数组来完成修改。 - * 如配置存在嵌套,则通过```'.'```连接嵌套的key值,例如如果修改如下yaml示例中```cacheAuthorizedTTL```参数为1s。 + * 仅支持```KubeletConfiguration```中的配置参数。 + * 节点kubelet配置文件需要为yaml格式的文件。 + * 如不指定configpath,默认配置文件路径为```/var/lib/kubelet/config.yaml```,并且需要注意的是配置文件的路径需要与kubelet启动时的```-- config```参数指定的路径一致才能生效,用户需保证配置文件路径有效。 + * kubelet配置的value参数类型支持为空/null、int、float、string、boolean和数组。当为数组时,数组元素允许重复,数组参数进行更新时会追加到已有数组中。如需修改数组中的元素,需要先删除数组,再新增数组来完成修改。 + * 如配置存在嵌套,则通过```'.'```连接嵌套的key值,例如如果修改如下yaml示例中```cacheAuthorizedTTL```参数为1s。 ```yaml authorization: @@ -538,7 +525,9 @@ webhook: cacheAuthorizedTTL: 0s ``` + 参数配置示例如下: + ```yaml configs: - model: kuberntes.kubelet @@ -547,19 +536,23 @@ - key: authorization.webhook.cacheAuthorizedTTL value: 1s ``` - * kubernetes.kubelet进行删除时,不对value与配置文件中的值进行比较。 + + * kubernetes.kubelet进行删除时,不对value与配置文件中的值进行比较。 #### containerd配置 * container.containerd: 配置节点上containerd的配置文件中的参数,参数说明和约束如下: - * containerd需要配置文件为toml格式,所以key为toml中该参数的表头.键名,例如希望修改如下toml示例中```no_shim```为true。 + * containerd需要配置文件为toml格式,所以key为toml中该参数的表头.键名,例如希望修改如下toml示例中```no_shim```为true。 + ```toml [plugins."io.containerd.runtime.v1.linux"] no_shim=false runtime="runc" runtime_root=" ``` + 参数配置示例如下: + ```yaml configs: - model: container.containerd @@ -568,15 +561,17 @@ - key: plugins."io.containerd.runtime.v1.linux".no_shim value: true ``` - * toml使用```.```分割键,os-agent识别时与toml保持一致,所以当键名中包含```.```时,该键名需要使用```""```,例如上例中的```"io.containerd.runtime.v1.linux"```为一个键 - * 如不指定configpath,默认配置文件路径为```/etc/containerd/config.toml```,用户需要保证配置文件路径有效。 - * container.conatainerd配置的key和value均不能为空,value参数类型支持int、float、string、boolean和数组。当为数组时,数组元素允许重复,数组参数进行更新时会追加到已有数组中。如需修改数组中的元素,需要先删除数组,再新增数组来完成修改。 - * container.containerd进行删除时,不对value与配置文件中的值进行比较。 + + * toml使用```.```分割键,os-agent识别时与toml保持一致,所以当键名中包含```.```时,该键名需要使用```""```,例如上例中的```"io.containerd.runtime.v1.linux"```为一个键 + * 如不指定configpath,默认配置文件路径为```/etc/containerd/config.toml```,用户需要保证配置文件路径有效。 + * container.conatainerd配置的key和value均不能为空,value参数类型支持int、float、string、boolean和数组。当为数组时,数组元素允许重复,数组参数进行更新时会追加到已有数组中。如需修改数组中的元素,需要先删除数组,再新增数组来完成修改。 + * container.containerd进行删除时,不对value与配置文件中的值进行比较。 #### Pam Limits配置 * pam.limits:配置节点上/etc/security/limits.conf文件 - * key为domain值,value的格式需要为type.item.value(limits.conf文件要求每行格式为:\ \ \ \),例如: + * key为domain值,value的格式需要为type.item.value(limits.conf文件要求每行格式为:\ \ \ \),例如: + ```yaml configs: - model: pam.limits @@ -584,7 +579,9 @@ - key: ftp value: soft.core.0 ``` - * 更新时,如不需要对type/item/value更新时,可以使用```_```,忽略对此参数的更新,但value必须为点隔的三段式,例如: + + * 更新时,如不需要对type/item/value更新时,可以使用```_```,忽略对此参数的更新,但value必须为点隔的三段式,例如: + ```yaml configs: - model: pam.limits @@ -592,6 +589,7 @@ - key: ftp value: hard._.1 ``` - * pam.limits新增时,value中不允许包含```_``` - * pam.limits删除时,会对value进行校验,当value与配置文件中的值不同时,删除失败 - * pam.limits配置的key和value均不能为空 + + * pam.limits新增时,value中不允许包含```_``` + * pam.limits删除时,会对value进行校验,当value与配置文件中的值不同时,删除失败 + * pam.limits配置的key和value均不能为空 -- Gitee