Alibaba Cloud NAS ボリュームを Container Service の Kubernetes クラスターで使用できます。
Alibaba Cloud の NAS ファイルシステム を Kubernetes クラスターに、以下の 2 つのタイプのボリュームとしてマウントできます。
- 静的ボリューム
静的ボリュームを以下の 2 つの方法のどちらかで使用できます。
- FlexVolume プラグインを通じた静的ボリュームの使用
- 静的ボリュームを直接使用します。
- PV (Persistent Volume) および PVC (Persistent Volume Claim) を通じて、静的ボリュームを使用します。
- Kubernetes の NFS ドライバーを通じた静的ボリュームの使用
- FlexVolume プラグインを通じた静的ボリュームの使用
- 動的ボリューム
前提条件
NAS コンソールで NAS ファイルシステムを作成し、そのファイルシステムで Kubernetes クラスター用のマウントポイントを追加しておく必要があります。 NAS ファイルシステム、およびお使いのクラスターが同一の VPC 上にあることをご確認ください。
静的ボリューム
Alibaba Cloud NAS ファイルストレージサービスを、Alibaba Cloud により提供される FlexVolume プラグイン、または Kubernetes の NFS ドライバーにより使用できます。
FlexVolume プラグインを通じた静的ボリュームの使用
FlexVolume プラグインにより、Alibaba Cloud NAS ボリュームを直接使用、または PV および PVC を通じて使用できます。
- NAS: 複数のポッドに対して同時にストレージサービスを提供する、共有ストレージシステムです。
- server: NAS ファイルシステムのマウントポイントを定義します。
- path: NAS ボリュームに接続するマウントディレクトリを定義します。 NAS サブディレクトリを指定し、お使いの NAS ボリュームをマウントすることができます。 指定した NAS サブディレクトリが存在しない場合、システムは自動的に NAS サブディレクトリを作成し、お使いの NAS ボリュームをマウントします。
- vers: NFS マウントプロトコルのバージョンナンバーを定義します。 NFS ファイルシステムバージョン 3.0 および 4.0 がサポートされます。
- mode: マウントディレクトリのアクセス権限を定義します。 マウントディレクトリが NAS ファイルシステムのルートディレクトリの場合、ルートディレクトリに対するアクセス権限は設定されません。 大量のデータが保存された NAS ファイルシステムへ "mode" パラメーターが設定された場合は、クラスターへの NAS ファイルシステムのマウント処理に極端に時間がかかったり、失敗することがあります。
静的ボリュームの直接使用
nas-deploy.yaml
ファイルを使用し、以下のとおりポッドを作成します。
apiVersion: v1
kind: Pod
metadata:
name: "flexvolume-nas-example"
spec:
containers:
- name: "nginx"
image: "nginx"
volumeMounts:
- name: "nas1"
mountPath: "/data"
volumes:
- name: "nas1"
flexVolume:
driver: "alicloud/nas"
options:
server: "0cd8b4a576-grs79.cn-hangzhou.nas.aliyuncs.com"
path: "/k8s"
vers: "3"
PV および PVC を通じた静的ボリュームの使用
手順 1: PV の作成
NAS ボリュームを YAML ファイルによって、または Alibaba Cloud Container Service コンソールによって作成できます。
- YAM ファイルによる PV の作成
nas-pv.yaml
ファイルを使用した PV の作成は以下のようになります。apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas spec: capacity: storage: 5Gi storageClassName: nas accessModes: - ReadWriteMany flexVolume: driver: "alicloud/nas" options: server: "0cd8b4a576-uih75.cn-hangzhou.nas.aliyuncs.com" path: "/k8s" vers: "3"
- Container Service コンソールでの NAS ボリュームの作成
- Container Service コンソール にログインします。
- Container Service-Kubernetes の左側のナビゲーションウインドウで、 を選択します。
- [ボリューム] ページで、目的のクラスターを選択し、[作成] をクリックします。
- 表示されるダイアログ ボックスで、永続ボリュームのパラメーターを設定します。
- PV タイプ: この例では "NAS" が選択されています。
- ボリューム名: ボリューム名をカスタマイズします。 ボリューム名はクラスター内で固有である必要があります。 この例では、"pv-nas" がボリューム名として設定されています。
- 容量: ボリュームの容量を設定します。 ボリュームの容量が NAS ファイルシステムの容量を超えていないことを確認してください。
- アクセスモード: デフォルトでは、 "ReadWriteOnce" に設定されています。
- マウントポイントドメイン名: NAS ファイルシステムが Kubernetes クラスターへマウントされるために使用される、マウントポイントのマウントアドレスを入力します。
- パス: NAS パス上のサブディレクトリです。これはスラッシュ ( / ) から始まります。 サブディレクトリを指定した場合、お使いのボリュームは、サブディレクトリにマウントされます。
- サブディレクトリが NAS ファイルシステムのルートディレクトリに存在しない場合、デフォルトでシステムにより自動的にサブディレクトリが作成されます。
- このパラメーターはオプションです。 デフォルトでは、NAS ボリュームは NAS ファイルシステムのルートディレクトリにマウントされます。
- 権限: マウントディレクトリのアクセス権限を設定します。 たとえば、このパラメーターを 755、644 または 777 に設定できます。
- NAS ボリュームを NAS サブディレクトリにマウントする場合にのみ、このパラメーターを設定できます。 NAS ボリュームを NAS ルートディレクトリにマウントする場合は、このパラメーターを設定できません。
- このパラメーターはオプションです。 デフォルトでは、NAS ファイルシステムへの元のアクセス権限が使用されます。
- バージョン: ボリュームのバージョンを設定します。
- タグ: ボリュームにタグを追加します。
- [作成] をクリックします。
手順 2: PVC の作成
nas-pvc.yaml ファイルを使用して、以下のように PVC を作成します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
storageClassName: nas
resources:
requests:
storage: 5Gi
手順 3: ポッドの作成
nas-pod.yaml ファイルを使用して、以下のようにポッドを作成します。
apiVersion: v1
kind: Pod
metadata:
name: "flexvolume-nas-example"
spec:
containers:
- name: "nginx"
image: "nginx"
volumeMounts:
- name: pvc-nas
mountPath: "/data"
volumes:
- name: pvc-nas
persistentVolumeClaim:
claimName: pvc-nas
手順 1: NAS ファイルシステムの作成
NAS コンソール にログインし、NAS ファイルシステムを作成します。
たとえば、お使いの NAS ファイルシステムのマウントポイントが 055f84ad83-ixxxx.cn-hangzhou.nas.aliyuncs.com
であると仮定します。
手順 2: PV の作成
NAS ボリュームを、オーケストレーションテンプレート、または Alibaba Cloud Container Service により作成できます。
- オーケストレーションテンプレートを使用した NAS ボリュームの作成
nas-pv.yaml ファイルを使用して PV を作成します。
次のコマンドを実行して、NAS PV を作成します。
root@master # cat << EOF |kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: nas spec: capacity: storage: 8Gi accessModes: - ReadWriteMany mountOptions: - nolock,tcp,noresvport - nfsvers=3 persistentVolumeReclaimPolicy: Retain nfs: path: / server: 055f84ad83-ixxxx.cn-hangzhou.nas.aliyuncs.com EOF
- Container Service コンソールでの NAS ボリュームの作成
詳しくは、「PV および PVC の利用」をご参照ください。
手順 2: PVC の作成
PV のバインドをリクエストする PVC を作成します。
root@master # cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nasclaim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 8Gi
EOF
手順 3: ポッドの作成
マウントを宣言するアプリケーションを作成し、ボリュームを使用します。
root@master # cat << EOF |kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: registry.aliyuncs.com/spacexnice/netdia:latest
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: nasclaim
EOF
NAS ファイルシステムは、ポッドで実行するアプリケーションへ正常にマウントされました。
動的ボリューム
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas
mountOptions:
- nolock,tcp,noresvport
- vers=3
provisioner: alicloud/nas
reclaimPolicy: Retain
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: alicloud-nas-controller
namespace: kube-system
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: alicloud-nas-controller
spec:
tolerations:
- effect: NoSchedule
operator: Exists
key: node-role.kubernetes.io/master
- effect: NoSchedule
operator: Exists
key: node.cloudprovider.kubernetes.io/uninitialized
nodeSelector:
node-role.kubernetes.io/master: ""
serviceAccount: admin
containers:
- name: alicloud-nas-controller
image: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v3.1.0-k8s1.11
volumeMounts:
- mountPath: /persistentvolumes
name: nfs-client-root
env:
- name: PROVISIONER_NAME
value: alicloud/nas
- name: NFS_SERVER
value: 0cd8b4a576-mmi32.cn-hangzhou.nas.aliyuncs.com
- name: NFS_PATH
value: /
volumes:
- name: nfs-client-root
flexVolume:
driver: alicloud/nas
options:
path: /
server: 0cd8b4a576-mmi32.cn-hangzhou.nas.aliyuncs.com
vers: "3"
動的ボリュームの使用
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
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: "/usr/share/nginx/html/"
name: html