すべてのプロダクト
Search
ドキュメントセンター

:ローカル記憶域リソースを自動的に初期化する

最終更新日:Jan 10, 2026

Kubernetes クラスター内のローカルストレージリソースは、手動で初期化することも、Ansible を使用してバッチで初期化することもできます。しかし、特に大規模なクラスターでは、ローカルストレージリソースの初期化プロセスは複雑です。node-resource-manager コンポーネントは、ConfigMap に基づいてノード上のローカルストレージリソースを自動的に初期化および更新できます。このトピックでは、node-resource-manager を使用して Kubernetes クラスター内のノード上のローカルストレージリソースを自動的に初期化する方法について説明します。

背景情報

Kubernetes クラスターでローカルストレージリソースを初期化するプロセスには課題があります。ローカルストレージリソースは手動で初期化することも、Ansible を使用してバッチで初期化することもできますが、以下の問題が存在します:

  • Kubernetes のノード情報に基づいて Ansible を使用してカスタムデプロイメントを実行するのは複雑です。まず、ノードに kubelet をインストールし、シェルコマンド を実行する必要があります。その後、コマンド出力を手動で解析する必要があります。

  • 多数のノードを含むクラスターでは、ローカルストレージリソースを手動で初期化することは困難です。

  • 初期化されたストレージリソースは、長期的なビジネスのために自動的に維持することができません。リソースを更新するには、ノードに手動でログインして更新する必要があります。さらに、初期化されたストレージリソースの使用状況情報は Kubernetes コントロールプレーンにレポートされないため、Pod のスケジューリングに影響します。

node-resource-manager コンポーネントは、ローカルストレージリソースを自動的に初期化し、その使用状況情報を Kubernetes コントロールプレーンにレポートできます。これにより、スケジューラはレポートされた使用状況情報に基づいてローカルストレージリソースを Pod に割り当てることができます。詳細については、「node-resource-manager」をご参照ください。

ステップ 1: ローカルストレージリソースを初期化するノードを指定するための ConfigMap の作成

ConfigMap で以下のパラメーターを設定して、ローカルストレージリソースを初期化するノードを指定できます:

key: kubernetes.io/hostname
operator: In
value: xxxxx

パラメーター

説明

key

ノードラベルに基づいてノードを選択するために使用される キー です。

operator

ラベルセレクターで使用されるオペレーターです。有効な値は次のとおりです:

  • In: ノードに付与されたラベルのキーと が、指定したキーと と同じ場合、そのノードが選択されます。

  • NotIn: 指定したキーと同じキーを持つが、指定した value とは異なる value を持つラベルがノードにある場合、そのノードは選択されます。

  • Exists:ノードに指定したキーと同じキーを持つラベルがある場合、そのノードが選択されます。

  • DoesNotExist:ノードに指定したキーと異なるキーを持つラベルがある場合、そのノードが選択されます。

value

ノードラベルに基づいてノードを選択するために使用される です。

Logical Volume Manager (LVM) または QuotaPath を使用して、ノード上のローカルストレージリソースを定義します。

LVM を使用したリソーストポロジーの定義

以下のいずれかのメソッドを使用して、リソーストポロジーを定義できます:

  • type: device:node-resource-manager は、devices パラメーターで指定されたブロックストレージデバイスに基づいてプロビジョニングされた ボリュームグループ を要求します。volumegroupname パラメーターに基づいて命名されます。論理ボリューム (LV) をリクエストするアプリケーションが起動されると、LV は volumegroup に基づいて割り当てられます。

  • type: alibabacloud-local-disk:node-resource-manager は、ホストのすべてのローカルディスクに基づいて volumegroup を作成します。volumegroupname パラメーターに基づいて命名されます。このメソッドを使用するには、ホストをローカルディスクが搭載された Elastic Compute Service (ECS) インスタンスにデプロイする必要があります。

    重要

    ローカル SSD を搭載した i2 インスタンスファミリーの ECS インスタンスに手動でアタッチされたブロックストレージデバイスはクラウドディスクであり、ローカルディスクとは見なされません。

  • type: pmem:node-resource-manager は、ホスト上の永続メモリ (PMEM) リソースに基づいて volumegroup を作成します。volumegroupname パラメーターに基づいて命名されます。regions パラメーターを設定して、PMEM リソースが属する リージョン を指定できます。

以下の YAML テンプレートに基づいてリソーストポロジーを定義します:

apiVersion: v1
kind: ConfigMap
metadata:
  name: unified-resource-topo
  namespace: kube-system
data:
  volumegroup: |-
    volumegroup:
    - name: volumegroup1
      key: kubernetes.io/hostname
      operator: In
      value: cn-zhangjiakou.192.168.XX.XX
      topology:
        type: device
        devices:
        - /dev/vdb
        - /dev/vdc
    - name: volumegroup2
      key: kubernetes.io/nodetype
      operator: NotIn
      value: localdisk
      topology:
        type: alibabacloud-local-disk
    - name: volumegroup3
      key: kubernetes.io/hostname
      operator: Exists
      value: cn-beijing.192.168.XX.XX
      topology:
        type: pmem
        regions:
        - region0

QuotaPath を使用したリソーストポロジーの定義

以下のいずれかのメソッドを使用して、リソーストポロジーを定義できます:

  • type: device:node-resource-manager は、ホスト上のブロックストレージデバイスに基づいて QuotaPath ボリュームを初期化します。QuotaPath ボリュームは name パラメーターで指定されたパスにマウントされます。

  • type: pmem:node-resource-manager は、ホスト上の PMEM リソースに基づいて QuotaPath ボリュームを初期化します。QuotaPath ボリュームは name パラメーターで指定されたパスにマウントされます。

以下の YAML テンプレートに基づいてリソーストポロジーを定義します:

apiVersion: v1
kind: ConfigMap
metadata:
  name: unified-resource-topo
  namespace: kube-system
data:
  quotapath: |-
    quotapath:
    - name: /mnt/path1
      key: kubernetes.io/hostname
      operator: In
      value: cn-beijing.192.168.XX.XX
      topology:
        type: device
        options: prjquota
        fstype: ext4
        devices:
        - /dev/vdb
    - name: /mnt/path2
      key: kubernetes.io/hostname
      operator: In
      value: cn-beijing.192.168.XX.XX
      topology:
        type: pmem
        options: prjquota,shared
        fstype: ext4
        regions:
        - region0

次の表にパラメーターを示します。

パラメーター

説明

options

ブロックストレージデバイスをマウントするためのオプションです。

fstype

ブロックストレージデバイスをフォーマットするために使用されるファイルシステムタイプです。デフォルト値: ext4

devices

マウントするブロックストレージデバイスです。複数のブロックストレージデバイスを指定した場合、デバイスは順番にマウントされます。

ステップ 2: node-resource-manager のデプロイ

以下の YAML テンプレートを使用して DaemonSet を作成し、クラスターに node-resource-manager をデプロイします:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: node-resource-manager
  namespace: kube-system
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: node-resource-manager
rules:
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get", "watch", "list", "delete", "update", "create"]
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: node-resource-manager-binding
subjects:
  - kind: ServiceAccount
    name: node-resource-manager
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: node-resource-manager
  apiGroup: rbac.authorization.k8s.io
---
kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: node-resource-manager
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: node-resource-manager
  template:
    metadata:
      labels:
        app: node-resource-manager
    spec:
      tolerations:
        - operator: "Exists"
      priorityClassName: system-node-critical
      serviceAccountName: node-resource-manager
      hostNetwork: true
      hostPID: true
      containers:
        - name: node-resource-manager
          securityContext:
            privileged: true
            capabilities:
              add: ["SYS_ADMIN"]
            allowPrivilegeEscalation: true
          image: registry.cn-hangzhou.aliyuncs.com/acs/node-resource-manager:v1.18.8.0-983ce56-aliyun
          imagePullPolicy: "Always"
          args:
            - "--nodeid=$(KUBE_NODE_NAME)"
          env:
            - name: KUBE_NODE_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: spec.nodeName
          volumeMounts:
            - mountPath: /dev
              mountPropagation: "HostToContainer"
              name: host-dev
            - mountPath: /var/log/
              name: host-log
            - name: etc
              mountPath: /host/etc
            - name: config
              mountPath: /etc/unified-config
      volumes:
        - name: host-dev
          hostPath:
            path: /dev
        - name: host-log
          hostPath:
            path: /var/log/
        - name: etc
          hostPath:
            path: /etc
        - name: config
          configMap:
            name: node-resource-topo

node-resource-manager がデプロイされると、作成した ConfigMap の設定に基づいてノード上のローカルストレージリソースが自動的に初期化されます。ConfigMap を更新すると、node-resource-manager は更新完了後 1 分以内に初期化されたローカルストレージリソースを更新します。

重要

データセキュリティを確保するため、node-resource-manager はクラスターからリソースを削除しません。