Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

40.5.2. 通过 Docker CLI 运行健康检查

您可以在容器中运行 openshift-ansible playbook,以避免在可通过 Docker CLI 运行 ose-ansible 镜像的任何主机上运行 ose-ansible 镜像。

作为具有运行容器权限的非 root 用户运行以下命令:

# docker run -u `id -u` \ 1
    -v $HOME/.ssh/id_rsa:/opt/app-root/src/.ssh/id_rsa:Z,ro \ 2
    -v /etc/ansible/hosts:/tmp/inventory:ro \ 3
    -e INVENTORY_FILE=/tmp/inventory \
    -e PLAYBOOK_FILE=playbooks/openshift-checks/health.yml \ 4
    -e OPTS="-v -e openshift_check_logging_index_timeout_seconds=45 -e etcd_max_image_data_size_bytes=40000000000" \ 5
    openshift3/ose-ansible
1
这些选项使容器使用与当前用户相同的 UID 运行,权限是必需的,以便可以在容器中读取 SSH 密钥(SSH 私钥应可由其所有者读取)。
2
以非 root 用户身份运行容器时,将 SSH 密钥作为卷挂载到 /opt/app-root/src/.ssh 下。
3
如果不同,将 /etc/ansible/hosts 更改为集群清单文件的位置。此文件被绑定挂载到 /tmp/inventory,它供容器中的 INVENTORY_FILE 环境变量使用。
4
PLAYBOOK_FILE 环境变量设置为与容器内的 /usr/share/ansible/openshift-ansible 相关的 health.yml playbook 的位置。
5
使用 -e key=value 格式设置单个运行所需的任何变量。

在上一命令中,使用 :Z 选项挂载 SSH 密钥,以便容器可以从其受限 SELinux 上下文读取 SSH 密钥。添加这个选项意味着您的原始 SSH 密钥文件与 system_u:object_r:container_file_t:s0:c113,c247 一样进行重新标记。有关 :Z 的详情,请查看 docker-run(1) man page。

重要

这些卷挂载规格可能会产生意外后果。例如,如果您挂载了 和 protobuf 之后,则 $HOME/.ssh 目录,sshd 将无法访问公钥以允许远程登录。为避免更改原始文件标签,请挂载 SSH 密钥或目录的副本。

挂载整个 .ssh 目录会很有帮助:

  • 允许您使用 SSH 配置来匹配主机的密钥或修改其他连接参数。
  • 允许用户提供 known_hosts 文件并让 SSH 验证主机密钥。这由默认配置禁用,可以通过在 docker 命令行中添加 -e ANSIBLE_HOST_KEY_CHECKING=True 来使用环境变量重新启用。