YAML - 使用 Yaml 配置文件进行部署时出现验证错误

YAML - Validation error during deployment using Yaml config file

我正在关注本教程的 this Microsoft Tutorial to create a Windows Server container on an Azure Kubernetes Service (AKS) cluster using Azure Cli. In the Run the Application 部分,当 运行 使用以下命令使用 YAML 配置文件部署应用程序时,我收到以下错误:

kubectl apply -f sample.yaml

error: error validating "sample.yaml": error validating data: apiVersion not set; if you choose to ignore these errors, turn validation off with --validate=false

问题:如下sample.yaml文件所示,apiVersion已经设置。那么这个错误是关于什么的,我们该如何解决这个问题?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample
  labels:
    app: sample
spec:
  replicas: 1
  template:
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": windows
      containers:
      - name: sample
        image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
        resources:
          limits:
            cpu: 1
            memory: 800M
          requests:
            cpu: .1
            memory: 300M
        ports:
          - containerPort: 80
  selector:
    matchLabels:
      app: sample
---
apiVersion: v1
kind: Service
metadata:
  name: sample
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
  selector:
    app: sample

当您使用过时的 kubectl 时会发生这种情况。您可以尝试更新到 1.2.5 或 1.3.0 并再次运行

问题已解决。该问题与 copy/paste 到 Azure Cloud Shell 有关。当您 copy/paste 内容到 Azure Cloud vi 编辑器 Shell 并且如果内容的第一个字母恰好是 a 那么可能会发生以下情况:

当以读取模式打开 vi 时,然后通过粘贴,第一个 a 可能会将用户置于编辑模式并且实际上可能无法将 a 插入到编辑器中。因此,在我的例子中,内容粘贴如下(为简洁起见,我只在此处显示前几行)。所以你注意到这里 a 在下面的第一行 apiVersion: apps/v1 中丢失了:

sample.yaml 文件:

piVersion: apps/v1
kind: Deployment
metadata:
…..
...

我在我的案例中修复了它!如需更多背景信息,请随时访问 .

总结:

如果有任何文件在其中应用 yaml 配置,如下所示:

kubectl apply -f .

然后将其更改为以下内容:

kubectl apply -f namespace.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

基本上,对每个文件单独应用配置。