Kubeclt错误(从v1.14到v1.16):从v1.14迁移到v1.16时发生错误

问题描述 投票:0回答:1

我有这个非常基本的YAML文件,我试图从kubectl v1.14迁移到v1.16。我将extensions/v1beta1更改为apps/v1,并添加了选择器,因为它们在v1.16中是必需的。

我的原始YAML文件在v1.14中正常工作

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cpx-ingress-hotdrinks
spec:
  replicas: 1
  template:
    metadata:
      name: cpx-ingress-hotdrinks
      labels:
        app: cpx-ingress-hotdrinks
        app1: exporter
      annotations:
        NETSCALER_AS_APP: "True"
    spec:
      serviceAccountName: cpx
      containers:
        - name: cpx-ingress-hotdrinks
          image: "quay.io/citrix/citrix-k8s-cpx-ingress:13.0-36.28"
          securityContext: 
             privileged: true
          env:
          - name: "EULA"
            value: "yes"
          - name: "KUBERNETES_TASK_ID"
            value: ""
          - name: "NS_MGMT_SERVER"
            value: "10.106.157.115"
          - name: "NS_MGMT_FINGER_PRINT"
            value: "2C:77:B6:BA:E0:29:F4:01:53:D5:71:B5:3E:D0:1D:54:CA:75:E5:C1"
          - name: "NS_HTTP_PORT"
            value: "9080"
          - name: "NS_HTTPS_PORT"
            value: "9443"
          - name: "LOGSTREAM_COLLECTOR_IP"
            value: "10.106.157.115"
          imagePullPolicy: IfNotPresent
        # Add cic as a sidecar
        - name: cic
          image: "in-docker-reg.eng.citrite.net/cic-dev/cic:357"
          env:
          - name: "EULA"
            value: "yes"
          - name: "NS_IP"
            value: "127.0.0.1"
          - name: "NS_PROTOCOL"
            value: "HTTP"
          - name: "NS_PORT"
            value: "80"
          - name: "NS_DEPLOYMENT_MODE"
            value: "SIDECAR"
          - name: "NS_ENABLE_MONITORING"
            value: "YES"
          - name: "NS_LOGPROXY"
            value: "10.106.157.115"
          - name: POD_NAME
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace
          args:
            - --ingress-classes
              hotdrink
            - --default-ssl-certificate
              $(POD_NAMESPACE)/hotdrink-secret
          imagePullPolicy: IfNotPresent

---

我修改了v1.16的文件。我的YAML文件现在看起来像这样

apiVersion: apps/v1 
kind: Deployment
metadata:
  name: cpx-ingress-hotdrinks
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cpx-ingress-hotdrinks
      app1: exporter
  template:
    metadata:
      name: cpx-ingress-hotdrinks
      labels:
        app: cpx-ingress-hotdrinks
        app1: exporter
      annotations:
        NETSCALER_AS_APP: "True"
    spec:
      serviceAccountName: cpx
      containers:
        - name: cpx-ingress-hotdrinks
          image: "quay.io/citrix/citrix-k8s-cpx-ingress:13.0-36.28"
          #image: "cpx:fix"
          securityContext: 
             privileged: true
          env:
          - name: "EULA"
            value: "yes"
          - name: "KUBERNETES_TASK_ID"
            value: ""
          - name: "NS_MGMT_SERVER"
            value: "10.106.157.115"
            #value: "10.106.157.116"
            #value: "10.102.103.177"
          - name: "NS_MGMT_FINGER_PRINT"
            value: "2C:77:B6:BA:E0:29:F4:01:53:D5:71:B5:3E:D0:1D:54:CA:75:E5:C1"
            # value: "9C:13:79:F5:90:AF:6C:81:91:DE:D3:86:6E:50:7F:EA:A2:62:EE:E3"
            #value: "2C:17:0C:25:1D:ED:77:86:45:C6:D0:AE:C4:9F:F2:CA:7A:B2:BB:95"
          - name: "NS_HTTP_PORT"
            value: "9080"
          - name: "NS_HTTPS_PORT"
            value: "9443"
          - name: "LOGSTREAM_COLLECTOR_IP"
            value: "10.106.157.115"
            #value: "10.106.157.116"
            #value: "10.102.103.177"
          #- name: "NS_CPX_LITE"
          #  value: "1"
          imagePullPolicy: IfNotPresent
        # Add cic as a sidecar
        - name: cic
          image: "in-docker-reg.eng.citrite.net/cic-dev/cic:357"
          env:
          - name: "EULA"
            value: "yes"
          - name: "NS_IP"
            value: "127.0.0.1"
          - name: "NS_PROTOCOL"
            value: "HTTP"
          - name: "NS_PORT"
            value: "80"
          - name: "NS_DEPLOYMENT_MODE"
            value: "SIDECAR"
          - name: "NS_ENABLE_MONITORING"
            value: "YES"
          - name: "NS_LOGPROXY"
            value: "10.106.157.116"
          - name: POD_NAME
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace
          args:
            - --ingress-classes
              hotdrink
            - --default-ssl-certificate
              $(POD_NAMESPACE)/hotdrink-secret
          imagePullPolicy: IfNotPresent
---

但是在运行时,出现以下错误

error: error validating "/root/config/cpx.yaml": 
error validating data: [ValidationError(Deployment.spec.template): 
unknown field "selector" in io.k8s.api.core.v1.PodTemplateSpec, 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

什么可能导致此问题?我遵循了kubectl折旧手册中的所有步骤吗?理想情况下,它也应该在v1.16中工作。

kubernetes kubectl
1个回答
1
投票

extensions/v1beta1移到apps/v1还需要通知selector字段,这不再是从窗格模板中推断出来的。

添加与Pod模板的标签匹配的选择器,您应该会很好。

© www.soinside.com 2019 - 2024. All rights reserved.