当我尝试在我们的本地 kubernetes 集群中创建基于 nfs 的持久卷时,出现以下错误:
# kubectl create -f nfs.yaml
error: error validating "nfs.yaml": error validating data: the server could not find the requested resource; if you choose to ignore these errors, turn validation off with --validate=false
其nfs.yaml
内容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs-pv1
labels:
type: nfs
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.1.3
path: "/srv/kubedata/"
kubernetes 集群在我们本地 openstack 云中创建的三台虚拟机上运行(使用 kubespray 安装)。nfs 共享位于第一个节点上,可以在所有节点上手动安装。
我该如何修复这个问题?问题出在 yaml 文件中吗?我该如何诊断问题?知道错误的具体位置会很有帮助:kubectl 有调试模式吗?
更新:我发布的原始 yaml 已损坏,但这是因为 stack overflow 引用算法吃掉了一些换行符。我修复了这个问题,现在发布的 yaml 似乎在https://kubeyaml.com/,因此 yaml 似乎没问题(至少从语法上来说)。
更新2:
# kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37", GitTreeState:"clean", BuildDate:"2017-03-28T16:36:33Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:50Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
答案1
此错误表示您的yaml
文件有错误。找到它的最简单方法是使用其中一个在线验证工具。在您的示例中,第 1 行有一个错误。您的文件应如下所示:
apiVersion: v1
kind: PersistentVolume
metadata:
labels:
type: nfs
name: pv-nfs-pv1
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
nfs:
path: /srv/kubedata
server: 192.168.1.3
如果有帮助的话请告诉我。
编辑:
但是,有效yaml
并不意味着它对 Kubernetes 具有有效的输入。为了进一步调查,您需要升级你的kubectl
版本。
升级到 1.15 版本后,您将能够获得详细的错误消息,显示验证问题的确切行,而不仅仅是:the server could not find the requested resource;
简而言之:
- 升级
kubectl
到 1.15 - 再次运行命令
- 查看哪些行导致了问题
- 更正这些行并再次运行命令