コンテンツにスキップ

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 はデプロイ成功を示します。

ebs.yaml をダウンロードします。

以下のコマンドを実行してインストールします。

kubectl apply -f ebs.yaml

2. デプロイの検証

2.1 Pod の状態を確認

kubectl get pods -n kube-system -l release=localpv

出力結果:

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 がスケジュールされるまで作成を待機

以下のコマンドを実行してインストールします。

kubectl apply -f sc-data.yaml

作成が成功したか確認します。

kubectl get sc

結果:

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

以下のコマンドを実行してインストールします。

kubectl apply -f test-pvc.yaml

状態を確認します。

kubectl get pvc

pvc の状態は次のとおりです。

NAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-pvc   Pending                                      openebs-data   18s

StorageClass の volumeBindingModeWaitForFirstConsumer に設定されているため、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ラベル名

以下のコマンドを実行してインストールします。

kubectl apply -f test-deploy.yaml

状態を確認します。

kubectl get pods -l app=nginx-pvc

Pod の状態:

NAME                         READY   STATUS    RESTARTS   AGE
nginx-pvc-6654f7478c-sjm88   1/1     Running   0          7m5s

pvc の状態:

NAME        STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-pvc    Bound     pvc-4023bf79-235e-4310-8fb6-a4f13b3900f2   1Gi        RWO            openebs-data   2m1s

アンインストール方法

helm uninstall -n kube-system localpv
kubectl delete -f ebs.yaml

フィードバック

このページは役に立ちましたか?