error reading configuration while deploying to aks

I am using Azure devops for regulation CI/CD in my project , i have a kubernetes cluster running through aks(azure kubernetes service) , i have used azure repo and everything and , every required file(viz. azure-pipeline file and services and deployment) is auto generated and i haven’t altered anything in it , it builds nicely , but it fails in the deployment phase , I encounter this error as shown below ,

Error:

/usr/bin/kubectl apply -f /home/vsts/work/_temp/bookstore_1570774284000,/home/vsts/work/_temp/bookstore_1570774284001 --namespace default
error when retrieving current configuration of:
Resource: "apps/v1beta1, Resource=deployments", GroupVersionKind: "apps/v1beta1, Kind=Deployment"
Name: "alesblaze/bookstore", Namespace: "default"
Object: &{map["apiVersion":"apps/v1beta1" "kind":"Deployment" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "name":"alesblaze/bookstore" "namespace":"default"] "spec":map["replicas":'\x01' "template":map["metadata":map["labels":map["app":"alesblaze/bookstore"]] "spec":map["containers":[map["image":"***/alesblaze/bookstore" "name":"alesblaze/bookstore" "ports":[map["containerPort":'\u1f90']]]] "imagePullSecrets":[map["name":"bookstoreappacrd0a8-auth"]]]]]]}
from server for: "/home/vsts/work/_temp/bookstore_1570774284000": invalid resource name "alesblaze/bookstore": [may not contain '/']
error when retrieving current configuration of:
Resource: "/v1, Resource=services", GroupVersionKind: "/v1, Kind=Service"
Name: "alesblaze/bookstore", Namespace: "default"
Object: &{map["apiVersion":"v1" "kind":"Service" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "name":"alesblaze/bookstore" "namespace":"default"] "spec":map["ports":[map["port":'\u1f90']] "selector":map["app":"alesblaze/bookstore"] "type":"LoadBalancer"]]}
from server for: "/home/vsts/work/_temp/bookstore_1570774284001": invalid resource name "alesblaze/bookstore": [may not contain '/']
##[error]error when retrieving current configuration of:
Resource: "apps/v1beta1, Resource=deployments", GroupVersionKind: "apps/v1beta1, Kind=Deployment"
Name: "alesblaze/bookstore", Namespace: "default"
Object: &{map["apiVersion":"apps/v1beta1" "kind":"Deployment" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "name":"alesblaze/bookstore" "namespace":"default"] "spec":map["replicas":'\x01' "template":map["metadata":map["labels":map["app":"alesblaze/bookstore"]] "spec":map["containers":[map["image":"***/alesblaze/bookstore" "name":"alesblaze/bookstore" "ports":[map["containerPort":'\u1f90']]]] "imagePullSecrets":[map["name":"bookstoreappacrd0a8-auth"]]]]]]}
from server for: "/home/vsts/work/_temp/bookstore_1570774284000": invalid resource name "alesblaze/bookstore": [may not contain '/']
error when retrieving current configuration of:
Resource: "/v1, Resource=services", GroupVersionKind: "/v1, Kind=Service"
Name: "alesblaze/bookstore", Namespace: "default"
Object: &{map["apiVersion":"v1" "kind":"Service" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "name":"alesblaze/bookstore" "namespace":"default"] "spec":map["ports":[map["port":'\u1f90']] "selector":map["app":"alesblaze/bookstore"] "type":"LoadBalancer"]]}
from server for: "/home/vsts/work/_temp/bookstore_1570774284001": invalid resource name "alesblaze/bookstore": [may not contain '/']
Finishing: Deploy to Kubernetes cluster

Edit :

Service.yaml

apiVersion: v1
kind: Service
metadata:
    name: alesblaze/bookstore
spec:
    type: LoadBalancer
    ports:
    - port: 8080 
    selector:
        app: alesblaze/bookstore

deployment.yaml

apiVersion : apps/v1beta1
kind: Deployment
metadata:
  name: alesblaze/bookstore 
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: alesblaze/bookstore 
    spec:
      containers:
        - name: alesblaze/bookstore 
          image: bookstoreappacr.azurecr.io/alesblaze/bookstore 
          ports:
          - containerPort: 8080

Kubernetes version : 1.13.10

Answer

You received this issue because your YAMLs have some syntax issues, mostly too much spaces (also if you will use TAB instead of spaces it will also generate YAML syntax issue). For example, instead of

metadata:
    name: alesblaze/bookstore

should be

metadata:
  name: alesblaze/bookstore

Sub-parameter should be on level of the third letter. You can base your YAMLs on Kubernetes doc.
I will paste proper YAMLs below.
Before that you have to know why you cannot use “/” in some of your parameters.

Even if in YAML syntax is correct (you can validate your yamls here), there are other validations.

apiVersion : apps/v1beta1
kind: Deployment
metadata:
  name: alesblaze/bookstore

If you will create deployment with --dry-run flag which skip some validations, kubectl will crate this deployment.

--dry-run=false: If true, only print the object that would be sent, without sending it.

$ kubectl create deployment alesblaze/bookstore --image=nginx --dry-run
deployment.apps/alesblaze/bookstore created (dry run)

However, if you will want to use it without this flag with all validation you will receive error:

$ kubectl create deployment alesblaze/bookstore --image=nginx
The Deployment "alesblaze/bookstore" is invalid: 
* metadata.name: Invalid value: "alesblaze/bookstore": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
* metadata.labels: Invalid value: "alesblaze/bookstore": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue',  or 'my_value',  or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?')
* spec.selector.matchLabels: Invalid value: "alesblaze/bookstore": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue',  or 'my_value',  or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?')
* spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"alesblaze/bookstore"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: invalid label selector

Means that deployment name, label, selectors in Kubernetes cannot contain “/” because it will not pass all validations. Your have received similar issue:

Object: &{map["apiVersion":"apps/v1beta1" "kind":"Deployment" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "name":"alesblaze/bookstore" "namespace":"default"] "spec":map["replicas":'\x01' "template":map["metadata":map["labels":map["app":"alesblaze/bookstore"]] "spec":map["containers":[map["image":"***/alesblaze/bookstore" "name":"alesblaze/bookstore" "ports":[map["containerPort":'\u1f90']]]] "imagePullSecrets":[map["name":"bookstoreappacrd0a8-auth"]]]]]]}
from server for: "/home/vsts/work/_temp/bookstore_1570774284000": invalid resource name "alesblaze/bookstore": [may not contain '/']

It is describe in docs about names.

By convention, the names of Kubernetes resources should be up to
maximum length of 253 characters and consist of lower case
alphanumeric characters, -, and ., but certain resources have more
specific restrictions.

Others resources like image or apiVersion allow to use “/”.

Below YAMLS which will allow you to create Deployment and Service (with proper spaces and allowed characters):

Deployment.yaml

apiVersion : apps/v1beta1
kind: Deployment
metadata:
  name: alesblaze-bookstore
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: alesblaze-bookstore
    spec:
      containers:
      - name: alesblaze-bookstore 
        image: bookstoreappacr.azurecr.io/alesblaze/bookstore 
        ports:
        - containerPort: 8080

Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: alesblaze-bookstore
spec:
  selector:
    app: alesblaze-bookstore
  ports:
  - port: 8080 
  type: LoadBalancer

If it helped, please upvote/accept my answer.

Attribution
Source : Link , Question Author : Arjun Sharma , Answer Author : PjoterS

Leave a Comment