Mountpoint for Amazon S3 드라이버 배포하기
Mountpoint for Amazon S3 드라이버 배포하기 (Deploy the Mountpoint for Amazon S3 driver)
Mountpoint for Amazon S3 CSI(Container Storage Interface) 드라이버를 사용하면 Kubernetes 애플리케이션이 파일 시스템 인터페이스를 통해 Amazon S3 객체에 접근할 수 있어요. 애플리케이션 코드를 전혀 바꾸지 않고도 높은 집계 처리량을 얻을 수 있죠.
이 절차는 Mountpoint for Amazon S3 CSI Amazon EKS 드라이버를 배포하는 방법을 보여줘요. 진행하기 전에 고려 사항을 검토하세요.
출처: 문서
본문
사전 요구 사항 (Prerequisites)
- 클러스터용 기존 AWS IAM(Identity and Access Management) OIDC(OpenID Connect) 프로바이더. 이미 있는지 확인하거나 만들려면 클러스터용 IAM OIDC 프로바이더 생성하기를 참고하세요.
- 기기 또는 AWS CloudShell에 AWS CLI 버전
2.12.3이상이 설치되고 구성되어 있어야 해요. - 기기 또는 AWS CloudShell에
kubectl명령줄 도구가 설치되어 있어야 해요. 버전은 클러스터의 Kubernetes 버전과 같거나 최대 한 마이너 버전 앞뒤일 수 있어요. 예를 들어 클러스터 버전이1.29라면kubectl버전1.28,1.29,1.30을 사용할 수 있어요.kubectl을 설치하거나 업그레이드하려면 kubectl 및 eksctl 설정하기를 참고하세요.
1단계: IAM 정책 생성
Mountpoint for Amazon S3 CSI 드라이버는 파일 시스템과 상호작용하기 위해 Amazon S3 권한이 필요해요. 이 섹션은 필요한 권한을 부여하는 IAM 정책을 만드는 방법을 보여줘요.
다음 예시 정책은 Mountpoint에 대한 IAM 권한 권장 사항을 따릅니다. 또는 AWS 관리형 정책 AmazonS3FullAccess를 사용할 수 있지만, 이 관리형 정책은 Mountpoint에 필요한 것보다 더 많은 권한을 부여해요.
Mountpoint에 대한 권장 권한에 대한 자세한 내용은 GitHub의 Mountpoint IAM permissions를 참고하세요.
- https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Policies를 선택합니다.
- Policies 페이지에서 Create policy를 선택합니다.
- Policy editor에서 JSON을 선택합니다.
- Policy editor 아래에 다음을 복사해 붙여넣습니다.
중요
amzn-s3-demo-bucket1을 자신의 Amazon S3 버킷 이름으로 바꾸세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "MountpointFullBucketAccess",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket1"
]
},
{
"Sid": "MountpointFullObjectAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket1/*"
]
}
]
}
디렉터리 버킷(Directory buckets)은 Amazon S3 Express One Zone 스토리지 클래스와 함께 도입됐으며, 일반 목적 버킷과 다른 인증 메커니즘을 사용해요. s3:* 작업 대신 s3express:CreateSession 작업을 사용해야 해요. 디렉터리 버킷에 대한 자세한 내용은 Amazon S3 사용 설명서의 디렉터리 버킷을 참고하세요.
다음은 디렉터리 버킷에 사용할 최소 권한 정책 예시예요.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3express:CreateSession",
"Resource": "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket1--usw2-az1--x-s3"
}
]
}
- Next를 선택합니다.
- Review and create 페이지에서 정책 이름을 지정합니다. 이 예시 워크스루는
AmazonS3CSIDriverPolicy라는 이름을 사용해요. - Create policy를 선택합니다.
2단계: IAM 역할 생성
Mountpoint for Amazon S3 CSI 드라이버는 파일 시스템과 상호작용하기 위해 Amazon S3 권한이 필요해요. 이 섹션은 이러한 권한을 위임할 IAM 역할을 만드는 방법을 보여줘요. 이 역할을 만들려면 다음 도구 중 하나를 사용할 수 있어요: eksctl, AWS Management Console, AWS CLI.
참고
IAM 정책
AmazonS3CSIDriverPolicy는 이전 섹션에서 만들었어요.
eksctl
eksctl로 Mountpoint for Amazon S3 CSI 드라이버 IAM 역할을 만들려면 다음 명령을 실행해요. 이 명령은 IAM 역할과 Kubernetes 서비스 계정을 만들고, AmazonS3CSIDriverPolicy IAM 정책을 역할에 연결하며, Kubernetes 서비스 계정(s3-csi-controller-sa)에 IAM 역할의 ARN을 어노테이션하고, IAM 역할의 신뢰 정책에 Kubernetes 서비스 계정 이름을 추가해요.
CLUSTER_NAME=my-cluster
REGION=region-code
ROLE_NAME=AmazonEKS_S3_CSI_DriverRole
POLICY_ARN=AmazonEKS_S3_CSI_DriverRole_ARN
eksctl create iamserviceaccount \
--name s3-csi-driver-sa \
--namespace kube-system \
--cluster $CLUSTER_NAME \
--attach-policy-arn $POLICY_ARN \
--approve \
--role-name $ROLE_NAME \
--region $REGION \
--role-only
AWS Management Console
- https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Roles를 선택합니다.
- Roles 페이지에서 Create role을 선택합니다.
- Select trusted entity 페이지에서 다음을 수행합니다.
- Trusted entity type 섹션에서 Web identity를 선택합니다.
- Identity provider에서 클러스터의 OpenID Connect 프로바이더 URL(Amazon EKS의 Overview 아래에 표시됨)을 선택합니다.
- URL이 표시되지 않으면 사전 요구 사항을 검토합니다.
- Audience에서
sts.amazonaws.com을 선택합니다. - Next를 선택합니다.
- Add permissions 페이지에서 다음을 수행합니다.
- Filter policies 상자에 AmazonS3CSIDriverPolicy를 입력합니다.
참고
이 정책은 이전 섹션에서 만들었어요.
- 검색 결과로 반환된
AmazonS3CSIDriverPolicy결과 왼쪽의 확인란을 선택합니다. - Next를 선택합니다.
- Filter policies 상자에 AmazonS3CSIDriverPolicy를 입력합니다.
- Name, review, and create 페이지에서 다음을 수행합니다.
- Role name에 AmazonEKS_S3_CSI_DriverRole 같은 역할의 고유 이름을 입력합니다.
- Add tags (Optional) 아래에서 태그를 키-값 쌍으로 연결해 역할에 메타데이터를 추가합니다. IAM에서 태그 사용에 대한 자세한 내용은 IAM 사용 설명서의 IAM 리소스 태그 지정하기를 참고합니다.
- Create role을 선택합니다.
- 역할이 생성된 후 콘솔에서 역할을 선택해 편집을 위해 엽니다.
- Trust relationships 탭을 선택한 다음 Edit trust policy를 선택합니다.
- 다음 줄과 유사한 줄을 찾습니다.
"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" - 이전 줄 끝에 쉼표를 추가한 다음, 그 뒤에 다음 줄을 추가합니다.
region-code를 클러스터가 있는 AWS 리전으로 바꾸고,EXAMPLED539D4633E53DE1B71EXAMPLE을 클러스터의 OIDC 프로바이더 ID로 바꿉니다."oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa" Condition연산자가"StringEquals"로 설정되어 있는지 확인합니다.- Update policy를 선택해 마칩니다.
AWS CLI
- 클러스터의 OIDC 프로바이더 URL을 확인해요.
my-cluster를 클러스터 이름으로 바꾸세요. 명령 출력이None이면 사전 요구 사항을 검토하세요.
예시 출력은 다음과 같아요.aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output texthttps://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE - Kubernetes 서비스 계정에
AssumeRoleWithWebIdentity작업을 부여하는 IAM 역할을 만들어요. 다음 내용을aws-s3-csi-driver-trust-policy.json이라는 파일에 복사해요.111122223333을 계정 ID로,EXAMPLED539D4633E53DE1B71EXAMPLE과region-code를 이전 단계에서 반환된 값으로 바꾸세요.{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa", "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] } - 역할을 만들어요.
AmazonEKS_S3_CSI_DriverRole을 다른 이름으로 바꿀 수 있지만, 바꾸면 이후 단계에서도 꼭 바꾸세요.aws iam create-role \ --role-name AmazonEKS_S3_CSI_DriverRole \ --assume-role-policy-document file://"aws-s3-csi-driver-trust-policy.json" - 다음 명령으로 이전에 만든 IAM 정책을 역할에 연결해요.
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3CSIDriverPolicy \ --role-name AmazonEKS_S3_CSI_DriverRole참고
IAM 정책
AmazonS3CSIDriverPolicy는 이전 섹션에서 만들었어요. - 드라이버를 Amazon EKS 추가 기능으로 설치한다면 이 단계를 건너뛰세요. 드라이버의 자체 관리형 설치의 경우, 만든 IAM 역할의 ARN으로 어노테이션된 Kubernetes 서비스 계정을 만들어요. 다음 내용을
mountpoint-s3-service-account.yaml이라는 파일에 저장해요.111122223333을 계정 ID로 바꾸세요.--- apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-mountpoint-s3-csi-driver name: s3-csi-driver-sa namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole - 클러스터에 Kubernetes 서비스 계정을 만들어요. Kubernetes 서비스 계정(
s3-csi-driver-sa)은 만든AmazonEKS_S3_CSI_DriverRoleIAM 역할로 어노테이션돼요.kubectl apply -f mountpoint-s3-service-account.yaml참고
이 절차에서 플러그인을 배포하면
s3-csi-driver-sa라는 서비스 계정을 만들고 이를 사용하도록 구성돼요.
3단계: Mountpoint for Amazon S3 CSI 드라이버 설치
Amazon EKS 추가 기능을 통해 Mountpoint for Amazon S3 CSI 드라이버를 설치할 수 있어요. 추가 기능을 클러스터에 추가하려면 다음 도구를 사용할 수 있어요: eksctl, AWS Management Console, AWS CLI.
또는 Mountpoint for Amazon S3 CSI 드라이버를 자체 관리형 설치로 설치할 수 있어요. 자체 관리형 설치 지침은 GitHub의 Installation(설치)을 참고하세요.
v1.8.0부터 CSI 드라이버의 Pod에 대해 허용할 taint를 구성할 수 있어요. 이를 위해 node.tolerations로 허용할 커스텀 taint 집합을 지정하거나 node.tolerateAllTaints로 모든 taint를 허용할 수 있어요. 자세한 내용은 Kubernetes 문서의 Taints and Tolerations를 참고하세요.
eksctl
eksctl로 Amazon S3 CSI 추가 기능을 추가하려면 다음 명령을 실행해요. my-cluster를 클러스터 이름으로, 111122223333을 계정 ID로, AmazonEKS_S3_CSI_DriverRole을 이전에 만든 IAM 역할 이름으로 바꾸세요.
eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster my-cluster \
--service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole --force
--force 옵션을 제거하고 Amazon EKS 추가 기능 설정 중 어느 하나가 기존 설정과 충돌하면 Amazon EKS 추가 기능 업데이트가 실패하고 충돌 해결을 돕는 오류 메시지가 표시돼요. 이 옵션을 지정하기 전에 Amazon EKS 추가 기능이 직접 관리해야 하는 설정을 관리하지 않는지 확인하세요. 이 옵션으로 해당 설정이 덮어써지기 때문이에요. 이 설정의 다른 옵션에 대한 자세한 내용은 eksctl 문서의 Addons를 참고하세요. Amazon EKS Kubernetes 필드 관리에 대한 자세한 내용은 Amazon EKS 추가 기능에 대해 커스터마이징할 수 있는 필드 결정하기를 참고하세요.
eksctl을 구성 파일로 커스터마이징할 수 있어요. 자세한 내용은 eksctl 문서의 구성 값 작업하기를 참고하세요. 다음 예시는 모든 taint를 허용하는 방법을 보여줘요.
# config.yaml
...
addons:
- name: aws-mountpoint-s3-csi-driver
serviceAccountRoleARN: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
configurationValues: |-
node:
tolerateAllTaints: true
AWS Management Console
- Amazon EKS 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Clusters를 선택합니다.
- Mountpoint for Amazon S3 CSI 추가 기능을 구성하려는 클러스터 이름을 선택합니다.
- Add-ons 탭을 선택합니다.
- Get more add-ons를 선택합니다.
- Select add-ons 페이지에서 다음을 수행합니다.
- Amazon EKS-addons 섹션에서 Mountpoint for Amazon S3 CSI Driver 확인란을 선택합니다.
- Next를 선택합니다.
- Configure selected add-ons settings 페이지에서 다음을 수행합니다.
- 사용하려는 Version을 선택합니다.
- Select IAM role에서 Mountpoint for Amazon S3 CSI 드라이버 IAM 정책을 연결한 IAM 역할 이름을 선택합니다.
- (선택 사항) Optional configuration settings를 확장한 후 Conflict resolution method를 업데이트합니다. Override를 선택하면 기존 추가 기능의 설정 중 하나 이상이 Amazon EKS 추가 기능 설정으로 덮어써질 수 있어요. 이 옵션을 활성화하지 않고 기존 설정과 충돌이 있으면 작업이 실패해요. 결과 오류 메시지로 충돌을 해결할 수 있어요. 이 옵션을 선택하기 전에 Amazon EKS 추가 기능이 직접 관리해야 하는 설정을 관리하지 않는지 확인하세요.
- (선택 사항) Optional configuration settings를 확장한 후 Configuration values 필드에서 허용 목록(tolerations)을 구성합니다.
- Next를 선택합니다.
- Review and add 페이지에서 Create를 선택합니다. 추가 기능 설치가 완료되면 설치된 추가 기능이 표시됩니다.
AWS CLI
AWS CLI로 Mountpoint for Amazon S3 CSI 추가 기능을 추가하려면 다음 명령을 실행해요. my-cluster를 클러스터 이름으로, 111122223333을 계정 ID로, AmazonEKS_S3_CSI_DriverRole을 이전에 만든 역할 이름으로 바꾸세요.
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
--service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
명령을 --configuration-values 플래그로 커스터마이징할 수 있어요. 다음 대체 예시는 모든 taint를 허용하는 방법을 보여줘요.
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
--service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole \
--configuration-values '{"node":{"tolerateAllTaints":true}}'
4단계: Mountpoint for Amazon S3 구성
대부분의 경우 버킷 이름만으로 Mountpoint for Amazon S3를 구성할 수 있어요. Mountpoint for Amazon S3 구성 지침은 GitHub의 Mountpoint for Amazon S3 구성하기(Configuring Mountpoint for Amazon S3)를 참고하세요.
5단계: 샘플 애플리케이션 배포
기존 Amazon S3 버킷에 드라이버로 정적 프로비저닝을 배포할 수 있어요. 자세한 내용은 GitHub의 Static provisioning(정적 프로비저닝)을 참고하세요.