본문 바로가기
CSP (Cloud Service Provider)/AWS

[AWS] EKS addon amazon ebs csi 드라이버 설치

by BTC_기범 2023. 5. 8.

안녕하세요!!

오늘은 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 추가(콘솔 사용)

EKS 페이지로 이동하여 클러스터 > 추가기능 > 추가 기능 가져오기를 선택합니다.
추가를 원하는 Amazon EBS CSI 드라이버를 선택합니다.
Static-provisioning pv 생성 실습

사용

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

댓글