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 comandoskubectl
ykn
. Consulta cómo instalarkn
.
Antes de empezar
- Debes tener acceso a un clúster de GKE nuevo.
- Puedes crear el clúster en el mismo proyecto o en uno nuevo. Google Cloud
- Tu clúster debe cumplir los requisitos de Knative.
- Consulta cómo crear un clúster:
- Debes migrar manualmente todas las configuraciones de clúster a tu nuevo clúster de Knative, incluidas las siguientes:
- Debes crear y configurar nuevos controles de acceso de gestión de identidades y accesos y de control de acceso basado en roles:
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.
Instala el operador de Knative:
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
Define la CLI de
kubectl
para que use el espacio de nombresdefault
:kubectl config set-context --current --namespace=default
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
Instala el componente Knative Serving:
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
Despliega el archivo YAML en tu clúster:
kubectl apply -f SERVING_FILENAME.yaml
Sustituye SERVING_FILENAME por el archivo YAML que has creado.
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.
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
Ejecuta el siguiente comando para habilitar la inyección de sidecar:
kubectl label namespace default istio-injection=enabled
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: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
- LOCAL_GATEWAY_NAMESPACE es el espacio de nombres
en el que has instalado Knative Serving. Predeterminado:
Despliega el servicio SERVING_FILENAME.yaml actualizado en tu clúster de Knative:
kubectl apply -f SERVING_FILENAME.yaml
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.
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.
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: {} ...
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.
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.