部署Yaml文件

时间:2020-05-22 06:29:24

标签: kubernetes deployment yaml minikube sql-server-2019

我正在使用此 article 作为指南,在minkube上学习SQL Server 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 APIVersion导致错误。我通过运行kubectl convert -f deployment.yaml转换了此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):io.k8s.api.apps.v1.DeploymentSpec中缺少必填字段“选择器”;如果您选择忽略这些错误,请使用--validate = false

关闭验证

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

2 个答案:

答案 0 :(得分:5)

您需要在部署的规范部分中添加一个selector。这是必填字段。.spec.selector字段定义部署如何查找要管理的Pod。在这种情况下,您只需选择在Pod模板(应用程序: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: {}

答案 1 :(得分:0)

缺少io.k8s.api.apps.v1.DeploymentSpec中的必填字段“选择器”

您需要一个选择器来选择将哪些Pod配置为部署规范。

解决方案:

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