Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Manage the lifecycle of OSS buckets

Dernière mise à jour :Aug 11, 2026

CNFS gère le cycle de vie des compartiments OSS et les provisionne en tant que volumes persistants (PV) via des manifests Kubernetes.

Deux méthodes sont disponibles :

  • Méthode 1 : Utilisez CNFS pour créer un nouveau compartiment OSS et montez-le sur un Deployment et un StatefulSet en tant que volume provisionné dynamiquement.

  • Méthode 2 : Créez une définition de ressource personnalisée (CRD) CNFS qui fait référence à un compartiment OSS existant, puis montez-le en tant que volume provisionné statiquement ou dynamiquement.

Prérequis

Assurez-vous de disposer des éléments suivants :

  • csi-plugin et csi-provisioner en version 1.24.2-5b34494d-aliyun ou ultérieure (mettre à niveau)

  • storage-operator en version 1.24.95-e2d0756-aliyun ou ultérieure (mettre à niveau)

Limitations

  • La seule politique de récupération prise en charge est Retain. La suppression d'une CRD CNFS conserve le compartiment.

  • Les objets Archive et Cold Archive doivent être restaurés avant toute lecture ou écriture.

  • Si la gestion des versions est activée, les politiques de rétention et OSS-HDFS ne peuvent pas être configurées. Pour les utiliser, définissez d'abord enableVersioning sur None.

  • Une fois la gestion des versions définie sur enabled, elle ne peut pas être désactivée, mais uniquement suspendue.

  • Les paramètres redundancyType et enableVersioning nécessitent storage-operator v1.26.2-1de13b6-aliyun ou une version ultérieure.

  • Si redundancyType est défini sur ZRS, Cold Archive et Deep Cold Archive ne sont pas pris en charge.

Méthode 1 : Créer un nouveau compartiment OSS avec CNFS

Cette méthode crée un compartiment OSS nommé cnfs-oss-<clusterid> et le monte sur un Deployment et un StatefulSet en tant que volume provisionné dynamiquement.

Si un compartiment portant le nom spécifié existe déjà, CNFS l'associe à l'objet ContainerNetworkFileSystem au lieu d'en créer un nouveau.

Créer la CRD CNFS et la StorageClass

Créez le Secret, la CRD ContainerNetworkFileSystem et la StorageClass. Remplacez <clusterid> par l'ID de votre cluster.

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: oss-secret
stringData:
  akId: "xxxx"      # AccessKey ID for mounting the OSS bucket
  akSecret: "xxxx"  # AccessKey Secret for mounting the OSS bucket
---
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-oss-<clusterid>   # Set the CNFS CRD name to match the bucket name
spec:
  description: "cnfs-oss"
  type: oss
  reclaimPolicy: Retain         # Only Retain is supported. Deleting the CRD keeps the bucket.
  parameters:
    bucketName: cnfs-oss-<clusterid>   # Replace <clusterid> with your cluster ID; bucket name must be unique
    encryptType: "AES256"              # AES-256 server-side encryption
    storageType: "Standard"            # Storage class
    aclType: "private"                 # Bucket owner and authorized users only
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-oss
parameters:
  containerNetworkFileSystem: cnfs-oss-<clusterid>           # Reference to the CNFS CRD
  otherOpts: -o max_stat_cache_size=0 -o allow_other         # Cache settings
  path: /
  # volumeAs: subpath   # Uncomment to auto-create a subpath for each PV
  csi.storage.k8s.io/node-publish-secret-name: oss-secret
  csi.storage.k8s.io/node-publish-secret-namespace: default
provisioner: ossplugin.csi.alibabacloud.com
reclaimPolicy: Retain
EOF

Paramètres de la CRD CNFS :

Paramètre Description Obligatoire Par défaut
description Description du système de fichiers CNFS. Non
type Type de volume. Définissez-le sur oss. Oui
reclaimPolicy Politique de récupération. Seule la valeur Retain est prise en charge. Oui
parameters.bucketName Nom du compartiment OSS. Si un compartiment correspondant existe, il est associé à la CRD CNFS ; sinon, un nouveau compartiment est créé. Oui
parameters.storageType Classe de stockage. Valeurs valides : Standard, IA (Infrequent Access), Archive, ColdArchive. Les objets Archive et Cold Archive doivent être restaurés avant toute lecture/écriture. Non Standard
parameters.redundancyType Type de redondance de stockage. LRS : zone unique ; ZRS (redondance inter-zones) : multi-zones. Nécessite storage-operator v1.26.2-1de13b6-aliyun ou une version ultérieure. ZRS ne prend pas en charge Cold Archive ou Deep Cold Archive. Non ZRS
parameters.encryptType Algorithme de chiffrement côté serveur. Valeurs valides : None, AES256, SM4. Non
parameters.aclType Type de liste de contrôle d'accès (ACL). Valeurs valides : private (propriétaire et utilisateurs autorisés uniquement), public-read (lecture publique ; écriture réservée au propriétaire et aux utilisateurs autorisés), public-read-write (tous les utilisateurs, y compris les anonymes, peuvent lire et écrire — à utiliser avec prudence). Non private
parameters.enableVersioning État de la gestion des versions. Valeurs valides : enabled , suspended , None . Une fois activée, elle ne peut pas être désactivée, mais uniquement suspendue. Empêche la configuration d'une politique de rétention ou d'OSS-HDFS. Nécessite storage-operator v1.26.2-1de13b6-aliyun ou une version ultérieure. Consultez la page Facturation du cycle de vie. Non Enabled

Créer une PVC et des exemples de charges de travail

Créez une revendication de volume persistant (PVC), un Deployment et un StatefulSet pour vérifier que le montage du compartiment fonctionne correctement.

cat << EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-oss-pvc
spec:
  accessModes:
    - ReadOnlyMany
  storageClassName: alibabacloud-cnfs-oss
  resources:
    requests:
      storage: 100Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-oss-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - mountPath: "/data"
          name: cnfs-oss-pvc
      volumes:
      - name: cnfs-oss-pvc
        persistentVolumeClaim:
          claimName: cnfs-oss-pvc
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cnfs-oss-sts
  labels:
    app: nginx
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - mountPath: "/data"
          name: www
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadOnlyMany" ]
      storageClassName: "alibabacloud-cnfs-oss"
      resources:
        requests:
          storage: 100Gi
EOF

Vérifier le compartiment et les charges de travail

Confirmez que le compartiment OSS et les pods sont prêts.

Vérifiez la CRD CNFS :

kubectl get cnfs/cnfs-oss-<clusterid> -o yaml

Sortie attendue :

apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
...
status:
  conditions:
  - lastProbeTime: "2022-09-18 15:02:39"
    reason: The oss bucket is complete initialization.
    status: Ready
  fsAttributes:
    accessGroupName: DEFAULT_VPC_GROUP_NAME
    aclType: private
    bucketName: cnfs-oss-****
    encryptType: AES256
    endPoint:
      extranet: oss-****.aliyuncs.com
      internal: oss-****-internal.aliyuncs.com
    regionId: ****
    storageType: Standard
  status: Available

Le champ status.status affiche Available lorsque le compartiment est prêt. Champs d'état :

Champ Description
status État de la CRD CNFS. Valeurs valides : Pending, Creating, Initialization (création du système de fichiers), Available, Unavailable (récupérable), Fatal (irrécupérable), Terminating.
conditions.lastProbeTime Horodatage de la dernière sonde.
conditions.reason Raison de l'état actuel.
conditions.status État de préparation : Ready (disponible) ou NotReady.
fsAttributes.accessGroupName Groupe d'autorisations pour le point de montage. Actuellement, seul DEFAULT_VPC_GROUP_NAME (le groupe VPC par défaut) est pris en charge.
fsAttributes.encryptType Algorithme de chiffrement : None, AES256 ou SM4.
fsAttributes.regionId Région du cluster ACK.
fsAttributes.storageType Classe de stockage du compartiment : Standard, IA, Archive ou ColdArchive.
fsAttributes.redundancyType Type de redondance de stockage : LRS (stockage localement redondant) ou ZRS (stockage redondant inter-zones).
fsAttributes.aclType Type de liste de contrôle d'accès (ACL) du compartiment.
fsAttributes.endPoint Points de terminaison : extranet (public) et internal (réseau interne).
fsAttributes.enableVersioning État de la gestion des versions : enabled, suspended ou None.

Vérifiez les pods :

kubectl get pod

Sortie attendue :

NAME                                   READY   STATUS    RESTARTS   AGE
cnfs-oss-deployment-5864fd8d98-4****   1/1     Running   0          2m21s
cnfs-oss-sts-0                         1/1     Running   0          2m21s
cnfs-oss-sts-1                         1/1     Running   0          2m16s

Tous les pods affichent l'état Running, ce qui confirme que le Deployment et le StatefulSet ont monté le compartiment OSS.

Méthode 2 : Utiliser un compartiment OSS existant

Cette méthode crée une CRD CNFS qui fait référence à un compartiment OSS existant par son nom.

Créer la CRD CNFS

cat <<EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-oss-exist-bucket-name
spec:
  description: "cnfs-oss"
  type: oss
  reclaimPolicy: Retain
  parameters:
    bucketName: bucket-name   # Name of your existing OSS bucket
EOF

Vérifier la CRD CNFS

kubectl get cnfs/cnfs-oss-exist-bucket-name -o yaml

Sortie attendue :

apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
...
status:
  conditions:
  - lastProbeTime: "2022-09-14 17:00:21"
    reason: The oss bucket is complete initialization.
    status: Ready
  fsAttributes:
    accessGroupName: DEFAULT_VPC_GROUP_NAME
    aclType: private
    bucketName: exist-bucket-name
    encryptType: AES256
    endPoint:
      extranet: oss-****.aliyuncs.com
      internal: oss-****-internal.aliyuncs.com
    regionId: ****
    storageType: Standard
  status: Available

Monter le compartiment sur une charge de travail

Montez le compartiment sur votre Deployment en tant que volume statique ou dynamique en suivant les étapes de la section Créer une PVC et des exemples de charges de travail (Méthode 1), en utilisant la CRD CNFS de cette méthode.

Étapes suivantes