O CNFS gerencia o ciclo de vida de buckets do OSS e os provisiona como PVs por meio de manifests do Kubernetes.
Há dois métodos disponíveis:
Método 1: Use o CNFS para criar um novo bucket do OSS e montá-lo em um Deployment e um StatefulSet como volume provisionado dinamicamente.
Método 2: Crie uma Custom Resource Definition (CRD) do CNFS que referencie um bucket do OSS existente e monte-o como volume provisionado estática ou dinamicamente.
Pré-requisitos
Verifique se você tem:
Limitações
A única política de recuperação compatível é
Retain. Excluir uma CRD do CNFS preserva o bucket.Restaure objetos Archive e Cold Archive antes de ler ou gravar.
Se o versionamento estiver ativado, não será possível configurar políticas de retenção nem o OSS-HDFS. Para usá-los, defina primeiro
enableVersioningcomoNone.Após definir o versionamento como
enabled, não é possível desativá-lo, apenas suspendê-lo.Os parâmetros
redundancyTypeeenableVersioningexigem o storage-operator v1.26.2-1de13b6-aliyun ou posterior.Se
redundancyTypeforZRS, Cold Archive e Deep Cold Archive não serão compatíveis.
Método 1: Crie um novo bucket do OSS com o CNFS
Este método cria um bucket do OSS chamado cnfs-oss-<clusterid> e o monta em um Deployment e StatefulSet como volume provisionado dinamicamente.
Se já existir um bucket com o nome especificado, o CNFS o associará ao objeto ContainerNetworkFileSystem em vez de criar um novo.
Crie a CRD do CNFS e a StorageClass
Crie o Secret, a CRD ContainerNetworkFileSystem e a StorageClass. Substitua <clusterid> pelo ID do seu 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
Parâmetros da CRD do CNFS:
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
|
|
Descrição do sistema de arquivos CNFS. |
Não |
— |
|
|
Tipo de volume. Defina como |
Sim |
— |
|
|
Política de recuperação. Apenas |
Sim |
— |
|
|
Nome do bucket do OSS. Se existir um bucket correspondente, ele será associado à CRD do CNFS; caso contrário, um novo bucket será criado. |
Sim |
— |
|
|
Classe de armazenamento. Valores válidos: |
Não |
|
|
|
Tipo de redundância de armazenamento. |
Não |
|
|
|
Algoritmo de criptografia no lado do servidor. Valores válidos: |
Não |
— |
|
|
Tipo de ACL. Valores válidos: |
Não |
|
|
|
Status do versionamento. Valores válidos: |
Não |
|
Crie um PVC e cargas de trabalho de exemplo
Crie uma persistent volume claim (PVC), um Deployment e um StatefulSet para verificar se o bucket foi montado corretamente.
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
Verifique o bucket e as cargas de trabalho
Confirme se o bucket do OSS e os pods estão prontos.
Verifique a CRD do CNFS:
kubectl get cnfs/cnfs-oss-<clusterid> -o yaml
Saída esperada:
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
O campo status.status exibe Available quando o bucket está pronto. Campos de status:
|
Campo |
Descrição |
|
|
Status da CRD do CNFS. Valores válidos: |
|
|
Timestamp da última sondagem. |
|
|
Motivo do status atual. |
|
|
Prontidão: |
|
|
Grupo de permissões para o ponto de montagem. Atualmente, apenas DEFAULT_VPC_GROUP_NAME (o grupo VPC padrão) é compatível. |
|
|
Algoritmo de criptografia: |
|
|
Região do cluster ACK. |
|
|
Classe de armazenamento do bucket: |
|
|
Tipo de redundância de armazenamento: |
|
|
Tipo de ACL do bucket. |
|
|
Endpoints: |
|
|
Status do versionamento: |
Verifique os pods:
kubectl get pod
Saída esperada:
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
Todos os pods exibem Running, confirmando que o Deployment e o StatefulSet montaram o bucket do OSS.
Método 2: Usar um bucket do OSS existente
Este método cria uma CRD do CNFS que referencia um bucket do OSS existente pelo nome.
Crie a CRD do 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
Verifique a CRD do CNFS
kubectl get cnfs/cnfs-oss-exist-bucket-name -o yaml
Saída esperada:
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
Montar o bucket em uma carga de trabalho
Monte o bucket no seu Deployment como volume estático ou dinâmico seguindo as instruções em Criar um PVC e cargas de trabalho de exemplo (Método 1), utilizando a CRD do CNFS deste método.
Próximos passos
Configure regras de ciclo de vida para fazer a transição ou expirar objetos.
Revise os itens de faturamento para diferentes classes de armazenamento e tipos de redundância.