ossfs 1.0 es compatible con dynamic provisioning. Esta función crea automáticamente un volumen persistente (PV) y monta un OSS Bucket a partir de una StorageClass y un PersistentVolumeClaim (PVC). Así se elimina la configuración manual del PV y se simplifica considerablemente la gestión del almacenamiento. Es ideal para entornos multiinquilino o escenarios que requieren aprovisionamiento frecuente y bajo demanda.
Requisitos
Su clúster y los componentes CSI (csi-plugin y csi-provisioner) deben cumplir los siguientes requisitos:
-
Para la autenticación mediante RAM Roles for Service Accounts (RRSA): el clúster debe tener la versión 1.26 o posterior, y la versión de CSI debe ser v1.30.4 o posterior.
Si utilizó la función RRSA en una versión anterior a la v1.30.4, consulte [[Product Change] CSI ossfs version upgrade and mount process optimization](t2763435.xdita#) para agregar la configuración de autorización del rol de RAM obligatoria.
Para la autenticación mediante AccessKey: se recomienda usar la versión v1.18.8.45 o posterior de CSI para garantizar la estabilidad del montaje.
Para actualizar su clúster, consulte Manually upgrade a cluster. Para actualizar los componentes CSI, consulte Upgrade CSI components.
A partir de CSI v1.30.4-*, mounting OSS static volumes depends on the csi-provisioner component .
Paso 1: Elija un método de autenticación
Para garantizar que su clúster acceda a los recursos del bucket de OSS de forma segura y conforme a las normativas, primero debe configurar un método de autenticación.
RRSA authentication: otorga de forma dinámica roles de RAM temporales y con rotación automática a los pods. Esto permite aislar los permisos a nivel de aplicación con gran precisión. Este método es más seguro.
AccessKey authentication: almacena claves estáticas de larga duración en un Secret. Este método es más sencillo de configurar, pero menos seguro.
En clústeres con la versión 1.26 o posterior, se recomienda la autenticación RRSA. De este modo se evitan los reinicios de cargas de trabajo y los remontajes de ossfs causados por la rotación del AccessKey.
Este ejemplo asume que el clúster y OSS Bucket pertenecen a la misma cuenta de Alibaba Cloud. Para mount an OSS Bucket that belongs to another account, se recomienda utilizar la autenticación RRSA.
RRSA
1. Habilite RRSA en su clúster
En la página ACK Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Cluster Information.
-
En la pestaña Basic Information, dentro de la sección Security and Auditing, haga clic en Enabled junto a RRSA OIDC. Siga las instrucciones en pantalla para habilitar RRSA durante las horas de menor actividad.
Cuando el estado del clúster cambie de Updating a Running, RRSA estará habilitado.
ImportanteDespués de habilitar RRSA, el periodo máximo de validez de los nuevos tokens de ServiceAccount creados en el clúster se limita a 12 horas.
2. Cree y autorice un rol de RAM
Cree un rol de RAM que sus pods puedan asumir para acceder al volumen de almacenamiento de OSS con autenticación RRSA.
AccessKey
Cree un usuario de RAM con permisos para acceder al bucket de OSS de destino y luego obtenga un AccessKey para ese usuario.
-
Cree un usuario de RAM. Puede omitir este paso si ya cuenta con uno.
Vaya a la página Create User en la consola de RAM y siga las instrucciones en pantalla para crear un usuario de RAM. Debe especificar parámetros como el nombre de inicio de sesión y la contraseña.
-
Cree una directiva de acceso.
Este ejemplo sigue el principio de privilegio mínimo. Consulte Create a custom policy para otorgar acceso al bucket de OSS de destino. Puede conceder permisos de solo lectura o de lectura y escritura.
-
Vaya a la página Create Policy en la consola de RAM, cambie al JSON Editor y configure el script de la directiva.
Directiva de solo lectura
Reemplace
<myBucketName>por el nombre real del bucket.{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": [ "acs:oss:*:*:<myBucketName>", "acs:oss:*:*:<myBucketName>/*" ] } ], "Version": "1" }Directiva de lectura y escritura de OSS
Reemplace
<myBucketName>por el nombre real del bucket.{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:<myBucketName>", "acs:oss:*:*:<myBucketName>/*" ] } ], "Version": "1" }Si desea crear un PV en la consola, también necesita el permiso
oss:ListBuckets.{ "Effect": "Allow", "Action": "oss:ListBuckets", "Resource": "*" } (Opcional) Si utiliza un identificador de CMK específico administrado por KMS para cifrar los objetos de OSS, también debe otorgar permisos de KMS al usuario de RAM. Para obtener más información, consulte Use a specific CMK ID managed by KMS to encrypt data.
-
-
Adjunte la directiva de acceso al usuario de RAM.
Vaya a la página Users en la consola de RAM, busque el usuario que creó y, en la columna Actions, haga clic en Add Permissions.
En la sección Policies, busque y seleccione la directiva de acceso que creó.
-
El AccessKey que cree se almacenará como un Secret para el PV.
Vaya a la página Users en la consola de RAM, haga clic en el nombre de su usuario de RAM y, en la sección AccessKey, haga clic en Create AccessKey.
Siga las instrucciones en pantalla para crear un AccessKey. Copie y guarde de forma segura el AccessKey ID y el AccessKey Secret.
Paso 2: Cree una StorageClass
Cree una StorageClass para definir una plantilla de aprovisionamiento de volúmenes persistentes.
Método RRSA
-
Cree un archivo llamado
sc-oss.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-oss parameters: # Replace with the name of your OSS bucket. bucket: bucket # Replace with the region of your OSS bucket. region: cn-hangzhou # The mount path relative to the bucket's root directory. You can specify a subdirectory. path: / # The endpoint of the region where the bucket is located. url: "https://oss-cn-hangzhou-internal.aliyuncs.com" # Use the RRSA method for authentication. authType: rrsa # The RAM role that you created or modified. roleName: demo-role-for-rrsa # Custom parameters. otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other" # The volume access mode. volumeAs: sharepath # The signature version for requests sent to the OSS server. sigVersion: "v4" # Fixed value for the Alibaba Cloud OSS CSI plug-in. provisioner: ossplugin.csi.alibabacloud.com # The reclaim policy for the dynamically provisioned persistent volume.Parámetro
Descripción
bucketEl bucket de OSS que se va a montar.
regionCuando utilice la firma v4 de OSS, establezca este valor en la región de OSS donde se encuentra el bucket. Para consultar la región de OSS, consulte Query the region of a bucket.
Cuando se configura este parámetro, se usa automáticamente
v4como versión de la firma de OSS.pathLa versión del componente CSI debe ser v1.14.8.32-c77e277b-aliyun o posterior.
La ruta de montaje relativa al directorio raíz del bucket. El valor predeterminado es
/, lo que monta todo el bucket.Si la ossfs version es anterior a la 1.91, la
pathespecificada debe existir en el bucket de OSS. Para obtener más información, consulte New features in ossfs 1.91 and later.urlEl endpoint del bucket de OSS que se va a montar.
Utilice un endpoint interno si el nodo de montaje y el bucket están en la misma región, o si se estableció una conexión VPC.
Utilice un endpoint público si el nodo de montaje y el bucket están en regiones distintas.
A continuación se muestran los formatos comunes para los distintos puertos de acceso:
Formato de red interna:
https://oss-{{regionName}}-internal.aliyuncs.com.El formato de endpoint interno
vpc100-oss-{{regionName}}.aliyuncs.comestá obsoleto. Cambie al nuevo formato lo antes posible.Formato de red pública:
https://oss-{{regionName}}.aliyuncs.com.
Por motivos de seguridad, se recomienda accessing OSS over HTTPS. Si prefiere usar HTTP, reemplace el prefijo
https://del formato anterior porhttp://.authTypeEstablezca este parámetro en
rrsapara usar RRSA en la autenticación.roleNameEl rol de RAM que creó o modificó.
Para configurar permisos distintos en cada StorageClass, puede crear varios roles de RAM y especificar diferentes valores de
roleNameen cada StorageClass.otherOptsParámetros personalizados para el volumen persistente de OSS, con el formato
-o -o. Por ejemplo:-o umask=022 -o max_stat_cache_size=100000 -o allow_other.provisionerEl tipo de controlador. Este valor se fija en
ossplugin.csi.alibabacloud.comcuando se utiliza el plugin CSI de OSS de Alibaba Cloud.reclaimPolicyLa directiva de recuperación para los volúmenes persistentes aprovisionados dinámicamente. Los volúmenes persistentes de OSS solo admiten
Retain. Esto significa que, al eliminar un PVC, no se eliminan el volumen persistente correspondiente ni los datos del bucket de OSS.volumeBindingModeEl modo de vinculación del volumen.
Los volúmenes persistentes de OSS no requieren afinidad de nodos basada en zonas de disponibilidad. Puede usar el valor predeterminado
Immediate.volumeAsEl modo de acceso al volumen. El valor predeterminado es
sharepath. Valores válidos:sharepath: todos los volúmenes persistentes comparten la misma ruta de montaje. Los datos se almacenan en<bucket>:<path>/.subpath: crea un subdirectorio dedicado para cada volumen persistente con el fin de aislar los datos. Estos se almacenan en<bucket>:<path>/<pv-name>/.Este parámetro solo surte efecto cuando la versión del componente CSI es 1.31.3 o posterior.
sigVersionLa versión de firma para las solicitudes enviadas al servidor de OSS.
"v1"(predeterminado): utiliza Signature Version 1 de OSS."v4"(recomendado): utiliza Signature Version 4 de OSS.
-
Cree la StorageClass.
kubectl apply -f sc-oss.yaml
Método AccessKey
kubectl
1. Crear una StorageClass
-
Cree un Secret en el mismo namespace que su aplicación.
Reemplace
akIdyakSecretcon su AccessKey ID y AccessKey Secret.kubectl create secret generic oss-secret --from-literal='akId=<yourAccessKey ID>' --from-literal='akSecret=<yourAccessKey Secret>' -
Cree la StorageClass.
-
Cree un archivo llamado
sc-oss.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-oss parameters: # Replace with the name of your OSS bucket. bucket: bucket # Replace with the region of your OSS bucket. region: cn-hangzhou # The mount path relative to the bucket's root directory. You can specify a subdirectory. path: / # The endpoint of the region where the bucket is located. url: "https://oss-cn-hangzhou-internal.aliyuncs.com" # The name of the Secret that stores the AccessKey information. csi.storage.k8s.io/node-publish-secret-name: oss-secret # The namespace where the Secret that stores the AccessKey information is located. csi.storage.k8s.io/node-publish-secret-namespace: default # Custom parameters. otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other" # The signature version for requests sent to the OSS server. sigVersion: "v4" # Fixed value for the Alibaba Cloud OSS CSI plug-in. provisioner: ossplugin.csi.alibabacloud.com # The reclaim policy for the dynamically provisioned persistent volume. reclaimPolicy: Retain # The volume binding mode. volumeBindingMode: ImmediateParámetro
Descripción
nameEl nombre de la StorageClass.
bucketEl bucket de OSS que se va a montar.
regionSi utiliza la firma v4 de OSS, establezca este valor en la región de OSS donde se encuentra el bucket. Para consultar la región de OSS, consulte Query the region of a bucket.
Cuando se configura este parámetro, se usa automáticamente
v4como versión de firma de OSS.pathLa versión del componente CSI debe ser v1.14.8.32-c77e277b-aliyun o posterior.
La ruta de montaje relativa al directorio raíz del bucket. El valor predeterminado es
/, que monta todo el bucket.Si la ossfs version es anterior a 1.91, el
pathespecificado debe existir en el bucket de OSS. Para obtener más información, consulte New features in ossfs 1.91 and later.urlEl endpoint del bucket de OSS que se va a montar.
Utilice un endpoint interno si el nodo de montaje y el bucket están en la misma región, o si ya se estableció una conexión VPC.
Utilice un endpoint público si el nodo de montaje y el bucket están en regiones distintas.
A continuación se muestran los formatos comunes para distintos puertos de acceso:
Formato de red interna:
https://oss-{{regionName}}-internal.aliyuncs.com.El formato de endpoint interno
vpc100-oss-{{regionName}}.aliyuncs.comestá obsoleto. Cambie al nuevo formato lo antes posible.Formato de red pública:
https://oss-{{regionName}}.aliyuncs.com.
Por motivos de seguridad, se recomienda accessing OSS over HTTPS. Si necesita usar HTTP, reemplace el prefijo
https://del formato anterior porhttp://.csi.storage.k8s.io/node-publish-secret-nameEl nombre del Secret que almacena la información de AccessKey.
csi.storage.k8s.io/node-publish-secret-namespaceEl namespace donde se encuentra el Secret que almacena la información de AccessKey.
otherOptsParámetros personalizados del volumen persistente de OSS, con el formato
-o -o. Por ejemplo:-o umask=022 -o max_stat_cache_size=100000 -o allow_other.provisionerEl tipo de controlador. Este valor se fija en
ossplugin.csi.alibabacloud.comcuando se utiliza el complemento CSI de OSS de Alibaba Cloud.reclaimPolicyLa directiva de recuperación de los volúmenes persistentes aprovisionados dinámicamente. Los volúmenes persistentes de OSS solo admiten
Retain. Esto significa que, al eliminar un PVC, no se borran ni el volumen persistente correspondiente ni los datos del bucket de OSS.volumeBindingModeEl modo de vinculación del volumen.
Los volúmenes persistentes de OSS no requieren afinidad de nodos basada en zonas de disponibilidad. Puede utilizar el valor predeterminado
Immediate.volumeAsEl modo de acceso al volumen. El valor predeterminado es
sharepath. Valores válidos:sharepath: todos los volúmenes persistentes comparten la misma ruta de montaje. Los datos se almacenan en<bucket>:<path>/.subpath: crea un subdirectorio exclusivo para cada volumen persistente con el fin de aislar los datos. Estos se almacenan en<bucket>:<path>/<pv-name>/.Este parámetro solo surte efecto cuando la versión del componente CSI es 1.31.3 o posterior.
sigVersionLa versión de firma de las solicitudes enviadas al servidor de OSS.
"v1"(predeterminado): utiliza Signature Version 1 de OSS."v4"(recomendado): utiliza Signature Version 4 de OSS.
-
Cree la StorageClass.
kubectl apply -f sc-oss.yaml
-
Console
-
Guarde la AccessKey de Step 1 como un Secret para el volumen persistente.
En la página Clústeres de ACK, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
-
Haga clic en Create from YAML y siga las instrucciones en pantalla para crear el Secret.
apiVersion: v1 kind: Secret metadata: name: oss-secret # Must match the namespace of the application. namespace: default stringData: # Replace with your AccessKey ID. akId: <your AccessKey ID> # Replace with your AccessKey secret. akSecret: <your AccessKey Secret>
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
-
En la página StorageClasses, haga clic en Create, establezca PV Type en OSS y siga las instrucciones en pantalla para configurar la StorageClass.
Parámetro
Descripción
Certificado de acceso
El Secret que se utiliza para acceder a OSS. Contiene el AccessKey ID y el AccessKey Secret.
Bucket ID:
El bucket de OSS que se va a utilizar.
La consola solo muestra los buckets a los que puede acceder la AccessKey configurada.
Ruta de OSS
La versión del componente CSI debe ser v1.14.8.32-c77e277b-aliyun o posterior.
La ruta de montaje relativa al directorio raíz del bucket. El valor predeterminado es
/, que monta todo el bucket.Si la ossfs version es anterior a 1.91, el
pathespecificado debe existir en el bucket de OSS. Para obtener más información, consulte New features in ossfs 1.91 and later.Volume Mode
El modo de acceso al volumen. El valor predeterminado es Shared Directory. Valores válidos:
El modo Subdirectory solo surte efecto cuando la versión del componente CSI es 1.31.3 o posterior. De lo contrario, se utiliza el modo Shared Directory.
Shared Directory (
sharepath): todos los volúmenes persistentes comparten la misma ruta de montaje. Los datos se almacenan en<bucket>:<path>/.Subdirectory (
subpath): crea un subdirectorio exclusivo para cada volumen persistente con el fin de aislar los datos. Estos se almacenan en<bucket>:<path>/<pv-name>/.
Endpoint
El endpoint de acceso del bucket de OSS.
Utilice un endpoint interno si los nodos del clúster y el bucket están en la misma región, o si ya se estableció una conexión Virtual Private Cloud (VPC).
Utilice un endpoint público si el nodo de montaje y el bucket están en regiones distintas.
A continuación se muestran los formatos comunes para distintos endpoints de acceso:
Interno:
http://oss-{{regionName}}-internal.aliyuncs.comohttps://oss-{{regionName}}-internal.aliyuncs.com.NotaEl formato de endpoint de acceso interno
vpc100-oss-{{regionName}}.aliyuncs.comestá obsoleto. Cambie al nuevo formato lo antes posible.Público:
http://oss-{{regionName}}.aliyuncs.comohttps://oss-{{regionName}}.aliyuncs.com.
De forma predeterminada, la consola utiliza HTTP para acceder a OSS a través de una red interna. Si necesita HTTPS, debe crear el PV mediante kubectl.
Directiva de recuperación
La directiva de recuperación de los volúmenes persistentes aprovisionados dinámicamente. Los volúmenes persistentes de OSS solo admiten
Retain. Esto significa que, al eliminar un PVC, no se borran ni el volumen persistente correspondiente ni los datos del bucket de OSS.Optional Parameters:
Parámetros personalizados del volumen persistente de OSS, con el formato
-o -o. Por ejemplo:-o umask=022 -o max_stat_cache_size=100000 -o allow_other.
Paso 3: Crear un PVC
Cree un PVC para solicitar recursos de almacenamiento de forma dinámica. El complemento CSI crea automáticamente un PV con base en la StorageClass.
kubectl
-
Cree un archivo llamado
pvc-oss.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: # PVC name name: pvc-oss spec: # Configure the access mode. ReadOnlyMany means that ossfs mounts the OSS bucket in read-only mode. accessModes: - ReadOnlyMany volumeMode: Filesystem resources: requests: # Declare the requested storage capacity. This value does not limit the actual capacity of the OSS volume. storage: 20Gi # Specify the StorageClass to use. storageClassName: sc-ossParámetro
Descripción
accessModesEspecifica el modo de acceso. Los valores compatibles son
ReadOnlyManyyReadWriteMany.Si se establece en
ReadOnlyMany, ossfs monta el bucket de OSS en modo de solo lectura.storageLa capacidad solicitada para el volumen. Este valor no limita la capacidad real del volumen de OSS.
storageClassNameEl nombre de la StorageClass.
-
Cree el PVC:
kubectl apply -f pvc-oss.yaml -
Compruebe que el PVC se haya creado y que se encuentre en estado Bound:
kubectl get pvc pvc-ossResultado esperado:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-oss Bound oss-251d111d-3b0b-4879-81a0-eb5a19xxxxxx 20Gi ROX sc-oss <unset> 4d20h
Console
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
-
En la página Persistent Volume Claims, haga clic en Create. Establezca PVC Type en OSS y configure los parámetros.
Parámetro
Descripción
Allocation Mode
Seleccione Use StorageClass.
Existing Storage Class
Haga clic en Select Storage Class y elija la StorageClass creada anteriormente.
Capacidad
La capacidad solicitada para el volumen. Este valor no limita la capacidad real del volumen de OSS.
Access Mode
Especifica el modo de acceso. Los valores compatibles son
ReadOnlyManyyReadWriteMany.Si se establece en
ReadOnlyMany, ossfs monta el bucket de OSS en modo de solo lectura.
Paso 4: Crear una aplicación y montar un volumen
Para montar el volumen, haga referencia al PVC en su aplicación.
kubectl
-
Cree un archivo
oss-workload.yaml.apiVersion: apps/v1 kind: Deployment metadata: name: oss-workload labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: # The mount path in the container. - name: pvc-oss mountPath: "/data" # Configure a health check. livenessProbe: exec: command: - ls - /data initialDelaySeconds: 30 periodSeconds: 30 volumes: - name: pvc-oss persistentVolumeClaim: # Reference the PVC that you created. claimName: pvc-oss -
Cree la aplicación.
kubectl create -f oss-workload.yaml -
Compruebe el montaje.
-
Confirme que los Pods estén ejecutándose.
kubectl get pod -l app=nginx -
Acceda a un Pod y compruebe el punto de montaje.
kubectl exec -it <pod-name> -- ls /dataEl resultado debe mostrar los archivos de la ruta de montaje de OSS.
-
Console
En la página Clústeres de ACK, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la esquina superior derecha de la página Deployments, haga clic en Create from Image.
-
Haga clic en Create from Image y siga las instrucciones en pantalla para configurar los parámetros de la aplicación.
La siguiente tabla describe los parámetros principales. Para el resto, puede dejar los valores predeterminados. Para obtener más información, consulte Create a Deployment.
Página de configuración
Parámetro
Descripción
Basic Information
Replicas:
El número de réplicas de Pod para el Deployment.
Container
Nombre de la imagen
La dirección de la imagen de contenedor de la aplicación, como
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6.Required Resources
La cantidad de vCPU y memoria que se asignará a cada contenedor.
Volumes
Haga clic en Add PVC y configure los parámetros.
Mount Source: seleccione el PVC que creó anteriormente.
Container Path: la ruta dentro del contenedor donde se montará el volumen, como
/data.
Labels and Annotations
Etiqueta del Pod
Por ejemplo, establezca la clave en 'app' y el valor en 'nginx'.
-
Compruebe el estado del despliegue de la aplicación.
En la página Deployments, haga clic en el nombre de su aplicación. En la pestaña Pods, compruebe que los Pods tengan el estado Running.
Paso 5: Comprobar el almacenamiento compartido y persistente
Comprobar el almacenamiento compartido
Para comprobar el almacenamiento compartido, cree un archivo en un Pod y luego consúltelo en otro.
-
Obtenga los nombres de los Pods de la aplicación.
kubectl get pod -l app=nginx -
Este ejemplo utiliza el Pod
oss-workload-66fbb85b67-d****:-
ReadWriteMany: Cree el archivo tmpfile en la ruta/data.kubectl exec oss-workload-66fbb85b67-d**** -- touch /data/tmpfile ReadOnlyMany: Cargue el archivotmpfilea la ruta correspondiente del bucket de OSS mediante la consola de OSS o por medio de uploading a file with cp.
-
-
Compruebe si el archivo existe en la ruta de montaje de otro Pod.
Por ejemplo, tome un Pod llamado
oss-workload-66fbb85b67-l****con la ruta de montajedata.kubectl exec oss-workload-66fbb85b67-l**** -- ls /data | grep tmpfileSi el archivo aparece en el resultado, se confirma que los Pods pueden compartir datos.
tmpfileSi no ve el resultado esperado, asegúrese de que la versión de CSI component sea v1.20.7 o posterior.
Comprobar el almacenamiento persistente
Para comprobar el almacenamiento persistente, elimine un Pod y verifique que el archivo permanezca después de que el Pod se vuelva a crear automáticamente.
-
Elimine un Pod de la aplicación. El controlador de Deployment lo vuelve a crear automáticamente.
kubectl delete pod oss-workload-66fbb85b67-d**** -
Consulte el estado de los Pods. Espere a que el nuevo Pod se inicie y pase al estado
Running.kubectl get pod -l app=nginx -
Consulte los archivos de la ruta
/data.Este ejemplo utiliza un Pod llamado
oss-workload-66fbb85b67-z****con la ruta de montajedata.kubectl exec oss-workload-66fbb85b67-z**** -- ls /data | grep tmpfileEl resultado muestra que el archivo
tmpfilesigue existiendo. Esto confirma que los datos persisten incluso después de volver a crear el Pod.tmpfile
Impactos conocidos
-
Riesgos para la integridad de los datos
Riesgo de consistencia en escrituras simultáneas: Para mejorar la estabilidad de las escrituras, se recomienda actualizar CSI component a la versión v1.28 o posterior. Sin embargo, en escenarios de escritura simultánea sobre un mismo archivo, la función de carga por sobrescritura de OSS puede sobrescribir los datos. Debe garantizar la consistencia de los datos en la capa de aplicación.
Riesgo de sincronización de datos y eliminación accidental: Cuando se monta un volumen, cualquier eliminación o modificación de archivos en la ruta de montaje de un Pod de aplicación o de un nodo host sincroniza esos cambios directamente con los archivos de origen del bucket de OSS. Para evitar la eliminación accidental de datos, se recomienda habilitar versioning en su bucket de OSS.
-
Riesgos para la estabilidad de la aplicación
-
Riesgo de OOM: Al ejecutar una operación
readdir(como el comandolsen un script de shell) por primera vez sobre una gran cantidad de archivos (por ejemplo, más de 100 000, según la memoria del nodo), ossfs carga todos los metadatos de golpe y consume mucha memoria. Esto puede provocar que el proceso finalice por OOM y que el punto de montaje quede no disponible.Para mitigar este riesgo, se recomienda montar un subdirectorio del bucket de OSS u optimizar la estructura de directorios.
-
Tiempo de montaje prolongado: Configurar
securityContext.fsgroupen una aplicación hace que kubelet modifique de forma recursiva los permisos de los archivos (chmod/chown) al montar un volumen. Si el volumen contiene muchos archivos, el tiempo de montaje aumenta considerablemente, lo que puede causar retrasos graves en el inicio de los Pods.Si necesita configurar este parámetro pero desea reducir el tiempo de montaje, consulte Increased mount time for OSS volumes.
-
Riesgo de invalidación de claves (autenticación con AccessKey): Si un AccessKey referenciado por un PV deja de ser válido o cambian sus permisos, la aplicación asociada pierde el acceso de inmediato.
Para restaurar el acceso, debe actualizar las credenciales en el Secret y reiniciar el Pod de la aplicación para forzar un nuevo montaje. Esta acción interrumpe el servicio, por lo que conviene ejecutarla durante una ventana de mantenimiento. Para obtener más información, consulte Solutions.
-
-
Riesgos de costos
Costos por partes: Al cargar archivos mayores a 10 MB, ossfs ejecuta una carga multiparte y divide el archivo en varias partes. Si la carga se interrumpe de forma inesperada, por ejemplo, debido al reinicio de una aplicación, debe manually delete the parts o delete them by using lifecycle rules para evitar costos de almacenamiento generados por partes incompletas.
Liberación de recursos
-
Eliminar cargas de trabajo
Acción: Elimine todas las cargas de trabajo que usen el PVC, como Deployments y StatefulSets. Esto detiene los Pods y desmonta el volumen.
Comando de ejemplo:
kubectl delete deployment <your-deployment-name>
-
Eliminar el PVC
Acción: Elimine el PVC. La directiva de recuperación (
reclaimPolicy) de los volúmenes de OSS aprovisionados dinámicamente solo admiteRetain. Al eliminar el PVC, el PV vinculado pasa al estadoReleased, y el bucket de OSS del backend conserva íntegramente el subdirectorio y los datos correspondientes.Comando de ejemplo:
kubectl delete pvc <your-pvc-name>
-
Eliminar el PV
Acción: Elimine el PV que se encuentre en estado
Released. Esta operación solo quita el objeto de recurso PV de Kubernetes y no elimina ningún dato del bucket de OSS del backend.Comando de ejemplo:
kubectl delete pv <your-pv-name>
-
Eliminar StorageClass y Secret (opcional)
Acción: Elimine StorageClass y el Secret asociado si ya no los necesita. Esta operación solo quita los objetos de recurso de Kubernetes y no afecta al bucket de OSS del backend.
Comandos de ejemplo:
kubectl delete sc <your-storageclass-name>,kubectl delete secret <your-secret-name>
Documentos relacionados
Gestione los volúmenes de OSS mediante CNFS para mejorar su rendimiento y QoS. Para obtener más información, consulte Manage the lifecycle of OSS volumes.
Habilite el cifrado del lado del servidor para proteger los datos sensibles en reposo dentro de OSS. Para obtener más información, consulte Encrypt ossfs 1.0 volumes.
Para consultar las preguntas frecuentes sobre ossfs y OSS, revise ossfs 1.0 (default) y ossfs 1.0 volume FAQ.
Habilite container storage monitoring y configure alertas para detectar oportunamente anomalías en los volúmenes o cuellos de botella de rendimiento.
ossfs 1.0 ofrece mayor consistencia de datos que ossfs 2.0 en escrituras aleatorias y simultáneas. Sin embargo, ossfs 2.0 proporciona mejor rendimiento en lecturas y escrituras secuenciales.