Compartir a través de


Personalización de nodos de trabajo con un DaemonSet

Para cumplir los requisitos de la aplicación, es posible que tenga que modificar la configuración del sistema operativo, habilitar un módulo de kernel de Linux o instalar un paquete de aplicación de nivel de host. Use un DaemonSet con privilegios de host para personalizar los nodos de trabajo.

El ejemplo DaemonSet establece registry.contoso.com para omitir el proxy de red de Cloud Services para la extracción de imágenes, instala el módulo del kernel SCTP y establece fs.inotify.max_user_instances en 4096. Por último, el script aplica una etiqueta al nodo de Kubernetes para asegurarse de que DaemonSet solo se ejecuta una vez.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: customized
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: customized
  template:
    metadata:
      labels:
        name: customized
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: customized
                    operator: NotIn
                    values:
                      - "1"
      tolerations:
        - operator: Exists
          effect: NoSchedule
      containers:
        - name: customized
          image: mcr.microsoft.com/cbl-mariner/base/core:1.0
          command:
            - nsenter
            - --target
            - "1"
            - --mount
            - --uts
            - --ipc
            - --net
            - --pid
            - --
            - bash
            - -exc
            - |
              sed -i '/registrycontoso.com/!s/NO_PROXY=/&registry.contoso.com,/' /etc/systemd/system/containerd.service.d/http-proxy.conf
              systemctl daemon-reload
              systemctl restart containerd
              modprobe sctp
              sed -i 's/^fs.inotify.max_user_instances.*/fs.inotify.max_user_instances     = 4096/' /etc/sysctl.d/90-system-max-limits.conf
              kubectl --kubeconfig=/etc/kubernetes/kubelet.conf label node ${HOSTNAME,,} customized=1
              sleep infinity
          resources:
            limits:
              memory: 200Mi
            requests:
              cpu: 100m
              memory: 16Mi
          securityContext:
            privileged: true
      hostNetwork: true
      hostPID: true
      hostIPC: true
      terminationGracePeriodSeconds: 0

Y aplique el Daemonset:

kubectl apply -f /path/to/daemonset.yaml