Ce guide vous permet de migrer vos charges de travail pour les exécuter sur l'offre Open Source Knative avec Google Kubernetes Engine. En général, la migration de vos charges de travail nécessite l'installation du composant Knative Serving dans un nouveau cluster GKE, puis un redéploiement de chacun de vos services sur ce cluster Knative.
Bien que l'utilisation, la gestion et l'assistance de Knative relèvent de votre choix et de votre responsabilité, la migration vers Knative vous offre la possibilité de continuer à exécuter vos charges de travail sur la plateforme Google Kubernetes Engine.
Différences notables :
- L'assistance est limitée à Google Kubernetes Engine. Vous pouvez contacter la communauté Knative pour obtenir de l'aide sur Knative.
- Google Cloud CLI (
gcloud
) n'est compatible qu'avec Google Kubernetes Engine. Knative est compatible avec les commandeskubectl
etkn
. Découvrez comment installerkn
.
Avant de commencer
- Vous devez avoir accès à un nouveau cluster GKE.
- Vous pouvez créer votre cluster dans le même projet ou un nouveau projet Google Cloud.
- Votre cluster doit répondre aux exigences de Knative.
- Découvrez comment créer un cluster :
- Vous devez effectuer manuellement le portage de toutes les configurations de cluster vers votre nouveau cluster Knative, y compris, mais sans s'y limiter :
- Vous devez créer et configurer de nouveaux contrôles d'accès IAM et RBAC :
Installer Knative sur Google Kubernetes Engine
Knative fournit plusieurs options d'installation et couches réseau que vous pouvez choisir d'utiliser. Les étapes d'installation de Knative suivantes utilisent la méthode de l'opérateur Knative et la couche de mise en réseau Istio.
Installez l'opérateur Knative :
Déployez l'opérateur sur votre cluster :
kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
Remplacez VERSION par une version de l'opérateur Knative.
Exemple :
kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
Définissez la CLI
kubectl
de façon à utiliser l'espace de nomsdefault
:kubectl config set-context --current --namespace=default
Vérifiez que l'opérateur a bien été créé :
kubectl get deployment knative-operator
Résultat :
NAME READY UP-TO-DATE AVAILABLE AGE knative-operator 1/1 1 1 6m43s
Installez le composant Knative Serving :
Créez un fichier YAML avec les éléments suivants, par exemple 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
Déployez le fichier YAML sur votre cluster :
kubectl apply -f SERVING_FILENAME.yaml
Remplacez SERVING_FILENAME par le fichier YAML que vous avez créé.
Installez Istio avec l'injection side-car en tant que couche réseau :
Vous avez la possibilité d'effectuer et de configurer une autre installation Istio. Consultez toutes les options d'installation d'Istio sur le site Web de Knative. Notez que cette installation peut prendre plus de 30 minutes.
Installez Istio en exécutant la commande suivante avec l'option
--set hub=gcr.io/istio-release
pour éviter la limitation du débit Docker :istioctl install --set hub=gcr.io/istio-release
Exécutez la commande suivante pour activer l'injection side-car :
kubectl label namespace default istio-injection=enabled
Facultatif : par défaut, Istio est installé dans l'espace de noms
istio-system
. Si vous souhaitez configurer un autre espace de noms, procédez comme suit :Pour configurer un espace de noms personnalisé pour Istio, ajoutez les attributs
spec.config.istio
à votre fichier de configuration SERVING_FILENAME.yaml. Par exemple :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"
Remplacez :
- LOCAL_GATEWAY_NAMESPACE est l'espace de noms dans lequel vous avez installé Knative Serving. Par défaut :
knative-serving
- ISTIO_NAMESPACE est l'espace de noms dans lequel Istio est installé. Par défaut :
istio-system
- LOCAL_GATEWAY_NAMESPACE est l'espace de noms dans lequel vous avez installé Knative Serving. Par défaut :
Déployez le service SERVING_FILENAME.yaml mis à jour sur votre cluster Knative :
kubectl apply -f SERVING_FILENAME.yaml
Confirmez l'installation d'Istio en vérifiant que
istio-ingressgateway
se trouve dans l'espace de noms spécifié :kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
Remplacez ISTIO_NAMESPACE par l'espace de noms dans lequel vous avez installé Istio. Par défaut :
istio-system
Résultat :
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
Migrer un service
Pour migrer un service, vous devez déployer le fichier de configuration YAML de votre service sur votre cluster Knative.
Exportez votre service Knative serving vers un fichier YAML local en exécutant la commande suivante :
gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
Remplacez :
SERVICE
par le nom de votre service Knative serving ;NAMESPACE
par l'espace de noms dans lequel votre service s'exécute ;CLUSTER
par le nom du cluster sur lequel votre service s'exécute ;FILENAME
par un nom de fichier unique de votre choix.
Modifiez le fichier
FILENAME.yaml
exporté pour supprimer les configurations Knative serving indésirables en supprimant l'un des attributs suivants et leurs valeurs :metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
metadata.managedFields
spec.template.spec.containers.readinessProbes
spec.template.spec.enableServiceLinks
Par exemple, vous devrez peut-être supprimer la configuration suivante dans les attributs
spec:
>template:
>spec:
>containers:
:... readinessProbe: successThreshold: 1 tcpSocket: {} ...
Déployez le fichier
.yaml
modifié sur votre cluster Knative :kubectl apply -f SERVICE.yaml
Remplacez SERVICE par le nom du fichier de configuration de votre service.
Accédez au service déployé à l'aide d'un domaine test ou de commandes
cURL
. Vous pouvez utiliser un service DNS générique pour tester l'accès externe à votre service. Consultez la section Configurer le DNS dans la documentation Knative pour découvrir plus d'options.Pour utiliser Magic DNS (sslip.io), exécutez la commande suivante.
Notez que vous pouvez également utiliser directement sslip.io.
kubectl apply -f https://github.com/knative/serving/releases/download/knative-vVERSION/serving-default-domain.yaml
Remplacez VERSION par votre version de Knative Serving.
Exemple :
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.3.0/serving-default-domain.yaml
Migrer le trafic vers votre service
Une fois que vous avez testé vos nouveaux services et que vous êtes prêt à migrer tout votre trafic de production, vous pouvez configurer votre domaine personnalisé et mettre à jour vos enregistrements DNS avec votre service d'enregistrement. Suivez les instructions de la section Configurer des domaines personnalisés.