
當我嘗試在本機 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 已損壞,但那是因為堆疊溢位引用演算法吃了一些換行符。我修復了這個問題,現在發布的 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 - 再次運行命令
- 查看哪些行導致了問題
- 更正行並再次運行命令