ошибка чтения конфигурации при развертывании на aks

Я использую Azure DevOps для регулирования CI / CD в моем проекте, у меня есть кластер kubernetes, работающий через aks (служба azure kubernetes), я использовал репозиторий azure и все остальное, и каждый требуемый файл (например, файл azure-pipeline, службы и развертывание) есть автоматически сгенерирован, и я ничего не менял в нем, он отлично строится,но это не удается на этапе развертывания, я сталкиваюсь с этой ошибкой, как показано ниже:

Ошибка:

/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

Изменить:

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: 1.13.10

0
задан 12 October 2019 в 01:36
1 ответ

Вы получили эту проблему, потому что у ваших YAML есть некоторые проблемы с синтаксисом, в основном слишком много пробелов (также, если вы будете использовать TAB вместо пробелов, это также вызовет проблему синтаксиса YAML) . Например, вместо

metadata:
    name: alesblaze/bookstore

должно быть

metadata:
  name: alesblaze/bookstore

Подпараметр должен быть на уровне третьей буквы. Вы можете основывать свои YAML на документе Kubernetes . Я вставлю правильные YAML-файлы ниже.
Перед этим вы должны знать, почему вы не можете использовать "/" в некоторых ваших параметрах.

Даже если в YAML синтаксис верен (вы можете проверить свои yamls здесь ), есть и другие

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

Если вы создадите развертывание с флагом - dry-run , который пропускает некоторые проверки, kubectl создаст это развертывание.

- dry-run ] = false: если true, печатать только объект, который будет отправлен, без его отправки.

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

Однако, если вы захотите использовать его без этого флага со всеми проверками, вы получите ошибку:

$ 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

Означает это имя развертывания , метка, селекторы в Kubernetes не могут содержать "/" , потому что они не пройдут все проверки. У вас возникла аналогичная проблема:

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 '/']

Это описано в документации об именах.

По соглашению, имена ресурсов Kubernetes должны соответствовать максимальная длина 253 символа и состоит из нижнего регистра буквенно-цифровые символы, - и., но на некоторых ресурсах их больше конкретные ограничения.

Другие ресурсы, такие как image или apiVersion , позволяют использовать "/" .

Ниже YAMLS, который позволит вам создавать развертывание и Служба (с соответствующими пробелами и разрешенными символами):

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

Если это помогло, проголосуйте за / примите мой ответ.

0
ответ дан 5 December 2019 в 00:28

Теги

Похожие вопросы