안녕하세요!!
오늘은 AWS 서비스 중 EKS에서 addon 중 하나인 Amazon ebs csi 드라이버를
설치하는 방법에 대해 소개드리겠습니다.
Addon 이란?
: Kubernetes 애플리케이션에 대한 지원 운영 기능을 제공하는 소프트웨어입니다.
애플리케이션에만 국한되지 않고 에이전트, 드라이버 또한 포함됩니다.
amazon ebs csi 드라이버란?
: Kubernetes 리소스들이 Amazon EBS 스토리지를 이용할 수 있도록 하는 플러그인입니다.
간단하게 말하면 EBS를 Kubernetes의 volume으로 쓸 수 있도록 합니다.
적용 방법
1. OIDC 제공업체 생성
1-1. OIDC제공업체 ID 검색 및 변수 저장
oidc_id=$(aws eks describe-cluster --name {클러스터 이름} --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
1-2. 클러스터 ID를 가진 IAM OIDC 제공업체가 이미 계정에 있는지 확인
(출력이 없다면 1-3 진행)
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
1-3. 클러스터의 IAM OIDC ID 제공업체 생성
eksctl utils associate-iam-oidc-provider --cluster {클러스터 이름} --approve
2. IAM 정책 생성
이름: aws-ebs-csi-driver
권한:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateSnapshot",
"ec2:AttachVolume",
"ec2:DetachVolume",
"ec2:ModifyVolume",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeInstances",
"ec2:DescribeSnapshots",
"ec2:DescribeTags",
"ec2:DescribeVolumes",
"ec2:DescribeVolumesModifications"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": [
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:snapshot/*"
],
"Condition": {
"StringEquals": {
"ec2:CreateAction": [
"CreateVolume",
"CreateSnapshot"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteTags"
],
"Resource": [
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:snapshot/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateVolume"
],
"Resource": "*",
"Condition": {
"StringLike": {
"aws:RequestTag/ebs.csi.aws.com/cluster": "true"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateVolume"
],
"Resource": "*",
"Condition": {
"StringLike": {
"aws:RequestTag/CSIVolumeName": "*"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteVolume"
],
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/ebs.csi.aws.com/cluster": "true"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteVolume"
],
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/CSIVolumeName": "*"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteVolume"
],
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/kubernetes.io/created-for/pvc/name": "*"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteSnapshot"
],
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/CSIVolumeSnapshotName": "*"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DeleteSnapshot"
],
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/ebs.csi.aws.com/cluster": "true"
}
}
}
]
}
참고 : aws-ebs-csi-driver/examples/kubernetes at master · kubernetes-sigs/aws-ebs-csi-driver · GitHub
만약 EBS drive 암호화를 원하는 경우 아래 코드를 추가합니다.
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:CreateGrant"
],
"Resource": "*"
}
참고 : aws-ebs-csi-driver/examples/kubernetes at master · kubernetes-sigs/aws-ebs-csi-driver · GitHub
3. eks에 부여될 IAM 역할 생성( CLI - eksctl 사용 )
eksctl create iamserviceaccount --name ebs-csi-controller-sa --namespace kube-system --cluster {클러스터 이름} \ --role-name "{생성할 역할 이름}" --role-only --attach-policy-arn {생성한 정책 ARN} --approve
4. addon 추가(콘솔 사용)
사용
pv를 정의할 때 다음과 같은 코드를 포함시켜 EBS를 volume으로 사용할 수 있습니다.
csi:
driver: ebs.csi.aws.com
fsType: ext4
volumeHandle: {ebs 이름}
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.ebs.csi.aws.com/zone
operator: In
values:
- {ebs가 생성된 가용영역}
예시:
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 2Gi
csi:
driver: ebs.csi.aws.com
fsType: ext4
volumeHandle: vol-asdo9876asd9
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.ebs.csi.aws.com/zone
operator: In
values:
- ap-northeast-3a
참고: Amazon EKS 추가 기능 - Amazon EKS
aws-ebs-csi-driver/README.md at master · kubernetes-sigs/aws-ebs-csi-driver · GitHub
지금까지 EKS에서 addon 중 하나인 Amazon ebs csi 드라이버를
설치하는 방법에 대해 소개드렸습니다.
실습 위주의 글이었는데 도움 되셨으면 좋겠습니다!!
다음에 봬요~~
'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글
[AWS] 구매 옵션 (0) | 2023.05.11 |
---|---|
[AWS] CloudFront 쿠키 기반의 콘텐츠 캐싱 (0) | 2023.05.11 |
[AWS] code deploy (0) | 2023.05.07 |
[AWS] CloudWatch (0) | 2023.04.29 |
[AWS] Cloudtrail (0) | 2023.04.17 |
댓글