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
- 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>"}
- 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.
- 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
- 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