yaml 的烦人问题,我无法克服

Annoying issue with yaml which I cannot overcome

我不断收到

error: error parsing httpd-project-last.yaml.backup1: error converting YAML to JSON: yaml: line 45: did not find expected key

。 所以这条线是 密钥:密码 我不知道该怎么办。现在我一直在拉头发一个小时。 有什么建议吗?

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: webandstorage
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 1 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: httpd
        image: httpd:latest
        volumeMounts:
        - name: storage
          mountPath: /usr/local/apache2/htdocs/
      volumes:
        - name: storage
          persistentVolumeClaim:
            claimName: pvc1
      dnsPolicy: ClusterFirst
      dnsConfig:
       nameservers:
         - 8.8.8.8
    spec:
      containers:
      - name: mysql
        image: mysql:latest
        volumeMounts:
        - name: data3
          mountPath: /var/lib/mysql
      volumes:
      - name: storage
        persistentVolumeClaim:
            claimName: data
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              key: password
              name: dbparola
       ports:
       - protocol: TCP
         port:8080

你的配置有不少问题。例如:应该有一个容器部分和一个卷部分。每个容器都会指定一个 volumeMount。

首先将您的定义剥离到只有一个容器,包含 volumeMounts 和卷,然后考虑添加第二个容器(但保留一个容器部分!查找 yaml 列表)。

正如社区指出的那样,您的 yaml 文件中存在一些错误。我已经修复了语法,所以它通过了验证测试。

如果您在配置方面遇到问题,可以随时提出其他问题。

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: webandstorage spec: replicas: 1 # tells deployment to run 2 pods matching the template selector: matchLabels: app: apache template: metadata: labels: app: apache spec: containers: - name: httpd image: httpd:latest volumeMounts: - name: storage mountPath: /usr/local/apache2/htdocs/ volumes: - name: storage persistentVolumeClaim: claimName: pvc1 dnsPolicy: ClusterFirst dnsConfig: nameservers: - 8.8.8.8 spec: containers: - name: mysql image: mysql:latest volumeMounts: - name: data3 mountPath: /var/lib/mysql volumes: - name: storage persistentVolumeClaim: claimName: data env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: key: password name: dbparola ports: - protocol: TCP port:8080

您可以在任何 YAML 验证器上在线检查它,对于 example,您可以在这里找到您的 yaml,因为我把它作为静态 link 留在那里。

您可以在此 article or directly in the Kubernetes documentation for Deployments

中找到有关如何创建 yaml 文件的更多信息