kubernetes Kubectl总是返回错误:yaml:在此上下文中不允许Map值

fquxozlt  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(7)|浏览(175)

Kubectl命令总是返回这个错误yaml:行2:在此上下文中不允许Map值。甚至当我调用普通版本命令、配置命令等时。不知道是什么导致了这一点。

tessact@tessact-sys-1:~$ kubectl version
Client Version: version.Info{Major:"1", Minor:"4",
GitVersion:"v1.4.4",
GitCommit:"3b417cc4ccd1b8f38ff9ec96bb50a81ca0ea9d56",
GitTreeState:"clean", BuildDate:"2016-10-21T02:48:38Z",
GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"}
error: yaml: line 2: mapping values are not allowed in this context

tessact@tessact-sys-1:~/[some path]$ kubectl create -f kubernetes_configs/frontend.yaml
error: yaml: line 2: mapping values are not allowed in this context

我唯一使用的yaml文件是

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  replicas: 3
  template:
    metadata:
      labels:
        name: frontend
    spec:
      containers:
      - name: trigger
        # Replace  with your project ID or use `make template`
        image: asia.gcr.io/trigger-backend/trigger-backend

        # This setting makes nodes pull the docker image every time before
        # starting the pod. This is useful when debugging, but should be turned
        # off in production.
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    name: frontend

无论我用kubectl做什么,它都会返回这个错误。我该怎么做才能解决这个问题?

> tessact@tessact-sys-1:~/developer/trigger-backend-dev/trigger-backend$
> kubectl get service error: yaml: line 2: mapping values are not
> allowed in this context

产出:

strace kubectl version

here

owfi6suc

owfi6suc1#

version命令已经抛出一个错误,表明加载了一些默认的YAML文件。
您可以使用strace kubectl version查看打开了什么文件,希望这是在kubectl抛出错误之前完成的。我假设它会读取一些全局配置(或者当前目录中的默认文件)。
当然,在kubernetes中编程是草率的,没有捕捉到这样的错误,并显示文件的名称,然后重新引发错误。

lh80um4z

lh80um4z2#

大多数时候,当你得到这样的错误(一般来说和有意义的术语),它要么是因为:
1). yaml文件中的语法错误(在您的情况下不是)。
2).或者像错误说“在此上下文中不允许Map值”。这意味着您在yaml中使用的键/值可能在语法上是正确的,但在语义上不是正确的。

nmpmafwu

nmpmafwu3#

因为你甚至在运行kubectl version时也会得到这个错误,我认为你的kubeconfig文件中有一个yaml语法错误,默认情况下位于~/.kube/config
您可以使用yaml验证器(如this one)验证其内容。

ss2ws0br

ss2ws0br4#

确保您已完成以下步骤:

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

作为root用户。
我也无法看到版本

kubectl version
hfyxw5xn

hfyxw5xn5#

只是想补充一下...我今天看到这个错误后执行复制/粘贴操作到我的YAML文件。这个过程引入了一些kubectl无法破译的空白字符。
如果您不确定,请先将YAML粘贴到文本编辑器中,该编辑器将显示所有不可见字符,并确保它们与YAML文件的其余部分一致。

pepwfjgg

pepwfjgg6#

我在执行一些Kubernetes基本命令时也遇到了同样的问题。kubectl get ns,kubectl get pods,etc.
解决方案:
尝试停止minikube集群,然后重新启动

wswtfjt7

wswtfjt77#

只要按照这些步骤,为我工作,并发现他们作为最快的解决方案:
如果您是普通用户(非root用户):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/•kube/config

或者,如果您是root用户,则可以运行:

export KUBECONFIG=/etc/kubernetes/admin.conf

相关问题