Menu Close

Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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

您可以在容器中运行 openshift-ansible playbook,无需安装和配置 Ansible,只需在可以通过 Docker CLI 运行 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 用户身份运行容器时,在 /opt/app-root/src/.ssh 下挂载 SSH 密钥。
3
如果不同,请将 /etc/ansible/hosts 更改为集群清单文件的位置。此文件绑定挂载到 /tmp/inventory,它根据容器中的 INVENTORY_FILE 环境变量使用。
4
PLAYBOOK_FILE 环境变量设置为 health.yml playbook 的位置,相对于容器内的 /usr/share/ansible/openshift-ansible
5
使用 -e key=value 格式设置单个运行所需的任何变量。

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

重要

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

挂载整个 .ssh 目录有助于:

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