Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Cómputo
Elastic Cloud Server
Bare Metal Server
Auto Scaling
Image Management Service
Dedicated Host
FunctionGraph
Cloud Phone Host
Huawei Cloud EulerOS
Redes
Virtual Private Cloud
Elastic IP
Elastic Load Balance
NAT Gateway
Direct Connect
Virtual Private Network
VPC Endpoint
Cloud Connect
Enterprise Router
Enterprise Switch
Global Accelerator
Gestión y gobernanza
Cloud Eye
Identity and Access Management
Cloud Trace Service
Resource Formation Service
Tag Management Service
Log Tank Service
Config
Resource Access Manager
Simple Message Notification
Application Performance Management
Application Operations Management
Organizations
Optimization Advisor
Cloud Operations Center
Resource Governance Center
Migración
Server Migration Service
Object Storage Migration Service
Cloud Data Migration
Migration Center
Cloud Ecosystem
KooGallery
Partner Center
User Support
My Account
Billing Center
Cost Center
Resource Center
Enterprise Management
Service Tickets
HUAWEI CLOUD (International) FAQs
ICP Filing
Support Plans
My Credentials
Customer Operation Capabilities
Partner Support Plans
Professional Services
Análisis
MapReduce Service
Data Lake Insight
CloudTable Service
Cloud Search Service
Data Lake Visualization
Data Ingestion Service
GaussDB(DWS)
DataArts Studio
IoT
IoT Device Access
Otros
Product Pricing Details
System Permissions
Console Quick Start
Common FAQs
Instructions for Associating with a HUAWEI CLOUD Partner
Message Center
Seguridad y cumplimiento
Security Technologies and Applications
Web Application Firewall
Host Security Service
Cloud Firewall
SecMaster
Data Encryption Workshop
Database Security Service
Cloud Bastion Host
Data Security Center
Cloud Certificate Manager
Blockchain
Blockchain Service
Servicios multimedia
Media Processing Center
Video On Demand
Live
SparkRTC
Almacenamiento
Object Storage Service
Elastic Volume Service
Cloud Backup and Recovery
Storage Disaster Recovery Service
Scalable File Service
Volume Backup Service
Cloud Server Backup Service
Data Express Service
Dedicated Distributed Storage Service
Contenedores
Cloud Container Engine
SoftWare Repository for Container
Application Service Mesh
Ubiquitous Cloud Native Service
Cloud Container Instance
Bases de datos
Relational Database Service
Document Database Service
Data Admin Service
Data Replication Service
GeminiDB
GaussDB
Distributed Database Middleware
Database and Application Migration UGO
TaurusDB
Middleware
Distributed Cache Service
API Gateway
Distributed Message Service for Kafka
Distributed Message Service for RabbitMQ
Distributed Message Service for RocketMQ
Cloud Service Engine
EventGrid
Dedicated Cloud
Dedicated Computing Cluster
Aplicaciones empresariales
ROMA Connect
Message & SMS
Domain Name Service
Edge Data Center Management
Meeting
AI
Face Recognition Service
Graph Engine Service
Content Moderation
Image Recognition
Data Lake Factory
Optical Character Recognition
ModelArts
ImageSearch
Conversational Bot Service
Speech Interaction Service
Huawei HiLens
Developer Tools
SDK Developer Guide
API Request Signing Guide
Terraform
Koo Command Line Interface
Distribución de contenido y cómputo de borde
Content Delivery Network
Intelligent EdgeFabric
CloudPond
Soluciones
SAP Cloud
High Performance Computing
Servicios para desarrolladores
ServiceStage
CodeArts
CodeArts PerfTest
CodeArts Req
CodeArts Pipeline
CodeArts Build
CodeArts Deploy
CodeArts Artifact
CodeArts TestPlan
CodeArts Check
Cloud Application Engine
aPaaS MacroVerse
KooPhone
KooDrive

Creación de un StatefulSet

Actualización más reciente 2024-09-10 GMT+08:00

Escenario

StatefulSets es un tipo de cargas de trabajo cuyos datos o estado se almacenan mientras se ejecutan. Por ejemplo, MySQL es un StatefulSet porque necesita almacenar nuevos datos.

Un contenedor se puede migrar entre diferentes hosts, pero los datos no se almacenan en los hosts. Para almacenar datos de StatefulSet de forma persistente, conecte los volúmenes de almacenamiento de HA proporcionados por CCE a contenedor.

Restricciones

  • Al eliminar o ajustar un StatefulSet, el sistema no elimina los volúmenes de almacenamiento asociados con el StatefulSet para garantizar la seguridad de los datos.
  • Cuando elimine un StatefulSet, reduzca el número de réplicas a 0 antes de eliminar el StatefulSet para que los pods del StatefulSet se puedan detener en orden.
  • Cuando crea un StatefulSet, se requiere un Service sin cabeza para acceder a pods. Para obtener más información, véase Headless Service.
  • Cuando un nodo no está disponible, los pods se convierten en Unready. En este caso, debe eliminar manualmente los pods del StatefulSet para que los pods se puedan migrar a un nodo normal.

Requisitos previos

  • Antes de crear una carga de trabajo, 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.
  • Para habilitar el acceso público a una carga de trabajo, asegúrese de que una EIP o un balanceador de carga se ha vinculado a al menos un nodo del clúster.
    NOTA:

    Si un pod tiene contenedores múltiples, asegúrese de que los puertos utilizados por los contenedores no entren en conflicto entre sí. De lo contrario, la creación del StatefulSet fallará.

Uso de la consola de CCE

  1. Inicie sesión en la consola de CCE.
  2. 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.
  3. Establezca información básica sobre la carga de trabajo.

    Informaciones básicas
    • Workload Type: Seleccione StatefulSet. 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 52 caracteres que comiencen con una letra minúscula y terminen con una letra 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.
    • Pods: Ingrese el número de pods.
    • 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.
    • 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.

    Parámetros de Service sin cabeza

    Un Service sin cabeza se utiliza para resolver el problema de acceso mutuo entre pods en un StatefulSet. El Service sin cabeza proporciona un nombre de dominio de acceso fijo para cada pod. Para obtener más información, véase Headless Service.

    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 Service, consulte Descripción general.

    Configuración avanzada

  4. Haga clic en Create Workload en la esquina inferior derecha.

Uso de kubectl

En este ejemplo, se utiliza una carga de trabajo nginx y el volumen de EVS se monta dinámicamente en él utilizando el campo volumeClaimTemplates.

  1. Utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
  2. Cree y edite el archivo nginx-statefulset.yaml.

    nginx-statefulset.yaml es un nombre de archivo de ejemplo, y puede cambiarlo según sea necesario.

    vi nginx-statefulset.yaml

    A continuación se proporciona un ejemplo del contenido del archivo. Para obtener más información sobre StatefulSet, consulte la documentación de Kubernetes.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: container-1
              image: nginx:latest
              imagePullPolicy: IfNotPresent
              resources:
                requests:
                  cpu: 250m
                  memory: 512Mi
                limits:
                  cpu: 250m
                  memory: 512Mi
              volumeMounts:
                - name: test
                  readOnly: false
                  mountPath: /usr/share/nginx/html
                  subPath: ''
          imagePullSecrets:
            - name: default-secret
          dnsPolicy: ClusterFirst
          volumes: []
      serviceName: nginx-svc
      replicas: 2
      volumeClaimTemplates:  # Dynamically mounts the EVS volume to the workload.
        - apiVersion: v1
          kind: PersistentVolumeClaim
          metadata:
            name: test
            namespace: default
            annotations:
              everest.io/disk-volume-type: SAS  # SAS EVS volume type.
            labels:
              failure-domain.beta.kubernetes.io/region: ap-southeast-1  # region where the EVS volume is created.
              failure-domain.beta.kubernetes.io/zone: ap-southeast-1   # AZ where the EVS volume is created. It must be the same as the AZ of the node.
          spec:
            accessModes:
              - ReadWriteOnce  # The value must be ReadWriteOnce for the EVS volume.
            resources:
              requests:
                storage: 10Gi
            storageClassName: csi-disk # Storage class name. The value is csi-disk for the EVS volume.
      updateStrategy:
        type: RollingUpdate

    vi nginx-headless.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
      namespace: default
      labels:
        app: nginx
    spec:
      selector:
        app: nginx
        version: v1
      clusterIP: None
      ports:
        - name: nginx
          targetPort: 80
          nodePort: 0
          port: 80
          protocol: TCP
      type: ClusterIP

  3. Cree una carga de trabajo y el servicio sin cabeza correspondiente.

    kubectl create -f nginx-statefulset.yaml

    Si se muestra la siguiente información, el StatefulSet se ha creado correctamente.

    statefulset.apps/nginx created

    kubectl create -f nginx-headless.yaml

    Si se muestra la siguiente información, el servicio sin cabeza se ha creado correctamente.

    service/nginx-svc created

  4. 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.

Utilizamos cookies para mejorar nuestro sitio y tu experiencia. Al continuar navegando en nuestro sitio, tú aceptas nuestra política de cookies. Descubre más

Comentarios

Comentarios

Comentarios

0/500

Seleccionar contenido

Enviar el contenido seleccionado con los comentarios