26.9. 容器配置故障排除

OpenStack Platform director 使用 paunch 启动容器,使用 podman 管理容器,以及使用 puppet 创建容器配置。此步骤显示如何在出错时对容器进行诊断。

访问主机

  1. source stackrc 文件:

    $ source ~/stackrc
  2. 获取包含容器故障的节点的 IP 地址。

    (undercloud) $ openstack server list
  3. 登录该节点:

    (undercloud) $ ssh heat-admin@192.168.24.60
  4. 切换到 root 用户:

    $ sudo -i

识别故障容器

  1. 查看所有容器:

    $ podman ps --all

    识别故障容器。故障容器通常以非零的状态推出。

检查容器日志

  1. 每个容器都会保留其主进程的标准输出内容。使用此输出内容作为日志,帮助确定容器运行过程中实际上发生了什么。例如,要查看 keystone 容器的日志,请运行以下命令:

    $ sudo podman logs keystone

    在大多数情况下,此日志包含有关容器故障原因的信息。

  2. 主机还包含已失败服务的 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

查看容器文件系统

  1. 要查看故障容器的文件系统,请运行 podman mount 命令。例如,要查看出现故障的 keystone 容器的文件系统,请运行以下命令:

    $ 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 归档,以供您提取和研究。