第 12 章 执行基本 overcloud 管理任务

本章介绍在 overcloud 生命周期过程中可能需要执行的基本任务。

12.1. 管理容器化服务

OpenStack 平台在 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 15 中,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 15 引入了一个新的日志记录目录:/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