$ oc logs -f deployment/windows-machine-config-operator -n openshift-windows-machine-config-operator
如果您已完成安装 Windows 机器配置运算符 (WMCO) 的过程,但运算符卡在 `InstallWaiting` 阶段,则您的问题可能是由网络问题引起的。
WMCO 要求您的 OpenShift Container Platform 集群配置为使用 OVN-Kubernetes 的混合网络;如果没有可用的混合网络,WMCO 无法完成安装过程。这对于管理多个操作系统 (OS) 和 OS 变体的节点是必要的。这必须在安装集群期间完成。
有关更多信息,请参阅 配置混合网络。
Windows 机器未成为计算节点的原因有很多。调查此问题的最佳方法是收集 Windows 机器配置运算符 (WMCO) 日志。
您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。
您已创建 Windows 计算机设置。
运行以下命令以收集 WMCO 日志
$ oc logs -f deployment/windows-machine-config-operator -n openshift-windows-machine-config-operator
无法使用 `oc debug node` 命令访问 Windows 节点;该命令需要在节点上运行特权 Pod,而这对于 Windows 尚未支持。相反,可以使用安全外壳 (SSH) 或远程桌面协议 (RDP) 访问 Windows 节点。两种方法都需要 SSH 堡垒主机。
您可以使用安全外壳 (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节点。
您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。
您已创建 Windows 计算机设置。
您已将cloud-private-key
密钥和创建集群时使用的密钥添加到ssh-agent中。出于安全原因,请记住在使用后从ssh-agent中删除密钥。
您已使用ssh-bastion
pod连接到Windows节点 。
运行以下命令设置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}
在生成的shell中,SSH进入Windows节点并运行以下命令为用户创建密码
C:\> net user <username> * (1)
1 | 指定云提供商用户名,例如AWS的Administrator 或Azure的capi 。 |
您现在可以使用RDP客户端通过localhost:2020
远程访问Windows节点。
Windows容器日志记录与Linux容器日志记录的工作方式不同;默认情况下,Windows工作负载的Kubernetes节点日志会流式传输到C:\var\logs
目录。因此,您必须从该目录收集Windows节点日志。
您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。
您已创建 Windows 计算机设置。
要查看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
您现在可以使用相同的命令列出目录中的文件并查看各个日志文件。例如,要查看kubelet日志,请运行以下命令
$ oc adm node-logs -l kubernetes.io/os=windows --path=/kubelet/kubelet.log
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服务不会将其日志流式传输到stdout,而是记录到Windows的事件日志中。您可以查看Docker事件日志以调查您认为可能是Windows Docker服务引起的的问题。
您使用运算符生命周期管理器 (OLM) 安装了 Windows 机器配置运算符 (WMCO)。
您已创建 Windows 计算机设置。
SSH进入Windows节点并进入PowerShell
C:\> powershell
运行以下命令查看Docker日志
C:\> Get-EventLog -LogName Application -Source Docker