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
enableVersioningsurNone.Une fois la gestion des versions définie sur
enabled, elle ne peut pas être désactivée, mais uniquement suspendue.Les paramètres
redundancyTypeetenableVersioningnécessitent storage-operator v1.26.2-1de13b6-aliyun ou une version ultérieure.Si
redundancyTypeest défini surZRS, 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
Configurez des règles de cycle de vie pour effectuer la transition ou l'expiration des objets.
Consultez les éléments de facturation pour les différentes classes de stockage et types de redondance.