Muy buenas, me llamo Miguel y en esta ocasión les traigo un nuevo post.
Índice
Visión general
AWS lanzó recientemente soporte para Servicio de Amazon Kubernetes 1.18. Con esta versión, se introdujeron algunas funciones nuevas y no hay demasiadas opciones obsoletas.
En esta publicación, revisaré los servicios que son obligatorios para verificar y actualizar si es necesario antes de siquiera pensar en actualizar EKS.
Características de Kubernetes 1.18
- Gerente de topología ha alcanzado el estado beta. Esta función permite que la CPU y el Administrador de dispositivos coordinen las decisiones de asignación de recursos, optimizando la latencia baja con cargas de trabajo de análisis y aprendizaje automático. Para más información, ver Controlar las políticas de gestión de topología en un nodo en la documentación de Kubernetes.
- Aplicar del lado del servidor se actualiza con una nueva versión beta. Esta función rastrea y administra los cambios en los campos de todos los objetos nuevos de Kubernetes, lo que le permite saber qué cambió sus recursos y cuándo. Para más información, ver ¿Qué es la aplicación del lado del servidor? en la documentación de Kubernetes.
- Un nuevo campo
pathType
y un nuevo recursoIngressClass
se ha agregado a la especificación de Ingress. Estas características facilitan la personalización de la configuración de Ingress y son compatibles con el controlador de ingreso ALB. Para más información, ver Mejoras en la API de Ingress en Kubernetes 1.18 en la documentación de Kubernetes. - Ajuste de escala automático de pod horizontal configurable comportamiento. Para más información, ver Soporte para comportamiento de escala configurable en la documentación de Kubernetes.
- Extensión de topología de pod ha alcanzado el estado beta. Puede usar restricciones de distribución de topología para controlar cómo se distribuyen los pods en su clúster entre dominios de falla, como regiones, zonas, nodos y otros dominios de topología definidos por el usuario. Esto puede ayudar a lograr una alta disponibilidad y una utilización eficiente de los recursos. Para más información, ver Restricciones de propagación de topología de pod en la documentación de Kubernetes.
API obsoletas
Las siguientes API obsoletas ya no se pueden servir en EKS 1.18
:
- Todos los recursos bajo
apps/v1beta1
yapps/v1beta2
– debe usarapps/v1
. - Recursos como
daemonsets
,deployments
,replicasets
recursos bajoextensions/v1beta1
– debe usar en lugarapps/v1
. -
Networkpolicies
recursos bajoextensions/v1beta1
– debe usar en lugarnetworking.k8s.io/v1
. -
Podsecuritypolicies
recursos bajoextensions/v1beta1
– debe usar en lugarpolicy/v1beta1
.
Actualice con terraform
Esta vez, la actualización del plano de control toma alrededor de 35 minutos y no causó ningún problema.
Me di cuenta de que el plano de control no estaba disponible de inmediato, por lo que los nodos de trabajo actualizados tardaron alrededor de 2 minutos en unirse al clúster EKS actualizado.
Yo personalmente uso Terraform para implementar y actualizar mis clústeres de EKS. A continuación, se muestra un ejemplo del recurso de clúster de EKS.
resource "aws_eks_cluster" "cluster" { enabled_cluster_log_types = ["audit"] name = local.name_prefix role_arn = aws_iam_role.cluster.arn version = "1.18" vpc_config { subnet_ids = flatten([module.vpc.public_subnets, module.vpc.private_subnets]) security_group_ids = [] endpoint_private_access = "true" endpoint_public_access = "true" } encryption_config { resources = ["secrets"] provider { key_arn = module.kms-eks.key_arn } } tags = var.tags }
Después de actualizar el plano de control de EKS
Recuerde actualizar las implementaciones centrales y los conjuntos de demonios recomendados para EKS 1.18
.
Lo anterior es solo una recomendación de AWS. Debería considerar actualizar todos sus componentes para que coincidan con la versión 1.18
. Podrían incluir:
- Nodo calicó.
- Escalador automático de clúster.
- Métricas del estado de Kube.
calico-typha
ycalico-typha-horizontal-autoscaler
.
Problema:
Se recomienda utilizar CoreDNS 1.7.0
. Al hacerlo, es probable que obtenga CrashLoopBackoff
debido a:
plugin/kubernetes: /etc/coredns/Corefile:6 - Error during parsing: unknown property 'upstream'
Solución:
La opción upstream
ya no se admite en CoreDNS v1.7.0
. Eso significa que puede actualizar su mapa de configuración CoreDns
a lo siguiente que resolverá el problema:
apiVersion: v1 kind: ConfigMap data: Corefile: | .:53 { errors health kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance }
AWS decidió cambiar nuevamente la convención de nomenclatura. Entonces, si anteriormente usó una imagen como la siguiente:
kubectl get daemonset kube-proxy --namespace kube-system -o= jsonpath='$.spec.template.spec.containers[:1].image' 602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/kube-proxy:v1.17.7
Ahora debe configurarlo en su yaml
de la siguiente manera:
602401143452.dkr.ecr.eu-west-1.amazonaws.com/eks/kube-proxy:v1.18.8-eksbuild.1
Ahora las imágenes tienen texto adicional ´eksbuild.1`
en el valor de la etiqueta.
La segunda parte de los cambios para kube-proxy
fue asegurar que nodeSelectorTerms
están configurados correctamente. Aquí está la versión actualizada y funcional:
nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/os operator: In values: - linux - key: kubernetes.io/arch operator: In values: - amd64 - arm64 - key: "beta.kubernetes.io/arch" operator: In values: - amd64 - arm64 - key: eks.amazonaws.com/compute-type operator: NotIn values: - fargate
Si está interesado en la configuración completa de terraform para EKS, puede encontrarla en este GitHub -> https://github.com/marcincuber/eks/tree/master/terraform-aws.
Espero que este artículo agregue bien toda la información importante sobre la actualización de EKS y ayude a las personas a acelerar su tarea.
Disfruta de Kubernetes. Gracias por leer este post.
Añadir comentario