본문 바로가기

⭐ Kubernetes & EKS/EKS

EKS에 CSI Driver 설치하기

# EKS에 CSI Driver 설치하기

1. CSI Driver가 필요한 이유?

- EKS 1.23 부터는 CSI Driver만 사용하여 EBS와 연결 할 수 있다.

그러니까 한마디로, EKS에 pod로 DB를 올리거나, 기타 EBS가 필요한 애플리케이션을 올릴경우 CSI Driver가 필수로 필요하다.

- CSI Driver는 인터페이스로써 DB나 애플리케이션과 EBS 드라이버를 연결해주는 매개체 역할을 한다.

2. EBS CSI Driver의 역할?

- 공식 사이트 에서는 아래와 같이 설명을 하고 있다.
1. Kubernetes 와 Amazon EBS 볼륨 을 통합한다.
2. Kubernetes 클러스터 내에서 EBS 볼륨을 쉽게 구성 및 관리가 가능하다.
3. Kubernetes 클러스터에서 EBS 볼륨을 효율적으로 관리하고 데이터를 안전하게 보호 및 가용성과 성능을 확보한다.

- 구성도는 아래와 같다.

- EBS CSI Driver 설치 과정은 아래와 같다.

3. EBS CSI 드라이버 IAM 역할 생성

- EBS CSI가 AWS API를 호출하려면 IAM 권한이 필요하다. 그래서 해당 권한을 부여 해야한다.

- 클러스터 ID를 가진 IAM OIDC 제공업체가 계정에 존재하는지 확인한다.

- oidc_id를 변수로 등록한다.

oidc_id=$(aws eks describe-cluster --name {EKS_NAME} --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)

- 아래의 명령어로 IAM OIDC 제공업체가 있는지 확인한다.

aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4

- 조회를 하면 제공업체가 존재하면 아래와 같이 화면에 표시된다.

aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
1111111111153799FE2ECFAFA5FE2D"

4. IAM 자격증명 공급자 확인 및 IAM 역할 생성 및 연결

- 위에서 조회한 값을 조회하면 자격 증명 공급자를 확인 할 수 있고, 해당 공급자의 태그값을 보면 정상적으로 클러스터가 등록 되어 있는것을 확인 할 수 있다.

- IAM 역할을 생성하고 필요한 AWS 관리형 정책을 연결한다.

eksctl create iamserviceaccount \
  --name ebs-csi-controller-sa \
  --namespace kube-system \
  --cluster {EKS_NAME} \
  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
  --approve \
  --role-only \
  --role-name AmazonEKS_EBS_CSI_DriverRole

- 위의 명령어는 클라우드 포메이션에 기록되고 관리된다.

정상적으로 실행되면 IAM > 정책으로 이동후 AmazonEBSCSIDriverPolicy를 검색한다.

- 해당 AmazonEBSCSIDriverPolicy를 클릭하고 들어가면  연결된 개체를 확인할 수 있다.

- 연결된 계체의 이름을 역할에서 확인한다.

역할에서 ARN주소의 계정 ID값을 확인한다.

5. EBS 볼륨 암호화 위한 KMS 생성 및 적용

- KMS 서비스로 이동하여 키를 생성한다. (KMS : KeyManagementService)

- 아래와 같이 고객 관리형 키를 생성한다.

- 아래의 코드를 복사하여 계정 id와 key값을 변경한다.

- 파일 이름 : kms-key-for-encryption-on-ebs.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant",
        "kms:ListGrants",
        "kms:RevokeGrant"
      ],
      "Resource": ["arn:aws:kms:ap-northeast-2:{계정ID}:key/{kms_key_id}"],
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": "true"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": ["arn:aws:kms:ap-northeast-2:{계정ID}:key/{kms_key_id}"]
    }
  ]
}

- 위의 json 파일을 기반으로 정책을 생성한다.

aws iam create-policy \
  --policy-name KMS_Key_For_Encryption_On_EBS_Policy \
  --policy-document file://kms-key-for-encryption-on-ebs.json

- 그리고 위에서 생성한 IAM 정책을 KMS 역할에 연결을 한다.

aws iam attach-role-policy \
  --policy-arn arn:aws:iam::{계정ID}:policy/KMS_Key_For_Encryption_On_EBS_Policy \
  --role-name AmazonEKS_EBS_CSI_DriverRole

6. 연결된 계정을 확인한다.

- 아래의 연결된 개체를 확인한다.

7. EKS Add-on 기능을 활용하여 EBS CSI 드라이버 활성화

- 아래의 명령어를 통해 EBS CSI 드라이버를 활성화 한다.

eksctl create addon \
--name aws-ebs-csi-driver \
--cluster {EKS_NAME} \
--service-account-role-arn arn:aws:iam::{계정_ID}:role/AmazonEKS_EBS_CSI_DriverRole \
--force

- AWS 콘솔로 이동 후 EKS로 들어간다. 추가기능 탭에서 아래와 같이 EBS CSI 드라이버가 활성화 된것을 확인 할 수 있다.

8. 샘플 애플리케이션을 통한 CSI Driver의 정상작동 여부 확인

- 아래의 링크를 통해 작업을 진행한다.

2023.07.13 - [⭐ Kubernetes & EKS/PV & PVC] - PV, PVC를 이용한 EBS 볼륨 사용하기

 

PV, PVC를 이용한 EBS 볼륨 사용하기

# PV와 PVC를 이용한 EBS 볼륨을 사용해보자. PV와 PVC는 pod를 생성하는 yaml 관점에서 보면 EFS인지 EBS인지 상관 하지 않고 볼륨만 생성해주는 역할을 한다고 보면 된다. 예를들어 인프라를 관리하는

may9noy.tistory.com

9. 결론

- EBS CSI 드라이버는 EBS를 PV, PVC를 통해 pod로 연결하기 위해서는 필수 요소이다.

DB를 pod로 구성해도 저장공간을 분리하지 않으면 pod가 재시작 할때마다 데이터 손실이 발생한다.

그렇기 때문에 EBS 볼륨을 별도로 분리하여 데이터 관리를 해야할 필요가 있다.

AWS에서는 EBS CSI 드라이버를 통해 pod와 EBS 드라이버를 연결 및 인터페이스를 수행 한다.

pod로 서비스를 해야하고, 데이터의 손실을 막아야 한다면 EBS CSI 드라이버를 통한 구현은 필수라고 볼 수 있다.

 

- 끝 -