在kubectl创建后,我得到验证错误,但我的yaml文件是有效的

问题描述 投票:3回答:1

我正在使用kubectl 1.6.4:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.4", GitCommit:"d6f433224538d4f9ca2f7ae19b252e6fcb66a3ae", GitTreeState:"clean", BuildDate:"2017-05-19T18:44:27Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.4", GitCommit:"d6f433224538d4f9ca2f7ae19b252e6fcb66a3ae", GitTreeState:"clean", BuildDate:"2017-05-19T18:33:17Z", GoVersion:"go1.7.5", Compiler:"gc", Platform:"linux/amd64"}

我正在尝试跟随Connect a Front End to a Back End Using a Service,并尝试创建此部署(deployment.yml):

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello
        tier: frontend
        track: stable
    spec:
      containers:
        - name: nginx
          image: "gcr.io/google-samples/hello-frontend:1.0"
          lifecycle:
            preStop:
              exec:
                command: ["/usr/sbin/nginx","-s","quit"]

kubectl create -f deployment.yml,我收到以下错误:

错误:验证“/path/to/deployment.yml”时出错:验证数据时出错:JSON输入意外结束;如果您选择忽略这些错误,请使用--validate = false关闭验证

但是,此文件有效。

我在Deployments documentation注意到在1.6.0之前的Deployments使用了apiVersion: extensions/v1beta1而不是apiVersion: app/v1beta1。所以只是为了踢,我用apiVersion: app/v1beta1取代了apiVersion: extensions/v1beta1,即使我跑1.6.4。令我惊讶的是,它奏效了。

怎么了?为什么我需要使用旧的,1.6.0之前的apiVersion线,即使我在1.6.4?

kubernetes
1个回答
3
投票

尝试删除~/.kube/schema(我也删除了~/.kube/cache,但我很确定没有效果)。就我而言,~/.kube/schema有几个模式:

$ l schema/
total 0
drwxr-xr-x  6 dmitry  staff   204B Jan  9 11:23 v1.4.7
drwxr-xr-x  8 dmitry  staff   272B Jan 11 00:13 v1.5.1
drwxr-xr-x  5 dmitry  staff   170B Jun 17 15:05 .
drwxr-xr-x  7 dmitry  staff   238B Jun 22 19:32 v1.6.4
drwxr-xr-x  5 dmitry  staff   170B Jun 22 22:47 ..

而kubectl显然使用的是旧模式。 This might be a bug

当您删除~/.kube/schema时,下次尝试创建yml文件时,kubectl将重新填充该目录,但仅使用最新的有效模式。它会奏效。

© www.soinside.com 2019 - 2024. All rights reserved.