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 comandoskubectl
ykn
. Aprende a instalarkn
.
Antes de comenzar
- Debes tener acceso a un clúster de GKE nuevo.
- Puedes crear tu clúster nuevo en el mismo proyecto de Google Cloud o en uno nuevo.
- El clúster debe cumplir con los requisitos de Knative.
- Aprende a crear un clúster:
- Debes transferir de forma manual todas las configuraciones de clúster a tu clúster nuevo de Knative, incluidas, entre otras, las siguientes:
- Debes crear y configurar nuevos controles de acceso de IAM y RBAC:
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.
Instala el Operador de Knative:
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
Configura la CLI de
kubectl
para usar el espacio de nombresdefault
:kubectl config set-context --current --namespace=default
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
Instala el componente de Knative Serving:
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
Implementa el archivo YAML en el clúster:
kubectl apply -f SERVING_FILENAME.yaml
Reemplaza SERVING_FILENAME por el archivo YAML que creaste.
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.
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
Ejecuta el siguiente comando para habilitar la inserció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 deseas configurar un espacio de nombres diferente, puedes seguir estos pasos: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
- LOCAL_GATEWAY_NAMESPACE es el espacio de nombres en el que instalaste Knative Serving. Predeterminada:
Implementa el servicio SERVING_FILENAME.yaml actualizado en tu clúster de Knative:
kubectl apply -f SERVING_FILENAME.yaml
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.
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.
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: {} ...
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.
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.