Migrer des charges de travail vers Knative OSS

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 commandes kubectl et kn. Découvrez comment installer kn.

Avant de commencer

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.

  1. Installez l'opérateur Knative :

    1. 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
      
    2. Définissez la CLI kubectl de façon à utiliser l'espace de noms default :

      kubectl config set-context --current --namespace=default
      
    3. 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
      
  2. Installez le composant Knative Serving :

    1. 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
      
    2. 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éé.

  3. 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.

    1. Téléchargez Istio à partir de la page des versions.

    2. 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
      
    3. Exécutez la commande suivante pour activer l'injection side-car :

      kubectl label namespace default istio-injection=enabled
      
    4. 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 :

      1. Pour configurer un espace de noms personnalisé pour Istio, ajoutez les attributs spec.config.istio à votre fichier de configuration SERVING_FILENAME.yaml. 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
      2. Déployez le service SERVING_FILENAME.yaml mis à jour sur votre cluster Knative :

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. 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.

  1. 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.
  2. 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: {}
      ...
      
  3. 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.

  4. 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.