备份和恢复


Red Hat build of MicroShift 4.20

备份和恢复 MicroShift 数据库的红帽构建

Red Hat OpenShift Documentation Team

摘要

了解如何备份和恢复 MicroShift 数据库的红帽构建。

第 1 章 备份和恢复 MicroShift 数据

您可以在所有支持的系统上手动备份和恢复 MicroShift 数据库。对于应用程序数据,您必须创建一个自定义流程。

1.1. 关于备份和恢复 MicroShift 数据

在创建手动备份前,greenboot 健康检查必须完成运行,您必须停止 MicroShift 服务。

  • rpm-ostree 系统上,MicroShift 会在每次启动时自动创建备份。这些自动备份都会被删除,并在每次系统重启时替换为最新的备份。
  • 在 greenboot 系统回滚后,在 rpm-ostree 系统上自动恢复数据。此数据恢复可确保数据库在回滚完成后与主机上运行的软件匹配。
  • 在其他系统类型中,您必须手动备份和恢复数据。

默认情况下,自动备份位于 /var/lib/microshift-backups 目录中。您可以通过在每个命令中指定它,使用此目录手动备份和恢复数据。恢复备份时,必须使用整个文件路径。

注意

以下流程只备份和恢复 MicroShift 数据。应用程序数据没有包括在内。

1.2. 停止 MicroShift 服务

使用以下步骤停止 MicroShift 服务。

先决条件

  • MicroShift 服务正在运行。

流程

  1. 输入以下命令停止 MicroShift 服务:

    $ sudo systemctl stop microshift
  2. MicroShift 上部署的工作负载可能会继续运行,即使 MicroShift 服务已停止。输入以下命令显示正在运行的工作负载:

    $ sudo crictl ps -a
  3. 输入以下命令停止部署的工作负载:

    $ sudo systemctl stop kubepods.slice

1.3. 手动备份 MicroShift 数据

您可以随时手动备份 MicroShift 数据。在系统更新前备份您的数据,以便在更新失败或出现其他系统问题时保留其使用。您可以通过在每个命令中指定 /var/lib/microshift-backups 来手动备份和恢复数据。在创建备份时,必须使用整个文件路径作为输出文件。

先决条件

  • 有到主机的 root 访问权限。
  • MicroShift 已停止。

流程

  1. 运行以下命令,使用父目录并指定名称(如 /var/lib/microshift-backups/ <manual_backup& gt; )来手动创建备份:

    $ sudo microshift backup /var/lib/microshift-backups/<manual_backup> 
    1
    1
    <manual_backup > 替换为您要使用的备份名称。

    输出示例

    ??? I1017 07:38:16.770506    5900 data_manager.go:92] "Copying data to backup directory" storage="/var/lib/microshift-backups" name="test" data="/var/lib/microshift"
    ??? I1017 07:38:16.770713    5900 data_manager.go:227] "Starting copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift /var/lib/microshift-backups/test"
    ??? I1017 07:38:16.776162    5900 data_manager.go:241] "Finished copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift /var/lib/microshift-backups/test"
    ??? I1017 07:38:16.776256    5900 data_manager.go:125] "Copied data to backup directory" backup="/var/lib/microshift-backups/test" data="/var/lib/microshift"

  2. 可选:通过运行以下命令,使用自定义名称在特定父目录中手动创建备份:

    $ sudo microshift backup /mnt/<other_backups_location>/<another_manual_backup>

    <other_backups_location > 替换为您要使用的目录,将 < my_manual_backup > 替换为您要使用的备份名称。

验证

  • 您可以通过查看您选择的目录中的数据来验证备份是否存在。例如: /var/lib/microshift-backups/ <manual_backup> / 或 / mnt/ <other_backups_location> / &lt;another_manual_backup>

1.4. 手动恢复 MicroShift 数据备份

您可以手动从备份中恢复 MicroShift 数据。备份可以在更新后恢复,或者在删除或损坏所需数据的其他系统事件后恢复。恢复备份时,必须使用整个文件路径。

注意

rpm-ostree 系统中,MicroShift 会自动备份和恢复数据。默认情况下,自动备份位于 /var/lib/microshift-backups 目录中。

先决条件

  • 对主机的 root 访问权限。
  • 您有数据备份文件的完整路径。
  • MicroShift 服务已停止。

流程

  1. 运行以下命令,使用您要恢复的备份的完整路径手动恢复 MicroShift 数据:

    $ sudo microshift restore /var/lib/microshift-backups/<manual_backup> 
    1
    1
    <manual_backup > 替换为您使用的备份名称。可选: 您还可以使用完整文件路径恢复自动 ostree 备份。

    输出示例

    ??? I1017 07:39:52.055165    6007 data_manager.go:131] "Copying backup to data directory" storage="/var/lib/microshift-backups" name="test" data="/var/lib/microshift"
    ??? I1017 07:39:52.055243    6007 data_manager.go:154] "Renaming existing data dir" data="/var/lib/microshift" renamedTo="/var/lib/microshift.saved"
    ??? I1017 07:39:52.055326    6007 data_manager.go:227] "Starting copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift-backups/test /var/lib/microshift"
    ??? I1017 07:39:52.061363    6007 data_manager.go:241] "Finished copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift-backups/test /var/lib/microshift"
    ??? I1017 07:39:52.061404    6007 data_manager.go:175] "Removing temporary data directory" path="/var/lib/microshift.saved"
    ??? I1017 07:39:52.063745    6007 data_manager.go:180] "Copied backup to data directory" name="test" data="/var/lib/microshift"

  2. 可选。使用备份的完整路径从自定义目录中手动恢复数据。运行以下命令:

    $ sudo microshift restore /mnt/<other_backups_location>/<another_manual_backup> 
    1
    1
    <other_backups_location > 替换为您使用的目录,< my_manual_backup > 替换为您在创建备份时所用的备份名称。
  3. 重启主机。重启主机可让所有工作负载和 pod 重启。

验证

  • 使用 oc get pods -A 命令来验证节点是否正在运行,然后检查恢复的数据。

    $ oc get pods -A

    输出示例

    NAMESPACE                   NAME                                                     READY   STATUS   RESTARTS  AGE
    default                     i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr  1/1     Running  0		    46m
    kube-system                 csi-snapshot-controller-5c6586d546-lprv4                 1/1     Running  0		    51m
    openshift-dns               dns-default-45jl7                                        2/2     Running  0		    50m
    openshift-dns               node-resolver-7wmzf                                      1/1     Running  0		    51m
    openshift-ingress           router-default-78b86fbf9d-qvj9s                          1/1     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-master-5rfhh                                     4/4     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-node-gcnt6                                       1/1     Running  0		    51m
    openshift-service-ca        service-ca-bf5b7c9f8-pn6rk                               1/1     Running  0		    51m
    openshift-storage           topolvm-controller-549f7fbdd5-7vrmv                      5/5     Running  0		    51m
    openshift-storage           topolvm-node-rht2m                                       3/3     Running  0		    50m

    注意

    这个示例输出显示基本的 MicroShift 安装。如果安装了可选的 RPM,则输出中也会期望运行这些服务的 pod 的状态。

第 2 章 从手动备份进行自动恢复

当 MicroShift 无法启动时,您可以通过配置自动恢复功能,自动从手动备份中恢复数据。

2.1. 修改备份和恢复命令以自动化数据恢复

使用自动恢复选项将所有备份存储在单个目录中,然后自动选择要恢复的备份。修改现有的 备份和恢复 命令可让您设置自动恢复。

--auto-recovery 选项将 PATH 参数视为一个路径,该目录包含用于自动恢复的所有备份,而不只是作为特定备份文件的路径。您可以将 --auto-recovery 选项与 backuprestore 命令一起使用。

  • 例如,如果您在 恢复时 使用自动恢复选项,如 microshift restore --auto-recovery PATH,运行修改后的命令会自动选择并恢复最新的备份。
  • 如果您在 microshift backup 命令中使用相同的选项,如 microshift backup --auto-recovery PATH,则会在 PATH 中创建新的备份。
  • 默认情况下,microshift restore --auto-recovery PATHPATH/failed 中创建一个失败 MicroShift 数据的备份。您可以添加 the -dont-save-failed 选项来禁用创建失败的备份数据。
重要

您只能在 restore 命令中使用 the -dont-save-failed 选项。

2.2. 使用自动恢复功能创建备份

使用以下步骤使用自动恢复选项创建备份。

注意

创建备份需要停止 MicroShift。您必须决定在停止 MicroShift 的最佳时间。

先决条件

  • 您停止了 MicroShift。

流程

  • 运行以下命令,在您选择的目录中创建并存储备份:

    $ sudo microshift backup --auto-recovery <path_of_directory> 
    1
    1
    <path_of_directory > 替换为存储备份的目录的路径。例如: /var/lib/microshift-auto-recovery
    注意

    --auto-recovery 选项修改 PATH 参数从最终备份路径到包含自动恢复所有备份的目录的解释。

    输出示例

    ??? I1104 09:18:52.100725    8906 system.go:58] "OSTree deployments" deployments=[{"id":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1","booted":true,"staged":false,"pinned":false},{"id":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","booted":false,"staged":false,"pinned":false}]
    ??? I1104 09:18:52.100895    8906 data_manager.go:83] "Copying data to backup directory" storage="/var/lib/microshift-auto-recovery" name="20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1" data="/var/lib/microshift"
    ??? I1104 09:18:52.102296    8906 disk_space.go:33] Calculated size of "/var/lib/microshift": 261M - increasing by 10% for safety: 287M
    ??? I1104 09:18:52.102321    8906 disk_space.go:44] Calculated available disk space for "/var/lib/microshift-auto-recovery": 1658M
    ??? I1104 09:18:52.105700    8906 atomic_dir_copy.go:66] "Made an intermediate copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift /var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1.tmp.99142"
    ??? I1104 09:18:52.105732    8906 atomic_dir_copy.go:115] "Renamed to final destination" src="/var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1.tmp.99142" dest="/var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"
    ??? I1104 09:18:52.105749    8906 data_manager.go:120] "Copied data to backup directory" backup="/var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1" data="/var/lib/microshift"
    /var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1

验证

  • 运行以下命令,验证您在自定义存储目录中创建的备份是否存在:

    $ sudo ls -la <path_of_directory> 
    1
    1
    <path_of_directory > 替换为存储备份的目录的路径。例如: /var/lib/microshift-auto-recovery

2.3. 使用自动恢复功能恢复备份

您可以在删除或损坏所需数据的系统事件后恢复备份。使用以下步骤使用自动恢复恢复备份。自动恢复会选择最新的备份并恢复它。以前,使用自动恢复的备份会移到 PATH/restored 目录中。

先决条件

  • 您已停止了 MicroShift。

流程

  1. 运行以下命令,从备份目录中恢复最新的备份:

    $ sudo microshift restore --auto-recovery <path_of_directory> 
    1
    1
    <path_of_directory > 替换为存储备份的目录的路径。例如: /var/lib/microshift-auto-recovery
    注意
    • --auto-recovery 选项将 MicroShift 数据复制到 /var/lib/microshift-auto-recovery/failed/ failed/ 以供稍后的调查,选择最新的备份并恢复它。
    • --dont-save-failed 选项禁用对失败的 MicroShift 数据的备份。

    输出示例

    ??? I1104 09:19:28.617225    8950 state.go:80] "Read state from the disk" state={"LastBackup":"20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"}
    ??? I1104 09:19:28.617323    8950 storage.go:78] "Auto-recovery backup storage read and parsed" dirs=["20241022101255_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","20241022101520_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1","restored"] backups=[{"CreationTime":"2024-10-22T10:12:55Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-10-22T10:15:20Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-10-22T10:15:28Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.617350    8950 storage.go:40] "Filtered list of backups - removed previously restored backup" removed="20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0" newList=[{"CreationTime":"2024-10-22T10:12:55Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-10-22T10:15:20Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.633237    8950 system.go:58] "OSTree deployments" deployments=[{"id":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1","booted":true,"staged":false,"pinned":false},{"id":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","booted":false,"staged":false,"pinned":false}]
    ??? I1104 09:19:28.633258    8950 storage.go:49] "Filtered list of backups by version" version="default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1" newList=[{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.633268    8950 restore.go:170] "Potential backups" bz=[{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.633277    8950 restore.go:173] "Candidate backup for restore" b={"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}
    ??? I1104 09:19:28.634007    8950 disk_space.go:33] Calculated size of "/var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1": 261M - increasing by 10% for safety: 287M
    ??? I1104 09:19:28.634096    8950 disk_space.go:44] Calculated available disk space for "/var/lib": 1658M
    ??? I1104 09:19:28.634507    8950 disk_space.go:33] Calculated size of "/var/lib/microshift": 261M - increasing by 10% for safety: 287M
    ??? I1104 09:19:28.634522    8950 disk_space.go:44] Calculated available disk space for "/var/lib/microshift-auto-recovery": 1658M
    ??? I1104 09:19:28.649719    8950 system.go:58] "OSTree deployments" deployments=[{"id":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1","booted":true,"staged":false,"pinned":false},{"id":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","booted":false,"staged":false,"pinned":false}]
    ??? I1104 09:19:28.653880    8950 atomic_dir_copy.go:66] "Made an intermediate copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift /var/lib/microshift-auto-recovery/failed/20241104091928_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1.tmp.22742"
    ??? I1104 09:19:28.657362    8950 atomic_dir_copy.go:66] "Made an intermediate copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1 /var/lib/microshift.tmp.482"
    ??? I1104 09:19:28.657385    8950 state.go:40] "Saving intermediate state" state="{\"LastBackup\":\"20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1\"}" path="/var/lib/microshift-auto-recovery/state.json.tmp.41544"
    ??? I1104 09:19:28.662438    8950 atomic_dir_copy.go:115] "Renamed to final destination" src="/var/lib/microshift.tmp.482" dest="/var/lib/microshift"
    ??? I1104 09:19:28.662451    8950 state.go:46] "Moving state file to final path" intermediatePath="/var/lib/microshift-auto-recovery/state.json.tmp.41544" finalPath="/var/lib/microshift-auto-recovery/state.json"
    ??? I1104 09:19:28.662521    8950 atomic_dir_copy.go:115] "Renamed to final destination" src="/var/lib/microshift-auto-recovery/failed/20241104091928_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1.tmp.22742" dest="/var/lib/microshift-auto-recovery/failed/20241104091928_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"
    ??? I1104 09:19:28.662969    8950 atomic_dir_copy.go:115] "Renamed to final destination" src="/var/lib/microshift-auto-recovery/20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0" dest="/var/lib/microshift-auto-recovery/restored/20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"
    ??? I1104 09:19:28.662983    8950 restore.go:141] "Auto-recovery restore completed".

    重要
    • 恢复后,restore 命令不会重启 MicroShift。执行此命令时,MicroShift 服务已经失败,或者您停止了它。
    • MicroShift 不监控任何文件系统的磁盘空间。您必须确保自动化处理旧的备份被删除。例如,您可以将此过程添加到自动恢复服务中,或者添加定期运行的其他服务。
  2. 运行以下命令重启 MicroShift:

    $ sudo systemctl restart microshift

验证

  • 运行以下命令验证 MicroShift 是否已成功启动:

    $ oc get pods -A

    输出示例

    NAMESPACE                   NAME                                                     READY   STATUS   RESTARTS  AGE
    default                     i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr  1/1     Running  0		    46m
    kube-system                 csi-snapshot-controller-5c6586d546-lprv4                 1/1     Running  0		    51m
    openshift-dns               dns-default-45jl7                                        2/2     Running  0		    50m
    openshift-dns               node-resolver-7wmzf                                      1/1     Running  0		    51m
    openshift-ingress           router-default-78b86fbf9d-qvj9s                          1/1     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-master-5rfhh                                     4/4     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-node-gcnt6                                       1/1     Running  0		    51m
    openshift-service-ca        service-ca-bf5b7c9f8-pn6rk                               1/1     Running  0		    51m
    openshift-storage           topolvm-controller-549f7fbdd5-7vrmv                      5/5     Running  0		    51m
    openshift-storage           topolvm-node-rht2m                                       3/3     Running  0		    50m

    注意

    这个示例输出显示基本的 MicroShift 安装。如果安装了可选的 RPM,则输出中也会期望运行这些服务的 pod 的状态。

2.3.1. 在 RPM 系统中使用自动恢复

当 MicroShift 进入失败状态时,systemd 服务将启动 microshift-auto-recovery.service 单元。这个单元 执行自动恢复恢复过程

作为用例,请考虑以下示例情况,其中您要为使用 systemd 服务的 RPM 系统自动执行自动恢复过程。

流程

  1. 运行以下命令,为 microshift systemd 服务创建一个目录:

    $ sudo mkdir -p /usr/lib/systemd/system/microshift.service.d
  2. microshift.service 失败时,指示 systemd 运行 microshift-auto-recovery.service,请运行以下命令来创建 10-auto-recovery.conf 文件:

    $ sudo tee /usr/lib/systemd/system/microshift.service.d/10-auto-recovery.conf > /dev/null <<'EOF'
    [Unit]
    OnFailure=microshift-auto-recovery.service
    StartLimitIntervalSec=25s 
    1
    
    EOF
    1
    StartLimitInterval 值从默认值 10 增加到较慢的系统的值。一个太低的值可能会导致 systemd 不会将 microshift systemd 服务标记为失败,这意味着 OnFailure= 服务不会被触发。
  3. 运行以下命令来创建 microshift-auto-recovery.service 文件:

    $ sudo tee /usr/lib/systemd/system/microshift-auto-recovery.service > /dev/null <<'EOF'
    [Unit]
    Description=MicroShift auto-recovery
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/microshift-auto-recovery
    
    [Install]
    WantedBy=multi-user.target
    EOF
  4. 运行以下命令来创建 microshift-auto-recovery 脚本:

    $ sudo tee /usr/bin/microshift-auto-recovery > /dev/null <<'EOF'
    #!/usr/bin/env bash
    set -xeuo pipefail
    
    # If greenboot uses a non-default file for clearing boot_counter, use boot_success instead.
    if grep -q  "/boot/grubenv" /usr/libexec/greenboot/greenboot-grub2-set-success; then
        if grub2-editenv - list | grep -q ^boot_success=0; then
            echo "Greenboot didn't decide the system is healthy after staging new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    else
        if grub2-editenv - list | grep -q ^boot_counter=; then
            echo "Greenboot didn't decide the system is healthy after staging a new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    fi
    
    /usr/bin/microshift restore --auto-recovery /var/lib/microshift-auto-recovery
    /usr/bin/systemctl reset-failed microshift
    /usr/bin/systemctl start microshift
    
    echo "DONE"
    EOF
  5. 运行以下命令使脚本可执行:

    $ sudo chmod +x /usr/bin/microshift-auto-recovery
  6. 运行以下命令来重新载入系统配置:

    $ sudo systemctl daemon-reload

2.3.2. 在 RHEL for Edge 中使用自动恢复

作为用例,请考虑以下示例情况,其中您要自动为在蓝图文件中使用 systemd 的 Red Hat Enterprise Linux for Edge (RHEL for Edge)系统 自动恢复过程

重要

您必须在蓝图文件中包含使用 systemd 的 RHEL for Edge 系统的完整自动 恢复过程

先决条件

  • 已安装 Podman。
  • 已安装命令行 composer-cli 工具。

流程

  1. 可选: 因为 composer-cli 只能在 /etc 目录中创建文件,请将您的文件打包到包含蓝图的 RPM 中。
  2. 使用以下示例创建蓝图文件:

    [[customizations.directories]]
    path = "/etc/systemd/system/microshift.service.d"
    
    [[customizations.directories]]
    path = "/etc/bin"
    
    [[customizations.files]]
    path = "/etc/systemd/system/microshift.service.d/10-auto-recovery.conf"
    data = """
    [Unit]
    OnFailure=microshift-auto-recovery.service
    """
    
    [[customizations.files]]
    path = "/etc/systemd/system/microshift-auto-recovery.service"
    data = """
    [Unit]
    Description=MicroShift auto-recovery
    [Service]
    Type=oneshot
    ExecStart=/etc/bin/microshift-auto-recovery
    [Install]
    WantedBy=multi-user.target
    """
    
    [[customizations.files]]
    path = "/etc/bin/microshift-auto-recovery"
    mode = "0755"
    data = """
    #!/usr/bin/env bash
    set -xeuo pipefail
    # If greenboot uses a non-default file for clearing boot_counter, use boot_success instead.
    if grep -q  "/boot/grubenv" /usr/libexec/greenboot/greenboot-grub2-set-success; then
        if grub2-editenv - list | grep -q ^boot_success=0; then
            echo "Greenboot didn't decide the system is healthy after staging a new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    else
        if grub2-editenv - list | grep -q ^boot_counter=; then
            echo "Greenboot didn't decide the system is healthy after staging a new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    fi
    /usr/bin/microshift restore --auto-recovery /var/lib/microshift-auto-recovery
    /usr/bin/systemctl reset-failed microshift
    /usr/bin/systemctl start microshift
    echo "DONE"
    """
  3. 有关后续步骤,请参阅准备镜像构建

2.3.3. 在 RHEL 系统的镜像模式中使用自动恢复

作为用例,请考虑以下示例情况,其中您要为使用 systemd 服务的 Red Hat Enterprise Linux (RHEL)系统自动恢复镜像模式。

重要

您必须在容器文件中包含使用 systemd 的 RHEL 系统的整个 自动恢复过程

先决条件

  • 按照 构建 bootc 镜像 中的指示创建了 Containerfile。
  • 您创建了 10-auto-recovery.confmicroshift-auto-recovery.service 文件,如"使用 RPM 系统自动恢复"部分中所述。

    重要

    10-auto-recovery.confmicroshift-auto-recovery.service 的位置必须相对于 Containerfile。

    例如,如果 Containerfile 的路径是 /home/microshift/my-build/Containerfile,则 systemd 文件需要被相邻才能正确嵌入。以下示例中以下路径正确:

    • /home/microshift/my-build/auto-rec/10-auto-recovery.conf
    • /home/microshift/my-build/auto-rec/microshift-auto-recovery.service
    • /home/microshift/my-build/auto-rec/microshift-auto-recovery
  • 您创建了 microshift-auto-recovery 脚本,如"使用 RPM 系统自动恢复"部分中所述。

流程

  1. 使用以下示例片断更新用于为 RHEL 镜像准备镜像模式的容器文件。

    RUN mkdir -p /usr/lib/systemd/system/microshift.service.d
    COPY ./auto-rec/10-auto-recovery.conf /usr/lib/systemd/system/microshift.service.d/10-auto-recovery.conf
    COPY ./auto-rec/microshift-auto-recovery.service /usr/lib/systemd/system/
    COPY ./auto-rec/microshift-auto-recovery /usr/bin/
    RUN chmod +x /usr/bin/microshift-auto-recovery
    重要

    在构建容器镜像时,Podman 使用容器内的主机订阅信息和存储库。如果主机上没有 rhocpfast-datapath 存储库,则构建会失败。

  2. 运行以下 image build 命令重建本地 bootc 镜像:

    PULL_SECRET=~/.pull-secret.json
    USER_PASSWD=<your_redhat_user_password>
    IMAGE_NAME=microshift-4.18-bootc
    
    sudo podman build --authfile "${PULL_SECRET}" -t "${IMAGE_NAME}" \
        --build-arg USER_PASSWD="${USER_PASSWD}" \
        -f Containerfile
    注意

    secret 以以下方式在镜像构建过程中使用:

    • 需要 podman-- authfile 参数从 registry.redhat.io registry 中拉取基础 rhel-bootc:9.4 镜像。
    • build USER_PASSWD 参数用于为 redhat 用户设置密码

验证

  • 运行以下命令验证本地 bootc 镜像是否已创建:

    $ sudo podman images "${IMAGE_NAME}"

    输出示例

    REPOSITORY                       TAG         IMAGE ID      CREATED        SIZE
    localhost/microshift-4.18-bootc  latest      193425283c00  2 minutes ago  2.31 GB

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部