苦戦したのでメモ。
既に 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 が書き込まれれば成功。