×

Windows 机器配置运算符未安装

如果您已完成安装 Windows 机器配置运算符 (WMCO) 的过程,但运算符卡在 `InstallWaiting` 阶段,则您的问题可能是由网络问题引起的。

WMCO 要求您的 OpenShift Container Platform 集群配置为使用 OVN-Kubernetes 的混合网络;如果没有可用的混合网络,WMCO 无法完成安装过程。这对于管理多个操作系统 (OS) 和 OS 变体的节点是必要的。这必须在安装集群期间完成。

有关更多信息,请参阅 配置混合网络

调查 Windows 机器为何未成为计算节点

Windows 机器未成为计算节点的原因有很多。调查此问题的最佳方法是收集 Windows 机器配置运算符 (WMCO) 日志。

先决条件
  • 您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。

  • 您已创建 Windows 计算机设置。

步骤
  • 运行以下命令以收集 WMCO 日志

    $ oc logs -f deployment/windows-machine-config-operator -n openshift-windows-machine-config-operator

访问 Windows 节点

无法使用 `oc debug node` 命令访问 Windows 节点;该命令需要在节点上运行特权 Pod,而这对于 Windows 尚未支持。相反,可以使用安全外壳 (SSH) 或远程桌面协议 (RDP) 访问 Windows 节点。两种方法都需要 SSH 堡垒主机。

使用 SSH 访问 Windows 节点

您可以使用安全外壳 (SSH) 访问 Windows 节点。

先决条件
  • 您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。

  • 您已创建 Windows 计算机设置。

  • 您已将cloud-private-key密钥和创建集群时使用的密钥添加到ssh-agent中。出于安全原因,请记住在使用后从ssh-agent中删除密钥。

  • 您已使用ssh-bastion pod连接到Windows节点

步骤
  • 运行以下命令访问Windows节点

    $ ssh -t -o StrictHostKeyChecking=no -o ProxyCommand='ssh -A -o StrictHostKeyChecking=no \
        -o ServerAliveInterval=30 -W %h:%p core@$(oc get service --all-namespaces -l run=ssh-bastion \
        -o go-template="{{ with (index (index .items 0).status.loadBalancer.ingress 0) }}{{ or .hostname .ip }}{{end}}")' <username>@<windows_node_internal_ip>  (1) (2)
    1 指定云提供商用户名,例如Amazon Web Services (AWS) 的Administrator或Microsoft Azure的capi
    2 指定节点的内部IP地址,可以通过运行以下命令发现
    $ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}

使用RDP访问Windows节点

您可以使用远程桌面协议 (RDP) 访问Windows节点。

先决条件
  • 您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。

  • 您已创建 Windows 计算机设置。

  • 您已将cloud-private-key密钥和创建集群时使用的密钥添加到ssh-agent中。出于安全原因,请记住在使用后从ssh-agent中删除密钥。

  • 您已使用ssh-bastion pod连接到Windows节点

步骤
  1. 运行以下命令设置SSH隧道

    $ ssh -L 2020:<windows_node_internal_ip>:3389 \ (1)
        core@$(oc get service --all-namespaces -l run=ssh-bastion -o go-template="{{ with (index (index .items 0).status.loadBalancer.ingress 0) }}{{ or .hostname .ip }}{{end}}")
    1 指定节点的内部IP地址,可以通过运行以下命令发现
    $ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
  2. 在生成的shell中,SSH进入Windows节点并运行以下命令为用户创建密码

    C:\> net user <username> * (1)
    1 指定云提供商用户名,例如AWS的Administrator或Azure的capi

您现在可以使用RDP客户端通过localhost:2020远程访问Windows节点。

收集Windows容器的Kubernetes节点日志

Windows容器日志记录与Linux容器日志记录的工作方式不同;默认情况下,Windows工作负载的Kubernetes节点日志会流式传输到C:\var\logs目录。因此,您必须从该目录收集Windows节点日志。

先决条件
  • 您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。

  • 您已创建 Windows 计算机设置。

步骤
  1. 要查看C:\var\logs中所有目录下的日志,请运行以下命令

    $ oc adm node-logs -l kubernetes.io/os=windows --path= \
        /ip-10-0-138-252.us-east-2.compute.internal containers \
        /ip-10-0-138-252.us-east-2.compute.internal hybrid-overlay \
        /ip-10-0-138-252.us-east-2.compute.internal kube-proxy \
        /ip-10-0-138-252.us-east-2.compute.internal kubelet \
        /ip-10-0-138-252.us-east-2.compute.internal pods
  2. 您现在可以使用相同的命令列出目录中的文件并查看各个日志文件。例如,要查看kubelet日志,请运行以下命令

    $ oc adm node-logs -l kubernetes.io/os=windows --path=/kubelet/kubelet.log

收集Windows应用程序事件日志

kubelet logs端点上的Get-WinEvent shim可用于从Windows计算机收集应用程序事件日志。

先决条件
  • 您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。

  • 您已创建 Windows 计算机设置。

步骤
  • 要查看所有记录到Windows计算机事件日志中的应用程序的日志,请运行

    $ oc adm node-logs -l kubernetes.io/os=windows --path=journal

    使用oc adm must-gather收集日志时,将执行相同的命令。

    还可以通过使用-u标志指定相应的服务来收集事件日志中的其他Windows应用程序日志。例如,您可以运行以下命令来收集docker运行时服务的日志

    $ oc adm node-logs -l kubernetes.io/os=windows --path=journal -u docker

收集Windows容器的Docker日志

Windows Docker服务不会将其日志流式传输到stdout,而是记录到Windows的事件日志中。您可以查看Docker事件日志以调查您认为可能是Windows Docker服务引起的的问题。

先决条件
  • 您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。

  • 您已创建 Windows 计算机设置。

步骤
  1. SSH进入Windows节点并进入PowerShell

    C:\> powershell
  2. 运行以下命令查看Docker日志

    C:\> Get-EventLog -LogName Application -Source Docker