28.9. 容器配置故障排除
Red Hat OpenStack Platform director 使用 paunch 启动容器,使用 podman 管理容器,以及使用 puppet 创建容器配置。此步骤显示如何在出错时对容器进行诊断。
访问主机
Source
stackrc文件:source ~/stackrc
$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取包含容器故障的节点的 IP 地址。
(undercloud) $ openstack server list
(undercloud) $ openstack server listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 登录该节点:
(undercloud) $ ssh heat-admin@192.168.24.60
(undercloud) $ ssh heat-admin@192.168.24.60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到 root 用户:
sudo -i
$ sudo -iCopy to Clipboard Copied! Toggle word wrap Toggle overflow
识别故障容器
查看所有容器:
podman ps --all
$ podman ps --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 识别故障容器。故障容器通常以非零的状态推出。
检查容器日志
每个容器都会保留其主进程的标准输出内容。使用此输出内容作为日志,帮助确定容器运行过程中实际上发生了什么。例如,要查看
keystone容器的日志,请运行以下命令:sudo podman logs keystone
$ sudo podman logs keystoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在大多数情况下,此日志包含有关容器故障原因的信息。
主机还包含已失败服务的
stdout日志。可在/var/log/containers/stdouts/中查找stdout日志。例如,要查看出现故障的keystone容器的日志,请运行以下命令:cat /var/log/containers/stdouts/keystone.log
$ cat /var/log/containers/stdouts/keystone.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
检查容器
在某些情况下,您可能需要验证容器的相关信息。例如,请使用以下命令来查看 keystone 容器的相关数据:
sudo podman inspect keystone
$ sudo podman inspect keystone
此命令返回一个包含低级配置数据的 JSON 对象。您可以通过管道将这些输出内容传递给 jq 命令,以对特定数据进行解析。例如,要查看 keystone 容器的加载情况,请运行以下命令:
sudo podman inspect keystone | jq .[0].Mounts
$ sudo podman inspect keystone | jq .[0].Mounts
您还可以使用 --format 选项将数据解析到一行中,这在针对一组容器数据运行命令时非常有用。例如,要重建用于运行 keystone 容器的选项,请使用包含 --format 选项的以下 inspect 命令:
sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}:{{ join .Options "," }}{{end}} -ti {{.Config.Image}}' keystone
$ sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}:{{ join .Options "," }}{{end}} -ti {{.Config.Image}}' keystone
--format 选项会按照 Go 语法来创建查询。
将这些选项和 podman run 命令一起使用以重新创建容器用于故障排除目的:
OPTIONS=$( sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}{{if .Mode}}:{{.Mode}}{{end}}{{end}} -ti {{.Config.Image}}' keystone )
sudo podman run --rm $OPTIONS /bin/bash
$ OPTIONS=$( sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}{{if .Mode}}:{{.Mode}}{{end}}{{end}} -ti {{.Config.Image}}' keystone )
$ sudo podman run --rm $OPTIONS /bin/bash
在容器内运行命令
在某些情况下,您可能需要通过特定的 Bash 命令从容器中获取信息。在此情况下,使用以下 podman 命令以在运行中容器内执行命令。例如,运行 podman exec 命令以在 keystone 容器内运行命令:
sudo podman exec -ti keystone <COMMAND>
$ sudo podman exec -ti keystone <COMMAND>
-ti 选项会通过交互式伪终端来运行命令。
-
用您要运行的命令替换
<COMMAND>。例如,每个容器都有一个健康检查脚本,用于验证服务的连接状况。您可以使用以下命令为keystone运行这个健康检查脚本:
sudo podman exec -ti keystone /openstack/healthcheck
$ sudo podman exec -ti keystone /openstack/healthcheck
要访问容器的 shell,请运行 podman exec,并将 /bin/bash 用作您要在容器内运行的命令:
sudo podman exec -ti keystone /bin/bash
$ sudo podman exec -ti keystone /bin/bash
查看容器文件系统
要查看故障容器的文件系统,请运行
podman mount命令。例如,要查看出现故障的keystone容器的文件系统,请运行以下命令:podman mount keystone
$ podman mount keystoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这会提供一个挂载位置,用于查看文件系统内容:
/var/lib/containers/storage/overlay/78946a109085aeb8b3a350fc20bd8049a08918d74f573396d7358270e711c610/merged
/var/lib/containers/storage/overlay/78946a109085aeb8b3a350fc20bd8049a08918d74f573396d7358270e711c610/mergedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这对于查看容器内的 Puppet 报告很有用。您可以在容器挂载内的
var/lib/puppet/目录中查找这些报告。
导出容器
当容器出现故障时,您可能需要调查文件中包含的所有内容。在这种情况下,您可以将容器的整个文件系统导出为 tar 归档。例如,要导出 keystone 容器的文件系统,请运行以下命令:
sudo podman export keystone -o keystone.tar
$ sudo podman export keystone -o keystone.tar
这个命令会创建 keystone.tar 归档,以供您提取和研究。