如何修复来自服务器的kubectl错误(NotFound):服务器找不到请求的资源

时间:2020-02-19 17:11:20

标签: kubernetes kubectl

我是按照官方说明安装kubectl的,但是尝试kubectl apply -f时遇到“ Error from server (NotFound): the server could not find the requested resource ”错误。

Internet表示这是因为kubectl的客户端和服务器版本不同。

我将检查kubectl的准确性:

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.2", GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89", GitTreeState:"clean", BuildDate:"2020-01-18T23:30:10Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}

Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.4", GitCommit:"d6f433224538d4f9ca2f7ae19b252e6fcb66a3ae", GitTreeState:"dirty", BuildDate:"2017-06-22T04:31:09Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}

如果是官方安装,为什么版本如此不同?真的是这个错误的问题吗?

我也有docker,docker-compose和minikube。

OS Linux Mint

2 个答案:

答案 0 :(得分:2)

降级您的kubectl版本。并且请提及您最初安装时遵循的官方文档。

sudo apt-get install -qy kubectl=1.16.3-00

第二点,我认为戴维是正确的。也许您的清单文件和k8s版本中的api不匹配。

答案 1 :(得分:2)

@David Maze提到将社区Wiki发布为根本原因

正如评论中指出的那样,您的版本非常不同。 Kubernetes 1.7是在 2017年7月时实现的,当Kubernetes 1.17在2020年1月发布时(相差将近2.5年)。另一件事是Docker的版本,而Minikube必须支持kubernetes的版本。

例如,如果您想在最新的Minikube版本上运行Kubernetes 1.6.3,则会发生错误。

minikube v1.7.3 on Ubuntu 16.04
✨  Using the none driver based on user configuration
⚠️  Specified Kubernetes version 1.6.4 is less than the oldest supported version: v1.11.10
?  Sorry, Kubernetes 1.6.4 is not supported by this release of minikube

此外,apiVersions在版本1.15和1.16之间发生了巨大变化。可以在here中找到更多详细信息。

this Stackoverflow thread中解释了kubectl version中显示的内容。

第二行(“服务器版本”)包含apiserver版本。

例如,Network Policy API是Kubernetes 1.7中引入的,因此,如果您想在1.6中使用它,则会因API无法识别而出错。

我已转载您的问题。

minikube:~$ kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.3", GitCommit:"0480917b552be33e2dba47386e51decb1a211df6", GitTreeState:"dirty", BuildDate:"2017-05-12T10:50:10Z", GoVersion:"go1.7", Compiler:"gc", Platform:"linux/amd64"}
minikube:~$ kubectl get pods
Error from server (NotAcceptable): the server was unable to respond with a content type that the client supports (get pods)
minikube:~$ kubectl get nodes
Error from server (NotAcceptable): the server was unable to respond with a content type that the client supports (get nodes)
minikube:~$ kubectl run nginx --image=nginx
WARNING: New generator "deployment/apps.v1" specified, but it isn't available. Falling back to "deployment/apps.v1beta1".
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
error: no matches for kind "Deployment" in version "apps/v1"

正如我之前提到的,Network Policy是在1.7中引入的。当您尝试从Kubernetes官方文档中申请this config时,它将显示与您相同的错误。

minikube:~$ kubectl apply -f network.yaml 
Error from server (NotFound): the server could not find the requested resource.

最推荐的方法是基于Docker docsKubernetes kubectl docsMinikube安装docker,kubernetes和minikube的最新版本(安全性和最新功能)。

另一个选择是降级所有组件。