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ütztkubectl
- undkn
-Befehle. So installieren Siekn
Hinweise
- Sie müssen Zugriff auf einen neuen GKE-Cluster haben.
- Sie können Ihren neuen Cluster im selben oder in einem neuen Google Cloud-Projekt erstellen.
- Ihr Cluster muss die Knative-Anforderungen erfüllen.
- So erstellen Sie einen Cluster:
- Sie müssen alle Clusterkonfigurationen manuell auf Ihren neuen Knative-Cluster übertragen, einschließlich, aber nicht beschränkt auf:
- Sie müssen neue IAM- und RBAC-Zugriffssteuerungen erstellen und konfigurieren:
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.
Installieren Sie den Knative Operator:
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
Legen Sie in der
kubectl
-CLI den Namespacedefault
fest:kubectl config set-context --current --namespace=default
Ü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
Installieren Sie die Komponente "Knative Serving":
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
Stellen Sie die YAML-Datei im Cluster bereit:
kubectl apply -f SERVING_FILENAME.yaml
Ersetzen Sie SERVING_FILENAME durch die erstellte YAML-Datei.
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.
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
Führen Sie den folgenden Befehl aus, um die Sidecar-Injektion zu aktivieren:
kubectl label namespace default istio-injection=enabled
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: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
- LOCAL_GATEWAY_NAMESPACE ist der Namespace, in dem Sie Knative Serving installiert haben. Standard:
Stellen Sie den aktualisierten Dienst SERVING_FILENAME.yaml in Ihrem Knative-Cluster bereit:
kubectl apply -f SERVING_FILENAME.yaml
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.
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.
Ä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: {} ...
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.
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.