Container Service for Kubernetes (ACK) は、Container Network File System (CNFS) を使用して、Object Storage Service (OSS) バケットのライフサイクルを個別に管理します。このトピックでは、CNFS を使用して OSS バケットのライフサイクルを管理する方法と、ワークロードで CNFS を使用する方法について説明します。
前提条件
csi-plugin および csi-provisioner のバージョンが 1.24.2-5b34494d-aliyun 以降であること。 csi-plugin および csi-provisioner の更新方法の詳細については、「csi-plugin および csi-provisioner を更新する」をご参照ください。
storage-operator のバージョンが 1.24.95-e2d0756-aliyun 以降であること。 storage-operator の更新方法の詳細については、「コンポーネントを管理する」をご参照ください。
概要
CNFS を使用して OSS バケットのライフサイクルを管理するには、次のいずれかの方法を使用できます。
方法 1:CNFS を使用して cnfs-oss- 形式の名前の OSS バケットを作成する
CNFS を使用して、動的にプロビジョニングされた永続ボリューム (PV) としてクラスタにマウントできる OSS バケットを作成します。
cnfs-oss-<UUID e.g. clusterid>という名前の OSS バケットを作成し、動的にプロビジョニングされたボリュームとして Deployment および StatefulSet にマウントします。方法 2:CNFS CRD を作成して既存の OSS バケットを指定する
バケット名を指定することにより、既存の OSS バケットを使用する CNFS CRD を作成します。次に、CNFS CRD を使用して、静的または動的にプロビジョニングされたボリュームとして OSS バケットを Deployment にマウントできます。
CNFS CRD を作成すると、BucketName に次の制限が適用されます:cnfs-oss-<UUID e.g. clusterid>:
既存の OSS バケットの名前が指定したバケット名と同じ場合、既存の OSS バケットは ContainerNetworkFileSystem オブジェクトに関連付けられます。
既存の OSS バケットの名前が指定したバケット名と同じでない場合、指定した名前の新しい OSS バケットが作成され、作成した ContainerNetworkFileSystem オブジェクトに関連付けられます。
たとえば、バケット名として
cnfs-oss-<clusterid>を指定すると、cnfs-oss-<clusterid>という名前の OSS バケットが作成されます。<clusterid>はクラスタの ID です。バケット名が重複していないことを確認してください。
方法 1:CNFS を使用して cnfs-oss-<UUID e.g. clusterid> という名前の OSS バケットを作成する
CNFS を使用して
cnfs-oss-<UUID e.g. clusterid>という名前の OSS バケットを作成し、動的にプロビジョニングされたボリュームとしてバケットを Deployment および StatefulSet にマウントします。<clusterid>をクラスタの ID に置き換えます。# 次のオブジェクトを作成します:CNFS、StorageClass、Deployment、および StatefulSet。 cat << EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: "xxxx" # OSS バケットのマウントに必要な AccessKey ペア。 akSecret: "xxxx" --- apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-oss-<clusterid> # CNFS CRD 名をバケット名に設定することをお勧めします。 spec: description: "cnfs-oss" type: oss reclaimPolicy: Retain # Retain ポリシーのみがサポートされています。 CNFS CRD が削除されても、関連付けられた OSS バケットは保持されます。 parameters: bucketName: cnfs-oss-<clusterid> # 既存のバケットの名前が指定したバケット名と同じ場合、既存のバケットは CNFS に関連付けられます。 既存の OSS バケットの名前が指定したバケット名と同じでない場合、cnfs-oss-clusterid という名前の新しい OSS バケットが作成されます。 clusterid をクラスタの ID に置き換え、バケット名が重複していないことを確認してください。 encryptType: "AES256" # 既存の OSS バケットを使用する場合、既存のバケットの暗号化アルゴリズムは AES-256 に変更されます。 新しい OSS バケットを作成する場合、AES-256 がバケットの暗号化アルゴリズムとして使用されます。 storageType: "Standard" # OSS バケットのストレージタイプは Standard です。 aclType: "private" # バケット所有者と承認されたユーザーのみがバケットに対する読み取りおよび書き込み権限を持ちます。 --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alibabacloud-cnfs-oss parameters: containerNetworkFileSystem: cnfs-oss-<clusterid> # StorageClass は、cnfs-oss-clusterid CNFS CRD に関連付けられた OSS バケットを参照します。 otherOpts: -o max_stat_cache_size=0 -o allow_other # キャッシュ設定。 path: / # volumeAs: subpath # 指定されたパスの下に各 PV のサブパスが自動的に作成されます。 csi.storage.k8s.io/node-publish-secret-name: oss-secret # oss-secret シークレットを CNFS CRD にマウントします。 csi.storage.k8s.io/node-publish-secret-namespace: default # oss-secret シークレットが属する名前空間。 provisioner: ossplugin.csi.alibabacloud.com reclaimPolicy: Retain --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cnfs-oss-pvc spec: accessModes: - ReadOnlyMany storageClassName: alibabacloud-cnfs-oss # 永続ボリューム要求 (PVC) を alibabacloud-cnfs-oss StorageClass を使用するように設定します。 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 # cnfs-oss-pvc PVC を Deployment にマウントします。 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" # cnfs-oss-pvc PVC を StatefulSet にマウントします。 resources: requests: storage: 100Gi EOF次の表に、CNFS CRD のパラメータを示します。
パラメータ
説明
description
CNFS ファイルシステムの説明。
type
作成するボリュームのタイプ。
reclaimPolicy
OSS バケットの再利用ポリシー。 Retain ポリシーのみがサポートされています。 CNFS CRD が削除されても、関連付けられた OSS バケットは保持されます。
parameters.bucketName
OSS バケットの名前。
parameters.storageType
OSS バケットのストレージタイプ。 デフォルト値:Standard。 有効な値:
Standard:標準ストレージ
IA:低頻度アクセス (IA)
Archive:アーカイブ
ColdArchive:コールドアーカイブ
説明オブジェクトの読み取りまたは書き込みを行う前に、アーカイブまたはコールドアーカイブオブジェクトを解凍する必要があります。
parameters.redundancyType
ストレージ冗長タイプ。 デフォルト値:ZRS。 有効な値:
LRS:ローカル冗長ストレージ (LRS) は、同じゾーン内の異なる設備の複数のデバイスにデータの複数のコピーを保存します。 LRS は、ハードウェア障害が発生した場合でも、データの耐久性と可用性を保証します。
ZRS:ゾーン冗長ストレージ (ZRS) は、同じリージョン内の複数のゾーンにデータの複数のコピーを保存します。 ゾーンが使用できなくなった場合でも、データにアクセスできます。
重要このパラメータは、storage-operator v1.26.2-1de13b6-aliyun 以降でのみサポートされています。
値を ZRS に設定した場合、コールドアーカイブとディープコールドアーカイブはサポートされません。
さまざまなストレージタイプとストレージ冗長タイプの請求ルールの詳細については、「請求対象項目」をご参照ください。
parameters.encryptType
OSS バケットの暗号化方式。 有効な値:
None:OSS サーバーでは暗号化アルゴリズムは使用されません。
AES256:OSS サーバーでは AES-256 アルゴリズムが使用されます。
SM4:OSS サーバーでは SM4 アルゴリズムが使用されます。
parameters.aclType
OSS バケットで使用されるアクセス制御リスト (ACL) のタイプ。 デフォルト値:private。 有効な値:
public-read-write:匿名ユーザーを含むすべてのユーザーが、バケット内のオブジェクトを読み書きできます。 この値を指定する場合は注意してください。
public-read:バケット所有者または承認されたユーザーのみがバケット内のオブジェクトを読み書きできます。 他のユーザーは、バケット内のオブジェクトを読み取ることのみができます。 この値を指定する場合は注意してください。
private:バケット所有者または承認されたユーザーのみがバケット内のオブジェクトを読み書きできます。 他のユーザーはバケット内のオブジェクトにアクセスできません。
parameters.enableVersioning
バケットのバージョン管理ステータス。 有効な値:
enabled:バケットのバージョン管理が有効になっています。
suspended:バケットのバージョン管理が一時停止されています。
None:バケットのバージョン管理が無効になっています。
重要このパラメータは、storage-operator v1.26.2-1de13b6-aliyun 以降でのみサポートされています。
バケットのバージョン管理を有効にすると、バケットの保持ポリシーまたは OSS-HDFS を構成できなくなります。 保持ポリシーまたは OSS-HDFS を構成するには、enableVersioning を
Noneに設定する必要があります。バケットのバージョン管理が
enabledになると、バケットのバージョン管理をdisableにすることはできません。 ただし、バケットのバージョン管理を一時停止することはできます。バケットのバージョン管理を有効にすると、バケット内のすべてのバージョンのオブジェクトのストレージに対して課金されます。 バケットのライフサイクルルールを構成して、バケット内のオブジェクトの履歴バージョンをリサイクルできます。 詳細については、「ライフサイクル」をご参照ください。
作成された OSS バケットをクエリします。
kubectl get cnfs/cnfs-oss-<clusterid> -o yaml予期される出力:
apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"storage.alibabacloud.com/v1beta1","kind":"ContainerNetworkFileSystem","metadata":{"annotations":{},"name":"cnfs-oss-xxxxxxxxxx"},"spec":{"description":"cnfs-oss","parameters":{"aclType":"private","bucketName":"cnfs-oss-clusterid","encryptType":"AES256","storageType":"Standard"},"reclaimPolicy":"Retain","type":"oss"}} creationTimestamp: "2022-09-18T07:02:34Z" finalizers: - protection.alibabacloud.com/cnfs generation: 6 name: cnfs-oss-**** resourceVersion: "8091291" uid: ca187b2a-3bfa-4a5f-82d8-ca1b1f69**** spec: description: cnfs-oss parameters: aclType: private bucketName: cnfs-oss-**** encryptType: AES256 storageType: Standard reclaimPolicy: Retain type: oss status: conditions: - lastProbeTime: "2022-09-18 15:02:39" reason: OSS バケットの初期化が完了しました。 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次の表に、CNFS CRD のパラメータを示します。
パラメータ
説明
status
CNFS CRD のステータス。 有効な値:
Pending:CNFS CRD は保留中です。
Creating:CNFS CRD は作成中です。
Initialization:CNFS ファイルシステムは作成中です。
Available:CNFS CRD は使用可能です。
Unavailable:CNFS CRD は使用できません。 CNFS CRD を Available 状態に復元できます。
Fatal:CNFS CRD は使用できず、Available 状態に復元できません。
Terminating:CNFS CRD は削除中です。
conditions.lastProbeTime
最後のプローブが送信された時刻。
conditions.reason
現在のステータスの理由。
conditions.status
CNFS CRD が使用できる状態かどうかを示します。 有効な値:
Ready:CNFS CRD は使用できる状態です。
NotReady:CNFS CRD は使用できる状態ではありません。
fsAttributes.accessGroupName
マウントポイントで使用される権限グループの名前。 値を DEFAULT_VPC_GROUP_NAME に設定します。 これは、仮想プライベートクラウド (VPC) のデフォルトの権限グループを示します。
fsAttributes.encryptType
暗号化方式。 有効な値:
None:OSS サーバーでは暗号化アルゴリズムは使用されません。
AES256:OSS サーバーでは AES-256 アルゴリズムが使用されます。
SM4:OSS サーバーでは SM4 アルゴリズムが使用されます。
fsAttributes.regionId
ACK クラスタが存在するリージョン。
fsAttributes.storageType
OSS バケットのストレージクラス。 デフォルト値:Standard。 有効な値:
Standard:標準ストレージ
IA:IA
Archive:アーカイブ
ColdArchive:コールドアーカイブ
説明オブジェクトの読み取りまたは書き込みを行う前に、アーカイブまたはコールドアーカイブオブジェクトを解凍する必要があります。
fsAttributes.redundancyType
ストレージ冗長タイプ。 デフォルト値:ZRS。 有効な値:
LRS:ローカル冗長ストレージ (LRS) は、同じゾーン内の異なる設備の複数のデバイスにデータの複数のコピーを保存します。 LRS は、ハードウェア障害が発生した場合でも、データの耐久性と可用性を保証します。
ZRS:ゾーン冗長ストレージ (ZRS) は、同じリージョン内の複数のゾーンにデータの複数のコピーを保存します。 ゾーンが使用できなくなった場合でも、データにアクセスできます。
重要このパラメータは、storage-operator v1.26.2-1de13b6-aliyun 以降でのみサポートされています。
値を ZRS に設定した場合、コールドアーカイブとディープコールドアーカイブはサポートされません。
さまざまなストレージタイプとストレージ冗長タイプの請求ルールの詳細については、「請求対象項目」をご参照ください。
fsAttributes.aclType
OSS バケットで使用される ACL のタイプ。 デフォルト値:private。
fsAttributes.endPoint
CNFS CRD のエンドポイント。 有効な値:
extranet:パブリックエンドポイント
internal:内部エンドポイント
fsAttributes.enableVersioning
バケットのバージョン管理ステータス。 有効な値:
enabled:バケットのバージョン管理が有効になっています。
suspended:バケットのバージョン管理が一時停止されています。
None:バケットのバージョン管理が無効になっています。
重要このパラメータは、storage-operator v1.26.2-1de13b6-aliyun 以降でのみサポートされています。
バケットのバージョン管理を有効にすると、バケットの保持ポリシーまたは OSS-HDFS を構成できなくなります。 保持ポリシーまたは OSS-HDFS を構成するには、enableVersioning を
Noneに設定する必要があります。バケットのバージョン管理が
enabledになると、バケットのバージョン管理をdisableにすることはできません。 ただし、バケットのバージョン管理を一時停止することはできます。バケットのバージョン管理を有効にすると、バケット内のすべてのバージョンのオブジェクトのストレージに対して課金されます。 バケットのライフサイクルルールを構成して、バケット内のオブジェクトの履歴バージョンをリサイクルできます。 詳細については、「ライフサイクル」をご参照ください。
作成されたアプリケーションをクエリします。
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出力は、Deployment および StatefulSet が Running 状態であり、CNFS CRD が Deployment にマウントされていることを示しています。
方法 2:CNFS CRD を作成して既存の OSS バケットを指定する
バケット名を指定することにより、既存の OSS バケットを使用する CNFS CRD を作成します。次に、CNFS CRD を使用して、静的または動的にプロビジョニングされたボリュームとして OSS バケットを Deployment にマウントできます。
既存の OSS バケットを指定する 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 バケットの名前。 EOFOSS バケットに関する情報をクエリします。
kubectl get cnfs/cnfs-oss-exist-bucket-name -o yaml予想される出力:
apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"storage.alibabacloud.com/v1beta1","kind":"ContainerNetworkFileSystem","metadata":{"annotations":{},"name":"cnfs-oss-xxxx"},"spec":{"description":"cnfs-oss","parameters":{"bucketName":"exist-bucket-name"},"reclaimPolicy":"Retain","type":"oss"}} creationTimestamp: "2022-09-14T09:21:10Z" finalizers: - protection.alibabacloud.com/cnfs generation: 7 name: cnfs-oss-exist-bucket-name resourceVersion: "6504134" uid: 921564ac-0cd8-4a89-997d-c2393afd**** spec: description: cnfs-oss parameters: bucketName: exist-bucket-name reclaimPolicy: Retain type: oss status: conditions: - lastProbeTime: "2022-09-14 17:00:21" reason: The oss bucket is complete initialization. // OSS バケットの初期化が完了しました。 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: AvailableCNFS CRD を使用して、OSS バケットを動的にプロビジョニングされたボリュームとしてアプリケーションにマウントします。
詳細については、「方法 1:CNFS を使用して cnfs-oss- という名前の OSS バケットを作成する」をご参照ください。