28.7. 容器配置故障排除
Red Hat OpenStack Platform director 使用 podman
管理容器和 puppet
来创建容器配置。此步骤显示如何在出错时对容器进行诊断。
访问主机
Source
stackrc
文件:$ source ~/stackrc
获取包含容器故障的节点的 IP 地址。
(undercloud) $ metalsmith list
登录该节点:
(undercloud) $ ssh tripleo-admin@192.168.24.60
识别故障容器
查看所有容器:
$ sudo podman ps --all
识别故障容器。故障容器通常以非零的状态推出。
检查容器日志
每个容器都会保留其主进程的标准输出内容。使用此输出内容作为日志,帮助确定容器运行过程中实际上发生了什么。例如,要查看
keystone
容器的日志,请运行以下命令:$ sudo podman logs keystone
在大多数情况下,此日志包含有关容器故障原因的信息。
主机还包含已失败服务的
stdout
日志。可在/var/log/containers/stdouts/
中查找stdout
日志。例如,要查看出现故障的keystone
容器的日志,请运行以下命令:$ cat /var/log/containers/stdouts/keystone.log
检查容器
在某些情况下,您可能需要验证容器的相关信息。例如,请使用以下命令来查看 keystone
容器的相关数据:
$ sudo podman inspect keystone
此命令返回一个包含低级配置数据的 JSON 对象。您可以通过管道将这些输出内容传递给 jq
命令,以对特定数据进行解析。例如,要查看 keystone
容器的加载情况,请运行以下命令:
$ 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
--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
在容器内运行命令
在某些情况下,您可能需要通过特定的 Bash 命令从容器中获取信息。在此情况下,使用以下 podman
命令以在运行中容器内执行命令。例如,运行 podman exec
命令以在 keystone
容器内运行命令:
$ sudo podman exec -ti keystone <COMMAND>
-ti
选项会通过交互式伪终端来运行命令。
-
用您要运行的命令替换
<COMMAND>
。例如,每个容器都有一个健康检查脚本,用于验证服务的连接状况。您可以使用以下命令为keystone
运行这个健康检查脚本:
$ sudo podman exec -ti keystone /openstack/healthcheck
要访问容器的 shell,请运行 podman exec
,并将 /bin/bash
用作您要在容器内运行的命令:
$ sudo podman exec -ti keystone /bin/bash
查看容器文件系统
要查看故障容器的文件系统,请运行
podman mount
命令。例如,要查看出现故障的keystone
容器的文件系统,请运行以下命令:$ sudo podman mount keystone
这会提供一个挂载位置,用于查看文件系统内容:
/var/lib/containers/storage/overlay/78946a109085aeb8b3a350fc20bd8049a08918d74f573396d7358270e711c610/merged
这对于查看容器内的 Puppet 报告很有用。您可以在容器挂载内的
var/lib/puppet/
目录中查找这些报告。
导出容器
当容器出现故障时,您可能需要调查文件中包含的所有内容。在这种情况下,您可以将容器的整个文件系统导出为 tar
归档。例如,要导出 keystone
容器的文件系统,请运行以下命令:
$ sudo podman export keystone -o keystone.tar
这个命令会创建 keystone.tar
归档,以供您提取和研究。