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.

En este artículo se presentan los componentes principales de la infraestructura de Kubernetes, como el patrón de clúster, los nodos y los grupos de nodos.This article introduces the core Kubernetes infrastructure components such as the cluster master, 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. Los patrones de clúster de AKS se administran mediante la plataforma Azure y el usuario solo paga por los nodos de AKS que ejecuten sus aplicaciones.The AKS cluster masters are 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:

  • Los nodos del patrón de clúster proporcionan los servicios principales de Kubernetes y la orquestación de cargas de trabajo de la aplicación.Cluster master nodes provide the core Kubernetes services and orchestration of application workloads.
  • Los nodos ejecutan las cargas de trabajo de la aplicación.Nodes run your application workloads.

Componentes del nodo y del patrón de clúster de Kubernetes

Patrón de clústerCluster master

Al crear un clúster de AKS, se crea y se configura automáticamente un patrón de clúster.When you create an AKS cluster, a cluster master is automatically created and configured. Este patrón de clúster se proporciona como un recurso de Azure administrado que se extrae del usuario.This cluster master is provided as a managed Azure resource abstracted from the user. No hay ningún costo para el patrón de clúster, solo los nodos que forman parte del clúster de AKS.There's no cost for the cluster master, only the nodes that are part of the AKS cluster.

El patrón de clúster incluye los siguientes componentes principales de Kubernetes:The cluster master 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 patrón de clúster 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 patrón de clúster y los nodos.AKS provides a single-tenant cluster master, 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 cluster master and nodes. La interacción con el patrón de clúster se produce a través de las API de Kubernetes, como kubectl o el panel de Kubernetes.Interaction with the cluster master occurs through Kubernetes APIs, such as kubectl or the Kubernetes dashboard.

Este patrón de clúster 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 patrón de clúster directamente.This managed cluster master means that you don't need to configure components like a highly available etcd store, but it also means that you can't access the cluster master directly. Las actualizaciones de Kubernetes se organizan a través de la CLI de Azure o Azure Portal, que actualiza el patrón de clúster y, a continuación, los nodos.Upgrades to Kubernetes are orchestrated through the Azure CLI or Azure portal, which upgrades the cluster master and then the nodes. Para solucionar los posibles problemas, puede revisar los registros maestros del clúster mediante registros de Azure Monitor.To troubleshoot possible issues, you can review the cluster master logs through Azure Monitor logs.

Si tiene que configurar el patrón de clúster 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 cluster master in a particular way or need direct access to them, 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 patrón de clúster 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 cluster master 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. En AKS, Moby se usa como el entorno de ejecución del contenedor.In AKS, Moby is used as the 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 verticalmente el número de nodos del clúster de AKS para satisfacer la demanda.You can also scale up 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 verticalmente 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 up 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 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 Moby, you can use aks-engine to configure and deploy a Kubernetes cluster that meets your current needs.

Reservas de recursosResource reservations

No es necesario administrar los componentes principales de Kubernetes en cada nodo, como kubelet, kube-proxy y kube-dns, pero consumen algunos de los recursos de proceso disponibles.You don't need to manage the core Kubernetes components on each node, such as the kubelet, kube-proxy, and kube-dns, but they do consume some of the available compute resources. Para mantener la funcionalidad y el rendimiento de los nodos, se reservan los siguientes recursos de proceso en cada nodo:To maintain node performance and functionality, the following compute resources are reserved on each node:

  • CPU: 60 msCPU - 60 ms
  • Memoria: 20 % hasta 4 GiBMemory - 20% up to 4 GiB

Estas reservas significan que la cantidad de CPU y memoria disponibles para las aplicaciones puede parecer menos de lo que contiene el nodo propiamente dicho.These reservations mean that the amount of available CPU and memory for your applications may appear less than the node itself contains. Si hay restricciones de recursos debido al número de aplicaciones que se ejecutan, estas reservas garantizan que CPU y memoria permanecen disponibles para los componentes principales de Kubernetes.If there are resource constraints due to the number of applications that you run, these reservations ensure CPU and memory remains available for the core Kubernetes components. Las reservas de recursos no se pueden cambiar.The resource reservations can't be changed.

Por ejemplo:For example:

  • El tamaño de nodo Estándar DS2 v2 contiene 2 vCPU y 7 GiB de memoria.Standard DS2 v2 node size contains 2 vCPU and 7 GiB memory

    • 20 % de 7 GiB de memoria = 1,4 GiB20% of 7 GiB memory = 1.4 GiB
    • Hay (7-1.4) = 5,6 GiB de memoria en total disponible para el nodo.A total of (7 - 1.4) = 5.6 GiB memory is available for the node
  • El tamaño de nodo Estándar v3 E4s contiene 4 vCPU y 32 GiB de memoria.Standard E4s v3 node size contains 4 vCPU and 32 GiB memory

    • 20% de 32 GiB de memoria = 6,4 GiB, pero AKS solo reserva hasta 4 GB20% of 32 GiB memory = 6.4 GiB, but AKS only reserves a maximum of 4 GiB
    • Hay (32-4) = 28 GiB en total disponible para el nodo.A total of (32 - 4) = 28 GiB is available for the node

El sistema operativo del nodo subyacente también requiere cierta cantidad de recursos de CPU y memoria para completar sus propias funciones esenciales.The underlying node OS also requires some amount of CPU and memory resources to complete its own core 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. La compatibilidad con varios grupos de nodos está actualmente en versión preliminar en AKS.Multiple node pool support is currently in preview in AKS.

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 to operate 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 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 (actualmente en versión preliminar en AKS).For example, ingress controllers shouldn't run on Windows Server nodes (currently in preview in AKS). 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: nginx:1.15.12
  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 límites de recursos para solicitar una determinada cantidad de recursos de memoria o CPU.When you create a pod, you can define resource limits 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 suelen implementarse y administrarse mediante controladores de Kubernetes, como el controlador de implementación.Instead, pods are usually 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 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 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 creen 3 réplicas y que se abra el puerto 80 en el contenedor.The deployment specifies 3 replicas to be created, and that port 80 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: nginx:1.15.2
        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, se instala un componente de servidor denominado Tiller en el clúster de Kubernetes.To use Helm, a server component called Tiller is installed in your Kubernetes cluster. Tiller administra la instalación de gráficos dentro del clúster.The Tiller manages the installation of charts within the cluster. El propio cliente de Helm se instala localmente en el equipo, o bien puede utilizarse dentro de Azure Cloud Shell.The Helm client itself is installed locally on your computer, or can be used within 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.

Helm incluye un componente de cliente y un componente de Tiller del lado del servidor que crea recursos dentro del clúster de Kubernetes.

Para más información, consulte Instalación de aplicaciones con Helm en Azure Kubernetes Service (AKS).For more information, see Install applications with Helm in Azure Kubernetes Service (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, la convención de nomenclatura, los nombres de red y el almacenamiento persisten como réplicas que se vuelven a programar.With a StatefulSet, the naming convention, network names, and storage persist as replicas are rescheduled.

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 additional information on core Kubernetes and AKS concepts, see the following articles: