目的
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
K8Sはデータを保持することが出来ないため、データを保持する場合は永続ボリュームを使用する必要がある。
今回は永続ボリュームにEFSを使用する方法を記載する。
前提
- AWS上でEFSが作成済みであること
- AWS上でEKSが作成済みであること
- kubectlコマンドが実行可能であること
EFSでマウント先のディレクトリを作成する。
- EFSに接続できるEC2にSSHでログインして、EFSのマウント先を作成する。
|
<span>sudo mkdir efs</span> |
- EFSをマウントする。
|
<span>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</span> |
※fs-XXXXX
の部分は自分の環境に合わせて変更する
- EFSにK8Sからマウントするディレクトリを作成する。
|
<span>sudo mkdir /mnt/efs/data</span> |
EKSにEFSのCSIドライバーをインストールする
- kubectlコマンドが使用可能な端末にSSHログインして、以下のコマンドドライバーをインストールする。
|
<span>kubectl apply -k 'github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.1'</span> |
- 以下のコマンドでドライバーが起動しているか確認する。
|
kubectl get po -n kube-system |

状態が「Running」となっていることを確認する。
EKSでマウント先ボリュームの定義を作成する。
- 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
の部分は自分の環境に合わせて変更する
- kubectlコマンドでボリューム定義を作成する。
|
kubectl apply -f test-pv-volume.yaml |
- 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 |
- kubectlコマンドでボリューム要求定義を作成する。
|
<span>kubectl apply -f test-pv-claim.yam</span> |
K8SにリリースしたアプリからEFSをマウントする。
- kubectlコマンドが使用可能な端末にSSHログインして確認のため、nginxの「/usr/share/nginx/html」をマウントしたyamlファイルを作成する。
作成ファイル:test-deployment.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
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 |
- kubectlコマンドでnginxをデプロイする
|
<span>kubectl apply -f test-deployment.yaml</span> |
- EFSに接続できるEC2にSSHでログインして、EFSのマウント先に適当にファイルを作成する。
|
<span>sudo vi /mnt/efs/data/index.html</span> |
作成ファイル:index.html
- kubectlコマンドが使用可能な端末にSSHログインして、先ほどデプロイしたPodに入る。
|
<span>kubectl exec -it test-deployment-55c766d78d-fxgt5 /bin/bash -n test</span> |
※test-deployment-55c766d78d
の部分は各環境に合わせて変更する
- Pod内で以下のコマンドを実行し、「hello eks」が表示されれば確認完了。
|
<span>curl localhost</span> |
>hello eks
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>