skip to Main Content

This is my mysql-deployment.yaml I am trying to get this to run on kubernetes but I am getting error I have mentioned the errors below my deployment.yml

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
    tier: database
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: mysql
    tier: database
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: mysql
    tier: database
spec:
  accessMode:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
    tier: database
spec:
  selector:
    matchLabels:
      app: mysql
      tier: database
  strategy:
    type: Recreate
  template:
    metadata: 
      labels:
        apps: mysql
        tier: database
    spec:
      containers:
      - image: mysql:5.7
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db-root-credentials
              key: password
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef::
              name: db-credentials
              key: username
        - name: MYSQL_PASSWORD
          valueFrom:
            secretkeyRef:
              name: db-credentials
              key: password
        - name: MYSQL_DATABASE
          valueFrom:
            configMapKeyRef:
              name: dbbuddyto_mstr_local
              key: name
      ports:
        - containerPort: 3306
          name: mysql
      volumeMounts:
          - name: mysql-persistent-storage
            mountPath: /var/lib/mysql
      volumes:
          - name: mysql-persistent-storage
            PersistentVolumeClaim:
              claimName: mysql-pv-claim

I am getting two errors:
error parsing mysql-deployment.yml: error converting YAML to JSON: yaml: line 24: mapping values are not allowed in this context

and the second error is

Error from server (BadRequest): error when creating "mysql-deployment.yml": PersistentVolumeClaim in version "v1" cannot be handled as a PersistentVolumeClaim: strict decoding error: unknown field "spec.accessMode"

I am trying to build a Kubernetes deployment for angular, spring and mysql.
and the mentioned errors are the ones I am currently facing.

2

Answers


  1. The issue with your PVC is a typo. It needs to be spec.accessModes, you missed the s at the end.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
      labels:
        app: mysql
        tier: database
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    

    Edit:

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
      labels:
        app: mysql
        tier: database
    spec:
      ports:
        - port: 3306
          targetPort: 3306
      selector:
        app: mysql
        tier: database
      clusterIP: None
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
      labels:
        app: mysql
        tier: database
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql
      labels:
        app: mysql
        tier: database
    spec:
      selector:
        matchLabels:
          app: mysql
          tier: database
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            apps: mysql
            tier: database
        spec:
          containers:
            - image: mysql:5.7
              name: mysql
              env:
                - name: MYSQL_ROOT_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: db-root-credentials
                      key: password
                - name: MYSQL_USER
                  valueFrom:
                    secretKeyRef:
                      name: db-credentials
                      key: username
                - name: MYSQL_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: db-credentials
                      key: password
                - name: MYSQL_DATABASE
                  valueFrom:
                    configMapKeyRef:
                      name: dbbuddyto_mstr_local
                      key: name
              resources: {}
              ports:
                - containerPort: 3306
                  name: mysql
              volumeMounts:
                - name: mysql-persistent-storage
                  mountPath: /var/lib/mysql
          volumes:
            - name: mysql-persistent-storage
              PersistentVolumeClaim:
                claimName: mysql-pv-claim
    
    
    Login or Signup to reply.
  2. Besides the typo with accessModes, ports and volumes were not indented enough. They are both elementes of a container. Also fixed the secretKeyRef typo:

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
      labels:
        app: mysql
        tier: database
    spec:
      ports:
        - port: 3306
          targetPort: 3306
      selector:
        app: mysql
        tier: database
      clusterIP: None
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
      labels:
        app: mysql
        tier: database
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql
      labels:
        app: mysql
        tier: database
    spec:
      selector:
        matchLabels:
          app: mysql
          tier: database
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: mysql
            tier: database
        spec:
          containers:
          - image: mysql:5.7
            name: mysql
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-root-credentials
                  key: password
            - name: MYSQL_USER
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: username
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: password
            - name: MYSQL_DATABASE
              valueFrom:
                configMapKeyRef:
                  name: dbbuddyto-mstr-local
                  key: name
            ports:
              - containerPort: 3306
                name: mysql
            volumeMounts:
              - name: mysql-persistent-storage
                mountPath: /var/lib/mysql
          volumes:
            - name: mysql-persistent-storage
              persistentVolumeClaim:
                claimName: mysql-pv-claim
    

    Update:

    Also fixed labels to match matchLabels, case error in persistentVolumeClaim and name of configMap dbbuddyto-mstr-local. This is important. _is not allowed.

    On minikube there is no error now.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search