Ошибка Kubeclt (v1.14 до v1.16): ошибка при переходе с v1.14 на v1.16 - PullRequest
0 голосов
/ 26 октября 2019

У меня есть очень простой файл 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.

1 Ответ

2 голосов
/ 26 октября 2019

Для перехода от extensions/v1beta1 к apps/v1 также необходимо указать поле selector, это больше не выводится из шаблона модуля.

Добавьте селектор, который соответствует метке шаблона Pod, и выдолжно быть хорошо.

...