Arbeitslasten zu Knative OSS migrieren

In dieser Anleitung erfahren Sie, wie Sie Ihre Arbeitslasten zur Ausführung im Open-Source-Angebot Knative mit Google Kubernetes Engine migrieren. Im Allgemeinen müssen Sie bei der Migration Ihrer Arbeitslasten die Komponente Knative Serving in einem neuen GKE-Cluster installieren und dann alle Dienste in diesem Knative-Cluster noch einmal bereitstellen.

Während die Nutzung, Verwaltung und Unterstützung von Open-Source-Knative in Ihrer Verantwortung liegt, bietet Ihnen die Migration zu Knative die Möglichkeit, Ihre Arbeitslasten weiterhin auf der Google Kubernetes Engine-Plattform auszuführen.

Wichtige Unterschiede:

  • Der Support ist auf Google Kubernetes Engine beschränkt. Sie können sich an die Knative-Community wenden, um Support für Knative zu erhalten.
  • Die Google Cloud-Befehlszeile (gcloud) wird nur von Google Kubernetes Engine unterstützt. Knative unterstützt kubectl- und kn-Befehle. So installieren Sie kn

Hinweise

Knative in Google Kubernetes Engine installieren

Knative bietet mehrere Installationsoptionen und Netzwerkebenen, die Sie verwenden können. In den folgenden Knative-Installationsschritten werden die Knative-Operator-Methode und die Istio-Netzwerkebene verwendet.

  1. Installieren Sie den Knative Operator:

    1. Stellen Sie den Operator in Ihrem Cluster bereit:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
      

      Ersetzen Sie VERSION durch eine Version des Knative Operators.

      Beispiel:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
      
    2. Legen Sie in der kubectl-CLI den Namespace default fest:

      kubectl config set-context --current --namespace=default
      
    3. Überprüfen Sie, ob der Operator erfolgreich erstellt wurde:

      kubectl get deployment knative-operator
      

      Ergebnis:

      NAME               READY   UP-TO-DATE   AVAILABLE   AGE
      knative-operator   1/1     1            1           6m43s
      
  2. Installieren Sie die Komponente "Knative Serving":

    1. Erstellen Sie eine YAML-Datei mit folgendem Inhalt, zum Beispiel SERVING_FILENAME.yaml:

      apiVersion: v1
      kind: Namespace
      metadata:
        name: knative-serving
      ---
      apiVersion: operator.knative.dev/v1alpha1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      
    2. Stellen Sie die YAML-Datei im Cluster bereit:

      kubectl apply -f SERVING_FILENAME.yaml
      

      Ersetzen Sie SERVING_FILENAME durch die erstellte YAML-Datei.

  3. Installieren Sie Istio mit Sidecar-Injektion als Netzwerkebene:

    Sie haben die Möglichkeit, eine alternative Istio-Installation durchzuführen und zu konfigurieren. Alle Istio-Installationsoptionen finden Sie auf der Knative-Website. Die Installation kann länger als 30 Minuten dauern.

    1. Laden Sie Istio von der Release-Seite herunter.

    2. Installieren Sie Istio, indem Sie den folgenden Befehl mit dem Flag --set hub=gcr.io/istio-release ausführen, um eine Docker-Ratenbegrenzung zu vermeiden:

      istioctl install --set hub=gcr.io/istio-release
      
    3. Führen Sie den folgenden Befehl aus, um die Sidecar-Injektion zu aktivieren:

      kubectl label namespace default istio-injection=enabled
      
    4. Optional: Istio ist standardmäßig im Namespace istio-system installiert. Wenn Sie einen anderen Namespace konfigurieren möchten, können Sie die folgenden Schritte ausführen:

      1. Zum Konfigurieren eines benutzerdefinierten Namespace für Istion hängen Sie die Attribute spec.config.istio an die SERVING_FILENAME.yaml-Konfigurationsdatei an. Beispiel:

        apiVersion: operator.knative.dev/v1alpha1
        kind: KnativeServing
        metadata:
          name: knative-serving
          namespace: knative-serving
        spec:
          # ...
          config:
            istio:
              local-gateway.LOCAL_GATEWAY_NAMESPACE.knative-local-gateway: "knative-local-gateway.ISTIO_NAMESPACE.svc.cluster.local"
        

        Ersetzen Sie:

        • LOCAL_GATEWAY_NAMESPACE ist der Namespace, in dem Sie Knative Serving installiert haben. Standard: knative-serving
        • ISTIO_NAMESPACE ist der Namespace, in dem Istio installiert ist. Standard: istio-system
      2. Stellen Sie den aktualisierten Dienst SERVING_FILENAME.yaml in Ihrem Knative-Cluster bereit:

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. Prüfen Sie die Istio-Installation, indem Sie bestätigen, dass sich istio-ingressgateway im angegebenen Namespace befindet:

        kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
        

        Ersetzen Sie ISTIO_NAMESPACE durch den Namespace, in dem Sie Istio installiert haben. Standard: istio-system

        Ergebnis:

        NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                                      AGE
        istio-ingressgateway   LoadBalancer   10.232.10.190   34.123.5.116   15021:30337/TCP,80:32549/TCP,443:31210/TCP   119m
        

Dienst migrieren

Zum Migrieren eines Dienstes stellen Sie die YAML-Konfigurationsdatei des Dienstes in Ihrem Knative-Cluster bereit.

  1. Exportieren Sie Ihren Knative-Bereitstellungsdienst in eine lokale YAML-Datei, indem Sie den folgenden Befehl ausführen:

    gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
    

    Ersetzen Sie:

    • SERVICE durch den Namen Ihres Knative-Bereitstellungsdienstes.
    • NAMESPACE durch den Namespace, in dem Ihr Dienst ausgeführt wird.
    • CLUSTER durch den Namen des Clusters, in dem Ihr Dienst ausgeführt wird.
    • FILENAME durch einen eindeutigen Dateinamen Ihrer Wahl.
  2. Ändern Sie die exportierte Datei FILENAME.yaml, um unerwünschte Knative-Bereitstellungskonfigurationen zu entfernen. Löschen Sie dazu die folgenden Attribute und deren Werte:

    • metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
    • metadata.managedFields
    • spec.template.spec.containers.readinessProbes
    • spec.template.spec.enableServiceLinks

      Möglicherweise müssen Sie beispielsweise die folgende Konfiguration unter den Attributen spec: > template: > spec: > containers: entfernen:

      ...
       readinessProbe:
         successThreshold: 1
         tcpSocket: {}
      ...
      
  3. Stellen Sie die geänderte Datei .yaml in Ihrem Knative-Cluster bereit:

    kubectl apply -f SERVICE.yaml
    

    Ersetzen Sie SERVICE durch den Namen der Konfigurationsdatei Ihres Dienstes.

  4. Greifen Sie über eine Testdomain oder cURL-Befehle auf den bereitgestellten Dienst zu. Sie können einen Platzhalter-DNS-Dienst verwenden, um den externen Zugriff auf Ihren Dienst zu testen. Weitere Optionen finden Sie in der Knative-Dokumentation im Abschnitt DNS konfigurieren.

    Führen Sie den folgenden Befehl aus, um Magic DNS (sslip.io) zu verwenden.

    Sie können auch sslip.io direkt verwenden.

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-vVERSION/serving-default-domain.yaml
    

    Ersetzen Sie VERSION durch Ihre Version von Knative Serving.

    Beispiel:

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.3.0/serving-default-domain.yaml
    

Traffic zu Ihrem Dienst migrieren

Nachdem Sie Ihre neu bereitgestellten Dienste getestet haben und für die Migration des gesamten Produktionstraffics bereit sind, können Sie Ihre benutzerdefinierte Domain konfigurieren und Ihre DNS-Einträge mit Ihrem Registrator aktualisieren. Folgen Sie der Anleitung unter Benutzerdefinierte Domains konfigurieren.