【问题标题】:Deployment Yaml file部署 Yaml 文件
【发布时间】:2020-05-22 06:29:24
【问题描述】:

我正在使用 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 而出错。我通过运行转换了这个 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):io.k8s.api.apps.v1.DeploymentSpec 中缺少必填字段“selector”;如果您选择忽略这些错误,请使用 --validate=false 关闭验证

它与匹配标签/匹配表达式有关,但我无法解决它。有人能指出我正确的方向吗?

【问题讨论】:

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


    【解决方案1】:

    您需要在部署的规范部分添加selector。这是一个必填字段。.spec.selector 字段定义了 Deployment 如何找到要管理的 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: {}
    

    【讨论】:

      【解决方案2】:

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

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

      解决方案:

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

      【讨论】:

      • 我意识到 Convert 已经从原始部署文件中遗漏了 Volume 部分:volumeMounts: - mountPath: /redis-master-data name: data volumes: - name: data emptyDir: {} 我试过了最后添加但它给出错误:错误验证数据:[ValidationError(Deployment.spec.template.spec):io.k8s.api.core.v1.PodSpec中的未知字段“volumeMounts”,ValidationError(Deployment.spec.template ): io.k8s.api.core.v1.PodTemplateSpec 中的未知字段“volumes”];
      • 我把它整理好了。 Volumemount 需要位于 Continer 的正下方
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多