Ошибка развертывания K8s: `selector` не соответствует шаблону` labels` - PullRequest
1 голос
/ 10 июля 2020

Пытаюсь перейти с docker -compose на kubernetes. У меня были проблемы с громкостью, поэтому я сделал следующее:

kompose convert --volumes hostPath

Затем у меня возникла другая проблема

no matches for kind "Deployment" in version "extensions/v1beta1"

Итак, я изменил ApiVersion с extension / v1beta1 на app / v1 и добавил "селектор". Теперь я не могу справиться с этой проблемой:


Error from server (Invalid): error when creating "database-deployment.yaml": Deployment.apps "database" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"io.kompose.service":"database"}: `selector` does not match template `labels`
Error from server (Invalid): error when creating "phpmyadmin-deployment.yaml": Deployment.apps "phpmyadmin" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"io.kompose.service":"phpmyadmin"}: `selector` does not match template `labels`
Error from server (Invalid): error when creating "webserver-deployment.yaml": Deployment.apps "webserver" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"io.kompose.service":"webserver"}: `selector` does not match template `labels`

database-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert --volumes hostPath
    kompose.version: 1.19.0 (f63a961c)
  creationTimestamp: null
  labels:
    io.kompose.service: database
    app: database
  name: database
spec:
  selector:
    matchLabels:
      app: database
  template:
    metadata:
      labels:
        io.kompose.service: database
  replicas: 1
  strategy: {}
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert --volumes hostPath
        kompose.version: 1.19.0 (f63a961c)
      creationTimestamp: null
      labels:
        io.kompose.service: database
    spec:
      containers:
      - env:
        - name: MYSQL_DATABASE
          value: Bazadanerro
        - name: MYSQL_PASSWORD
          value: P@$$w0rd
        - name: MYSQL_ROOT_PASSWORD
          value: P@$$w0rd
        - name: MYSQL_USER
          value: dockerro
        image: mariadb
        name: mysql
        resources: {}
      restartPolicy: Always
status: {}

phpmyadmin-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert --volumes hostPath
    kompose.version: 1.19.0 (f63a961c)
  creationTimestamp: null
  labels:
    io.kompose.service: phpmyadmin
    app: phpmyadmin
  name: phpmyadmin
spec:
  selector:
    matchLabels:
      app: phpmyadmin
  template:
    metadata:
      labels:
        io.kompose.service: database
  replicas: 1
  strategy: {}
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert --volumes hostPath
        kompose.version: 1.19.0 (f63a961c)
      creationTimestamp: null
      labels:
        io.kompose.service: phpmyadmin
    spec:
      containers:
      - env:
        - name: MYSQL_PASSWORD
          value: P@$$w0rd
        - name: MYSQL_ROOT_PASSWORD
          value: P@$$w0rd
        - name: MYSQL_USER
          value: dockerro
        - name: PMA_HOST
          value: database
        - name: PMA_PORT
          value: "3306"
        image: phpmyadmin/phpmyadmin
        name: phpmyadmins
        ports:
        - containerPort: 80
        resources: {}
      restartPolicy: Always
status: {}

И веб-сервер- deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert --volumes hostPath
    kompose.version: 1.19.0 (f63a961c)
  creationTimestamp: null
  labels:
    io.kompose.service: webserver
    app: webserverro
  name: webserver
spec:
  selector:
    matchLabels: 
      app: webserverro
  template:
    metadata:
      labels:
        io.kompose.service: webserver
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert --volumes hostPath
        kompose.version: 1.19.0 (f63a961c)
      creationTimestamp: null
      labels:
        io.kompose.service: webserver
    spec:
      containers:
      - image: webserver
        name: webserverro
        ports:
        - containerPort: 80
        resources: {}
        volumeMounts:
        - mountPath: /var/www/html
          name: webserver-hostpath0
      restartPolicy: Always
      volumes:
      - hostPath:
          path: /root/webserverro/root/webserverro
        name: webserver-hostpath0
status: {}

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Во всех этих файлах у вас есть две копии pod spe c template:. Они не объединяются; второй просто заменяет первый.

spec:
  selector: { ... }
  template:                      # This will get ignored
    metadata:
      labels:
        io.kompose.service: webserver
        app: webserverro
  template:                      # and completely replaced with this
    metadata:
      annotations:
        kompose.cmd: kompose convert --volumes hostPath
        kompose.version: 1.19.0 (f63a961c)
      labels:                    # without the app: label
        io.kompose.service: webserver
    spec: { ... }

Удалите первый template: блок и переместите полный набор меток в один template: блок, который остался.

1 голос
/ 10 июля 2020

Ошибка говорит сама за себя: "selector" does not match template "labels".

Отредактируйте файлы YAML и установите одинаковые пары ключ-значение в selector.matchLabels и metadata.labels.

spec:
  selector:
    matchLabels: # <---- This
      app: database
  template:
    metadata:
      labels: # <---- This
        io.kompose.service: database 
  • Почему важно поле selector?

Поле selector определяет, как развертывание определяет, какими модулями нужно управлять. В этом случае вы просто выбираете метку, которая определена в шаблоне Pod (приложение: nginx). Однако возможны более сложные правила выбора, если сам шаблон Pod удовлетворяет правилу.

Обновление:

Один из возможных примеров может быть:

spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: database
  template:
    metadata:
      labels:
         app.kubernetes.io/name: database

Update2:

нет совпадений для типа «Развертывание» в версии «extensions / v1beta1»

Объект apiVersion для Deployment теперь приложений / v1 .

apiVersion: apps/v1 # <-- update here.
kind: Deployment
... ... ...
...