苦戦したのでメモ。
既に EFS は同じ VPC 上の EC2 ホストにマウントして使えている状態。
で、それを EKS ノードにもマウントしたかった。
まずは eksctl で EKS cluster をつくるために eks-cluster-config.yaml を書く。
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-cluster
region: ap-northeast-1
version: "1.30"
vpc:
id: vpc-xxxxx
subnets:
private:
ap-northeast-1a:
id: subnet-yyyyy
ap-northeast-1c:
id: subnet-zzzzz
nodeGroups:
- name: ng-1
instanceType: m5.large
desiredCapacity: 1
minSize: 1
maxSize: 1
privateNetworking: true
securityGroups:
attachIDs: [sg-aaaaa]
ssh:
allow: true
publicKeyName: mykey001
volumeSize: 50
volumeType: gp2
labels:
role: worker
つづいて kubectl でストレージクラスを作成するための efs-storage-class.yaml を書く。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: fs-bbbbb
directoryPerms: "777"
gidRangeStart: "500"
gidRangeEnd: "2000"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: fs-bbbbb
そしたら eksctl で EKS cluster を作成。
クラスタとノード作成後、kubectl を使うために .kube/config を生成する。
eksctl create cluster -f eks-cluster-config.yaml aws eks update-kubeconfig --region ap-northeast-1 --name my-cluster
クラスタに EFS CSI Driver をインストールする。
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"
ドライバーをインストールしたらストレージクラスを作成。
kubectl apply -f efs-storage-class.yaml
最後に EFS に書き込む Pod を作る。
そのために test-pod.yaml を書く。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-claim
spec:
accessModes:
- ReadWriteMany
storageClassName: efs-sc
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: efs-test
spec:
containers:
- name: app
image: almalinux
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date) >> /data/out.txt; sleep 5; done"]
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: efs-claim
いざ pod を起動。
kubectl apply -f test-pod.yaml
これで EFS に out.txt が書き込まれれば成功。