EKS永続ボリューム設定方法

目的

K8Sはデータを保持することが出来ないため、データを保持する場合は永続ボリュームを使用する必要がある。
今回は永続ボリュームにEFSを使用する方法を記載する。

前提

  • AWS上でEFSが作成済みであること
  • AWS上でEKSが作成済みであること
  • kubectlコマンドが実行可能であること

EFSでマウント先のディレクトリを作成する。

  1. EFSに接続できるEC2にSSHでログインして、EFSのマウント先を作成する。

    sudo mkdir efs
  2. EFSをマウントする。

    sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-XXXXX.efs.ap-northeast-1.amazonaws.com:/ /mnt/efs

    fs-XXXXXの部分は自分の環境に合わせて変更する

  3. EFSにK8Sからマウントするディレクトリを作成する。

    sudo mkdir /mnt/efs/data

EKSにEFSのCSIドライバーをインストールする

  1. kubectlコマンドが使用可能な端末にSSHログインして、以下のコマンドドライバーをインストールする。

    kubectl apply -k 'github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.1'
  2. 以下のコマンドでドライバーが起動しているか確認する。

    kubectl get po -n kube-system


    状態が「Running」となっていることを確認する。

EKSでマウント先ボリュームの定義を作成する。

  1. PersistentVolume用のyamlファイルを作成する。
    作成ファイル:test-pv-volume.yaml

    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: test-pv-volume
      namespace: test
    spec:
      storageClassName: test
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: efs.csi.aws.com
        volumeHandle: fs-XXXXX:/data

    fs-XXXXXの部分は自分の環境に合わせて変更する

  2. kubectlコマンドでボリューム定義を作成する。

    kubectl apply -f test-pv-volume.yaml
  3. PersistentVolumeClaim用のyamlファイルを作成する。
    作成ファイル:test-pv-claim.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: test-pv-claim
    namespace: test
    spec:
    storageClassName: test
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 5Gi
  4. kubectlコマンドでボリューム要求定義を作成する。

    kubectl apply -f test-pv-claim.yam

K8SにリリースしたアプリからEFSをマウントする。

  1. kubectlコマンドが使用可能な端末にSSHログインして確認のため、nginxの「/usr/share/nginx/html」をマウントしたyamlファイルを作成する。
    作成ファイル:test-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: test-deployment
    namespace: test
    spec:
    selector:
    matchLabels:
    app: test
    template:
    metadata:
    labels:
    app: test
    spec:
    containers:
    - name: test
    image: nginx:latest
    volumeMounts:
    - name: test-persistent-storage
    mountPath: /usr/share/nginx/html
    volumes:
    - name: test-persistent-storage
    persistentVolumeClaim:
    claimName: test-pv-claim
  2. kubectlコマンドでnginxをデプロイする

    kubectl apply -f test-deployment.yaml
  3. EFSに接続できるEC2にSSHでログインして、EFSのマウント先に適当にファイルを作成する。
    sudo vi /mnt/efs/data/index.html

    作成ファイル:index.html

    hello eks
  4. kubectlコマンドが使用可能な端末にSSHログインして、先ほどデプロイしたPodに入る。

    kubectl exec -it test-deployment-55c766d78d-fxgt5 /bin/bash -n test

    test-deployment-55c766d78dの部分は各環境に合わせて変更する

  5. Pod内で以下のコマンドを実行し、「hello eks」が表示されれば確認完了。

    curl localhost

    >hello eks

Smallitのサービス