Развертывание файла Yaml

Я изучаю SQL Server BDC на minkube, используя этот article в качестве руководства. Я попытался развернуть приведенный ниже файл yaml, запустив код: kubectl apply -f deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mssql-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mssql
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: mssql
        image: microsoft/mssql-server-linux
        ports:
        - containerPort: 1433
          securityContext:
          privileged: true
        env:
        - name: ACCEPT_EULA
          value: "Y"
        - name: SA_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mssql
              key: SA_PASSWORD
      volumeMounts:
      - name: mssqldb
        mountPath: /var/opt/mssql
    volumes:
    - name: mssqldb
      persistentVolumeClaim:
        claimName: pvc0001

Произошла ошибка из-за версии APIV v1beta1. Я преобразовал этот yaml-файл, запустив: kubectl convert -f deployment.yaml и получил следующий сценарий:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  name: mssql-deployment
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector: null
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mssql
    spec:
      containers:
      - env:
        - name: ACCEPT_EULA
          value: "Y"
        - name: SA_PASSWORD
          valueFrom:
            secretKeyRef:
              key: SA_PASSWORD
              name: mssql
        image: microsoft/mssql-server-linux
        imagePullPolicy: Always
        name: mssql
        ports:
        - containerPort: 1433
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 10
status: {}

Но когда я развертываю приведенный выше сценарий, я получаю:

Ошибка проверки «deployment.yaml»: ошибка проверки данных: ValidationError (Deployment.spec): отсутствует обязательное поле «selector» в io.k8s.api.apps.v1.DeploymentSpec; если вы решите игнорировать эти ошибки, отключите проверку с помощью --validate = false

Это связано с метками совпадений / выражениями совпадений, но я не могу с этим справиться. Может ли кто-нибудь указать мне правильное направление?


person Gopinath Rajee    schedule 22.05.2020    source источник


Ответы (2)


Вам нужно добавить selector в раздел спецификации развертывания. Это обязательное поле. Поле .spec.selector определяет, как Развертывание находит, какими модулями нужно управлять. В этом случае вы просто выбираете метку, которая определена в шаблоне Pod (app: mssql). Однако возможны более сложные правила выбора, если сам шаблон Pod удовлетворяет этому правилу.

apiVersion: apps/v1
kindapiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  name: mssql-deployment
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: mssql
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mssql
    spec:
      containers:
      - env:
        - name: ACCEPT_EULA
          value: "Y"
        - name: SA_PASSWORD
          valueFrom:
            secretKeyRef:
              key: SA_PASSWORD
              name: mssql
        image: microsoft/mssql-server-linux
        imagePullPolicy: Always
        name: mssql
        ports:
        - containerPort: 1433
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 10
status: {}
person Arghya Sadhu    schedule 22.05.2020

отсутствует обязательное поле "selector" в io.k8s.api.apps.v1.DeploymentSpec

Вам нужен селектор, чтобы выбрать, какие модули настроены в соответствии со спецификацией развертывания.

решение:

  selector:
    matchLabels:
      app: mssql
  template:
    metadata:
      labels:
        app: mssql
person RammusXu    schedule 22.05.2020
comment
Я понял, что Convert пропустил часть тома из исходного файла развертывания: volumeMounts: - mountPath: / redis-master-data name: data volume: - name: data emptyDir: {} Я попытался добавить в конце, но он дал ошибки : ошибка проверки данных: [ValidationError (Deployment.spec.template.spec): неизвестное поле volumeMounts в io.k8s.api.core.v1.PodSpec, ValidationError (Deployment.spec.template): неизвестные тома поля в io.k8s. api.core.v1.PodTemplateSpec]; - person Gopinath Rajee; 22.05.2020
comment
Я разобрался. Volumemount должен быть прямо под Continer. - person Gopinath Rajee; 22.05.2020