본문 바로가기

VMware/TANZU

(DK) TANZU AWS DYNAMIC EFS 연동

728x90

EFS는 POD 형태로 설치가 필요 하며 두가지 방식이 있다

1번은 현재 EOL이 나온 상태이며, 2번째로 진행이 필요 ( 여기서는 2번째 방식으로 진행을 함)

 

1. https://github.com/kubernetes-retired/external-storage/tree/master/aws/efs

 

GitHub - kubernetes-retired/external-storage: [EOL] External storage plugins, provisioners, and helper libraries

[EOL] External storage plugins, provisioners, and helper libraries - GitHub - kubernetes-retired/external-storage: [EOL] External storage plugins, provisioners, and helper libraries

github.com

2. https://github.com/kubernetes-sigs/aws-efs-csi-driver

 

GitHub - kubernetes-sigs/aws-efs-csi-driver: CSI Driver for Amazon EFS https://aws.amazon.com/efs/

CSI Driver for Amazon EFS https://aws.amazon.com/efs/ - GitHub - kubernetes-sigs/aws-efs-csi-driver: CSI Driver for Amazon EFS https://aws.amazon.com/efs/

github.com

 


 

해당 하는 EC2 WORKER NODE에 설정되어 있는 SG에 NFS용 SG를 추가 해준다.(SG 신규 생성)

기존 SG에 넣으니, 삭제가 되는 거 같다. 그래서 아래처럼 SG를 새로 생성 후 추가가 필요 하다.

EFS 생성

 

Create file system을 클릭 하면

VPC를 선택 할 수 있으며, 멀티 리전으로 할지, 하나의 리전으로 할지 선택하게 되어 있다. 멀티 리전으로 설정을 하면 해당하는 리전의 AZ의 모든 SUBNET이 연동이 된다.

멀티리전으로 선택시 아래와 같이 모든 AZ가 표시 되는 것을 확인 할 수 있다. 여기서 중요한점은  Security Group 이다.

WORKER NODE에서만 NFS를 붙이길 원한다면 TANZU가 배포된 NODE의 SG를 선택을 해준다.

Manage를 클릭 하면 아래와 같이 SG를 선택 할 수 있게 나온다. 아까 생성 후 WORKER NODE에 붙여둔 SG를 선택 해 준다.

 

POLICY 를 생성 해준다.

### IAM EFS_CSI_DRIVER JSON 다운로드
curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/v1.3.2/docs/iam-policy-example.json

### IAM POLICY 등록 및 Policies에 추가 확인
aws iam create-policy \
--policy-name AmazonEKS_EFS_CSI_Driver_Policy \
--policy-document file://iam-policy-example.json

IAM에서 POLICY 생성 확인

Roles에서 TKG를 찾는다.

생성한 iam-polocy를 Permitions에 넣는다.

HELM을 배포하기 전에 ServiceAccount를 생성한다.

### SA 생성

apiVersion: v1
kind: ServiceAccount
metadata:
  name: efs-csi-controller-sa
  namespace: kube-system
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  annotations:
    tkg.amazonaws.com/role-arn: arn:aws:iam::{Account ID}:role/nodes.tkg.cloud.vmware.com

HELM으로 우선 PROVISIONER를 설치 해준다.

helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/

helm repo update

helm upgrade -i aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver \
    --namespace kube-system \
    --set image.repository=602401143452.dkr.ecr.{해당 리전}.amazonaws.com/eks/aws-efs-csi-driver \
    --set controller.serviceAccount.create=false \
    --set controller.serviceAccount.name=efs-csi-controller-sa

아래처럼 EFS 관련 파드가 생성 되는 것을 확인 할 수 있다.

EFS가 구성이 완료 되었으면 TKG 접속 후 SC & PVC & POD를 생성 해준다.

### SC

cat << EOF | tee sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com
mountOptions:
  - tls
parameters:
  provisioningMode: efs-ap
  fileSystemId: {file system id}
  directoryPerms: "700"
  gidRangeStart: "1000"
  gidRangeEnd: "2000"
  basePath: "/dynamic_provisioning"
EOF

### POD
cat << EOF | tee nginx.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-storage-claim
  namespace: storage
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: storage
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"]
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        volumeMounts:
          - name: test
            mountPath: "/usr/share/nginx/html"
          - name: test
            mountPath: /data
      volumes:
        - name: test
          persistentVolumeClaim:
            claimName: efs-storage-claim
EOF

 

Accesss Points에 새롭게 생성이 되는 것을 확인 할 수 있다.

.

 

### pv 삭제 및 생성이 잘되는지 확인
kubectl logs efs-csi-controller-9b4974958-h2smn -n kube-system  csi-provisioner --tail 10

### 기록도 잘되는지 확인
kubectl exec nginx-7c9f88d947-jntrz -n storage -- bash -c "cat /data/out"

반응형