Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

Uso de buckets do OBS entre regiões

Por padrão, um pod pode usar buckets do OBS somente na mesma região. O CCE permite que uma carga de trabalho use buckets do OBS entre regiões, o que pode melhorar a utilização de recursos em alguns cenários, mas também pode resultar em uma latência mais alta.

Restrições

  • O complemento Armazenamento do contêiner do CCE (Everest) deve ser de 1.2.42 ou posterior.
  • O nó no qual o armazenamento é montado deve ser capaz de acessar os buckets do OBS. Geralmente, a Internet ou Direct Connect são usadas para acessar os buckets do OBS em todas as regiões. Você pode executar ping no ponto de extremidade do OBS no nó onde o OBS está localizado para verificar se o OBS está acessível.
  • Somente os PVs podem usar buckets do OBS em regiões e, em seguida, são vinculadas às PVCs. A política de recuperação de PV deve ser Retain. As classes de armazenamento não podem ser usadas para criar PVCs dinamicamente para usar buckets do OBS entre regiões.

Procedimento

  1. Crie o ConfigMap paas-obs-endpoint e configure a região e o ponto de extremidade do OBS.

    O nome do ConfigMap é fixado em paas-obs-endpoint e o namespace é fixado para kube-system.

    Os nomes de região e os pontos de extremidade estão em pares chave-valor. Substitua <region_name> e <endpoint_address> por valores específicos. Use vírgulas (,) para separar vários valores.

    Para obter detalhes sobre o valor da region, consulte Regiões e pontos de extremidade.

    Exemplo: {"ap-southeast-1": "https://obs.ap-southeast-1.myhuaweicloud.com:443", "ap-southeast-3": "https://obs.ap-southeast-3.myhuaweicloud.com:443"}

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: paas-obs-endpoint   # The value must be paas-obs-endpoint.
      namespace: kube-system    # The value must be kube-system.
    data:
      obs-endpoint: |
        {"<region_name>": "<endpoint_address>"}

  2. Crie um PV.

    Defina everest.io/region como a região onde o OBS está localizado.
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: testing-abc
      annotations:
        pv.kubernetes.io/bound-by-controller: 'yes'
        pv.kubernetes.io/provisioned-by: everest-csi-provisioner
    spec:
      capacity:
        storage: 1Gi
      csi:
        driver: obs.csi.everest.io
        volumeHandle: testing-abc             # OBS bucket name
        fsType: s3fs                          # obsfs indicates a parallel file system (recommended), and s3fs indicates an object bucket.
        volumeAttributes:
          everest.io/obs-volume-type: STANDARD
          everest.io/region: <region_name>       # Region where the OBS bucket resides. Replace it with a specific value.
          storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
        nodePublishSecretRef:                 # AK/SK used for mounting an OBS bucket
          name: test-user
          namespace: default
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain   # The value must be Retain.
      storageClassName: csi-obs
      volumeMode: Filesystem

    nodePublishSecretRef é a chave de acesso (AK/SK) usada para montar o volume de armazenamento do objeto. Use a AK/SK para criar um segredo, que será usado ao criar um PV. Para mais detalhes, consulte Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS.

  3. Crie uma PVC.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-test-abc
      namespace: default
      annotations:
        everest.io/obs-volume-type: STANDARD                         # OBS bucket type. Currently, standard (STANDARD) and infrequent access (WARM) are supported.
        csi.storage.k8s.io/fstype: s3fs                              # File type. obsfs indicates a parallel file system (recommended), and s3fs indicates an OBS bucket.
        volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner
    spec:
      accessModes:
      - ReadWriteMany             # The value must be ReadWriteMany for object storage.
      resources:
        requests:
          storage: 1Gi            # Storage capacity of a PVC. This field is valid only for verification (fixed to 1, cannot be empty or 0). The value setting does not take effect for OBS buckets.
      storageClassName: csi-obs   # Storage class name. For object storage, the value is fixed to csi-obs.
      volumeName: testing-abc     # PV name

  4. Crie uma carga de trabalho, selecione a PVC na opção de armazenamento de dados das configurações do contêiner e adicione a PVC criada. Se a carga de trabalho for criada com êxito, o bucket do OBS poderá ser usado entre regiões.

    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
       name: obs-deployment-example                       # Workload name
      namespace: default 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: obs-deployment-example 
      template: 
        metadata: 
          labels: 
            app: obs-deployment-example 
        spec: 
          containers: 
          - image: nginx
            name: container-0 
            volumeMounts: 
            - mountPath: /tmp                       # Mount path
              name: pvc-obs-example 
          restartPolicy: Always
          imagePullSecrets:
            - name: default-secret
          volumes: 
          - name: pvc-obs-example  
            persistentVolumeClaim: 
              claimName: pvc-test-abc               # PVC name