Container Service for Kubernetes (ACK) cumple estrictamente con los términos del Certified Kubernetes Conformance Program. Este tema describe los cambios que ACK Lingjun implementa para admitir Kubernetes 1.22.
Versiones de componentes
Todos los componentes en los clústeres de ACK Lingjun se han actualizado para admitir Kubernetes 1.22.
|
Componente |
Versión |
Notas |
|
Kubernetes |
1.22.15-aliyun.1 |
Consulte Cambios importantes y Novedades a continuación |
|
etcd |
3.5.1 |
— |
|
CoreDNS |
v1.9.3.6-32932850-aliyun |
Actualización sin interrupciones. Agrega monitoreo de EndpointSlice y resolución DNS IPv6 |
|
CRI |
containerd 1.5.13 |
— |
|
CSI |
v1.26.3-fc2ba2a-aliyun |
— |
|
CNI |
Terway v1.5.7 |
— |
|
NVIDIA Container Runtime |
3.13.0 |
— |
|
Ingress controller |
v1.8.0-aliyun.1 |
Puede interrumpir temporalmente las cargas de trabajo y causar problemas de compatibilidad. Evalúe el impacto antes de actualizar |
Cambios importantes
Los siguientes cambios requieren acción antes de actualizar a Kubernetes 1.22. Omitir estos pasos puede provocar fallos en las cargas de trabajo después de la actualización.
API beta descontinuadas
Kubernetes 1.22 elimina un conjunto de API beta en favor de sus versiones estables (v1). Los recursos existentes creados mediante API beta se conservan y permanecen accesibles a través de las API estables; sin embargo, los controladores, operadores y herramientas que invoquen las versiones de API beta eliminadas dejarán de funcionar tras la actualización.
Antes de actualizar, actualice los manifiestos y los clientes de API a las versiones estables listadas en la tabla siguiente, y vuelva a desplegar los controladores y aplicaciones que utilicen las API beta eliminadas.
Las siguientes API beta están descontinuadas en Kubernetes 1.22:
|
Recurso |
API descontinuada |
API estable (utilizar en su lugar) |
|
MutatingWebhookConfiguration, ValidatingWebhookConfiguration |
|
|
|
CustomResourceDefinition (CRD) |
|
|
|
APIService |
|
|
|
TokenReview |
|
|
|
SubjectAccessReview |
|
|
|
CertificateSigningRequest (CSR) |
|
|
|
Lease |
|
|
|
Ingress, IngressClass |
|
|
|
ClusterRole, ClusterRoleBinding, Role, RoleBinding |
|
|
|
CSIDriver, CSINode, StorageClass, VolumeAttachment |
|
|
|
PriorityClass |
|
|
Eliminación de dockershim
dockershim, marcado como obsoleto en Kubernetes 1.20, se elimina en Kubernetes 1.22. Los clústeres que aún ejecuten Docker como entorno de ejecución de contenedores deben migrar a containerd antes de actualizar.
Pasos de migración:
Calcule la cantidad de nodos nuevos necesarios según su carga de trabajo actual de Docker.
Agregue al clúster nuevos nodos que ejecuten containerd durante las horas de menor actividad. Para cambiar el entorno de ejecución de contenedores de los grupos de nodos, consulte Change the container runtime from Docker to containerd.
Drene los nodos Docker uno por uno. Después de cada drenaje, compruebe que todos los pods hayan migrado correctamente antes de drenar el siguiente nodo.
Elimine los nodos Docker drenados una vez que no queden pods en ellos.
Cambio de comportamiento de NodePort (Kubernetes 1.22.10 y posteriores)
kube-proxy ya no escucha en los puertos de los servicios NodePort. Si el rango de puertos del servicio NodePort (configurado mediante ServiceNodePortRange en el servidor de API) se superpone con el rango de puertos efímeros definido por el parámetro del kernel net.ipv4.ip_local_port_range, las conexiones TCP pueden fallar intermitentemente, lo que provoca errores en las comprobaciones de estado y excepciones en el servicio.
Antes de actualizar a la versión 1.22.10 o posterior, compruebe que los rangos de puertos de su servicio NodePort no entren en conflicto con net.ipv4.ip_local_port_range. Para obtener orientación sobre la configuración, consulte How do I configure a proper node port range? o el PR de la comunidad de Kubernetes.
Caducidad del token de cuenta de servicio
En Kubernetes 1.22 y versiones posteriores, los tokens de cuenta de servicio tienen un periodo de validez de un año. kubelet renueva periódicamente los tokens antes de que caduquen.
client-go >= 11.0.0 o >= 0.15.0: Los tokens se recargan automáticamente desde el disco.
client-go < 11.0.0 o < 0.15.0: Los tokens no se renuevan automáticamente. Una vez que un token caduca, el acceso al servidor de API desde dentro del clúster falla. Actualice client-go a la versión 11.0.0 o posterior (o 0.15.0 o posterior) para evitar esto.
Para obtener detalles sobre los impactos y las soluciones, consulte [[Product Changes] Solutions for service account token expiration in Kubernetes 1.22 and later](t2459022.xdita#).
Otros elementos previos a la actualización
Cree una copia de seguridad de los datos de los nodos del plano de control: Todos los contenedores en los nodos del plano de control se recrean durante una actualización de versión. Realice una copia de seguridad de cualquier dato de contenedor antes de iniciar la actualización.
CVE-2022-3172: Esta vulnerabilidad puede afectar a su clúster. Revise los detalles y aplique la corrección descrita en CVE-2022-3172.
PodSecurityPolicy (PSP): PSP se marcó como obsoleto en Kubernetes 1.21 y se eliminará en Kubernetes 1.25. Las PSP continúan funcionando en la versión 1.22. Comience a planificar una migración al controlador de admisión PodSecurity. Para más detalles, consulte Admisión de seguridad de pods y Obsolescencia de PodSecurityPolicy: pasado, presente y futuro.
Novedades
Feature gates habilitadas de forma predeterminada
Las siguientes feature gates están habilitadas de forma predeterminada en Kubernetes 1.22 (o en versiones anteriores, según se indica).
Habilitadas desde Kubernetes 1.21:
|
Feature gate |
Descripción |
|
ImmutableEphemeralVolumes |
Permite marcar ConfigMaps y Secrets como inmutables, lo que reduce significativamente la carga del servidor de API |
|
IPv6DualStack |
Habilita la red de doble pila IPv4/IPv6. Requiere bloques CIDR adecuados y un complemento CNI compatible con doble pila |
|
GracefulNodeShutdown |
kubelet detecta eventos de apagado del nodo y desaloja los pods dentro del periodo de gracia de apagado. Solo para nodos Linux |
|
EfficientWatchResumption |
Reanuda eficientemente la caché de vigilancia del servidor de API después de un reinicio. Útil para clústeres a gran escala |
Habilitadas desde Kubernetes 1.22:
|
Feature gate |
Descripción |
|
CSIStorageCapacity |
kube-scheduler coloca los pods en nodos con capacidad de almacenamiento suficiente para el volumen requerido |
|
DaemonSetUpdateSurge |
Utilice |
|
IndexedJob |
Establezca |
|
MemoryManager |
Habilita la gestión de memoria con reconocimiento de acceso a memoria no uniforme (NUMA) para aplicaciones con requisitos de memoria garantizados. Solo para nodos Linux. ACK no configura la reserva de memoria para esta función |
|
PodAffinityNamespaceSelector |
Aplica selectores de etiquetas de afinidad de pods entre namespaces en lugar de hacerlo solo dentro del mismo namespace |
|
PodDeletionCost |
Los pods con menor utilización de recursos incurren en costos de eliminación más bajos durante la reducción de escala |
|
PreferNominatedNode |
kube-scheduler prioriza los nodos nominados; evalúa otros nodos solo si los nominados no están disponibles |
|
ProbeTerminationGracePeriod |
Establezca un valor de |
|
NetworkPolicyEndPort |
Permite especificar rangos de puertos en las reglas de NetworkPolicy |
|
LogarithmicScaleDown |
Utiliza una selección aleatoria de pods durante la reducción de escala para disminuir el impacto de las restricciones de distribución de topología de pods |
|
SuspendJob |
Permite suspender y reanudar Jobs para gestionar su ciclo de vida con mayor flexibilidad |
|
ServiceInternalTrafficPolicy |
Dirige el tráfico interno del servicio a endpoints locales del nodo o a todos los endpoints listos del clúster |
|
ServiceLoadBalancerClass |
Personaliza la implementación del load balancer mediante |
|
ServiceLBNodePortControl |
Deshabilita la asignación de NodePort para servicios LoadBalancer al establecer |
|
SizeMemoryBackedVolumes |
Establece el tamaño de los volúmenes |
|
Server-side Apply |
Rastrea cambios a nivel de campo en las configuraciones de recursos, incluidos el origen, la marca de tiempo y la operación |
|
CSRDuration |
Establece la validez del certificado al menor valor entre |
|
BoundServiceAccountTokenVolume |
Disponibilidad general en Kubernetes 1.22. La validez predeterminada del token de cuenta de servicio es de un año para los tokens que no se montan como volúmenes proyectados |
Integración de CSI con contenedores Windows (estabilizada en 1.22):
La integración de Container Storage Interface (CSI) con contenedores Windows ahora es estable. Utilice CSI Proxy para ejecutar operaciones de almacenamiento en nodos Windows que no admiten contenedores con privilegios (como Windows Server 2019 y Windows Server versión 2004). El complemento CSI que utilice debe ser compatible con esta función. Para más detalles, consulte CSI Proxy.
Nuevas funciones
|
Función |
Estado en ACK |
Descripción |
|
Monitoreo del estado de volúmenes |
Habilitado de forma predeterminada |
Detecta el estado de salud de los volúmenes persistentes (PV) aprovisionados por el complemento CSI para evitar lecturas y escrituras en volúmenes con problemas. Requiere compatibilidad con el complemento CSI. Consulte Monitoreo del estado de volúmenes |
|
Memory QoS (cgroups v2) |
Habilitado de forma predeterminada |
Aplica limitación de memoria bajo contención de recursos mediante interfaces optimizadas de cgroups v2. Solo para nodos Linux. Requiere compatibilidad con el kernel del sistema operativo. Consulte Memcg QoS feature of the cgroup v1 interface |
|
Contenedores HostProcess de Windows |
Habilitado de forma predeterminada |
Permite crear contenedores con privilegios de Windows mediante contenedores HostProcess. Requiere compatibilidad con el kernel del sistema operativo. Consulte Crear un pod HostProcess de Windows |
|
Memoria swap |
Deshabilitado en ACK |
Ejecuta cargas de trabajo utilizando memoria swap para mejorar la estabilidad del nodo bajo contención de memoria. Solo para nodos Linux. Consulte Gestión de memoria swap |
|
Perfiles seccomp predeterminados |
Deshabilitado en ACK |
Aplica el perfil seccomp RuntimeDefault de forma predeterminada. Las cargas de trabajo con menos restricciones de llamadas al sistema pueden fallar cuando esta opción está habilitada. Solo para nodos Linux |
Actualizaciones de funciones
PodSecurityPolicy (PSP): PSP se marcó como obsoleto en Kubernetes 1.21 y se eliminará en Kubernetes 1.25. ACK proporciona políticas de seguridad de pods como alternativa. Consulte Admisión de seguridad de pods.
Topology Aware Hints: El campo
topologyKeysse marcó como obsoleto en Kubernetes 1.21. Utilice la función Topology Aware Hints en su lugar para habilitar el enrutamiento con reconocimiento de topología de servicios. La topología de servicios está deshabilitada de forma predeterminada en los clústeres ACK 1.22. Consulte Topology Aware Hints.
Mejoras de ACK Lingjun
Observability
Métricas adicionales para el acceso al servidor de API de Kubernetes y los patrones de solicitud mejoran la observability del servidor de API.
Ahora es posible recopilar métricas clave de los componentes del plano de control desde los clústeres de ACK Lingjun.
Estabilidad
La protección de recursos de almacenamiento reduce la carga de etcd durante los inicios en frío.
La limitación de tráfico del servidor de API basada en el origen, el tipo y la ruta de la solicitud reduce la carga de etcd durante los inicios en frío.
Mejoras de rendimiento
kubelet: Durante las actualizaciones in situ de kubelet, el sistema evita el reinicio de pods sobre una base de mejor esfuerzo. Consulte el issue relacionado de Kubernetes.
kube-proxy: kube-proxy ahora es compatible con Alibaba Cloud Linux 2 (kernel 4.19.91-23 y posteriores). Cuando el modo IP Virtual Server (IPVS) está habilitado,
conn_reuse_modeya no se establece en0. Consulte el issue relacionado de Kubernetes.
Problemas corregidos
Se corrigió una fuga de EndpointSlice en kube-controller-manager que ocurría en escenarios específicos. Consulte Corrección del manejo de transiciones de selector de servicio en la duplicación de EndpointSlice.