ここでは、flexVolume ドライバーを使用して、Container Service for Kubernetes クラスターから Apsara File Storage NAS ファイルシステムにアクセスするために、動的永続ボリューム (PV) をマウントする方法について説明します。

始める前に

  1. Alibaba Cloud で Kubernetes クラスターが作成されていること。 詳細については、「Kubernetes クラスターの作成」をご参照ください。

    ご利用のクラスターが自己構築 Kubernetes クラスターの場合、Alibaba Cloud flexVolume ドライバーをダウンロード、インストールします。

  2. 使用する flexVolume ドライバーのバージョンが v1.12.6.52-f6604e5-aliyun 以降であること。

    flexVolume ドライバーのバージョンが推奨バージョンよりも古い場合、ドライバーの更新を推奨します。 詳細については、「システムコンポーネントのアップグレード」をご参照ください。

  3. ファイルシステムが作成されていること。 詳細については、「ファイルシステム」をご参照ください。

    作成したファイルシステムと Kubernetes クラスターは同じゾーンに存在する必要があります。

  4. マウントターゲットが追加されていること。 詳細については、「マウントポイント」をご参照ください。

    マウントターゲットと Kubernetes クラスターは、同じ仮想プライベートクラウド (VPC) に存在する必要があります。

このタスクについて

動的 PV は、Apsara File Storage NAS ファイルシステムのサブディレクトリのマッピングに基づき、動的にプロビジョニングされます。
動的プロビジョニングを使用すると、既存の Apsara File Storage NAS ファイルシステムにディレクトリが自動的に作成され、ターゲットボリュームとしてマウントされます。

NAS コントローラーのインストール

次のテンプレートを使用して、"alicloud-nas-controller" という名前のデプロイメントを設定します。

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: alicloud-nas-controller
  namespace: kube-system
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: alicloud-nas-controller
    spec:
      tolerations:
      - operator: "Exists"
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: node-role.kubernetes.io/master
                operator: Exists
      priorityClassName: system-node-critical
      serviceAccount: admin
      hostNetwork: true
      containers:
        - name: nfs-provisioner
          image: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.14.3.8-58bf821-aliyun
          env:
          - name: PROVISIONER_NAME
            value: alicloud/nas
          securityContext:
            privileged: true
          volumeMounts:
          - mountPath: /var/log
            name: log
      volumes:
      - hostPath:
          path: /var/log
        name: log

ダイナミック PV のマウント

  1. StorageClass を設定します。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      server: "23a9649583-iaq37.cn-shenzhen.nas.aliyuncs.com:/nasroot1/"
      driver: flexvolume
    provisioner: alicloud/nas
    reclaimPolicy: Delete
    パラメーター 説明 
    mountOptions PV のマウントに使用されるオプション。
    server PV のマウントに使用されるマウントターゲット。
    • 形式:nfsurl1:/path1,nfsurl2:/path2
    • 複数のサーバーが指定されている場合、StorageClass の設定に基づいてプロビジョニングされた PV は、指定されたサーバーをポーリングしてマウントターゲットを選択します。
    driver Apsara File Storage NAS ファイルシステムへのアクセスに使用されるドライバー。 有効な値:flexvolume および nfs。 デフォルト値:nfs。
    reclaimPolicy PV の再利用ポリシー。 このパラメーターは Retain に設定することを推奨します。

    このパラメーターを Delete に設定すると、PV を削除する際、PV に対応する Apsara File Storage NAS ファイルシステム内のディレクトリ名が自動的に変更されます。 たとえば、path-name は archived-path-name に変更されます。 PV に対応するファイルシステム内のディレクトリを削除する場合は、StorageClass の archiveOnDelete パラメーターを false に設定します。

  2. ダイナミック PV にアクセスします。
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1beta1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 5
      volumeClaimTemplates:
      - metadata:
          name: html
        spec:
          accessModes:
            - ReadWriteOnce
          storageClassName: alicloud-nas
          resources:
            requests:
              storage: 2Gi
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:alpine
            volumeMounts:
            - mountPath: "/data"
              name: html