본문 바로가기

AWS EKS 실습

EKS를 위한 EFS 생성

EFS 파일 시스템 구성을 위해 VPC 및 해당 VPC와 연결된 IPv4 CIDR 블록과 관련된 환경 변수 집합 정의

CLUSTER_NAME=tango-bmt-eks
VPC_ID=$(aws eks describe-cluster --name $CLUSTER_NAME --query "cluster.resourcesVpcConfig.vpcId" --output text)
CIDR_BLOCK=$(aws ec2 describe-vpcs --vpc-ids $VPC_ID --query "Vpcs[].CidrBlock" --output text)

 

Mount 대상과 연결할 Security Group을 생성한다. 그리고 EKS 클러스터 VPC의 CIDR 블록에 속하는 IP 주소에서 포트 2049에서 NFS 프로토콜을 사용하여 모든 인바운드 트래픽을 허용하는 Security Group에 Ingress 규칙을 추가

 

아래 규칙은 EKS 클러스터의 모든 Worker Node에서 파일 시스템에 대한 NFS 엑세스를 허용한다.

MOUNT_TARGET_GROUP_NAME="tango-bmt-eks"
MOUNT_TARGET_GROUP_DESC="NFS access to EFS from EKS worker nodes"
MOUNT_TARGET_GROUP_ID=$(aws ec2 create-security-group --group-name $MOUNT_TARGET_GROUP_NAME --description "$MOUNT_TARGET_GROUP_DESC" --vpc-id $VPC_ID | jq --raw-output '.GroupId')
aws ec2 authorize-security-group-ingress --group-id $MOUNT_TARGET_GROUP_ID --protocol tcp --port 2049 --cidr $CIDR_BLOCK

 

이제 EFS file system 생성한다.

FILE_SYSTEM_ID=$(aws efs create-file-system | jq --raw-output '.FileSystemId')

 

생성된 파일 시스템 검토

aws efs describe-file-systems --file-system-id $FILE_SYSTEM_ID
{
    "FileSystems": [
        {
            "SizeInBytes": {
                "ValueInIA": 0, 
                "ValueInStandard": 6144, 
                "Value": 6144
            }, 
            "NumberOfMountTargets": 0, 
            "ThroughputMode": "bursting", 
            "CreationToken": "9a2caf3a-ae99-4bcf-a60f-79c6a763cd5f", 
            "Encrypted": false, 
            "Tags": [], 
            "CreationTime": 1620482971.0, 
            "PerformanceMode": "generalPurpose", 
            "FileSystemId": "fs-b4a81ed4", 
            "FileSystemArn": "arn:aws:elasticfilesystem:ap-northeast-2:369647062832:file-system/fs-b4a81ed4", 
            "LifeCycleState": "available", 
            "OwnerId": "369647062832"
        }
    ]
}

 

클러스터 VPC에서 Public Subnet을 식별하고 각 Subnet에서 마운트 대상을 생성하고 해당 마운트 대상을 위헤서 생성 한 Security Group과 연결한다.

TAG1=tag:kubernetes.io/cluster/$CLUSTER_NAME
TAG2=tag:kubernetes.io/role/elb
subnets=($(aws ec2 describe-subnets --filters "Name=$TAG1,Values=shared" "Name=$TAG2,Values=1" | jq --raw-output '.Subnets[].SubnetId'))
for subnet in ${subnets[@]}
do
    echo "creating mount target in " $subnet
    aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $subnet --security-groups $MOUNT_TARGET_GROUP_ID
done

 

aws efs describe-mount-targets --file-system-id $FILE_SYSTEM_ID | jq --raw-output '.MountTargets[].LifeCycleState'

'AWS EKS 실습' 카테고리의 다른 글

11. (보안) EKSCTL을 사용한 eks 구성 (기존 VPC)  (0) 2021.05.08