RKE 集群常见问题排查

SSH 连接报错

Failed to set up SSH tunneling for host [xxx.xxx.xxx.xxx]: Can't retrieve Docker Info

Failed to dial to /var/run/docker.sock: ssh: rejected: administratively prohibited (open failed)

  • 没有访问 Docker socket 的权限,请登录主机,运行docker ps检查权限:
ssh -i ssh_privatekey_file user@server
user@server$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

请参考如何以非 root 用户角色管理 Docker,正确配置您的权限。

  • 如果您使用的操作系统是 RedHat 或 CentOS,您不能使用 root 用户连接节点,因为这两种系统有这个 bugBugzilla #1527565。您需要添加一个用户,然后为它配置访问 Docker socket 的权限。详情请参考RKE OS Requirements。

  • SSH server 的版本低于 v6.7。通过 SSH 连接 Docker socket 需要用到 v6.7 或以上的 SSH server。您可以运行sshd -V命令检查当前主机使用的 SSH server 版本,或使用 netcat 命令检查 SSH server 版本,如下方示例代码所示,请将“xxx.xxx.xxx.xxx”替换为主机 IP 地址:

nc xxx.xxx.xxx.xxx 22
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10

Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: Error configuring SSH: ssh: no key found

  • 无法访问密钥文件ssh_key_path。请检查您是否已经指定了密钥文件,检查执行 rke 命令的用户是否有权限访问这个密钥文件。

  • 密钥文件ssh_key_path异常。运行ssh-keygen -y -e -f private_key_file命令,检查密钥文件是否有效。该命令的返回消息包括了公钥和私钥,如果私钥失效,该命令会返回报错消息。

Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

  • 密钥文件ssh_key_path不正确。请检查节点使用的密钥文件是否为ssh_key_path,然后检查您是否指定了正确的用户使用这个密钥通过 SSH 连接。

Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: Error configuring SSH: ssh: cannot decode encrypted private keys

  • 如果您想使用加密的私钥,您应该使用ssh-agent命令加载密钥和密钥短语(passphrase)。您可以在命令行工具输入--ssh-agent-auth命令,配置 RKE 使用这个 agent。它会在运行rke命令的环境中使用SSH_AUTH_SOCK环境变量。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

  • 无法连接节点,请检查配置的地址address和端口port是否有误。

启动集群报错

Failed to get job complete status 无法获取”job complete“状态

触发这个报错信息的最常见原因是节点内有些问题,阻止了节点内的 job 成功运行。请运行下文的命令,检查节点状态,排查问题。

运行以下命令以列出节点 Conditions,关于节点 Conditions 请查看节点 Conditions

kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{end}}'

运行以下命令以列出节点有问题的 Conditions,关于节点 Conditions 请查看节点 Conditions

kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{if ne .type "Ready"}}{{if eq .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{else}}{{if ne .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{": "}}{{.status}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}'

输出示例:

worker-0: DiskPressure:True

您也可以运行以下命令,查看日志中是否有关于 job 报错的信息,请将命令中的日志名称rke-network-plugin-deploy-job替换为您的日志名称。

kubectl -n kube-system get pods -l job-name=rke-network-plugin-deploy-job --no-headers -o custom-columns=NAME:.metadata.name | xargs -L1 kubectl -n kube-system logs

Failed to apply the ServiceAccount needed for job execution

因为这个操作需要将运行了rke up命令的主机和 controplane 节点连接,这个问题在多数情况下是由于主机代理配置信息有误而造成的。出现这个错误之后返回的信息是由阻止这个请求的代理发出的。请检查HTTP_PROXY、HTTPS_PROXY和NO_PROXY这三个环境变量是否配置正确。如果主机通过配置的代理无法访问 controlplane 节点,请重点检查NO_PROXY(要在NO_PROXY中添加这个 IP 区间)。

posted @ 2022-03-11 09:57  Varden  阅读(1079)  评论(0编辑  收藏  举报