备份和恢复
第 1 章 备份和恢复 MicroShift 数据 复制链接链接已复制到粘贴板!
您可以在所有支持的系统上手动备份和恢复 MicroShift 数据库。对于应用程序数据,您必须创建一个自定义流程。
1.1. 关于备份和恢复 MicroShift 数据 复制链接链接已复制到粘贴板!
在创建手动备份前,greenboot 健康检查必须完成运行,您必须停止 MicroShift 服务。
-
在
rpm-ostree系统上,MicroShift 会在每次启动时自动创建备份。这些自动备份都会被删除,并在每次系统重启时替换为最新的备份。 -
在 greenboot 系统回滚后,在
rpm-ostree系统上自动恢复数据。此数据恢复可确保数据库在回滚完成后与主机上运行的软件匹配。 - 在其他系统类型中,您必须手动备份和恢复数据。
默认情况下,自动备份位于 /var/lib/microshift-backups 目录中。您可以通过在每个命令中指定它,使用此目录手动备份和恢复数据。恢复备份时,必须使用整个文件路径。
以下流程只备份和恢复 MicroShift 数据。应用程序数据没有包括在内。
1.2. 停止 MicroShift 服务 复制链接链接已复制到粘贴板!
使用以下步骤停止 MicroShift 服务。
先决条件
- MicroShift 服务正在运行。
流程
输入以下命令停止 MicroShift 服务:
$ sudo systemctl stop microshiftMicroShift 上部署的工作负载可能会继续运行,即使 MicroShift 服务已停止。输入以下命令显示正在运行的工作负载:
$ sudo crictl ps -a输入以下命令停止部署的工作负载:
$ sudo systemctl stop kubepods.slice
1.3. 手动备份 MicroShift 数据 复制链接链接已复制到粘贴板!
您可以随时手动备份 MicroShift 数据。在系统更新前备份您的数据,以便在更新失败或出现其他系统问题时保留其使用。您可以通过在每个命令中指定 /var/lib/microshift-backups 来手动备份和恢复数据。在创建备份时,必须使用整个文件路径作为输出文件。
先决条件
- 有到主机的 root 访问权限。
- MicroShift 已停止。
流程
运行以下命令,使用父目录并指定名称(如
/var/lib/microshift-backups/ <manual_backup> )来手动创建备份:$ 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"可选:通过运行以下命令,使用自定义名称在特定父目录中手动创建备份:
$ 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> / <another_manual_backup>。
1.4. 手动恢复 MicroShift 数据备份 复制链接链接已复制到粘贴板!
您可以手动从备份中恢复 MicroShift 数据。备份可以在更新后恢复,或者在删除或损坏所需数据的其他系统事件后恢复。恢复备份时,必须使用整个文件路径。
在 rpm-ostree 系统中,MicroShift 会自动备份和恢复数据。默认情况下,自动备份位于 /var/lib/microshift-backups 目录中。
先决条件
- 对主机的 root 访问权限。
- 您有数据备份文件的完整路径。
- MicroShift 服务已停止。
流程
运行以下命令,使用您要恢复的备份的完整路径手动恢复 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"可选。使用备份的完整路径从自定义目录中手动恢复数据。运行以下命令:
$ sudo microshift restore /mnt/<other_backups_location>/<another_manual_backup>1 - 1
- 将
<other_backups_location> 替换为您使用的目录,<my_manual_backup> 替换为您在创建备份时所用的备份名称。
- 重启主机。重启主机可让所有工作负载和 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 选项与 backup 和 restore 命令一起使用。
-
例如,如果您在
恢复时使用自动恢复选项,如microshift restore --auto-recovery PATH,运行修改后的命令会自动选择并恢复最新的备份。 -
如果您在 microshift backup 命令中使用相同的选项,如
,则会在 PATH 中创建新的备份。microshift backup--auto-recovery PATH -
默认情况下,
microshift restore --auto-recovery PATH在PATH/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。
流程
运行以下命令,从备份目录中恢复最新的备份:
$ 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 不监控任何文件系统的磁盘空间。您必须确保自动化处理旧的备份被删除。例如,您可以将此过程添加到自动恢复服务中,或者添加定期运行的其他服务。
运行以下命令重启 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 系统自动执行自动恢复过程。
流程
运行以下命令,为
microshiftsystemd 服务创建一个目录:$ sudo mkdir -p /usr/lib/systemd/system/microshift.service.d当
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=25s1 EOF- 1
- 将
StartLimitInterval值从默认值10增加到较慢的系统的值。一个太低的值可能会导致 systemd 不会将microshiftsystemd 服务标记为失败,这意味着OnFailure=服务不会被触发。
运行以下命令来创建
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运行以下命令来创建
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运行以下命令使脚本可执行:
$ sudo chmod +x /usr/bin/microshift-auto-recovery运行以下命令来重新载入系统配置:
$ 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工具。
流程
-
可选: 因为
composer-cli只能在/etc目录中创建文件,请将您的文件打包到包含蓝图的 RPM 中。 使用以下示例创建蓝图文件:
[[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" """- 有关后续步骤,请参阅准备镜像构建。
2.3.3. 在 RHEL 系统的镜像模式中使用自动恢复 复制链接链接已复制到粘贴板!
作为用例,请考虑以下示例情况,其中您要为使用 systemd 服务的 Red Hat Enterprise Linux (RHEL)系统自动恢复镜像模式。
您必须在容器文件中包含使用 systemd 的 RHEL 系统的整个 自动恢复过程。
先决条件
- 按照 构建 bootc 镜像 中的指示创建了 Containerfile。
您创建了
10-auto-recovery.conf和microshift-auto-recovery.service文件,如"使用 RPM 系统自动恢复"部分中所述。重要10-auto-recovery.conf和microshift-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 系统自动恢复"部分中所述。
流程
使用以下示例片断更新用于为 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 使用容器内的主机订阅信息和存储库。如果主机上没有
rhocp和fast-datapath存储库,则构建会失败。运行以下 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.ioregistry 中拉取基础rhel-bootc:9.4镜像。 -
build
USER_PASSWD参数用于为redhat 用户设置密码。
-
需要 podman--
验证
运行以下命令验证本地 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