第 5 章 使用容器化服务
本章提供了一些管理容器的命令示例以及如何对 OpenStack Platform 容器进行故障排除
5.1. 管理容器化服务
Red Hat OpenStack (RHOSP) 平台在 undercloud 和 overcloud 节点上的容器中运行服务。在某些情况下,您可能需要控制主机上的单个服务。本节介绍了可在节点上运行的用于管理容器化服务的一些常见命令。
列出容器和镜像
要列出运行中的容器,请运行以下命令:
$ sudo podman ps
要在命令输出中包括停止的或失败的容器,将 --all
选项添加到命令中:
$ sudo podman ps --all
要列出容器镜像,请运行以下命令:
$ sudo podman images
检查容器属性
要查看容器或容器镜像的属性,请使用 podman inspect
命令。例如,要检查 keystone
容器,请运行以下命令:
$ sudo podman inspect keystone
使用 Systemd 服务管理容器
早期版本的 OpenStack Platform 使用 Docker 及其守护进程管理容器。在 OpenStack Platform 16 中,Systemd 服务接口管理容器的生命周期。每个容器都是一个服务,您运行 Systemd 命令,为每个容器执行特定操作。
不建议使用 Podman CLI 停止、启动和重启容器,因为 Systemd 会应用重启策略。请使用 Systemd 服务命令。
要检查容器状态,请运行 systemctl status
命令:
$ sudo systemctl status tripleo_keystone ● tripleo_keystone.service - keystone container Loaded: loaded (/etc/systemd/system/tripleo_keystone.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2019-02-15 23:53:18 UTC; 2 days ago Main PID: 29012 (podman) CGroup: /system.slice/tripleo_keystone.service └─29012 /usr/bin/podman start -a keystone
要停止容器,请运行 systemctl stop
命令:
$ sudo systemctl stop tripleo_keystone
要启动容器,请运行 systemctl start
命令:
$ sudo systemctl start tripleo_keystone
要重启容器,请运行 systemctl restart
命令:
$ sudo systemctl restart tripleo_keystone
由于没有守护进程监控容器状态,Systemd 在以下情况下自动重启大多数容器:
-
清除退出代码或信号,如运行
podman stop
命令。 - 取消清除退出代码,如启动后的 podman 容器崩溃。
- 取消清除信号。
- 如果容器启动时间超过 1 分 30 秒,则超时。
有关 Systemd 服务的更多信息,请参阅 systemd.service
文档。
在重启容器后,针对其中的服务配置文件所做的所有更改都会恢复。这是因为容器基于 /var/lib/config-data/puppet-generated/
中节点的本地文件系统上的文件重新生成服务配置。例如,如果您编辑了 keystone
容器中的 /etc/keystone/keystone.conf
,并重启了该容器,则该容器会使用节点的本地文件系统上的 /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf
来重新生成配置,以覆盖重启之前在该容器中所做的所有更改。
使用 Systemd 计时器监控 podman 容器
Systemd 计时器接口管理容器运行健康检查。每个容器都有一个计时器,它会运行一个服务单员来执行健康检查脚本。
要列出所有 OpenStack Platform 容器计时器,请运行 systemctl list-timers
命令并将输出限制为包含 tripleo
的行:
$ sudo systemctl list-timers | grep tripleo Mon 2019-02-18 20:18:30 UTC 1s left Mon 2019-02-18 20:17:26 UTC 1min 2s ago tripleo_nova_metadata_healthcheck.timer tripleo_nova_metadata_healthcheck.service Mon 2019-02-18 20:18:33 UTC 4s left Mon 2019-02-18 20:17:03 UTC 1min 25s ago tripleo_mistral_engine_healthcheck.timer tripleo_mistral_engine_healthcheck.service Mon 2019-02-18 20:18:34 UTC 5s left Mon 2019-02-18 20:17:23 UTC 1min 5s ago tripleo_keystone_healthcheck.timer tripleo_keystone_healthcheck.service Mon 2019-02-18 20:18:35 UTC 6s left Mon 2019-02-18 20:17:13 UTC 1min 15s ago tripleo_memcached_healthcheck.timer tripleo_memcached_healthcheck.service (...)
要检查特定容器计时器的状态,请对运行状况检查服务运行 systemctl status
命令:
$ sudo systemctl status tripleo_keystone_healthcheck.service ● tripleo_keystone_healthcheck.service - keystone healthcheck Loaded: loaded (/etc/systemd/system/tripleo_keystone_healthcheck.service; disabled; vendor preset: disabled) Active: inactive (dead) since Mon 2019-02-18 20:22:46 UTC; 22s ago Process: 115581 ExecStart=/usr/bin/podman exec keystone /openstack/healthcheck (code=exited, status=0/SUCCESS) Main PID: 115581 (code=exited, status=0/SUCCESS) Feb 18 20:22:46 undercloud.localdomain systemd[1]: Starting keystone healthcheck... Feb 18 20:22:46 undercloud.localdomain podman[115581]: {"versions": {"values": [{"status": "stable", "updated": "2019-01-22T00:00:00Z", "..."}]}]}} Feb 18 20:22:46 undercloud.localdomain podman[115581]: 300 192.168.24.1:35357 0.012 seconds Feb 18 20:22:46 undercloud.localdomain systemd[1]: Started keystone healthcheck.
要停止、启动、重启和显示容器计时器的状态,请根据 .timer
Systemd 资源运行相关 systemctl
命令。例如,要检查 tripleo_keystone_healthcheck.timer
资源的状态,可运行以下命令:
$ sudo systemctl status tripleo_keystone_healthcheck.timer ● tripleo_keystone_healthcheck.timer - keystone container healthcheck Loaded: loaded (/etc/systemd/system/tripleo_keystone_healthcheck.timer; enabled; vendor preset: disabled) Active: active (waiting) since Fri 2019-02-15 23:53:18 UTC; 2 days ago
如果健康状况检查服务被禁用,但该服务的计时器存在并启用,则意味着检查当前超时,但将根据计时器运行。您还可以手动启动检查。
podman ps
命令不显示容器运行状态。
检查容器日志
OpenStack Platform 16 引入了一个新的日志记录目录 /var/log/containers/stdout
,其中包含所有容器的标准输出 (stdout) 以及每个容器合并到一个文件中的标准错误 (stderr)。
Paunch 和 container-puppet.py
脚本配置 podman 容器以将其输出推送至 /var/log/containers/stdout
目录,这将创建所有日志的集合,甚至是删除的容器,如 container-puppet-*
容器。
主机会对此目录进行日志轮转以防止产生巨大的文件及占用太多磁盘空间的问题。
如果替换了容器,新的容器将输出到同一日志文件中,因为 podman
会使用容器名而非容器 ID。
您也可以使用 podman logs
命令检查容器化服务的日志。例如,要查看 keystone
容器的日志,请运行以下命令:
$ sudo podman logs keystone
访问容器
要进入容器化服务的 shell,请使用 podman exec
命令以启动 /bin/bash
。例如,要进入 keystone
容器的 shell,请运行以下命令:
$ sudo podman exec -it keystone /bin/bash
要以根用户身份进入 keystone
容器的 shell,请运行以下命令:
$ sudo podman exec --user 0 -it <NAME OR ID> /bin/bash
要退出容器,请运行以下命令:
# exit