CNFS は、Kubernetes マニフェストを通じて OSS バケットのライフサイクルを管理し、PV としてプロビジョニングします。
次の 2 つの方法を利用できます。
-
方法 1:CNFS を使用して新しい OSS バケットを作成し、動的にプロビジョニングされたボリュームとして Deployment と StatefulSet にマウントします。
-
方法 2:既存の OSS バケットを参照する CNFS カスタムリソース定義 (CRD) を作成し、静的または動的にプロビジョニングされたボリュームとしてマウントします。
前提条件
以下の要件を満たしていることを確認してください。
制限事項
-
サポートされているリクレームポリシーは
Retainのみです。CNFS CRD を削除してもバケットは保持されます。 -
アーカイブおよびコールドアーカイブのオブジェクトは、読み書きの前に復元する必要があります。
-
バージョニングが有効な場合、リテンションポリシーおよび OSS-HDFS は設定できません。これらを使用するには、まず
enableVersioningをNoneに設定してください。 -
バージョニングを
enabledに設定すると、無効化することはできず、中断のみが可能です。 -
redundancyTypeおよびenableVersioningパラメータには、storage-operator v1.26.2-1de13b6-aliyun 以降が必要です。 -
redundancyTypeがZRSの場合、コールドアーカイブおよびディープコールドアーカイブはサポートされません。
方法 1:CNFS で新しい OSS バケットを作成
cnfs-oss-<clusterid> という名前の OSS バケットを作成し、動的にプロビジョニングされたボリュームとして Deployment と StatefulSet にマウントします。
指定した名前のバケットが既に存在する場合、CNFS は新しいバケットを作成せず、ContainerNetworkFileSystem オブジェクトに関連付けます。
CNFS CRD と StorageClass の作成
Secret、ContainerNetworkFileSystem CRD、および StorageClass を作成します。<clusterid> をご自身のクラスター ID に置き換えてください。
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: oss-secret
stringData:
akId: "xxxx" # OSS バケットをマウントするための AccessKey ID
akSecret: "xxxx" # OSS バケットをマウントするための AccessKey Secret
---
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
name: cnfs-oss-<clusterid> # CNFS CRD 名をバケット名と一致させる
spec:
description: "cnfs-oss"
type: oss
reclaimPolicy: Retain # Retain のみサポート。CRD を削除してもバケットは保持されます。
parameters:
bucketName: cnfs-oss-<clusterid> # をご自身のクラスター ID に置き換えてください。バケット名は一意である必要があります
encryptType: "AES256" # AES-256 サーバー側の暗号化
storageType: "Standard" # ストレージクラス
aclType: "private" # バケット所有者および承認されたユーザーのみ
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alibabacloud-cnfs-oss
parameters:
containerNetworkFileSystem: cnfs-oss-<clusterid> # CNFS CRD への参照
otherOpts: -o max_stat_cache_size=0 -o allow_other # キャッシュ設定
path: /
# volumeAs: subpath # 各 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
CNFS CRD パラメータ:
| パラメータ | 説明 | 必須 | デフォルト値 |
|---|---|---|---|
description |
CNFS ファイルシステムの説明。 | いいえ | — |
type |
ボリュームタイプ。 oss に設定します。 |
はい | — |
reclaimPolicy |
リクレームポリシー。 Retain のみサポートされます。 |
はい | — |
parameters.bucketName |
OSS バケット名。一致するバケットが存在する場合は CNFS CRD に関連付けられ、それ以外の場合は新しいバケットが作成されます。 | はい | — |
parameters.storageType |
ストレージクラス。有効な値:Standard、IA (低頻度アクセス)、Archive、ColdArchive。アーカイブおよびコールドアーカイブのオブジェクトは、読み書きの前に復元する必要があります。 |
いいえ | Standard |
parameters.redundancyType |
ストレージ冗長化タイプ。LRS (ローカル冗長ストレージ) または ZRS (ゾーン冗長ストレージ)。storage-operator v1.26.2-1de13b6-aliyun 以降が必要です。ZRS はコールドアーカイブおよびディープコールドアーカイブをサポートしません。 |
いいえ | ZRS |
parameters.encryptType |
サーバー側の暗号化アルゴリズム。有効な値:None、AES256、SM4。 |
いいえ | — |
parameters.aclType |
ACL タイプ。有効な値:private (所有者および承認されたユーザーのみ)、public-read (公開読み取り、所有者および承認されたユーザーが書き込み)、public-read-write (匿名ユーザーを含むすべてのユーザーが読み書き可能 — 慎重に使用してください)。 |
いいえ | private |
parameters.enableVersioning |
バージョニングステータス。有効な値:enabled、suspended、None。一度有効にすると無効化できず、中断のみが可能です。リテンションポリシーまたは OSS-HDFS の設定を妨げます。storage-operator v1.26.2-1de13b6-aliyun 以降が必要です。ライフサイクル課金 をご参照ください。
|
いいえ | enabled |
PVC とサンプルワークロードの作成
永続ボリューム要求 (PVC)、Deployment、および StatefulSet を作成して、バケットが正しくマウントされることを確認します。
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
バケットとワークロードの検証
OSS バケットと Pod が Ready 状態であることを確認します。
CNFS CRD の検証:
kubectl get cnfs/cnfs-oss-<clusterid> -o yaml
期待される出力:
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
status.status が Available の場合、バケットは利用可能です。ステータスフィールド:
| フィールド | 説明 |
|---|---|
status |
CNFS CRD のステータス。有効な値:Pending, Creating, Initialization (ファイルシステムの作成中), Available, Unavailable (回復可能), Fatal (回復不可能), Terminating。 |
conditions.lastProbeTime |
最後のプローブタイムスタンプ。 |
conditions.reason |
現在のステータスの理由。 |
conditions.status |
準備状態:Ready (利用可能) または NotReady。 |
fsAttributes.accessGroupName |
マウントポイントの権限グループ。現時点では、DEFAULT_VPC_GROUP_NAME (デフォルト VPC グループ) のみがサポートされています。 |
fsAttributes.encryptType |
暗号化アルゴリズム:None、AES256、または SM4。 |
fsAttributes.regionId |
ACK クラスターのリージョン。 |
fsAttributes.storageType |
バケットのストレージクラス:Standard、IA、Archive、または ColdArchive。 |
fsAttributes.redundancyType |
ストレージ冗長化タイプ:LRS (ローカル冗長ストレージ) または ZRS (ゾーン冗長ストレージ)。 |
fsAttributes.aclType |
バケット ACL タイプ。 |
fsAttributes.endPoint |
エンドポイント:extranet (パブリック) および internal (内部ネットワーク)。 |
fsAttributes.enableVersioning |
バージョニングステータス:enabled、suspended、または None。 |
Pod の検証:
kubectl get pod
期待される出力:
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
すべての Pod が Running 状態であれば、Deployment と StatefulSet が OSS バケットを正常にマウントしたことが確認できます。
方法 2:既存の OSS バケットを使用
既存の OSS バケットを名前で参照する CNFS CRD を作成します。
CNFS CRD の作成
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 # ご自身の既存の OSS バケット名
EOF
CNFS CRD の検証
kubectl get cnfs/cnfs-oss-exist-bucket-name -o yaml
期待される出力:
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
ワークロードへのバケットのマウント
この方法の CNFS CRD を使用して、PVC とサンプルワークロードの作成 (方法 1) に従い、バケットを静的または動的ボリュームとして Deployment にマウントします。
次のステップ
-
オブジェクトを移行または有効期限切れにする ライフサイクルルール を設定します。
-
さまざまなストレージクラスおよび冗長化タイプの 課金項目 をご確認ください。