苦戦したのでメモ。
既に EFS は同じ VPC 上の EC2 ホストにマウントして使えている状態。
で、それを EKS ノードにもマウントしたかった。
まずは eksctl で EKS cluster をつくるために eks-cluster-config.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 25 26 27 28 29 30 31 32 33 | 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 を書く。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 を生成する。
1 2 | eksctl create cluster -f eks-cluster-config.yaml aws eks update-kubeconfig --region ap-northeast-1 --name my-cluster |
クラスタに EFS CSI Driver をインストールする。
1 | kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master" |
ドライバーをインストールしたらストレージクラスを作成。
1 | kubectl apply -f efs-storage-class.yaml |
最後に EFS に書き込む Pod を作る。
そのために test-pod.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 25 26 27 28 29 | 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 を起動。
1 | kubectl apply -f test -pod.yaml |
これで EFS に out.txt が書き込まれれば成功。