Kubernetes 1.11 fue lanzado el
miércoles . Continuamos nuestra tradición y hablamos sobre los cambios más significativos, basados en datos de
CHANGELOG-1.11 y numerosos temas, solicitudes de extracción y propuestas de diseño. ¿Qué hay de nuevo en K8s 1.11?
Redes
Comencemos con las redes, ya que el anuncio de Kubernetes 1.11 marcó la estabilización oficial
(es decir, la transferencia al estado de Disponibilidad general) de dos innovaciones importantes presentadas en versiones anteriores. El primero de ellos es
el equilibrio de carga de los servicios dentro del clúster, basado
en IPVS (IP Virtual Server). Esta
oportunidad vino de
Huawei que la primavera pasada presentó a la comunidad los resultados de su trabajo para mejorar el equilibrio de carga de más de 50 mil servicios utilizando IPVS en lugar de iptables. Esta elección
se explicó de manera bastante lógica: “Si las tablas ip se crean para firewalls y se basan en listas de reglas en el núcleo, entonces IPVS está diseñado para equilibrar la carga y se basa en tablas hash en el núcleo; Además, IPVS admite algoritmos de equilibrio de carga más avanzados que iptables, así como otras características útiles (por ejemplo, verificación de estado, reintentos, etc.) ".
Diapositiva de Scaling Kubernetes de Huawei para soportar la presentación de 50,000 servicios en KubeCon Europe 2017¿Qué trajo en la práctica? "Mejor ancho de banda de red, menos latencia de software
[hablando del tiempo que lleva agregar nuevos puntos finales a los servicios - aprox. perev. ] y una mejor escalabilidad para el equilibrador de carga en el clúster ". La versión alfa del modo IPVS para kube-proxy apareció en
Kubernetes 1.8 y se ha estabilizado en la versión actual 1.11: aunque de forma predeterminada todavía no está habilitada, ya está oficialmente lista para servir tráfico en clústeres de producción.
La segunda característica madura es
CoreDNS como el servidor DNS utilizado por el clúster Kubernetes. Escribimos más sobre esta solución en una
revisión separada , y en resumen, es un servidor DNS flexible y fácilmente extensible, originalmente basado en el servidor web
Caddy , que se convirtió en el sucesor de
SkyDNS (por cierto, kube-dns se basa en él, reemplazado por CoreDNS) , escrito en Go y enfocado en el mundo de las aplicaciones en la nube (nativas de la nube). Otro hecho notable de CoreDNS es el hecho de que parece ser el único archivo ejecutable y el único proceso en el sistema. Ahora, esta no es solo otra opción de DNS para el clúster de Kubernetes, sino también la opción predeterminada para
kubeadm . Las instrucciones para usar CoreDNS en Kubernetes están disponibles
aquí (y para Cluster Federation,
aquí ).
Entre otras actualizaciones en la red de Kubernetes "mundo":
- en NetworkPolicies ahora es posible especificar subas específicas en otros espacios de nombres usando
namespaceSelector
y podSelector
; - los servicios ahora pueden escuchar en los mismos puertos de host en diferentes interfaces (especificadas en
--nodeport-addresses
); - Se corrigió un error por el cual Kubelet cuando usaba
--node-ip
dejaba de informar ExternalDNS
, InternalDNS
y ExternalIP
.
Instalaciones de almacenamiento
Introducido en
Kubernetes 1.9, la característica de protección contra la eliminación de PVC (
PersistentVolumeClaims
) utilizada por cualquier cápsula y PV (
PersistentVolumes
) atados a PVC, más tarde
(en K8s 1.10) llamada
StorageProtection , se declara estable.
La capacidad de cambiar el tamaño del volumen (PV) después de reiniciar el hogar se ha traducido al estado beta y, dentro de la versión alfa, ha vuelto a estar disponible
el cambio de tamaño del volumen en tiempo real , es decir. sin la necesidad de reiniciar el hogar.
En apoyo de AWS EBS y GCE PD, se aumentó el límite para el número máximo posible de volúmenes conectados al host, y en los complementos AWS EBS, Azure Disk, GCE PD y Ceph RBD
implementaron soporte para volúmenes de aprovisionamiento dinámico de dispositivos sin formato en bloque. Para los volúmenes de AWS EBS
, también se ha
agregado la capacidad de usar pods en modo
ReadOnly
.
Además, Kubernetes 1.11 introdujo una versión alfa de
soporte para límites dinámicos en volúmenes dependiendo del tipo de nodo, así como soporte de API para volúmenes de bloque en controladores de almacenamiento externo CSI (
Interfaz de almacenamiento de contenedores - apareció en
Kubernetes 1.9 ). Además, CSI
implementó la integración con el nuevo
motor de registro del complemento
Kubelet .
Nodos de clúster
Los 5 principales cambios principales de la versión 1.11 de Kubernetes también incluyen la
transferencia al estado de una versión beta de la configuración dinámica de Kubelet , que apareció por primera vez en
K8s 1.8 y requiere múltiples cambios (puede rastrearlos en el
ticket de configuración dinámica de Kubelet original ). Esta característica permite implementar nuevas configuraciones de
Kubelet en clústeres
activos y en funcionamiento (en oposición a la situación anterior, cuando la configuración de
Kubelet se pasó a través de indicadores de línea de comando). Para usarlo, debe configurar la
--dynamic-config-dir
(cuando se inicia
Kubelet ).
El proyecto
cri-tools ha sido declarado estable. Ofrece herramientas para administradores de sistemas que le permiten analizar y depurar el funcionamiento de los nodos en producción, independientemente del tiempo de ejecución del contenedor utilizado. Los paquetes con él (
crictl
) ahora se
envían con el resto de las utilidades de
kubeadm (en formatos DEB y RPM).
Escribimos más sobre el propósito y las capacidades de crictl
en un artículo reciente sobre la integración de containerd con Kubernetes, reemplazando el Docker "tradicional".
Ejemplos de uso de crictl
de la documentación del proyectoEl
soporte experimental
para sysctls en Linux se
ha convertido al estado beta (habilitado de forma predeterminada mediante el
Sysctls
función
Sysctls
).
PodSecurityPolicy
objetos
PodSecurityPolicy
y
Pod
tienen campos especiales para especificar / controlar
sysctls .
También en
ResourceQuota
hizo posible especificar una clase de prioridad (en este caso, la cuota se aplica solo a los pods con esta clase; vea
las propuestas de
diseño para más detalles), y la condición
ContainersReady
se ha
agregado al estado del pod.
Derechos y seguridad
La
característica de Agregación de ClusterRole introducida en K8s 1.9, que le permite agregar
permisos a roles existentes (incluidos los creados automáticamente), se declara estable sin recibir ningún cambio. También se
ha agregado una función separada para cluster-autoscaler (
ClusterRole
): se usa en lugar del sistema (
cluster-admin ).
Se han llevado a cabo varios trabajos en la dirección de la transparencia de lo que (y por qué) está sucediendo dentro del clúster. En particular, la información RBAC en los registros de auditoría ahora
contiene anotaciones adicionales para eventos :
authorization.k8s.io/decision
: allow
o forbid
;authorization.k8s.io/reason
: razón legible por la persona para la decisión.
También en los registros de auditoría se
agregó información sobre el acceso desde
PodSecurityPolicy
en forma de anotaciones
podsecuritypolicy.admission.k8s.io/admit-policy
y
podsecuritypolicy.admission.k8s.io/validate-policy
(¿bajo qué política se permite?).
Utilidades de consola
Muchas (aunque no tan significativas, ¡pero útiles!) Las mejoras se presentan en las herramientas CLI de Kubernetes:
- Nuevo comando
kubectl wait
el momento en que se eliminan los recursos especificados o se alcanza una determinada condición. - Nuevo
kubectl api-resources
para ver recursos:

- Soporte de
kubectl cp
para kubectl cp
. - La función base64decode está disponible en las plantillas de
base64decode
Go, cuyo nombre habla por sí mismo. - Se agregó soporte para el
--dry-run
en el kubectl patch
. - El
--match-server-version
vuelto global; la kubectl version
también lo tendrá en cuenta. - La
kubectl config view --minify
ahora tiene en cuenta el indicador de context
global. kubectl apply --prune
recursos kubectl apply --prune
agregado a kubectl apply --prune
CronJob
.
Otros cambios
- El planificador ( kube-Scheduler ) aprendió a planificar pods en
DaemonSet
(versión alfa). - Es posible especificar un grupo de usuarios del sistema específico (
RunAsGroup
) para contenedores en el hogar (versión alfa). - Posibilidad de eliminar huérfanos ( eliminación de huérfanos ) para
CustomResources
. - Mejoras en el soporte API de Kubernetes para hogares y contenedores en Windows: métricas agregadas para hogares, contenedores y el sistema de archivos con registros, contextos de
run_as_user
, volúmenes constantes locales y fstype para la unidad de Azure. - Azure agrega soporte para el equilibrador de carga de SKU estándar y la IP pública.
Compatibilidad
- La versión compatible de etcd es 3.2.18 (Kubernetes 1.10 era 3.1.12).
- Versiones verificadas de Docker : de 1.11.2 a 1.13.1 y 17.03.x (no han cambiado desde el lanzamiento de K8s 1.10).
- La versión Go es 1.10.2 (en lugar de 1.9.3), el mínimo admitido es 1.9.1.
- La versión CNI es 0.6.0.
- La versión CSI es 0.3.0 (en lugar de 0.2.0).
PS
Lea también en nuestro blog: