En esta página, se explica cómo preparar clústeres para las actualizaciones a la versión 1.22 de GKE. Puedes encontrar clientes de API que realizan llamadas a APIs obsoletas eliminadas en la versión 1.22 y actualizar esos clientes para usar las APIs de DG. Para obtener información más detallada, consulta la Guía de migración de la API obsoleta de Kubernetes.
APIs eliminadas en la versión 1.22
La mayoría de las API obsoletas de la versión 1.22 de Kubernetes son antiguas API beta que pasaron de beta (v1beta1) a DG (v1). Las API DG proporcionan garantías de compatibilidad a largo plazo y deben usarse en lugar de las API beta obsoletas.
Se puede interactuar con todos los objetos existentes mediante las API DG.
Recursos de webhook
La versión beta de la API de MutatingWebhookConfiguration y ValidatingWebhookConfiguration ya no se entrega a partir de la versión 1.22.
- Migra los manifiestos y los clientes de la API para usar la versión de la API admissionregistration.k8s.io/v1.
Consulta la siguiente tabla que describe los cambios notables en la versión de la API DG:
Campo Cambiar webhooks[*].failurePolicyEl valor predeterminado cambió de IgnoreaFail.webhooks[*].matchPolicyEl valor predeterminado cambió de ExactaEquivalent.webhooks[*].timeoutSecondsEl valor predeterminado cambió de 30sa10s.webhooks[*].sideEffectsSe quita el valor predeterminado y el campo ahora es obligatorio. Solo se permiten NoneyNoneOnDryRun.webhooks[*].admissionReviewVersionsSe quita el valor predeterminado y ahora el campo es obligatorio (las versiones compatibles con AdmissionReviewsonv1yv1beta1).webhooks[*].nameDebe ser único en la lista de objetos creados a través de admissionregistration.k8s.io/v1.
CustomResourceDefinition
La versión beta de la API de CustomResourceDefinition ya no se entrega a partir de la versión 1.22.
- Migra los manifiestos y los clientes de la API para usar la versión de la API apiextensions.k8s.io/v1.
Consulta la siguiente tabla que describe los cambios notables en la versión de la API DG:
Campo Cambiar spec.scopeYa no está predeterminado en Namespaced. El valor se debe especificar de forma explícita.spec.versionSe quitó. Utiliza spec.versionsen lugar de esta función.spec.validationSe quitó. Utiliza spec.versions[*].schemaen lugar de esta función.spec.subresourcesSe quitó. Utiliza spec.versions[*].subresourcesen lugar de esta función.spec.additionalPrinterColumnsSe quitó. Utiliza spec.versions[*].additionalPrinterColumnsen lugar de esta función.spec.conversion.webhookClientConfigSe movió a spec.conversion.webhook.clientConfig.spec.conversion.conversionReviewVersionsSe movió a spec.conversion.webhook.conversionReviewVersions.spec.versions[*].schema.openAPIV3SchemaAhora es necesario cuando se crean objetos CustomResourceDefinitionv1 y debe ser un esquema estructural.spec.preserveUnknownFieldsEl valor trueno está permitido cuando se crean objetosCustomResourceDefinitionv1. El valor debe especificarse dentro de las definiciones de esquema comox-kubernetes-preserve-unknown-fields: true.additionalPrinterColumnsEn los elementos additionalPrinterColumns, se cambió el nombre del campoJSONPathajsonPath.
APIService
La versión beta de la API de APIService ya no se entrega a partir de la versión 1.22.
Migra los manifiestos y los clientes de la API para usar la versión de la API apiregistration.k8s.io/v1.
TokenReview
La versión beta de la API de TokenReview ya no se entrega a partir de la versión 1.22.
Migra los manifiestos y los clientes de la API para usar la versión de la API authentication.k8s.io/v1.
Recursos de SubjectAccessReview
La versión beta de la API de LocalSubjectAccessReview, SelfSubjectAccessReview y SubjectAccessReview ya no se entrega a partir de la versión 1.22.
- Migra los manifiestos y los clientes de la API para usar la versión de la API authorization.k8s.io/v1.
Consulta la siguiente tabla que describe los cambios notables en la versión de la API DG:
Campo Cambiar spec.groupSe cambió el nombre a spec.groups.
CertificateSigningRequest
La versión beta de la API de CertificateSigningRequest ya no se entrega a partir de la versión 1.22.
- Migra los manifiestos y los clientes de la API para usar la versión de la API certificates.k8s.io/v1.
Consulta la siguiente tabla que describe los cambios notables en la versión de la API DG:
Campo Cambiar spec.signerNamePara los clientes de API que soliciten certificados, este campo es obligatorio (consulta Firmantes conocidos de Kubernetes), y las solicitudes para kubernetes.io/legacy-unknownno pueden crearse a través de la API decertificates.k8s.io/v1.spec.usagesPara los clientes de API que soliciten certificados, este campo es obligatorio. Este campo no puede contener valores duplicados y solo debe contener usos conocidos. status.conditionsPara los clientes de API que aprueban o firman certificados, este campo no puede contener tipos duplicados. status.conditions[*].statusPara los clientes de API que aprueban o firman certificados, este campo ahora es obligatorio. status.certificatePara los clientes de API que aprueban o firman certificados, este campo debe estar codificado con PEM y contener solo bloques CERTIFICATE.
Lease
La versión beta de la API de Lease ya no se entrega a partir de la versión 1.22. Migra los manifiestos y los clientes de la API para usar la versión de la API coordination.k8s.io/v1.
Ingress (disponible hasta la versión 1.23 para clústeres creados en la versión 1.21 o anteriores)
Las versiones beta de la API (extensions/v1beta1 y networking.k8s.io/v1beta1) de Ingress ya no se entregan para los clústeres de GKE que ejecutan la versión 1.22 o una versión posterior si el clúster se creó en la versión 1.22 o una posterior.
Sin embargo, para los clústeres creados en la versión 1.21 de GKE o una versión anterior, y actualizados a la versión 1.22 en la versión del parche 1.22.7-gke.300 o posterior, aún puedes usar las versiones beta de la API hasta que el clúster se actualice a la versión 1.23. Esta es una excepción única para los clústeres más antiguos a fin de que tengas más tiempo para migrar tus clústeres desde estas versiones de API, que se quitan de Kubernetes de código abierto en la versión 1.22.
Los clústeres que ejecuten la versión 1.23 de GKE y versiones posteriores ya no entregarán las API beta Ingress obsoletas. Los manifiestos que usan esas versiones de la API ya no se pueden aplicar. Los objetos persistentes anteriores permanecen funcionales y se pueden ver y actualizar mediante las nuevas versiones de la API, antes y después de actualizar a la versión 1.23.
- Migra los manifiestos y los clientes de la API para usar la versión de la API networking.k8s.io/v1.
Consulta la siguiente tabla que describe los cambios notables en la versión de la API DG:
Campo Cambiar spec.backendSe cambió el nombre a spec.defaultBackend.backend serviceNameSe cambió el nombre a service.name.servicePortA los nombres de los campos servicePortde backend numéricos se les cambia el nombre aservice.port.number. A los nombres de los camposservicePortde backend de string se les cambia el nombre aservice.port.name.pathTypeAhora es necesario para cada ruta de acceso especificada. El valor puede ser Prefix,ExactoImplementationSpecific. Para hacer coincidir el comportamientov1beta1no definido, usaImplementationSpecific.
En los siguientes manifiestos, se describe el mismo Ingress en v1 y v1beta1:
Manifiesto v1beta1
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example
spec:
backend:
serviceName: default-backend
servicePort: 80
rules:
- http:
paths:
- path: /testpath
backend:
serviceName: test
servicePort: 80
Manifiesto v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
spec:
defaultBackend:
service:
name: default-backend
port:
number: 80
rules:
- http:
paths:
- path: /testpath
pathType: ImplementationSpecific
backend:
service:
name: test
port:
number: 80
Puedes usar la siguiente consulta para clústeres con la observabilidad de Google Cloud habilitada a fin de identificar a los clientes que acceden a las APIs v1beta1 de Ingress:
resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "networking.k8s.io/v1beta1")
protoPayload.request.kind="Ingress"
NOT ("kube-system")
IngressClass
La versión beta de la API de IngressClass ya no se entrega a partir de la versión 1.22.
Migra los manifiestos y los clientes de la API para usar la versión de la API networking.k8s.io/v1.
Recursos de RBAC
La versión beta de la API de ClusterRole, ClusterRoleBinding, Role y RoleBinding ya no se entrega a partir de la versión 1.22. Migra los manifiestos y los clientes de la API para usar la versión de la API rbac.authorization.k8s.io/v1.
PriorityClass
La versión beta de la API de PriorityClass ya no se entrega a partir de la versión 1.22.
Migra los manifiestos y los clientes de la API para usar la versión de la API scheduling.k8s.io/v1.
Recursos de almacenamiento
La versión beta de la API de CSIDriver, CSINode, StorageClass y VolumeAttachment ya no se entrega a partir de la versión 1.22. Migra los manifiestos y los clientes de la API para usar la versión de la API storage.k8s.io/v1.
Busca clústeres con APIs obsoletas
Puedes encontrar los clústeres que usan las APIs obsoletas en las estadísticas de baja. Las estadísticas de baja también proporcionan información como qué clientes de API llaman a las API obsoletas en tu clúster.
También puedes usar los registros de auditoría para encontrar qué clientes realizan llamadas a las APIs obsoletas.
Ubica los clientes de API que realizan llamadas de escritura a las APIs obsoletas
Para los clústeres con Google Cloud Observability habilitada, puedes usar la siguiente consulta del Registro de actividad del administrador a fin de mostrar el uso de APIs obsoletas por parte de los usuarios-agentes que no son administrados por Google:
resource.type="k8s_cluster"
labels."k8s.io/removed-release"="DEPRECATED_API_MINOR_VERSION"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.authenticationInfo.principalEmail!~("system:serviceaccount:kube-system:")
Reemplaza DEPRECATED_API_MINOR_VERSION por la versión secundaria en la que se quita la API obsoleta, por ejemplo, 1.22.
Los registros de auditoría de actividad del administrador se habilitan de forma automática para los clústeres de GKE. Con esta consulta, los registros muestran a los usuarios-agentes que realizan llamadas de escritura a las APIs obsoletas.
Ubica los clientes de API que realizan llamadas de lectura a las APIs obsoletas
De forma predeterminada, los registros de auditoría muestran solo las llamadas de escritura a las APIs obsoletas. Para mostrar también llamadas de lectura a las APIs obsoletas, configura los registros de auditoría de acceso a los datos.
Sigue las instrucciones para configurar registros de auditoría de acceso a los datos con la consola de Google Cloud . En la consola de Google Cloud ,
selecciona la API de Kubernetes Engine. En la pestaña Tipos de registro del panel de información, selecciona Admin Read y Data Read.
Con estos registros habilitados, ahora puedes usar la consulta original para ver las llamadas de lectura y de escritura en las APIs obsoletas.
Actualiza componentes de terceros
Es posible que las estadísticas de baja muestren resultados para agentes de terceros que realizan llamadas a las APIs obsoletas en el clúster.
Para resolver estas estadísticas, prueba los siguientes pasos:
- Comunícate con tu proveedor de software de terceros para obtener una versión actualizada.
- Actualiza el software de terceros a la versión más reciente Si no puedes actualizar el software, debes probar si actualizar GKE a la versión con las APIs obsoletas eliminadas interrumpiría tu servicio.
Recomendamos que realices esta actualización y la actualización de la versión de GKE en un clúster de etapa de pruebas para supervisar las interrupciones antes de actualizar los clústeres de producción.
Prepárate para actualizar a la versión 1.22
No es necesario que borres ni vuelvas a crear ningún objeto de API. Todos los objetos de la API persistentes existentes ya se pueden leer y actualizar mediante las nuevas versiones de API. Sin embargo, te recomendamos que migres a tus clientes y manifiestos antes de actualizar a Kubernetes 1.22. Obtén más información en la sección “Qué hacer” de la Guía de migración de las API obsoletas de Kubernetes.
Puedes ver estadísticas y recomendaciones de baja para determinar si tu clúster usa una función o una API de Kubernetes que está obsoleta. Las estadísticas de baja se basan en las llamadas observadas a las APIs obsoletas por parte de los usuarios-agentes, no la configuración de tus objetos de Kubernetes.
Actualiza los clústeres afectados por las bajas
Para actualizar los clústeres afectados por las bajas, sigue estos pasos:
- Verifica qué usuarios-agentes usan las APIs obsoletas en los registros o en la estadística de bajas.
- Actualiza los usuarios-agentes que usan las APIs obsoletas para que usen versiones compatibles de las APIs.
- Actualiza cualquier software de terceros que llame a las APIs obsoletas a las versiones más recientes.
- Actualiza un clúster de prueba y prueba tu aplicación en un entorno de pruebas antes de actualizar el clúster de producción para reducir el riesgo de interrupciones cuando las APIs obsoletas ya no estén disponibles.
- Después de actualizar todos los usuarios-agentes, GKE espera hasta que ya no haya observado el uso de las APIs obsoletas durante 30 días y, luego, desbloquea las actualizaciones automáticas. Las actualizaciones automáticas continúan según el programa de lanzamientos.
- Si no puedes actualizar un usuario-agente afectado, actualiza un clúster de prueba separado para verificar si la actualización causa interrupciones. Si la actualización no produce interrupciones, puedes actualizar el clúster de forma manual.
Recursos
Puedes encontrar más información en la documentación de Kubernetes de OSS:
- Blog de Kubernetes: Eliminación de API para Kubernetes versión 1.22
- Notas de la versión de Kubernetes 1.22
- Guía de migración de las API obsoletas de Kubernetes