ボリュームとストレージ

データを保持する必要があるアプリケーションをデプロイする際には、永続ストレージを作成する必要があります。永続ストレージを使用すると、アプリケーションのデータをアプリケーションを実行しているポッドの外部に保存できます。このストレージの方法により、アプリケーションのポッドが失敗してもアプリケーションデータを保持できます。

永続ボリューム(PV)はKubernetesクラスター内のストレージの一部であり、永続ボリュームクレーム(PVC)はストレージの要求です。PVとPVCの動作の詳細については、公式Kubernetesドキュメントのストレージを参照してください。

このページでは、ローカルストレージプロバイダーまたはLonghornを使用して永続ストレージを設定する方法について説明します。

K3sストレージの違いは何ですか?

K3sは、いくつかのオプションのボリュームプラグインとすべての組み込み(「インツリー」とも呼ばれる)クラウドプロバイダーを削除します。これにより、バイナリサイズを小さくし、多くのK3sの使用ケースで利用できない可能性のあるサードパーティのクラウドやデータセンター技術およびサービスへの依存を避けることができます。これらの削除は、Kubernetesのコア機能や適合性に影響を与えないため可能です。

以下のボリュームプラグインはK3sから削除されました:

  • cephfs

  • fc

  • flocker

  • git_repo

  • glusterfs

  • portworx

  • quobyte

  • rbd

  • storageos

両方のコンポーネントには、K3sで使用できるアウトオブツリーの代替手段があります:Kubernetesのコンテナストレージインターフェース(CSI)およびクラウドプロバイダーインターフェース(CPI)です。

Kubernetesのメンテナは、インツリーボリュームプラグインをCSIドライバーに積極的に移行しています。この移行に関する詳細については、https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/[こちら]を参照してください。

ローカルストレージプロバイダーの設定

K3sにはRancherのLocal Path Provisionerが付属しており、これにより、対応するノード上のローカルストレージを使用して永続ボリュームクレームをすぐに作成する機能が有効になります。以下に簡単な例を示します。詳細については、公式ドキュメントをこちらで参照してください。

hostPathをバックにした永続ボリュームクレームとそれを利用するポッドを作成します:

pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-path-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 2Gi

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  namespace: default
spec:
  containers:
  - name: volume-test
    image: nginx:stable-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: volv
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: volv
    persistentVolumeClaim:
      claimName: local-path-pvc

yamlを適用します:

kubectl create -f pvc.yaml
kubectl create -f pod.yaml

PVとPVCが作成されたことを確認します:

kubectl get pv
kubectl get pvc

ステータスはそれぞれBoundである必要があります。

Longhornの設定

LonghornはARM32をサポートしていません。

K3sは、Kubernetes用のオープンソースの分散ブロックストレージシステムであるLonghornをサポートしています。

以下に簡単な例を示します。詳細については、https://longhorn.io/docs/latest/[公式ドキュメント]を参照してください。

longhorn.yamlを適用してLonghornをインストールします:

kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.0/deploy/longhorn.yaml

Longhornはlonghorn-systemという名前空間にインストールされます。

Create a persistent volume claim and a pod to utilize it:

pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: longhorn-volv-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 2Gi

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  namespace: default
spec:
  containers:
  - name: volume-test
    image: nginx:stable-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: volv
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: volv
    persistentVolumeClaim:
      claimName: longhorn-volv-pvc

PVCとポッドを作成するためにyamlを適用します:

kubectl create -f pvc.yaml
kubectl create -f pod.yaml

PVとPVCが作成されたことを確認します:

kubectl get pv
kubectl get pvc

ステータスはそれぞれBoundである必要があります。