728x90
EKS에서 EFS연동 하는 부분은 간단하다.
1. 사전 설치
- chocolatey
- eksctl
- kubectl
## chocolatey 인스톨 chocolatey install -y eksctl aws-iam-authenticator ## eksctl 인스톨 curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp sudo mv /tmp/eksctl /usr/local/bin eksctl version ## kubectl 인스톨 curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.20.4/2021-04-12/bin/linux/amd64/kubectl openssl sha1 -sha256 kubectl chmod +x ./kubectl mv kubectl /usr/local/bin/
2. EKS 인스톨
AWS의 EC2에서 생성한 SECRET KEY를 PUTTYGEN에 IMPORT 시킨 후 해당 키 복사



### 기존의 VPC를 사용 할 수 있으나, 새로 생성 하는게 신상에 좋다.. PUBLIC IP를 ATTACH 못하는 에러가 나오니, ### 별도로 CLOUDFORMATION을 돌려서 VPC를 내가 원하는 IP대역으로 구성 하던가 할 필요성이 있다. ### EKS 실행 eksctl create cluster \ --name aws-eks \ --region us-east-2 \ --nodegroup-name aws-node \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --ssh-public-key huntedhappy.pub \ --with-oidc \ --managed
실행하면 CloudFormation이 자동적으로 돌아간다.

IAM에서 OIDC가 생성 되었는지 확인

### 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쪽에서 생성 된 것을 확인 할 수 있다.

Storage Account 실행
### SA 생성 eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster aws-eks \ --attach-policy-arn arn:aws:iam::{ACCOUNT ID}:policy/AmazonEKS_EFS_CSI_Driver_Policy \ --approve \ --override-existing-serviceaccounts \ --region {해당 REGION}


OIDC를 통해 EFS의 제어를 할 수 있는 역할이 생성 된다.

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.{해당 REGION}.amazonaws.com/eks/aws-efs-csi-driver \ --set controller.serviceAccount.create=false \ --set controller.serviceAccount.name=efs-csi-controller-sa


EFS 생성 (UI에서 해도 됨)
### VPC ID 확인 vpc_id=$(aws eks describe-cluster \ --name {EKS-CLUSTER} \ --query "cluster.resourcesVpcConfig.vpcId" \ --output text) ### CIDR RAGNE 확인 cidr_range=$(aws ec2 describe-vpcs \ --vpc-ids $vpc_id \ --query "Vpcs[].CidrBlock" \ --output text) ### SECURITY group 생성 security_group_id=$(aws ec2 create-security-group \ --group-name MyEfsSecurityGroup \ --description "My EFS security group" \ --vpc-id $vpc_id \ --output text) ### SECURITY group EC2 ASSIGN aws ec2 authorize-security-group-ingress \ --group-id $security_group_id \ --protocol tcp \ --port 2049 \ --cidr $cidr_range ### EFS 파일 시스템 확인 file_system_id=$(aws efs create-file-system \ --region us-east-2 \ --performance-mode generalPurpose \ --query 'FileSystemId' \ --output text) ### EKS 노드 확인 kubectl get nodes ### EKS SUBNET 확인 aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$vpc_id" \ --query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \ --output table ### EFS에 SG 설정 aws efs create-mount-target \ --file-system-id $file_system_id \ --subnet-id subnet-0f9284c97f4980be5 \ --security-groups $security_group_id
동적으로 생성 되는지 확인
## SC cat << EOF | tee sc.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: provisioningMode: efs-ap fileSystemId: {File System ID} directoryPerms: "700" gidRangeStart: "1000" # optional gidRangeEnd: "2000" # optional basePath: "/dynamic_provisioning" # optional EOF ## POD cat << EOF | tee 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-app spec: containers: - name: app image: centos command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"] volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: efs-claim EOF
확인 (동적으로 생성 및 삭제가 잘 되는 것을 확인 할 수 있다.)


ACCESS POINTS도 동적으로 잘 생성 된다.

반응형