GNU/Linux >> Tutoriales Linux >  >> Cent OS

¿Qué es Kubernetes DaemonSet y cómo usarlo?

Introducción

Kubernetes le permite automatizar la implementación de software, administrar aplicaciones en contenedores y escalar sus clústeres con facilidad. Una amplia variedad de objetos de Kubernetes, incluidos DaemonSets, brindan un nivel adicional de control.

Use Kubernetes DaemonSets para implementar pods específicos en cada nodo de su clúster.

Este artículo explica qué es un DaemonSet, cuándo usarlo y cómo crearlo.

¿Qué es un DaemonSet de Kubernetes?

Kubernetes se asegura de que una aplicación tenga amplios recursos, se ejecute de manera confiable y mantenga una alta disponibilidad a lo largo de su ciclo de vida. La ubicación de la aplicación dentro del clúster no es una prioridad.

Un DaemonSet le permite superar las limitaciones de programación de Kubernetes y se asegura de que una aplicación específica se implemente en todos los nodos dentro del clúster.m Los pods implementados generalmente contienen procesos en segundo plano que deben difundirse en todo el clúster.

Un DaemonSet normalmente se describe mediante un archivo YAML. Los campos en el archivo YAML le brindan control adicional del proceso de implementación de Pod. Un buen ejemplo es utilizar etiquetas para iniciar pods específicos en un subconjunto limitado de nodos.

¿Cómo funcionan los conjuntos de demonios?

Un DaemonSet es un objeto activo de Kubernetes administrado por un controlador. Puede declarar su estado deseado, indicando que un Pod específico debe estar presente en cada nodo. El bucle de control de reconciliación comparará el estado deseado con el estado observado actual. Si un nodo observado no tiene un Pod coincidente, el controlador DaemonSet creará uno automáticamente.

Este proceso automatizado incluye nodos existentes y todos los nodos recién creados. El programador de Kubernetes ignora los Pods creados por los controladores DaemonSet y existen mientras el propio nodo.

Un DaemonSet crea un Pod en cada nodo de forma predeterminada. Si es necesario, puede limitar la cantidad de nodos aceptables mediante un selector de nodos. El controlador DaemonSet va a crear Pods solo en los nodos que coincidan con el nodeSelector predefinido. campo en el archivo YAML.

¿Por qué usar un DaemonSet?

Los DaemonSets pueden mejorar el rendimiento del clúster al implementar Pods que realizan tareas de mantenimiento y servicios de soporte para cada nodo. Los procesos en segundo plano específicos, las aplicaciones de monitoreo de Kubernetes y otros agentes deben estar presentes en todo el clúster para brindar servicios relevantes y oportunos.

Los DaemonSets son excepcionalmente adecuados para servicios de ejecución prolongada que pueden incluir:

  • Recopilación de registros
  • Monitoreo de recursos de nodos (marcos como Prometheus)
  • Almacenamiento en clúster
  • Pods relacionados con la infraestructura (operaciones del sistema)

Es común que un DaemonSet implemente un tipo de demonio en todos los nodos. Sin embargo, varios DaemonSets también pueden controlar un tipo de demonio usando diferentes etiquetas. Las etiquetas de Kubernetes especifican reglas de implementación basadas en las características de los nodos individuales.

¿Cómo crear un DaemonSet?

Puede describir un DaemonSet en un archivo YAML y aplicar el archivo al clúster mediante los comandos kubectl.

Por ejemplo, daemonset-node-exporter.yaml El siguiente archivo despliega un exportador de nodos de Prometheus, dentro de la supervisión espacio de nombres, para monitorear las métricas de uso de hardware en cada nodo del clúster.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitoring
  labels:
    name: node-exporter
spec:
  template:
    metadata:
      labels:
        name: node-exporter
      annotations:
         prometheus.io/scrape: "true"
         prometheus.io/port: "9100"
    spec:
      hostPID: true
      hostIPC: true
      hostNetwork: true
      containers:
        - ports:
            - containerPort: 9100
              protocol: TCP
          resources:
            requests:
              cpu: 0.15
          securityContext:
            privileged: true
          image: prom/node-exporter:v0.15.2
          args:
            - --path.procfs
            - /host/proc
            - --path.sysfs
            - /host/sys
            - --collector.filesystem.ignored-mount-points
            - '"^/(sys|proc|dev|host|etc)($|/)"'
          name: node-exporter
          volumeMounts:
            - name: dev
              mountPath: /host/dev
            - name: proc
              mountPath: /host/proc
            - name: sys
              mountPath: /host/sys
            - name: rootfs
              mountPath: /rootfs
      volumes:
        - name: proc
          hostPath:
            path: /proc
        - name: dev
          hostPath:
            path: /dev
        - name: sys
          hostPath:
            path: /sys
        - name: rootfs
          hostPath:
            path: /

Acceda a su interfaz de línea de comandos de Kubernetes y aplique el archivo YAML recién creado:

kubectl apply -f daemonset-node-exporter.yaml

El sistema confirma que se ha creado el DaemonSet.

Una vez que envíe el daemonset-node-exporter DaemonSet, confirme su estado actual con describe comando:

kubectl describe daemonset node-exporter -n monitoring

El resultado ofrece información básica de DaemonSet e indica que el pod se ha implementado en todos los nodos disponibles.

También puede confirmar esto enumerando todos los pods en ejecución con el siguiente comando:

kubectl get pod -o wide -n monitoring

El DaemonSet ahora implementará continuamente el exportador de nodos Pod a todos los nodos recién creados.

Cómo limitar DaemonSet a nodos específicos

Los DaemonSets crean Pods en cada nodo del clúster de forma predeterminada, a menos que los selectores de nodos los restrinjan. Inicialmente, es necesario agregar el conjunto deseado de etiquetas a un subconjunto de nodos.

Logre esto usando la kubectl label dominio. Agregue el ssd=true etiqueta al node01 nodo con el siguiente comando:

kubectl label nodes node01 ssd=true

Los selectores de nodos son parte del nodeSelector dentro del archivo DaemonSet YAML. En el siguiente ejemplo, un DaemonSet implementará Nginx solo en nodos etiquetados como ssd=true .

apiVersion: apps/v1 
kind: "DaemonSet" 
metadata: 
labels: 
app: nginx 
ssd: "true" 
name: nginx-ssd-storage 
spec: 
template: 
metadata: 
labels: 
app: nginx ssd: "true" 
spec: 
nodeSelector: 
ssd: "true" 
containers: - 
name: nginx 
image: nginx:1.10.0

Agregando el ssd=true label a un nuevo nodo va a implementar el nginx-ssd-storage Pod a ese nodo. Si se elimina una etiqueta de un nodo, el controlador DaemonSet también elimina el Pod.

¿Cómo actualizar un DaemonSet?

El OnDelete La estrategia de actualización era la única forma de actualizar Pods administrados por un DaemonSet en las primeras versiones de Kubernetes (antes de la versión 1.6). Un OnDelete El enfoque requiere que elimine cada Pod manualmente. Solo entonces el DaemonSet puede crear un nuevo Pod usando la nueva configuración.

Las versiones recientes de Kubernetes utilizan actualizaciones continuas de forma predeterminada. La estrategia de actualización se define mediante spec.updateStrategy.type campo. El valor predeterminado se establece en RollingUpdate .

La estrategia de actualización continua elimina los Pods antiguos y crea nuevos en su lugar. El proceso es automático y controlado. Eliminar y crear todos los pods al mismo tiempo puede provocar que no estén disponibles y que se prolongue el tiempo de inactividad.

Dos parámetros le permiten controlar el proceso de actualización:

  • minReadySeconds define el período entre las actualizaciones de Pod. El valor se define en segundos y establecer un marco de tiempo razonable asegura el estado del Pod antes de que el sistema proceda a actualizar el siguiente Pod.
  • updateStrategy.rollingUpdate.maxUnavailable le permite definir la cantidad de Pods que se pueden actualizar al mismo tiempo. El valor de este parámetro depende en gran medida del tipo de aplicación que se implemente. Es necesario equilibrar la velocidad y la seguridad para garantizar una alta disponibilidad.

Usa el kubectl rollout Comando para verificar el estado de una actualización gradual de DaemonSet:

kubectl rollout status ds/daemonset-node-exporter -n monitoring

El sistema observa las actualizaciones de DaemonSet y le informa sobre el estado de implementación actual del exportador de nodos Conjunto Demonio.

¿Cómo eliminar un DaemonSet?

Elimina un DaemonSet usando kubectl delete dominio. Asegúrese de especificar correctamente el nombre del DaemonSet que desea eliminar:

kubectl delete -f daemonset-node-exporter.yaml -n monitoring

Este comando debe usarse con cuidado. Eliminar un DaemonSet también limpia todos los Pods que el DaemonSet en cuestión implementó.


Cent OS
  1. ¿Qué es un comando Chown en Linux y cómo usarlo?

  2. ¿Qué es un comando cURL y cómo usarlo?

  3. Chroot "cárcel":¿qué es y cómo usarlo?

  4. Qué es y cómo usar la carpeta public_ftp

  5. ¿Qué es Build-Essential-Ubuntu, cómo instalarlo y usarlo?

Comando de archivo de Linux:qué hace y cómo usarlo

Comando de cola de Linux:qué es y cómo usarlo

Qué es Terraform y cómo instalarlo y usarlo en AWS EC2

¿Qué es EasyApache y cómo lo uso?

¿Qué es Docker Compose y cómo se usa?

¿Qué es PPA en Ubuntu Linux y cómo lo uso?