[프로젝트] 5일차 - RDS 수정과 EFS 설정

황서희·2023년 3월 23일
0
post-thumbnail

RDS를 프라이빗 서브넷에서만 두었더니 외부에서 액세스하기 어려운 문제가 발생하였다. 원래는 배스천 호스트를 사용해서 접속하게 하려고 하였지만, 개발하시는 분들이 EC2 이용해서 RDS를 한번 더 접속하기 귀찮으실까봐... 그냥 프라이빗 서브넷 중 하나를 퍼블릭 서브넷으로 바꾸는 것으로 해결하였다.

그리고 EFS 를 설정하였다. EFS가 Multi AZ를 지원하기 때문이다. 처음에 EBS로 하지 말고 클러스터를 만들 때 부터 EFS로 하는게 맞았겠지만, 그 때는 이 차이점을 몰랐어서.. 따로 세팅해 주었다.

공식 문서 를 참고해서 진행하였다.

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json

aws iam create-policy \
    --policy-name AmazonEKS_EFS_CSI_Driver_Policy \
    --policy-document file://iam-policy-example.json

eksctl create iamserviceaccount \
    --cluster my-cluster \
    --namespace kube-system \
    --name efs-csi-controller-sa \
    --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_EFS_CSI_Driver_Policy \
    --approve \
    --region region-code


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

image.repository의 컨테이너 주소는 링크되어있는 문서를 통해 바꿨다. 나는 ap-northeast-2를 사용하고 있으니 602401143452.dkr.ecr.ap-northeast-2.amazonaws.com 로 사용하면 된다.

vpc_id=$(aws eks describe-cluster \
    --name my-cluster \
    --query "cluster.resourcesVpcConfig.vpcId" \
    --output text)

cidr_range=$(aws ec2 describe-vpcs \
    --vpc-ids $vpc_id \
    --query "Vpcs[].CidrBlock" \
    --output text \
    --region region-code)

security_group_id=$(aws ec2 create-security-group \
    --group-name MyEfsSecurityGroup \
    --description "My EFS security group" \
    --vpc-id $vpc_id \
    --output text)

aws ec2 authorize-security-group-ingress \
    --group-id $security_group_id \
    --protocol tcp \
    --port 2049 \
    --cidr $cidr_range

file_system_id=$(aws efs create-file-system \
    --region region-code \
    --performance-mode generalPurpose \
    --query 'FileSystemId' \
    --output text)

kubectl get nodes

k get nodes를 통해 노드의 주소를 얻었다면,

aws ec2 describe-subnets \
    --filters "Name=vpc-id,Values=$vpc_id" \
    --query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \
    --output table

해당 명령어를 사용하여 노드의 IP주소가 속해 있는 서브넷 아이디를

aws efs create-mount-target \
    --file-system-id $file_system_id \
    --subnet-id subnet-EXAMPLEe2ba886490 \
    --security-groups $security_group_id

의 subnet-id 부분에 넣으면 된다. 나는 노드가 두 개이므로 두 번 진행하였다.

그리고 스토리지클래스와 PVC도 작성을 완료하였다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-pvc
spec:
  resources:
    requests:
      storage: 1Gi
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
parameters:
  provisioningMode: efs-ap
  fileSystemId: fs-046fc26e91f93b2c1
  directoryPerms: "700"

내일은 오전에 테스트 웹 코드 작성을 완료하고, github actions를 이용한 CI까지 해볼 예정이다. 물론 웹과 RDS의 연동이 잘.. 된다면의 말이지만...

profile
다 아는 건 아니어도 바라는 대로

0개의 댓글