Migra cargas de trabajo a Knative OSS

Usa esta guía para migrar tus cargas de trabajo de modo que se ejecuten en la oferta de Knative de código abierto con Google Kubernetes Engine. En general, para migrar tus cargas de trabajo, debes instalar el componente Knative Serving en un nuevo clúster de GKE y, luego, volver a implementar cada uno de tus servicios en ese clúster de Knative.

Si bien el uso, la administración y la asistencia de Knative de código abierto son tu elección y responsabilidad, migrar a Knative te brinda la oportunidad de seguir ejecutando tus cargas de trabajo en la plataforma de Google Kubernetes Engine.

Diferencias destacadas:

  • La asistencia se limita a Google Kubernetes Engine. Puedes comunicarte con la comunidad de Knative para obtener asistencia de Knative.
  • Google Cloud CLI (gcloud) solo es compatible con Google Kubernetes Engine. Knative admite los comandos kubectl y kn. Aprende a instalar kn.

Antes de comenzar

Instala Knative en Google Kubernetes Engine

Knative proporciona varias opciones de instalación y capas de red que puedes usar. En los siguientes pasos de instalación de Knative, se usa el método de Operador de Knative y la capa de herramientas de redes de Istio.

  1. Instala el Operador de Knative:

    1. Implementa el Operador en tu clúster:

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

      Reemplaza VERSION por una versión del Operador de Knative.

      Ejemplo:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
      
    2. Configura la CLI de kubectl para usar el espacio de nombres default:

      kubectl config set-context --current --namespace=default
      
    3. Verifica que el Operador se haya creado de forma correcta:

      kubectl get deployment knative-operator
      

      Resultado:

      NAME               READY   UP-TO-DATE   AVAILABLE   AGE
      knative-operator   1/1     1            1           6m43s
      
  2. Instala el componente de Knative Serving:

    1. Crea un archivo YAML con lo siguiente, por ejemplo, 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. Implementa el archivo YAML en el clúster:

      kubectl apply -f SERVING_FILENAME.yaml
      

      Reemplaza SERVING_FILENAME por el archivo YAML que creaste.

  3. Instala Istio con la inyección de sidecar como capa de herramientas de redes:

    Tienes la opción de realizar y configurar una instalación alternativa de Istio. Consulta todas las opciones de instalación de Istio en el sitio web de Knative. Ten en cuenta que esta instalación puede tardar más de 30 minutos.

    1. Descarga Istio desde la página de actualizaciones.

    2. Para instalar Istio, ejecuta el siguiente comando con la marca --set hub=gcr.io/istio-release a fin de evitar el límite de frecuencia de Docker:

      istioctl install --set hub=gcr.io/istio-release
      
    3. Ejecuta el siguiente comando para habilitar la inserción de sidecar:

      kubectl label namespace default istio-injection=enabled
      
    4. Opcional: De forma predeterminada, Istio se instala en el espacio de nombres istio-system. Si deseas configurar un espacio de nombres diferente, puedes seguir estos pasos:

      1. A fin de configurar un espacio de nombres personalizado para Istion, agrega los atributos spec.config.istio a tu archivo de configuración SERVING_FILENAME.yaml. Por ejemplo:

        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"
        

        Reemplaza lo siguiente:

        • LOCAL_GATEWAY_NAMESPACE es el espacio de nombres en el que instalaste Knative Serving. Predeterminada: knative-serving
        • ISTIO_NAMESPACE es el espacio de nombres en el que se instala Istio. Predeterminada: istio-system
      2. Implementa el servicio SERVING_FILENAME.yaml actualizado en tu clúster de Knative:

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. Para verificar la instalación de Istio, confirma que istio-ingressgateway reside en tu espacio de nombres especificado:

        kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
        

        Reemplaza ISTIO_NAMESPACE por el espacio de nombres en el que instalaste Istio. Predeterminada: istio-system

        Resultado:

        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
        

Migra un servicio

Para migrar un servicio, implementa el archivo de configuración YAML de tu servicio en el clúster de Knative.

  1. Ejecuta el siguiente comando para exportar el servicio de entrega de Knative a un archivo YAML local:

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

    Reemplaza lo siguiente:

    • SERVICE por el nombre del servicio de entrega de Knative.
    • NAMESPACE por el espacio de nombres en el que se ejecuta el servicio.
    • CLUSTER por el nombre del clúster en el que se ejecuta el servicio.
    • FILENAME por un nombre de archivo único de tu elección.
  2. Modifica el archivo FILENAME.yaml exportado para quitar las configuraciones de entrega no deseadas de Knative. Para ello, borra cualquiera de los siguientes atributos y sus valores:

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

      Por ejemplo, es posible que debas quitar la siguiente configuración de los atributos spec: > template: > spec: > containers::

      ...
       readinessProbe:
         successThreshold: 1
         tcpSocket: {}
      ...
      
  3. Implementa el archivo .yaml modificado en tu clúster de Knative:

    kubectl apply -f SERVICE.yaml
    

    Reemplaza SERVICE por el nombre del archivo de configuración de tu servicio.

  4. Accede a tu servicio implementado con un dominio de prueba o comandos cURL. Puedes usar un servicio de DNS comodín para probar el acceso externo a tu servicio. Consulta la sección sobre cómo configurar el DNS en los documentos de Knative para obtener más opciones.

    Para usar Magic DNS (sslip.io), ejecuta el siguiente comando.

    Ten en cuenta que también puedes usar sslip.io directamente.

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

    Reemplaza VERSION por la versión de Knative Serving.

    Ejemplo:

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

Migra el tráfico a tu servicio

Después de probar los servicios recién implementados y estar listo para migrar todo el tráfico de producción, puedes configurar el dominio personalizado y actualizar los registros DNS con el registrador. Sigue las instrucciones de Configura dominios personalizados.