Container Service for Kubernetes (ACK) は、Container Network File System (CNFS) を使用して、Object Storage Service (OSS) バケットのライフサイクルを個別に管理します。 このトピックでは、CNFSを使用してOSSバケットのライフサイクルを管理し、OSSバケットをワークロードにマウントする方法について説明します。
前提条件
ACKクラスターが作成されます。 Container Storage Interface (CSI) プラグインがボリュームプラグインとして使用されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
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の更新方法の詳細については、「コンポーネントの管理」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
概要
CNFSを使用してOSSバケットのライフサイクルを管理するには、次のいずれかの方法を使用できます。
方法1: CNFSを使用してcnfs-OSS-formatという名前のossバケットを作成
CNFSを使用して、動的にプロビジョニングされた永続ボリューム (PV) としてクラスターにマウントできるOSSバケットを作成します。 この例では、
cnfs-OSS-<UUIDたとえばclusterid>
という名前のossバケットが作成され、動的にプロビジョニングされたボリュームとしてDeploymentとStatefulSetにマウントされます。方法2: CNFS CRDを作成して既存のOSSバケットを指定する
CNFS CRDを作成して、既存のOSSバケットを指定します。 次に、CNFS CRDを使用して、静的または動的にプロビジョニングされたボリュームとしてOSSバケットをデプロイにマウントできます。
CNFS CRDを作成すると、BucketNameに次の制限が適用されます。cnfs-oss-<UUIDたとえばclusterid>
:
既存のOSSバケットの名前が指定したバケット名と同じ場合、既存のOSSバケットはContainerNetworkFileSystemオブジェクトに関連付けられます。
指定したバケット名と同じ名前の既存のOSSバケットがない場合、指定した名前の新しいOSSバケットが作成され、作成したContainerNetworkFileSystemオブジェクトに関連付けられます。 たとえば、バケット名として
cnfs-oss-<clusterid>
を指定した場合、システムはcnfs-OSS-<clusterid>
という名前のossバケットを作成します。<clusterid>
をクラスターのIDに置き換えます。 バケット名が一意であることを確認してください。
方法1: CNFSを使用してcnfs-OSS-<UUIDたとえばclusterid> という名前のossバケットを作成する
次のYAMLテンプレートを使用して、という名前のOSSバケットを作成します。
cnfs-oss-<UUIDたとえばclusterid>
を使用して、バケットを動的にプロビジョニングされたボリュームとしてDeploymentおよびStatefulSetにマウントします。<clusterid>
をクラスターのIDに置き換えます。# Create the following objects: a CNFS, a StorageClass, a Deployment, and a StatefulSet. cat << EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: akId: "xxxx" # The AccessKey pair that is required for mounting the OSS bucket. akSecret: "xxxx" --- apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-oss-<clusterid> # We recommend that you set the CNFS CRD name to the bucket name. spec: description: "cnfs-oss" type: oss reclaimPolicy: Retain # Only the Retain policy is supported. If the CNFS CRD is deleted, the associated OSS bucket is retained. parameters: bucketName: cnfs-oss-<clusterid> # If an existing bucket has the same name as the bucket name that you specify, the existing bucket is associated with the CNFS. If no existing OSS bucket has the same name as the bucket name that you specify, a new OSS bucket named cnfs-oss-clusterid is created. Replace clusterid with the ID of your cluster and make sure that the bucket name is unique. encryptType: "AES256" # If an existing OSS bucket is used, the encryption algorithm of the existing bucket is changed to AES-256. If a new OSS bucket is created, AES-256 is used as the encryption algorithm for the bucket. storageType: "Standard" # The storage type of the OSS bucket is Standard. aclType: "private" # Only the bucket owner and authorized users have read and write permissions on the bucket. --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alibabacloud-cnfs-oss parameters: containerNetworkFileSystem: cnfs-oss-<clusterid> # The StorageClass references the OSS bucket that is associated with the cnfs-oss-clusterid CNFS CRD. otherOpts: -o max_stat_cache_size=0 -o allow_other # Cache settings. path: / # volumeAs: subpath # A subpath is automatically created for each PV under the specified path. csi.storage.k8s.io/node-publish-secret-name: oss-secret # Mount the oss-secret Secret to the CNFS CRD. csi.storage.k8s.io/node-publish-secret-namespace: default # The namespace to which the oss-secret Secret belongs. provisioner: ossplugin.csi.alibabacloud.com reclaimPolicy: Retain --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cnfs-oss-pvc spec: accessModes: - ReadOnlyMany storageClassName: alibabacloud-cnfs-oss # Set the persistent volume claim (PVC) to use the 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 # Mount the cnfs-oss-pvc PVC to the 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" # Mount the cnfs-oss-pvc PVC to the StatefulSet. resources: requests: storage: 100Gi EOF
次の表は、CNFS CRDのパラメータを示しています。
パラメーター
説明
説明
CNFSファイルシステムの説明。
タイプ
作成するボリュームのタイプ。
reclaimPolicy
OSSバケットの再利用ポリシー。 保持ポリシーのみがサポートされています。 CNFS CRDが削除された場合、関連付けられたOSSバケットは保持されます。
パラメーター。bucketName
OSS バケットの名前。
parameters.storageType
OSSバケットのストレージタイプ。 デフォルト値: Standard。 有効な値: 有効な値:
スタンダード: スタンダード
IA: まれなアクセス (IA)
アーカイブ: Archive
ColdArchive: コールドアーカイブ
説明オブジェクトを読み書きする前に、アーカイブまたはコールドアーカイブオブジェクトを復元する必要があります。
パラメーター. redundancyType
ストレージ冗長タイプ。 デフォルト値: ZRS。 有効な値:
LRS: ローカル冗長ストレージ (LRS) は、同じゾーン内の異なる施設の複数のデバイスにデータの複数のコピーを保存します。 LRSは、ハードウェア障害が発生してもデータの耐久性と可用性を保証します。
ZRS: ゾーン冗長ストレージ (ZRS) は、同じリージョンの複数のゾーンにデータの複数のコピーを保存します。 ゾーンが使用できなくなっても、データにアクセスできます。
重要このパラメーターは、storage-operator v1.26.2-1de13b6-aliyun以降でのみサポートされます。
値をZRSに設定すると、コールドアーカイブとディープコールドアーカイブはサポートされません。
さまざまなストレージタイプとストレージ冗長性タイプの課金ルールの詳細については、「課金項目」をご参照ください。
parameters.encryptType
OSSバケットの暗号化方法。 有効な値:
なし: OSSサーバーでは暗号化アルゴリズムが使用されていません。
AES256: AES-256アルゴリズムはOSSサーバーで使用されます。
SM4: SM4アルゴリズムはOSSサーバーによって使用されます。
parameters.aclType
OSSバケットで使用されるアクセス制御リスト (ACL) のタイプ。 デフォルト値: private。 有効な値:
public-read-write: 匿名ユーザーを含むすべてのユーザーがバケット内のオブジェクトを読み書きできます。 この値を指定するときは注意してください。
public-read: バケット内のオブジェクトを読み書きできるのは、バケット所有者または許可されたユーザーのみです。 他のユーザーはバケット内のオブジェクトのみを読み取ることができます。 この値を指定するときは注意してください。
private: バケット内のオブジェクトを読み書きできるのは、バケット所有者または許可されたユーザーのみです。 他のユーザーはバケット内のオブジェクトにアクセスできません。
パラメーター。enableVersioning
バケットのバージョン管理ステータス。 有効な値: 有効な値:
enabled: バケットのバージョン管理が有効です。
suspended: バケットのバージョン管理が中断されています。
なし: バケットのバージョン管理は無効です。
重要このパラメーターは、storage-operator v1.26.2-1de13b6-aliyun以降でのみサポートされます。
バケットのバージョン管理を有効にすると、バケットの保持ポリシーやOSS-HDFSを設定できなくなります。 保持ポリシーまたはOSS-HDFSを構成するには、enableVersioningを
None
に設定する必要があります。バケットのバージョン管理を
有効
にすると、バケットのバージョン管理を無効
にすることはできません。 ただし、バケットのバージョン管理は一時停止できます。バケットのバージョン管理を有効にすると、バケット内のすべてのバージョンのオブジェクトのストレージに対して課金されます。 バケットのライフサイクルルールを設定して、バケット内のオブジェクトの履歴バージョンをリサイクルできます。 詳細については、「概要」をご参照ください。
次のコマンドを実行して、作成された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: 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
次の表は、CNFS CRDのパラメータを示しています。
パラメーター
説明
status
CNFS CRDのステータス。 有効な値:
保留中: CNFS CRDは保留中です。
作成中: CNFS CRDが作成中です。
初期化: CNFSファイルシステムが作成中です。
利用可能: CNFS CRDが利用可能です。
使用不可: CNFS CRDは使用できません。 CNFS CRDをAvailable状態に復元できます。
Fatal: CNFS CRDは使用できず、使用可能状態に復元できません。
終了: CNFS CRDは削除中です。
conditions.lastProbeTime
最後のプローブが送信された時刻。
条件. reason
現在のステータスの理由。
conditions.status
CNFS CRDが使用可能かどうかを示します。 有効な値:
準備完了: CNFS CRDは使用準備完了です。
NotReady: CNFS CRDは使用の準備ができていません。
fsAttributes.accessGroupName
マウントポイントで使用される権限グループの名前。 値をDEFAULT_VPC_GROUP_NAMEに設定します。 これは、仮想プライベートクラウド (VPC) のデフォルトの権限グループを示します。
fsAttributes.encryptType
暗号化方法。 有効な値:
なし: OSSサーバーでは暗号化アルゴリズムが使用されていません。
AES256: AES-256アルゴリズムはOSSサーバーで使用されます。
SM4: SM4アルゴリズムはOSSサーバーによって使用されます。
fsAttributes.regionId
ACKクラスターが存在するリージョン。
fsAttributes.storageType
OSSバケットのストレージクラス。 デフォルト値: 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のエンドポイント。 有効な値:
エクストラネット: パブリックエンドポイント
internal: 内部エンドポイント
fsAttributes.enableVersioning
バケットのバージョン管理ステータス。 有効な値: 有効な値:
enabled: バケットのバージョン管理が有効です。
suspended: バケットのバージョン管理が中断されています。
なし: バケットのバージョン管理は無効です。
重要このパラメーターは、storage-operator v1.26.2-1de13b6-aliyun以降でのみサポートされます。
バケットのバージョン管理を有効にすると、バケットの保持ポリシーやOSS-HDFSを設定できなくなります。 保持ポリシーまたはOSS-HDFSを構成するには、enableVersioningを
None
に設定する必要があります。バケットのバージョン管理を
有効
にすると、バケットのバージョン管理を無効
にすることはできません。 ただし、バケットのバージョン管理は一時停止できます。バケットのバージョン管理を有効にすると、バケット内のすべてのバージョンのオブジェクトのストレージに対して課金されます。 バケットのライフサイクルルールを設定して、バケット内のオブジェクトの履歴バージョンをリサイクルできます。 詳細については、「概要」をご参照ください。
次のコマンドを実行して、作成されたアプリケーションを照会します。
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バケットを指定する
CNFS CRDを作成して、既存のOSSバケットを指定します。 次に、CNFS CRDを使用して、静的または動的にプロビジョニングされたボリュームとしてOSSバケットをデプロイにマウントできます。
次のコマンドを実行して、既存の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 # The name of the existing OSS bucket that you want to use. EOF
次のコマンドを実行して、OSSバケットに関する情報を照会します。
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. 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を使用して、OSSバケットを動的にプロビジョニングされたボリュームとしてアプリケーションにマウントします。
詳細については、「方法1: CNFSを使用してcnfs-OSS-formatという名前のossバケットを作成する」をご参照ください。