ACK Edge Pro クラスターのノードで LVM を使用して、ローカルボリュームを PV および PVC としてプロビジョニングおよび管理します。Pod は、利用可能な LVM ストレージ容量に基づいてノードにスケジュールされます。
前提条件
-
クラスターノードでローカルディスクが利用可能であること。
-
ストレージノードの TCP ポート 1736 がクラウドノードからアクセス可能であること。
ステップ 1: node-resource-manager、csi-plugin、csi-provisioner アドオンのインストール
これらのアドオンは、ローカル LVM ボリュームに対する Container Storage Interface (CSI) サポートを提供します。LVM を使用してローカルストレージを管理する前に、3 つすべてをインストールしてください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、対象のクラスター名をクリックし、左側のナビゲーションペインで を選択します。
-
[アドオン] ページで、 Storage タブをクリックします。[node-resource-manager]、[csi-plugin]、および [csi-provisioner] を見つけ、[インストール] をクリックします。
-
ダイアログボックスで、[OK] をクリックします。[]
ステップ 2: ボリュームグループの設定
ボリュームグループは、ノード上で LVM が管理するローカルディスクを指定します。ConfigMap を作成して、ノードラベルとディスクトポロジーをマッピングします。本文中の VolumeGroup は、ConfigMap YAML の volumegroup フィールドに対応します。
データセキュリティのため、アドオンはボリュームグループや物理ボリューム (LVM の物理ボリュームであり、Kubernetes PersistentVolume とは異なります) を削除しません。既存のボリュームグループを再定義する前に、削除してください。
-
次の ConfigMap を使用して、ボリュームグループのトポロジーを設定します。
apiVersion: v1 kind: ConfigMap metadata: name: node-resource-topo namespace: kube-system data: volumegroup: |- volumegroup: - name: volumegroup1 key: kubernetes.io/storagetype operator: In value: lvm topology: type: device devices: - /dev/sdb1 - /dev/sdb2 - /dev/sdc次の表に、パラメーターの説明を示します。
パラメーター
説明
name
ボリュームグループの名前。
key
ノードで照合するラベルキー。
operator
ラベルセレクターのオペレーター。有効な値: In、NotIn、Exists、DoesNotExist。オペレーターの値については、以下の表をご参照ください。
value
指定されたキーに一致するラベル値。
topology
ノード上のデバイストポロジー。
topology.devicesは、ボリュームグループに追加するローカルディスクパスのリストです。オペレーター値
値 動作 In ノードのラベル値が指定された valueと等しい場合に一致します。NotIn ノードのラベル値が指定された valueと異なる場合に一致します。Exists ノードが指定されたキーのラベルを持つ場合に一致します。 DoesNotExist ノードが指定されたキーのラベルを持たない場合に一致します。 -
ノードにラベルを追加します。
ストレージノードに次のラベルを追加します。
-
カスタムトポロジーラベル: ConfigMap セレクターに一致するように、ストレージノードにラベルを付けます。例:
kubernetes.io/storagetype=lvm。 -
ローカルストレージ有効化ラベル:
alibabacloud.com/edge-enable-localstorage='true'を追加して、ノードでローカルストレージ Pod のスケジューリングを有効にします。
両方のラベルを追加すると、[node-resource-manager] は物理ボリュームを自動的に作成し、VolumeGroup に追加します。
-
ステップ 3: PVC の作成とワークロードのデプロイ
次の YAML で StorageClass を使用して PVC を定義し、kubectl apply -f ****.yaml を実行して作成します。各 PVC はノード上の 1 つの論理ボリュームにマッピングされ、Pod の起動時にマウントされます。
この例では、storageClassName は csi-local-lvm です。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lvm-pvc-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
storageClassName: csi-local-lvm
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: local-test
name: local-test
namespace: default
spec:
replicas: 1
selector:
matchLabels:
k8s-app: local-test
template:
metadata:
labels:
k8s-app: local-test
spec:
hostNetwork: true
containers:
- image: nginx:1.15.7-alpine
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
volumeMounts:
- name: local-pvc
mountPath: /data
dnsPolicy: ClusterFirst
restartPolicy: Always
tolerations:
- operator: Exists
nodeSelector:
alibabacloud.com/is-edge-worker: "true"
volumes:
- name: local-pvc
persistentVolumeClaim:
claimName: lvm-pvc-test
結果の確認
論理ボリュームがマウントされているかどうかを確認します。
kubectl exec -it local-test-564dfcf6dc-qhfsf sh
/ # ls /data
想定される出力:
lost+found
これにより、論理ボリュームが Pod にマウントされていることを確認できます。