Creación de un DaemonSet
Escenario
CCE proporciona capacidades de despliegue y gestión para múltiples tipos de contenedores y admite funciones de cargas de trabajo de contenedor como la creación, configuración, supervisión, ajuste, actualización, desinstalación, descubrimiento de servicios y balanceo de carga.
DaemonSet garantiza que solo se ejecute un pod en todos o algunos nodos. Cuando se agrega un nodo a un clúster, también se agrega un nuevo pod para el nodo. Cuando se elimina un nodo de un clúster, el pod también se recupera. Si se elimina un DaemonSet, se eliminarán todos los pods creados por él.
Los escenarios de aplicación típicos de un DaemonSet son los siguientes:
- Ejecute el daemon de almacenamiento de clúster, como glusterd o Ceph, en cada nodo.
- Ejecute el daemon de colección de logs, como Fluentd o Logstash, en cada nodo.
- Ejecute el daemon de supervisión, como Prometheus Node Exporter, collectd, Datadog agent, New Relic agent o Ganglia (gmond), en cada nodo.
Puede desplegar un DaemonSet para cada tipo de daemons en todos los nodos o desplegar varios DaemonSets para el mismo tipo de daemons. En el segundo caso, los DaemonSets tienen diferentes indicadores y diferentes requisitos en la memoria y la CPU para diferentes tipos de hardware.
Requisitos previos
Antes de crear un DaemonSet debe tener un clúster disponible. Para obtener más información sobre cómo crear un clúster, consulte Compra de un clúster de CCE.
Uso de la consola de CCE
- Inicie sesión en la consola de CCE.
- Haga clic en el nombre del clúster para ir a la consola del clúster, elija Workloads en el panel de navegación y haga clic en Create Workload en la esquina superior derecha.
- Establezca información básica sobre la carga de trabajo.
Informaciones básicas
- Workload Type: Seleccione DaemonSet. Para obtener más información sobre los tipos de carga de trabajo, consulte Overview.
- Workload Name: Introduzca el nombre de la carga de trabajo. Escriba de 1 a 63 caracteres que comienzan con una letra minúscula y terminan con una letra minúscula o un dígito. Solo se permiten letras minúsculas, dígitos y guiones (-).
- Namespace: Seleccione el espacio de nombres de la carga de trabajo. El valor predeterminado es default. También puede hacer clic en Create Namespace para crear uno. Para obtener más información, véase Creación de un espacio de nombres.
- Time Zone Synchronization: Especifique si desea habilitar la sincronización de zona horaria. Una vez activada la sincronización de zona horaria, el contenedor y el nodo utilizan la misma zona horaria. La función de sincronización de zona horaria depende del disco local montado en el contenedor. No modifique ni elimine la zona horaria. Para obtener más información, véase Configuración de la sincronización de zona horaria.
Configuración del contenedor- Información del contenedor
Se pueden configurar múltiples contenedores en un pod. Puede hacer clic en Add Container a la derecha para configurar varios contenedores para el pod.
- Basic Info: Véase Configuración de información básica del contenedor.
- Lifecycle: Véase Setting Container Lifecycle Parameters.
- Health Check: Véase Configuración de la comprobación de estado de un contenedor.
- Environment Variables: Véase Setting an Environment Variable.
- Data Storage: Véase Almacenamiento de contenedores.
Si la carga de trabajo contiene más de un pod, los volúmenes de EVS no se pueden montar.
- Security Context: Establezca permisos de contenedor para proteger el sistema y otros contenedores de ser afectados. Introduzca el ID de usuario para establecer los permisos de contenedor y evitar que los sistemas y otros contenedores se vean afectados.
- Logging: Véase Uso de ICAgent para recopilar logs de contenedores.
- Image Access Credential: Seleccione la credencial utilizada para acceder al repositorio de imágenes. El valor predeterminado es default-secret. Puede usar default-secret para acceder a las imágenes en SWR. Para obtener más información acerca de default-secret, consulte default-secret.
- GPU graphics card: All está seleccionado de forma predeterminada. La instancia de carga de trabajo se programará en el nodo con el tipo de tarjeta gráfica de GPU especificado.
Configuración de servicio
Se utiliza un Service para el acceso a pods. Con una dirección IP fija, un Service reenvía el tráfico de acceso a los pods y realiza el balanceo de carga para estos pods.
También puede crear un Service después de crear una carga de trabajo. Para obtener más información sobre el Servicio, consulte Descripción general.
Configuración avanzada- Upgrade: Véase Configuración de la política de actualización de carga de trabajo.
- Scheduling: Véase Política de programación (afinidad/antiafinidad).
- Labels and Annotations: Véase Etiquetas y anotaciones de pod.
- Toleration: El uso de manchas y tolerancias permite (no a la fuerza) que el pod se programe en un nodo con las manchas correspondientes, y controla las políticas de desalojo del pod después de que el nodo donde se encuentra el pod esté contaminado. Para obtener más información, véase Tolerancias.
- DNS: Véase Configuración de DNS.
- APM Settings: Véase Configuración de la configuración de APM para el análisis de cuello de botella del rendimiento.
- Haga clic en Create Workload en la esquina inferior derecha.
Uso de kubectl
El siguiente procedimiento utiliza Nginx como ejemplo para describir cómo crear una carga de trabajo con kubectl.
- Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
- Cree y edite el archivo nginx-daemonset.yaml. nginx-daemonset.yaml es un nombre de archivo de ejemplo, y puede cambiarlo según sea necesario.
vi nginx-daemonset.yaml
El contenido del archivo de descripción es el siguiente: A continuación se proporciona un ejemplo. Para obtener más información sobre DaemonSets, consulte Documentos de Kubernetes.
apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonset labels: app: nginx-daemonset spec: selector: matchLabels: app: nginx-daemonset template: metadata: labels: app: nginx-daemonset spec: nodeSelector: # Node selection. A pod is created on a node only when the node meets daemon=need. daemon: need containers: - name: nginx-daemonset image: nginx:alpine resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi imagePullSecrets: - name: default-secret
El parámetro replicas usado para definir una Deployment o StatefulSet no existe en la configuración anterior para un DaemonSet porque cada nodo tiene solo una réplica. Está arreglado.
El nodeSelector de la plantilla de pod anterior especifica que un pod solo se crea en los nodos que cumplen con daemon=need como se muestra en la siguiente figura. Si desea crear un pod en cada nodo, elimine la etiqueta.
- Cree un DaemonSet.
kubectl create -f nginx-daemonset.yaml
Si se muestra la siguiente información, se está creando el DaemonSet.
daemonset.apps/nginx-daemonset created
- Consulte el estado DaemonSet.
kubectl get ds
$ kubectl get ds NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nginx-daemonset 1 1 0 1 0 daemon=need 116s
- Si se accede a la carga de trabajo con un Service de ClusterIP o de NodePort, establezca el tipo de acceso de la carga de trabajo correspondiente. Para obtener más información, véase Red.