Kubernetes 1.13: revisión de las principales novedades

Kubernetes 1.13: revisión de las principales novedades

Esta noche se llevará a cabo se lanza otra versión de Kubernetes — 1.14. Según la tradición de nuestro blog, hablamos sobre los cambios clave en la nueva versión de este maravilloso producto de código abierto.

La información utilizada para la preparación de este material se tomó de la tabla de seguimiento de mejoras de Kubernetes, CHANGELOG-1.14 y los issues, pull requests, Propuestas de Mejora de Kubernetes (KEP) correspondientes.

Comencemos con una importante introducción de SIG cluster-lifecycle: clústeres dinámicos y tolerantes a fallos Kubernetes (o, para ser más precisos, despliegues HA autoalojados) ahora se pueden crear utilizando los comandos familiares (en el contexto de clústeres de un solo nodo) kubeadm (init y join). En resumen, para esto:

  • los certificados utilizados por el clúster se transfieren a secretos;
  • para permitir el uso de etcd dentro del clúster de K8s (es decir, eliminar la dependencia externa que existía anteriormente) se ha implementado etcd-operator;
  • se documentan las configuraciones recomendadas para el balanceador de carga externo que proporciona una configuración tolerante a fallos (en el futuro se planea la posibilidad de renunciar a esta dependencia también, pero no en esta etapa).

Kubernetes 1.13: revisión de las principales novedades
Arquitectura del clúster HA de Kubernetes creado con kubeadm

Los detalles de la implementación se pueden encontrar en propuesta de diseño. Esta función ha sido realmente esperada: la versión alfa se esperaba desde K8s 1.9, pero solo ha llegado ahora.

API

Comando aplicar y en general gestión declarativa de objetos se han extraído de kubectl en apiserver. Los propios desarrolladores explican brevemente su decisión señalando que kubectl apply — una parte fundamental del trabajo con configuraciones en Kubernetes, sin embargo, «está llena de errores y es difícil de corregir», por lo que esta funcionalidad necesita ser puesta en condiciones normales y trasladada al control plane. Ejemplos simples y claros de los problemas existentes hoy son:

Kubernetes 1.13: revisión de las principales novedades

Los detalles de la implementación — en KEP. La preparación actual — versión alfa (se planea avanzar a beta en el próximo lanzamiento de Kubernetes).

En la versión alfa se ha hecho disponible la posibilidad el uso del esquema OpenAPI v3 para crear y publicar documentación OpenAPI para CustomResources (CR), utilizados para la validación (del lado del servidor) de los recursos de K8s definidos por el usuario (CustomResourceDefinition, CRD). La publicación de OpenAPI para CRD permite a los clientes (por ejemplo, kubectl) realizar la validación del lado del cliente (dentro de kubectl create y kubectl apply) y producir documentación del esquema (kubectl explain). Más detalles — en KEP.

Los registros existentes anteriormente ahora se abren con la bandera O_APPEND (y no O_TRUNC) para evitar la pérdida de registros en ciertas situaciones y para facilitar la truncación de registros a través de herramientas externas para la rotación.

También en el contexto de la API de Kubernetes, se puede señalar que en PodSandbox y PodSandboxStatus añadido el campo runtime_handler para tener en cuenta la información sobre RuntimeClass en el pod (para más detalles, consulte el texto sobre la versión 1.12 de Kubernetes, donde esta clase se introdujo como versión alfa), y en Admission Webhooks se ha implementado la capacidad de definir qué versiones AdmissionReview son compatibles. Finalmente, en las reglas de Admission Webhooks ahora se puede limitar el alcance de su aplicación por namespaces y límites del clúster.

Almacenamientos

VolúmenesLocalPersistentes, que tenían estatus de versión beta desde el lanzamiento K8s 1.10, se han declarado estables (GA): este feature gate ya no se desactiva y se eliminará en Kubernetes 1.17.

Posibilidad el uso de variables de entorno llamadas Downward API (por ejemplo, el nombre del pod) para los nombres de directorios montados como subPath, ha evolucionado — en forma de un nuevo campo subPathExpr, mediante el cual ahora se determina el nombre de directorio necesario. Esta función apareció inicialmente en Kubernetes 1.11, pero también permaneció en estado alfa para 1.14.

Al igual que en la versión anterior de Kubernetes, se presentan muchos cambios significativos para el en desarrollo CSI (Container Storage Interface):

CSI

Se ha hecho disponible (en versión alfa) soporte cambio de tamaño para volúmenes CSI.Para utilizarlo, será necesario activar el feature gate llamado ExpandCSIVolumes, así como contar con el soporte para esta operación en el controlador CSI específico.

Otra característica de CSI en versión alfa — la posibilidad referirse directamente (es decir, sin usar PV/PVC) a volúmenes CSI dentro de la especificación de los pods. Esto elimina la restricción de utilizar CSI exclusivamente como almacenamiento de datos remoto, abriendo puertas a volúmenes efímeros locales.Para su uso (ejemplo de la documentación) es necesario activar el feature gate CSIInlineVolume. Ha habido avances también en las 'entrañas' de Kubernetes relacionados con CSI, que no son tan evidentes para los usuarios finales (administradores del sistema)... En este momento, los desarrolladores se ven obligados a mantener dos versiones de cada plugin de almacenamiento: una 'a la antigua', dentro de la base de código de K8s (in-tree), y la segunda — dentro del nuevo CSI

(para más detalles, consulte, por ejemplo, en (lea más sobre él, por ejemplo, en aquí). Esto provoca incomodidades comprensibles que deben ser solucionadas a medida que se estabiliza CSI como tal. Simplemente declarar obsoletos (deprecated) a los APIs internos (in-tree) de los plugins no es posible debido a la política correspondiente de Kubernetes.

Todo esto ha llevado a que las versiones alfa hayan alcanzado el proceso de migración del código interno de los plugins, implementados como in-tree, a plugins CSI, lo que permitirá a los desarrolladores preocuparse por mantener una sola versión de sus plugins, asegurando la compatibilidad con los APIs antiguos y permitiendo que sean declarados obsoletos de la manera habitual. Se espera que para la próxima versión de Kubernetes (1.15) se complete la migración de todos los plugins de proveedores de la nube, que la implementación alcance el estado beta y se active en las instalaciones de K8s por defecto. Para más detalles, consulte propuesta de diseño. Como consecuencia de esta migración también surgió la eliminación de las restricciones para volúmenes definidos por proveedores de nube específicos (AWS, Azure, GCE, Cinder).

Además, se ha añadido soporte para dispositivos de bloque con CSI (CSIBlockVolume) se ha trasladado a versión beta.

Nodos / Kubelet

Se ha presentado la versión alfa de un nuevo endpoint en Kubelet, destinado a proporcionar métricas sobre recursos clave. En términos generales, si antes Kubelet obtenía estadísticas de uso de contenedores de cAdvisor, ahora estos datos provienen del entorno de ejecución del contenedor a través de CRI (Container Runtime Interface), aunque se ha mantenido la compatibilidad para trabajar con versiones antiguas de Docker. Antes, las estadísticas recolectadas en Kubelet se entregaban a través de REST API, y ahora se utiliza un endpoint ubicado en /metrics/resource/v1alpha1. La estrategia a largo plazo de los desarrolladores es minimizar el conjunto de métricas proporcionadas por Kubelet. Por cierto, estas métricas ahora se llaman no «core metrics», sino «resource metrics», y se describen como «first-class resources, como CPU y memoria».

Un matiz interesante: a pesar de la clara ventaja de rendimiento del endpoint gRPC en comparación con varios casos de uso del formato Prometheus (el resultado de uno de los benchmark se ve a continuación), los autores prefirieron el formato de texto de Prometheus debido al claro liderazgo de este sistema de monitoreo en la comunidad.

«gRPC no es compatible con los principales pipelines de monitoreo. El endpoint solo será útil para entregar métricas al Metrics Server o a componentes de monitoreo que se integren directamente con él. Al utilizar el almacenamiento en caché en el Metrics Server, el rendimiento del formato de texto de Prometheus es suficientemente bueno para nosotros como para preferir Prometheus en lugar de gRPC, dado que Prometheus es ampliamente utilizado en la comunidad. Cuando el formato OpenMetrics sea más estable, podremos acercarnos al rendimiento de gRPC con un formato basado en proto».

Kubernetes 1.13: revisión de las principales novedades
Una de las pruebas comparativas de rendimiento entre los formatos gRPC y Prometheus en el nuevo endpoint de Kubelet para métricas. Más gráficos y otros detalles se pueden encontrar en KEP.

Entre otros cambios:

  • Kubelet ahora (una vez) intenta detener los contenedores en estado desconocido (unknown) antes de las operaciones de reinicio y eliminación.
  • Al usar PodPresets ahora se agrega la misma información al contenedor init que al contenedor normal. Kubelet
  • ha comenzado a utilizar usageNanoCores del proveedor de estadísticas CRI, y para nodos y contenedores en Windows estadísticas de red. se ha añadido La información sobre el sistema operativo y la arquitectura ahora se registra en las etiquetas
  • kubernetes.io/os kubernetes.io/arch y de los objetos Node (migrado de beta a GA). La capacidad de especificar un grupo de usuario del sistema específico para contenedores en un pod (
  • RunAsGroup, fue introducida enK8s 1.11 se avanzó) a la versión beta (activada por defecto). du y find, utilizados en cAdvisor,
  • fueron reemplazados por implementaciones en Go. CLI

en cli-runtime y kubectl

el flag -k para integración con se ha agregado (por cierto, su desarrollo ahora se lleva a cabo en un repositorio separado), es decir, para procesar archivos YAML adicionales de directorios especiales de kustomization (detalles sobre su uso se pueden encontrar en kustomize Ejemplo de uso simple del archivo KEP):

Kubernetes 1.13: revisión de las principales novedades
kustomization (también se puede aplicar kustomize de manera más compleja dentro de overlays Además:)

nueva comando

  • Se ha añadido kubectl create cronjob , cuyo nombre lo dice todo.kubectl logs
  • En combina ahora es posible --follow flags -f (para la transmisión de logs) y --selector -l (para la consulta por etiquetas). se aprendió
  • kubectl a copiar archivos seleccionados con comodines. El comando
  • kubectl wait --all se ha añadido bandera para seleccionar todos los recursos en el espacio de nombres del tipo de recursos especificado. Las siguientes características recibieron estado estable (GA):

Otros

ReadinessGate

Otros cambios introducidos en Kubernetes 1.14:

  • La política RBAC por defecto ya no permite el acceso al API discovery y access-review a usuarios sin autenticación (unauthenticated).
  • El soporte oficial de CoreDNS está disponible solo para Linux, por lo que al usar kubeadm para su (CoreDNS) implementación en el clúster, los nodos deben funcionar solo en Linux (para esta limitación se utilizan nodeSelectors).
  • La configuración por defecto de CoreDNS ahora utiliza plugin forward en lugar de proxy. Además, en CoreDNS se ha añadido readinessProbe, que evita el balanceo de carga en los pod's correspondientes (no listos para atender).
  • En kubeadm, en las fases init o upload-certs, se ha hecho posible cargar los certificados necesarios para conectar un nuevo control-plane al secreto kubeadm-certs (se usa el flag --experimental-upload-certs).
  • Para instalaciones de Windows, hay una versión alfa de soporte gMSA (Cuenta de Servicio Administrado por Grupo) — cuentas especiales en Active Directory que pueden ser utilizadas también por contenedores.
  • Para GCE se activó la encriptación mTLS entre etcd y kube-apiserver.
  • Actualizaciones en el software utilizado/dependiente: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, soporte de Docker 18.09 en kubeadm, y la versión mínima soportada de la API de Docker es 1.26.

P.D.

También puedes leer en nuestro blog:

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster