部署 Yaml 文件

Deployment Yaml file

我正在使用 article 作为指南在 minkube 上学习 SQL 服务器 BDC。我尝试通过 运行 代码部署以下 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

由于 v1beta1 API 版本而出错。我通过 运行 转换了这个 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: {}

但是当我部署上面的脚本时,我得到:

Error validating "deployment.yaml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false

它与 matchlabels/matchexpressions 有关,但我无法解决它。有人能指出我正确的方向吗?

您需要在部署的规范部分添加 selector。这是一个强制性的 field.The .spec.selector 字段定义部署如何找到要管理的 Pods。在这种情况下,您只需 select 在 Pod 模板 (app: mssql) 中定义的标签。然而,更复杂的 selection 规则是可能的,只要 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: {}

missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec

您需要 select 或 select,其中 pods 配置为部署规范。

解决方案:

  selector:
    matchLabels:
      app: mssql
  template:
    metadata:
      labels:
        app: mssql