Conceptos básicos de Kubernetes de Azure Kubernetes Service (AKS)Kubernetes core concepts for Azure Kubernetes Service (AKS)

Dado que el desarrollo de aplicaciones evoluciona hacia un enfoque basado en contenidos, cobra importancia la necesidad de organizar y administrar los recursos.As application development moves towards a container-based approach, the need to orchestrate and manage resources is important. Kubernetes es la plataforma líder que ofrece la capacidad de proporcionar programación de confianza de cargas de trabajo de aplicación con tolerancia a errores.Kubernetes is the leading platform that provides the ability to provide reliable scheduling of fault-tolerant application workloads. Azure Kubernetes Service (AKS) es un oferta de Kubernetes administrado que simplifica aún más la administración e implementación de aplicaciones basadas en contenedores.Azure Kubernetes Service (AKS) is a managed Kubernetes offering that further simplifies container-based application deployment and management.

Este artículo presenta los componentes centrales de la infraestructura de Kubernetes, como el ​​plano de control, nodos y agrupaciones de nodos.This article introduces the core Kubernetes infrastructure components such as the control plane, nodes, and node pools. También se presentan los recursos de la carga de trabajo, como los pods, las implementaciones y los conjuntos, junto con información acerca de cómo agrupar los recursos en espacios de nombres.Workload resources such as pods, deployments, and sets are also introduced, along with how to group resources into namespaces.

¿Qué es Kubernetes?What is Kubernetes?

Kubernetes es una plataforma de rápida evolución que administra aplicaciones basadas en contenedores y sus componentes de red y almacenamiento asociados.Kubernetes is a rapidly evolving platform that manages container-based applications and their associated networking and storage components. El foco está en las cargas de trabajo de la aplicación, no en los componentes de infraestructura subyacente.The focus is on the application workloads, not the underlying infrastructure components. Kubernetes proporciona un enfoque declarativo en las implementaciones, respaldado por un sólido conjunto de API para las operaciones de administración.Kubernetes provides a declarative approach to deployments, backed by a robust set of APIs for management operations.

Puede compilar y ejecutar aplicaciones modernas, portátiles y basadas en microservicios que se benefician de Kubernetes mediante la orquestación y administración de la disponibilidad de esos componentes de la aplicación.You can build and run modern, portable, microservices-based applications that benefit from Kubernetes orchestrating and managing the availability of those application components. Kubernetes admite tanto aplicaciones con estado como sin estado, a medida que los equipos progresan a través de la adopción de aplicaciones basadas en microservicios.Kubernetes supports both stateless and stateful applications as teams progress through the adoption of microservices-based applications.

Como plataforma abierta, Kubernetes le permite compilar aplicaciones con el lenguaje de programación, el sistema operativo, las bibliotecas o el bus de mensajería que prefiera.As an open platform, Kubernetes allows you to build your applications with your preferred programming language, OS, libraries, or messaging bus. La integración continua y las herramientas de entrega continua (CI/CD) existentes pueden integrarse con Kubernetes para programar e implementar versiones.Existing continuous integration and continuous delivery (CI/CD) tools can integrate with Kubernetes to schedule and deploy releases.

Azure Kubernetes Service (AKS) proporciona un servicio de Kubernetes administrado que reduce la complejidad de las principales tareas de administración e implementación, incluida la coordinación de actualizaciones.Azure Kubernetes Service (AKS) provides a managed Kubernetes service that reduces the complexity for deployment and core management tasks, including coordinating upgrades. El plano de control de AKS es administrado por la plataforma de Azure, y solo paga por los nodos de AKS que ejecutan sus aplicaciones.The AKS control plane is managed by the Azure platform, and you only pay for the AKS nodes that run your applications. AKS se ha diseñado sobre el motor de código abierto de Azure Kubernetes Service (aks-engine).AKS is built on top of the open-source Azure Kubernetes Service Engine (aks-engine).

Arquitectura del clúster de KubernetesKubernetes cluster architecture

Un clúster de Kubernetes se divide en dos componentes:A Kubernetes cluster is divided into two components:

  • El plano de control proporciona los servicios básicos de Kubernetes y la orquestación de las cargas de trabajo de las aplicaciones.The Control plane provides the core Kubernetes services and orchestration of application workloads.
  • Nodos que ejecutan las cargas de trabajo de las aplicaciones.Nodes which run your application workloads.

Plano de control de Kubernetes y componentes de nodo

Plano de controlControl plane

Cuando crea un clúster AKS, se crea y configura automáticamente un plano de control.When you create an AKS cluster, a control plane is automatically created and configured. Este plano de control se proporciona como un recurso de Azure administrado que se extrae del usuario.This control plane is provided as a managed Azure resource abstracted from the user. No hay ningún costo para el plano de control, solo los nodos que forman parte del clúster de AKS.There's no cost for the control plane, only the nodes that are part of the AKS cluster. El plano de control y sus recursos solo residen en la región en la que creó el clúster.The control plane and its resources reside only on the region where you created the cluster.

El plano de control incluye los siguientes componentes principales de Kubernetes:The control plane includes the following core Kubernetes components:

  • kube-apiserver: el servidor de la API es el modo en el que se exponen las API de Kubernetes subyacentes.kube-apiserver - The API server is how the underlying Kubernetes APIs are exposed. Este componente proporciona la interacción de las herramientas de administración, como kubectl o el panel de Kubernetes.This component provides the interaction for management tools, such as kubectl or the Kubernetes dashboard.
  • etcd: para mantener el estado del clúster de Kubernetes y la configuración, el componente etcd de alta disponibilidad es un valor clave en Kubernetes.etcd - To maintain the state of your Kubernetes cluster and configuration, the highly available etcd is a key value store within Kubernetes.
  • kube-scheduler: al crear o escalar aplicaciones, Scheduler determina qué nodos pueden ejecutar la carga de trabajo y los inicia.kube-scheduler - When you create or scale applications, the Scheduler determines what nodes can run the workload and starts them.
  • kube-controller-manager: el administrador de controladores supervisa un número de controladores más pequeños que realizan acciones como la replicación de los pods y el control de las operaciones del nodo.kube-controller-manager - The Controller Manager oversees a number of smaller Controllers that perform actions such as replicating pods and handling node operations.

AKS proporciona un plano de control de inquilino único con un servidor de API dedicado, Scheduler, etc. El usuario define el número de nodos, así como su tamaño, y la plataforma Azure configura la comunicación segura entre el plano de control y los nodos.AKS provides a single-tenant control plane, with a dedicated API server, Scheduler, etc. You define the number and size of the nodes, and the Azure platform configures the secure communication between the control plane and nodes. La interacción con el plano de control se produce a través de las API de Kubernetes, como kubectl o el panel de Kubernetes.Interaction with the control plane occurs through Kubernetes APIs, such as kubectl or the Kubernetes dashboard.

Este plano de control administrado significa que no es necesario configurar componentes como el almacén etcd de alta disponibilidad, pero también significa que no puede obtener acceso al plano de control directamente.This managed control plane means you don't need to configure components like a highly available etcd store, but it also means you can't access the control plane directly. Las actualizaciones de Kubernetes se organizan a través de la CLI de Azure o Azure Portal, que actualiza el plano de control y, a continuación, los nodos.Upgrades to Kubernetes are orchestrated through the Azure CLI or Azure portal, which upgrades the control plane and then the nodes. Para solucionar los posibles problemas, puede revisar los registros del plano de control mediante registros de Azure Monitor.To troubleshoot possible issues, you can review the control plane logs through Azure Monitor logs.

Si tiene que configurar el plano de control de una manera determinada o necesita acceso directo a él, puede implementar su propio clúster de Kubernetes con aks-engine.If you need to configure the control plane in a particular way or need direct access to it, you can deploy your own Kubernetes cluster using aks-engine.

Para los procedimientos recomendados asociados, consulte Procedimientos recomendados para administrar la seguridad y las actualizaciones de los clústeres en Azure Kubernetes Service (AKS).For associated best practices, see Best practices for cluster security and upgrades in AKS.

Nodos y grupos de nodosNodes and node pools

Para ejecutar las aplicaciones y los servicios de soporte técnico, necesitará un nodo de Kubernetes.To run your applications and supporting services, you need a Kubernetes node. Un clúster de AKS tiene uno o varios nodos, que consiste en una máquina virtual (VM) de Azure que ejecuta los componentes del nodo de Kubernetes y el entorno de ejecución del contenedor:An AKS cluster has one or more nodes, which is an Azure virtual machine (VM) that runs the Kubernetes node components and container runtime:

  • kubelet es el agente de Kubernetes que procesa las solicitudes de orquestación desde el plano de control y la programación de la ejecución de los contenedores solicitados.The kubelet is the Kubernetes agent that processes the orchestration requests from the control plane and scheduling of running the requested containers.
  • Las redes virtuales se controlan mediante kube-proxy en cada nodo.Virtual networking is handled by the kube-proxy on each node. El proxy enruta el tráfico de red y administra las direcciones IP para los servicios y los pods.The proxy routes network traffic and manages IP addressing for services and pods.
  • El entorno de ejecución del contenedor es el componente que permite que las aplicaciones en contenedor ejecuten recursos adicionales e interactúen con ellos, como la red virtual y el almacenamiento.The container runtime is the component that allows containerized applications to run and interact with additional resources such as the virtual network and storage. Los clústeres de AKS que usan grupos de nodos con la versión 1.19 de Kubernetes y posterior usan containerd como entorno de ejecución del contenedor.AKS clusters using Kubernetes version 1.19 node pools and greater use containerd as its container runtime. Los clústeres de AKS que usan grupos de nodos con versiones anteriores a la 1.19 de Kubernetes usan Moby (Docker ascendente) como entorno de ejecución del contenedor.AKS clusters using Kubernetes prior to v1.19 for node pools use Moby (upstream docker) as its container runtime.

Máquina virtual de Azure y recursos auxiliares para un nodo de Kubernetes

El tamaño de la máquina virtual de Azure para los nodos define el número de CPU, la cantidad de memoria y el tamaño y tipo de almacenamiento disponible (por ejemplo, SSD de alto rendimiento o HDD normal).The Azure VM size for your nodes defines how many CPUs, how much memory, and the size and type of storage available (such as high-performance SSD or regular HDD). Si prevé que las aplicaciones requerirán gran cantidad de CPU y memoria o almacenamiento de alto rendimiento, planifique el tamaño del nodo en consecuencia.If you anticipate a need for applications that require large amounts of CPU and memory or high-performance storage, plan the node size accordingly. También puede escalar horizontalmente el número de nodos del clúster de AKS para satisfacer la demanda.You can also scale out the number of nodes in your AKS cluster to meet demand.

En AKS, la imagen de la máquina virtual para los nodos del clúster se basa en Ubuntu Linux o en Windows Server 2019.In AKS, the VM image for the nodes in your cluster is currently based on Ubuntu Linux or Windows Server 2019. Al crear un clúster de AKS o escalar horizontalmente el número de nodos, la plataforma Azure crea el número solicitado de máquinas virtuales y las configura.When you create an AKS cluster or scale out the number of nodes, the Azure platform creates the requested number of VMs and configures them. No se puede realizar ninguna configuración manual.There's no manual configuration for you to perform. Los nodos de agente se facturan como máquinas virtuales estándar, por lo que cualquier descuento que tenga en el tamaño de la máquina virtual que esté utilizando (incluidas las reservas de Azure) se aplica automáticamente.Agent nodes are billed as standard virtual machines, so any discounts you have on the VM size you're using (including Azure reservations) are automatically applied.

Si tiene que utilizar un sistema operativo de host diferente, otro entorno de ejecución del contenedor o incluir paquetes personalizados, puede implementar su propio clúster de Kubernetes mediante aks-engine.If you need to use a different host OS, container runtime, or include custom packages, you can deploy your own Kubernetes cluster using aks-engine. El componente aks-engine ascendente incluye y ofrece opciones de configuración antes de que se admitan oficialmente en los clústeres de AKS.The upstream aks-engine releases features and provides configuration options before they are officially supported in AKS clusters. Por ejemplo, si quiere usar un entorno de ejecución del contenedor que no sea containerd ni Moby, puede usar aks-engine para configurar e implementar un clúster de Kubernetes que satisfaga sus necesidades actuales.For example, if you wish to use a container runtime other than containerd or Moby, you can use aks-engine to configure and deploy a Kubernetes cluster that meets your current needs.

Reservas de recursosResource reservations

Los recursos de nodo se usan en AKS para integrar la función de nodo en el clúster.Node resources are utilized by AKS to make the node function as part of your cluster. Este uso puede crear discrepancias entre los recursos totales del nodo y los recursos que se pueden asignar cuando se usan en AKS.This usage can create a discrepancy between your node's total resources and the resources allocatable when used in AKS. Es importante tener en cuenta esta información al establecer las solicitudes y los límites de los pods implementados por el usuario.This information is important to note when setting requests and limits for user deployed pods.

Para buscar la ejecución de los recursos de un nodo que se pueden asignar:To find a node's allocatable resources, run:

kubectl describe node [NODE_NAME]

Para mantener la funcionalidad y el rendimiento de los nodos, AKS reserva los siguientes recursos en cada nodo.To maintain node performance and functionality, resources are reserved on each node by AKS. A medida que aumentan los recursos de un nodo, la reserva de recursos también crece debido a la mayor cantidad de pods implementados por el usuario que necesitan administración.As a node grows larger in resources, the resource reservation grows due to a higher amount of user deployed pods needing management.

Nota

El uso de complementos AKS como Container Insights (OMS) consumirá recursos de nodo adicionales.Using AKS add-ons such as Container Insights (OMS) will consume additional node resources.

Hay reservados dos tipos de recursos:Two types of resources are reserved:

  • CPU: La CPU reservada depende del tipo de nodo y la configuración del clúster, lo que puede provocar que pueda asignarse menos CPU debido a la ejecución de otras características adicionales.CPU - Reserved CPU is dependent on node type and cluster configuration, which may cause less allocatable CPU due to running additional features

    Núcleos de CPU en el hostCPU cores on host 11 22 44 88 1616 3232 6464
    Reservado para Kube (milinúcleos)Kube-reserved (millicores) 6060 100100 140140 180180 260260 420420 740740
  • Memoria: La memoria utilizada por AKS incluye la suma de dos valores.Memory - Memory utilized by AKS includes the sum of two values.

    1. El demonio kubelet se instala en todos los nodos de agente de Kubernetes para administrar la creación y terminación de contenedores.The kubelet daemon is installed on all Kubernetes agent nodes to manage container creation and termination. De forma predeterminada en AKS, este demonio tiene la siguiente regla de desalojo: memory.available <750Mi, lo que significa que un nodo siempre debe tener al menos 750 Mi asignables en todo momento.By default on AKS, this daemon has the following eviction rule: memory.available<750Mi, which means a node must always have at least 750 Mi allocatable at all times. Cuando un host está por debajo de ese umbral de memoria disponible, el kubelet terminará uno de los pods en ejecución para liberar memoria en la máquina host y protegerla.When a host is below that threshold of available memory, the kubelet will terminate one of the running pods to free memory on the host machine and protect it. Esta acción se desencadena una vez que la memoria disponible disminuye más allá del umbral de 750 Mi.This action is triggered once available memory decreases beyond the 750Mi threshold.

    2. El segundo valor es una tasa de regresión de reservas de memoria para que el demonio kubelet funcione correctamente (kube-reserved).The second value is a regressive rate of memory reservations for the kubelet daemon to properly function (kube-reserved).

      • 25 % de los primeros 4 GB de memoria25% of the first 4 GB of memory
      • 20 % de los siguientes 4 GB de memoria (hasta 8 GB)20% of the next 4 GB of memory (up to 8 GB)
      • 10 % de los siguientes 8 GB de memoria (hasta 16 GB)10% of the next 8 GB of memory (up to 16 GB)
      • 6 % de los siguientes 112 GB de memoria (hasta 128 GB)6% of the next 112 GB of memory (up to 128 GB)
      • 2 % de cualquier memoria que esté por encima de 128 GB2% of any memory above 128 GB

Las reglas anteriores para la asignación de memoria y CPU se usan para mantener el estado correcto de los nodos del agente, incluidos algunos pods del sistema de hospedaje que son críticos para el mantenimiento del clúster.The above rules for memory and CPU allocation are used to keep agent nodes healthy, including some hosting system pods that are critical to cluster health. Estas reglas de asignación también hacen que el nodo informe una menor memoria y CPU asignables que la que informaría si no formase parte de un clúster de Kubernetes.These allocation rules also cause the node to report less allocatable memory and CPU than it normally would if it were not part of a Kubernetes cluster. Las reservas de recursos anteriores no se pueden cambiar.The above resource reservations can't be changed.

Por ejemplo, si un nodo ofrece 7 GB, informará del 34 % de la memoria no asignable, incluido el umbral de expulsión estricto de 750 Mi.For example, if a node offers 7 GB, it will report 34% of memory not allocatable including the 750Mi hard eviction threshold.

0.75 + (0.25*4) + (0.20*3) = 0.75GB + 1GB + 0.6GB = 2.35GB / 7GB = 33.57% reserved

Además de las reservas para Kubernetes mismo, el sistema operativo del nodo subyacente también reserva una cantidad de recursos de CPU y memoria para mantener las funciones del sistema operativo.In addition to reservations for Kubernetes itself, the underlying node OS also reserves an amount of CPU and memory resources to maintain OS functions.

Para consultar los procedimientos recomendados asociados, consulteProcedimientos recomendados para características básicas del programador en Azure Kubernetes Service (AKS).For associated best practices, see Best practices for basic scheduler features in AKS.

Grupos de nodosNode pools

Los nodos de la misma configuración se agrupan en grupos de nodos.Nodes of the same configuration are grouped together into node pools. Un clúster de Kubernetes contiene uno o varios grupos de nodos.A Kubernetes cluster contains one or more node pools. El número de nodos y el tamaño iniciales se definen al crear un clúster de AKS, que crea un grupo de nodos predeterminado.The initial number of nodes and size are defined when you create an AKS cluster, which creates a default node pool. Este grupo de nodos predeterminado de AKS contiene las máquinas virtuales subyacentes que ejecutan los nodos del agente.This default node pool in AKS contains the underlying VMs that run your agent nodes.

Nota

Para asegurarse de que el clúster funcione de forma confiable, debe ejecutar al menos 2 (dos) nodos del grupo de nodos predeterminado.To ensure your cluster operates reliably, you should run at least 2 (two) nodes in the default node pool.

Al escalar o actualizar un clúster de AKS, la acción se realiza en el grupo de nodos predeterminado.When you scale or upgrade an AKS cluster, the action is performed against the default node pool. También puede escalar o actualizar un grupo de nodos específicos.You can also choose to scale or upgrade a specific node pool. Para las operaciones de actualización, los contenedores en ejecución se programan en otros nodos del grupo de nodos hasta que todos los nodos se actualizan correctamente.For upgrade operations, running containers are scheduled on other nodes in the node pool until all the nodes are successfully upgraded.

Para obtener más información sobre cómo usar varios grupos de nodos en AKS, consulte Creación y administración de varios grupos de nodos para un clúster en AKS.For more information about how to use multiple node pools in AKS, see Create and manage multiple node pools for a cluster in AKS.

Selectores de nodosNode selectors

En un clúster de AKS que contenga varios grupos de nodos, es posible que tenga que indicar al programador de Kubernetes qué grupo de nodos utilizar para un recurso determinado.In an AKS cluster that contains multiple node pools, you may need to tell the Kubernetes Scheduler which node pool to use for a given resource. Por ejemplo, los controladores de entrada no deben ejecutarse en los nodos de Windows Server.For example, ingress controllers shouldn't run on Windows Server nodes. Los selectores de nodo le permiten definir varios parámetros, por ejemplo, el nodo del sistema operativo, para controlar dónde se debe programar un pod.Node selectors let you define various parameters, such as the node OS, to control where a pod should be scheduled.

El siguiente ejemplo básico programa una instancia de NGINX en un nodo Linux mediante el selector de nodos "beta.kubernetes.io/os": linux:The following basic example schedules an NGINX instance on a Linux node using the node selector "beta.kubernetes.io/os": linux:

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.12-alpine
  nodeSelector:
    "beta.kubernetes.io/os": linux

Para más información sobre cómo controlar pods en grupos de nodos, consulte Procedimientos recomendados para las características avanzadas del programador en AKS.For more information on how to control where pods are scheduled, see Best practices for advanced scheduler features in AKS.

PodsPods

Kubernetes utiliza pods para ejecutar una instancia de la aplicación.Kubernetes uses pods to run an instance of your application. Un pod representa una instancia individual de la aplicación.A pod represents a single instance of your application. Los pods suelen tener una asignación 1:1 con un contenedor, aunque hay escenarios avanzados en los que un pod puede incluir varios contenedores.Pods typically have a 1:1 mapping with a container, although there are advanced scenarios where a pod may contain multiple containers. Los pods de varios contenedores se programan conjuntamente en el mismo nodo y permiten que los contenedores compartan recursos relacionados.These multi-container pods are scheduled together on the same node, and allow containers to share related resources.

Al crear un pod, puede definir solicitudes de recursos para solicitar una determinada cantidad de recursos de memoria o CPU.When you create a pod, you can define resource requests to request a certain amount of CPU or memory resources. Scheduler de Kubernetes intenta programar los pods para que se ejecuten en un nodo con recursos disponibles para satisfacer la solicitud.The Kubernetes Scheduler tries to schedule the pods to run on a node with available resources to meet the request. También puede especificar los límites de recursos máximos que impiden que un determinado pod consuma demasiados recursos de proceso del nodo subyacente.You can also specify maximum resource limits that prevent a given pod from consuming too much compute resource from the underlying node. Un procedimiento recomendado consiste en incluir los límites de recursos de todos los pods para ayudar a Scheduler de Kubernetes a comprender qué recursos son necesarios y cuáles se permiten.A best practice is to include resource limits for all pods to help the Kubernetes Scheduler understand which resources are needed and permitted.

Para obtener más información, consulte Pods de Kubernetes y Ciclo de vida de pods de Kubernetes.For more information, see Kubernetes pods and Kubernetes pod lifecycle.

Un pod es un recurso lógico, pero los contenedores se refieren al lugar donde se ejecutan las cargas de trabajo de la aplicación.A pod is a logical resource, but the container(s) are where the application workloads run. Normalmente los pods son recursos desechables y efímeros, y los pods programados individualmente pierden algunas de las características de redundancia y alta disponibilidad que proporciona Kubernetes.Pods are typically ephemeral, disposable resources, and individually scheduled pods miss some of the high availability and redundancy features Kubernetes provides. En su lugar, los pods se implementan y administran mediante controladores de Kubernetes, como el controlador de implementación.Instead, pods are deployed and managed by Kubernetes Controllers, such as the Deployment Controller.

Implementaciones y manifiestos YAMLDeployments and YAML manifests

Una implementación representa uno o varios pods idénticos, administrados por el controlador de implementación de Kubernetes.A deployment represents one or more identical pods, managed by the Kubernetes Deployment Controller. Una implementación define el número de réplicas (pods) que se van a crear y Scheduler de Kubernetes garantiza que, si los pods o nodos tienen algún problema, se programen pods adicionales en los nodos correctos.A deployment defines the number of replicas (pods) to create, and the Kubernetes Scheduler ensures that if pods or nodes encounter problems, additional pods are scheduled on healthy nodes.

Puede actualizar implementaciones para cambiar la configuración de los pods, la imagen del contenedor que se ha utilizado o el almacenamiento conectado.You can update deployments to change the configuration of pods, container image used, or attached storage. El controlador de implementación purga y finaliza un determinado número de réplicas, crea réplicas a partir de la nueva definición de implementación y continúa el proceso hasta que se actualizan todas las réplicas de la implementación.The Deployment Controller drains and terminates a given number of replicas, creates replicas from the new deployment definition, and continues the process until all replicas in the deployment are updated.

La mayoría de las aplicaciones sin estado de AKS debe usar el modelo de implementación en lugar de programar pods individuales.Most stateless applications in AKS should use the deployment model rather than scheduling individual pods. Kubernetes puede supervisar el estado de las implementaciones para asegurarse de que se ejecute el número de réplicas necesario dentro del clúster.Kubernetes can monitor the health and status of deployments to ensure that the required number of replicas run within the cluster. Cuando solo programa pods individuales, los pods no se reinician si se produce un problema y no se reprograman en nodos correctos si su nodo actual encuentra un problema.When you only schedule individual pods, the pods aren't restarted if they encounter a problem, and aren't rescheduled on healthy nodes if their current node encounters a problem.

Si una aplicación requiere que un cuórum de instancias siempre esté disponible para tomar decisiones de administración, el usuario no quiere que un proceso de actualización interrumpa dicha capacidad.If an application requires a quorum of instances to always be available for management decisions to be made, you don't want an update process to disrupt that ability. Los presupuestos de interrupción de pods se pueden usar para definir el número de réplicas de una implementación que se pueden quitar durante una actualización o la actualización de un nodo.Pod Disruption Budgets can be used to define how many replicas in a deployment can be taken down during an update or node upgrade. Por ejemplo, si tiene cinco (5) réplicas en la implementación, puede definir una interrupción del pod de 4 para permitir que solo se elimine o se vuelva a programar una réplica a la vez.For example, if you have five (5) replicas in your deployment, you can define a pod disruption of 4 to only permit one replica from being deleted/rescheduled at a time. Como en el caso de los límites de recursos del pod, un procedimiento recomendado consiste en definir los presupuestos de interrupciones de pods en aplicaciones que requieren que siempre esté presente un número mínimo de réplicas.As with pod resource limits, a best practice is to define pod disruption budgets on applications that require a minimum number of replicas to always be present.

Normalmente, las implementaciones se crean o administran con kubectl create o kubectl apply.Deployments are typically created and managed with kubectl create or kubectl apply. Para crear una implementación, defina un archivo de manifiesto en formato YAML (YAML no tiene lenguaje de marcado).To create a deployment, you define a manifest file in the YAML (YAML Ain't Markup Language) format. En el ejemplo siguiente, se crea una implementación básica del servidor web NGINX.The following example creates a basic deployment of the NGINX web server. La implementación especifica que se crearán tres (3) réplicas y requiere que el puerto 80 esté abierto en el contenedor.The deployment specifies three (3) replicas to be created, and requires port 80 to be open on the container. También se definen las solicitudes de recursos y los límites de CPU y memoria.Resource requests and limits are also defined for CPU and memory.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.2-alpine
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 250m
            memory: 64Mi
          limits:
            cpu: 500m
            memory: 256Mi

Las aplicaciones más complejas se pueden crear incluyendo también servicios como los equilibradores de carga en el manifiesto de YAML.More complex applications can be created by also including services such as load balancers within the YAML manifest.

Para más información, consulte el artículo sobre las implementaciones de Kubernetes.For more information, see Kubernetes deployments.

Administración de paquetes con HelmPackage management with Helm

Un enfoque común para la administración de aplicaciones en Kubernetes es con Helm.A common approach to managing applications in Kubernetes is with Helm. Puede compilar y usar gráficos públicos de Helm existentes que contienen una versión empaquetada del código de la aplicación y los manifiestos de YAML de Kubernetes para la implementación de recursos.You can build and use existing public Helm charts that contain a packaged version of application code and Kubernetes YAML manifests to deploy resources. Estos gráficos de Helm pueden almacenarse localmente o, con frecuencia, en un repositorio remoto, como un repositorio de gráficos de Helm para Azure Container Registry.These Helm charts can be stored locally, or often in a remote repository, such as an Azure Container Registry Helm chart repo.

Para usar Helm, instale el cliente de Helm en el equipo o use el cliente de Helm en Azure Cloud Shell.To use Helm, install the Helm client on your computer, or use the Helm client in the Azure Cloud Shell. Puede buscar o crear gráficos de Helm con el cliente y, a continuación, instalarlos en el clúster de Kubernetes.You can search for or create Helm charts with the client, and then install them to your Kubernetes cluster. Para más información, consulte Instalación de aplicaciones existentes con Helm en AKS.For more information, see Install existing applications with Helm in AKS.

StatefulSets y DaemonSetsStatefulSets and DaemonSets

El controlador de implementación usa Scheduler de Kubernetes para ejecutar un determinado número de réplicas en cualquier nodo disponible con recursos disponibles.The Deployment Controller uses the Kubernetes Scheduler to run a given number of replicas on any available node with available resources. Este enfoque del uso de las implementaciones puede ser suficiente para las aplicaciones sin estado, pero no para aquellas que requieren un almacenamiento o una convención de nomenclatura persistentes.This approach of using deployments may be sufficient for stateless applications, but not for applications that require a persistent naming convention or storage. Para aplicaciones que requieren que exista una réplica en cada nodo o nodos seleccionados dentro de un clúster, el controlador de implementación no observa el modo en que las réplicas se distribuyen entre los nodos.For applications that require a replica to exist on each node, or selected nodes, within a cluster, the Deployment Controller doesn't look at how replicas are distributed across the nodes.

Hay dos recursos de Kubernetes que le permiten administrar estos tipos de aplicaciones:There are two Kubernetes resources that let you manage these types of applications:

  • StatefulSets: mantenga el estado de las aplicaciones más allá de un ciclo de vida de pod individual, como el almacenamiento.StatefulSets - Maintain the state of applications beyond an individual pod lifecycle, such as storage.
  • DaemonSets: asegure una instancia en ejecución en cada nodo al principio del proceso de arranque de Kubernetes.DaemonSets - Ensure a running instance on each node, early in the Kubernetes bootstrap process.

StatefulSetsStatefulSets

Con frecuencia, el desarrollo de aplicaciones modernas tiene como objetivo las aplicaciones sin estado, pero StatefulSets puede usarse para aplicaciones con estado, como las aplicaciones que incluyen componentes de base de datos.Modern application development often aims for stateless applications, but StatefulSets can be used for stateful applications, such as applications that include database components. StatefulSet es similar a una implementación en la que se crean y administran uno o varios pods idénticos.A StatefulSet is similar to a deployment in that one or more identical pods are created and managed. Las réplicas de StatefulSet siguen un enfoque estable y secuencial para la implementación, el escalado, las actualizaciones y las finalizaciones.Replicas in a StatefulSet follow a graceful, sequential approach to deployment, scale, upgrades, and terminations. Con StatefulSet (a medida que las réplicas se vuelven a programar), la convención de nomenclatura, los nombres de red y el almacenamiento persisten.With a StatefulSet (as replicas are rescheduled) the naming convention, network names, and storage persist.

El usuario define la aplicación en formato YAML mediante kind: StatefulSet y el controlador de StatefulSet, a continuación, controla la implementación y administración de las réplicas necesarias.You define the application in YAML format using kind: StatefulSet, and the StatefulSet Controller then handles the deployment and management of the required replicas. Los datos se escriben en el almacenamiento persistente, proporcionado por Azure Managed Disks o Azure Files.Data is written to persistent storage, provided by Azure Managed Disks or Azure Files. Con StatefulSets, el almacenamiento persistente subyacente permanece incluso cuando se elimina StatefulSet.With StatefulSets, the underlying persistent storage remains even when the StatefulSet is deleted.

Para más información, consulte el objeto StatefulSets de Kubernetes.For more information, see Kubernetes StatefulSets.

Las réplicas de StatefulSet se programan y se ejecutan en cualquier nodo disponible en un clúster de AKS.Replicas in a StatefulSet are scheduled and run across any available node in an AKS cluster. Si tiene que asegurarse de que al menos un pod del conjunto se ejecute en un nodo, puede usar DaemonSet en su lugar.If you need to ensure that at least one pod in your Set runs on a node, you can instead use a DaemonSet.

DaemonSetsDaemonSets

Para la recopilación de registros específicos o las necesidades de supervisión, es posible que tenga que ejecutar un pod determinado en todos los nodos o en aquellos seleccionados.For specific log collection or monitoring needs, you may need to run a given pod on all, or selected, nodes. DaemonSet vuelve a usarse para implementar uno o varios pods idénticos, pero el controlador de DaemonSet garantiza que cada nodo especificado ejecute una instancia del pod.A DaemonSet is again used to deploy one or more identical pods, but the DaemonSet Controller ensures that each node specified runs an instance of the pod.

El controlador de DaemonSet puede programar los pods en los nodos al principio del proceso de arranque del clúster, antes de que se haya iniciado el programador de Kubernetes predeterminado.The DaemonSet Controller can schedule pods on nodes early in the cluster boot process, before the default Kubernetes scheduler has started. Esta capacidad garantiza que los pods de DaemonSet se inicien antes de que se programen los pods tradicionales en una implementación o StatefulSet.This ability ensures that the pods in a DaemonSet are started before traditional pods in a Deployment or StatefulSet are scheduled.

Como StatefulSets, DaemonSet se define como parte de una definición de YAML mediante kind: DaemonSet.Like StatefulSets, a DaemonSet is defined as part of a YAML definition using kind: DaemonSet.

Para más información, consulte el objeto DaemonSets de Kubernetes.For more information, see Kubernetes DaemonSets.

Nota

Si usa el complemento de nodos virtuales, DaemonSets no creará los pods en el nodo virtual.If using the Virtual Nodes add-on, DaemonSets will not create pods on the virtual node.

Espacios de nombresNamespaces

Los recursos de Kubernetes, como los pods y las implementaciones, se agrupan lógicamente en un espacio de nombres.Kubernetes resources, such as pods and Deployments, are logically grouped into a namespace. Estas agrupaciones proporcionan una manera de dividir de forma lógica un clúster de AKS y de restringir el acceso para crear, ver o administrar los recursos.These groupings provide a way to logically divide an AKS cluster and restrict access to create, view, or manage resources. Puede crear espacios de nombres para separar grupos de negocios, por ejemplo.You can create namespaces to separate business groups, for example. Los usuarios solo pueden interactuar con los recursos dentro de sus espacios de nombres asignados.Users can only interact with resources within their assigned namespaces.

Espacios de nombres de Kubernetes para dividir de forma lógica los recursos y las aplicaciones

Cuando se crea un clúster de AKS, están disponibles los siguientes espacios de nombres:When you create an AKS cluster, the following namespaces are available:

  • default: este espacio de nombres es donde los pods y las implementaciones se crean de forma predeterminada cuando no se proporciona ninguno.default - This namespace is where pods and deployments are created by default when none is provided. En entornos más pequeños, puede implementar aplicaciones directamente en el espacio de nombres predeterminado sin crear separaciones lógicas adicionales.In smaller environments, you can deploy applications directly into the default namespace without creating additional logical separations. Al interactuar con la API de Kubernetes, como con kubectl get pods, el espacio de nombres predeterminado se utiliza cuando no se especifica ninguno.When you interact with the Kubernetes API, such as with kubectl get pods, the default namespace is used when none is specified.
  • kube-system: este espacio de nombres es donde existen recursos principales, como las funciones de red como DNS y proxy o el panel de Kubernetes.kube-system - This namespace is where core resources exist, such as network features like DNS and proxy, or the Kubernetes dashboard. Normalmente, el usuario no implementa sus propias aplicaciones en este espacio de nombres.You typically don't deploy your own applications into this namespace.
  • kube-public: este espacio de nombres no se utiliza normalmente, pero puede usarse para que los recursos sean visibles en todo el clúster y para que puedan verlos todos los usuarios.kube-public - This namespace is typically not used, but can be used for resources to be visible across the whole cluster, and can be viewed by any user.

Para más información, consulte los espacios de nombres de Kubernetes.For more information, see Kubernetes namespaces.

Pasos siguientesNext steps

En este artículo se tratan algunos de los componentes básicos de Kubernetes y cómo se aplican a los clústeres de AKS.This article covers some of the core Kubernetes components and how they apply to AKS clusters. Para obtener más información sobre los conceptos básicos de Kubernetes y AKS, consulte los artículos siguientes:For more information on core Kubernetes and AKS concepts, see the following articles: