Migrar cargas de trabajo a Knative OSS

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

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

Diferencias destacables:

  • La asistencia se limita a Google Kubernetes Engine. Puedes ponerte en contacto con la comunidad de Knative para obtener asistencia sobre Knative.
  • Google Cloud CLI (gcloud) solo es compatible con Google Kubernetes Engine. Knative admite los comandos kubectl y kn. Consulta cómo instalar kn.

Antes de empezar

Instalar Knative en Google Kubernetes Engine

Knative ofrece 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 del operador de Knative y la capa de red de Istio.

  1. Instala el operador de Knative:

    1. Despliega el operador en tu clúster:

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

      Sustituye 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. Define la CLI de kubectl para que use el espacio de nombres default:

      kubectl config set-context --current --namespace=default
      
    3. Comprueba que el operador se haya creado correctamente:

      kubectl get deployment knative-operator
      

      Resultado:

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

    1. Crea un archivo YAML con el siguiente contenido, 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. Despliega el archivo YAML en tu clúster:

      kubectl apply -f SERVING_FILENAME.yaml
      

      Sustituye SERVING_FILENAME por el archivo YAML que has creado.

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

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

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

    2. Instala Istio ejecutando el siguiente comando con la marca --set hub=gcr.io/istio-release para evitar la limitación de frecuencia de Docker:

      istioctl install --set hub=gcr.io/istio-release
      
    3. Ejecuta el siguiente comando para habilitar la inyecció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 quieres configurar otro espacio de nombres, puedes seguir estos pasos:

      1. Para configurar un espacio de nombres personalizado para Istio, añade 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"
        

        Sustituye:

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

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. Verifica la instalación de Istio confirmando que istio-ingressgateway se encuentra en el espacio de nombres que has especificado:

        kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
        

        Sustituye ISTIO_NAMESPACE por el espacio de nombres en el que has instalado Istio. Predeterminado: 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
        

Migrar un servicio

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

  1. Exporta tu servicio de Knative Serving a un archivo YAML local ejecutando el siguiente comando:

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

    Sustituye:

    • SERVICE con el nombre de tu servicio de Knative.
    • NAMESPACE con el espacio de nombres en el que se ejecuta tu servicio.
    • CLUSTER con el nombre del clúster en el que se ejecuta tu servicio.
    • FILENAME con el nombre de archivo único que elijas.
  2. Modifique el archivo FILENAME.yaml exportado para eliminar las configuraciones de Knative Serving que no quiera. Para ello, elimine 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, puede que tengas que quitar la siguiente configuración de los atributos spec: > template: > spec: > containers::

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

    kubectl apply -f SERVICE.yaml
    

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

  4. Accede al servicio desplegado mediante un dominio de prueba o comandos cURL. Puedes usar un servicio DNS comodín para probar el acceso externo a tu servicio. Consulta la sección sobre configuración de DNS en la documentación de Knative para ver más opciones.

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

    También puedes usar directamente sslip.io.

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

    Sustituye VERSION por tu versión de Knative Serving.

    Ejemplo:

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

Migrar tráfico a tu servicio

Una vez que hayas probado los servicios que acabas de implementar y estés listo para migrar todo el tráfico de producción, podrás configurar tu dominio personalizado y actualizar los registros DNS con tu registrador. Sigue las instrucciones de Configurar dominios personalizados.