OpenEBS デプロイ¶
概要¶
Kubernetes のローカル永続ボリュームにより、ユーザーは標準の PVC インターフェースを介して、シンプルかつポータブルな方法でローカルストレージにアクセスできます。PV にはノードアフィニティ情報が含まれており、システムはこの情報を使用してポッドを適切なノードにスケジューリングします。 OpenEBS 動的ローカル PV は、OpenEBS ノードストレージディスクマネージャー(NDM)を使用して、Kubernetes ローカル PV が提供する機能を拡張します。主な違いは次のとおりです。
- ユーザーはノード内のデバイスを事前にフォーマットしてマウントする必要はありません。
- 動的ローカル PV をサポートしており、デバイスは CAS ソリューションとアプリケーションで使用できます。CAS ソリューションは通常、デバイスに直接アクセスします。OpenEBS NDM がサポートする blockdeviceclaims を使用することで、OpenEBS ローカル PV は、CAS ソリューション(直接アクセス)とアプリケーション(PV 経由)の間で使用されるストレージデバイスの管理を簡素化します。
- hostpath を使用したローカル PV の提供をサポートします。実際、Kubernetes ノードに接続されているストレージデバイスの数が限られている場合、hostpath ベースのローカル PV は、ノード上の利用可能なストレージを効率的に管理できます。
前提条件¶
- Kubernetes クラスターがデプロイされていること。デプロイされていない場合は、Kubernetes デプロイ を参照してください。
- (オプション)Helm ツールがデプロイされていること。デプロイされていない場合は、Helm インストール を参照してください。
基本情報と互換性¶
| 名前 | バージョン | オフラインデプロイ対応 | サポートアーキテクチャ | サポートクラスターバージョン |
|---|---|---|---|---|
| localpv-provisioner | 2.0 | はい | amd64/arm64 | 1.18+ |
デプロイ手順¶
1. インストール¶
以下のコマンドを実行してインストールします。
helm install localpv localpv-provisioner --repo https://pubrepo.guance.com/chartrepo/dataflux-chart -n kube-system
出力結果:
NAME: localpv
LAST DEPLOYED: Wed Nov 2 12:44:53 2022
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The OpenEBS Dynamic LocalPV Provisioner has been installed.
Check its status by running:
$ kubectl get pods -n kube-system
Use `kubectl get bd -n kube-system` to list the
blockdevices attached to the Kubernetes cluster nodes.
Get started with the Dynamic LocalPV Provisioner Quickstart guide at:
https://github.com/openebs/dynamic-localpv-provisioner/blob/develop/docs/quickstart.md
For more information, visit our Slack at https://openebs.io/community or view
the OpenEBS documentation online at https://openebs.io/docs
STATUS: deployedはデプロイ成功を示します。
2. デプロイの検証¶
2.1 Pod の状態を確認¶
出力結果:
NAME READY STATUS RESTARTS AGE
localpv-localpv-provisioner-c7dd598dc-wtrgg 1/1 Running 0 27m
localpv-openebs-ndm-65987 1/1 Running 0 27m
localpv-openebs-ndm-6h2x4 1/1 Running 0 27m
localpv-openebs-ndm-krf47 1/1 Running 0 27m
localpv-openebs-ndm-operator-8d67c79dd-482sb 1/1 Running 0 27m
2.2 StorageClass の作成¶
/data ディレクトリ下の localpv StorageClass を作成します。
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
annotations:
cas.openebs.io/config: |
- name: StorageType
value: "hostpath"
- name: BasePath
value: "/data" ## hostpath のパス
name: openebs-data
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer ## Pod がスケジュールされるまで作成を待機
以下のコマンドを実行してインストールします。
作成が成功したか確認します。
結果:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
openebs-data openebs.io/local Retain WaitForFirstConsumer true 24m
2.3 PVC の作成¶
以下のYAMLを test-pvc.yaml として保存します。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-pvc
spec:
storageClassName: openebs-data ## 上記でデプロイした StorageClass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
以下のコマンドを実行してインストールします。
状態を確認します。
pvc の状態は次のとおりです。
StorageClass の
volumeBindingModeがWaitForFirstConsumerに設定されているため、pvc の状態がPendingになるのは正常です。
2.4 テスト用 Deployment の作成¶
以下のYAMLを test-deploy.yaml として保存します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-pvc
spec:
selector:
matchLabels:
app: nginx-pvc
replicas: 1 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx-pvc
spec:
containers:
- name: nginx-pvc
image: nginx:1.14.1
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 30Mi
limits:
cpu: 100m
memory: 30Mi
volumeMounts:
- mountPath: "/var/www/html" ## コンテナ内のディレクトリをPVCのNFSディレクトリにマウント
name: storage ## storageを追加
volumes:
- name: storage ## 上記と対応
persistentVolumeClaim: ## PVC宣言
claimName: test-pvc ## 作成済みのPVCラベル名
以下のコマンドを実行してインストールします。
状態を確認します。
Pod の状態:
pvc の状態:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-pvc Bound pvc-4023bf79-235e-4310-8fb6-a4f13b3900f2 1Gi RWO openebs-data 2m1s