실습

EBS

  1. 현재 설정된 StorageClass 목록 확인

    kubectl get sc
  2. ClusterConfig를 아래와 같이 수정

    apiVersion: eksctl.io/v1alpha5
    kind: ClusterConfig
    
    metadata:
      name: mycluster
      region: ap-northeast-2
      version: "1.29"
    
    availabilityZones: 
    - ap-northeast-2a 
    - ap-northeast-2b
    - ap-northeast-2c
    - ap-northeast-2d
    
    managedNodeGroups:
    - name: nodegroup
      instanceType: t3.small
      minSize: 2
      desiredCapacity: 2
      maxSize: 5
      volumeSize: 20
      iam:
        attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
    iam:
      withOIDC: true
    addons:
    - name: aws-ebs-csi-driver
      wellKnownPolicies:
        ebsCSIController: true
  3. Amazon EBS CSI driver 설치

    eksctl create addon -f mycluster.yaml
  4. 설치 확인

    kubectl get pod -n kube-system \
    -l app.kubernetes.io/name=aws-ebs-csi-driver
  5. StorageClass 생성 - https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/parameters.md

    cat <<EOF | kubectl apply -f -
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ebs
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: gp3
      encrypted: "true"
    EOF
  6. 생성된 StorageClass 확인

    kubectl get sc
  7. 기본 StorageClass 변경

    {
      kubectl annotate sc gp2 storageclass.kubernetes.io/is-default-class- --overwrite
      kubectl annotate sc ebs storageclass.kubernetes.io/is-default-class=true --overwrite
    }
  8. StorageClass 확인

    kubectl get sc
  9. 데모 애플리케이션 배포

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
         requests:
           storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - name: data
              mountPath: /mnt
          volumes:
          - name: data
            persistentVolumeClaim:
              claimName: my-pvc
    EOF
  10. Pod 상태 확인

    kubectl get pod -l app=nginx
  11. Pod에 발생한 이벤트 확인

    kubectl describe pod -l app=nginx
  12. PVC 상태 확인

    kubectl get pvc my-pvc
  13. PVC에 발생한 이벤트 확인

    kubectl describe pvc my-pvc
  14. 생성된 PV 확인

    kubectl get pv $(kubectl get pvc my-pvc -o=jsonpath='{.spec.volumeName}')
  15. PV에 연동된 EBS 볼륨를 확인하고 볼륨 ID를 환경변수로 지정

    {
        export VOL_ID=$(kubectl get pv $(kubectl get pvc my-pvc \
        -o=jsonpath='{.spec.volumeName}') \
        -o=jsonpath='{.spec.csi.volumeHandle}')
    
        echo $VOL_ID
    }
  16. 위에서 확인한 EBS 볼륨 상태 확인

    aws ec2 describe-volumes --volume-ids $VOL_ID --no-cli-pager
  17. PV(EBS)가 마운트된 경로에 파일 생성

    kubectl exec -it deploy/nginx -- \
    bash -c "echo hello EBS > /mnt/message.txt"
  18. 파일 내용 확인

    kubectl exec -it deploy/nginx -- cat /mnt/message.txt
  19. Pod 삭제

    kubectl scale deploy nginx --replicas=0
  20. Pod 재생성

    kubectl scale deploy nginx --replicas=1
  21. Pod 상태 확인

    kubectl get pod
  22. PV에 생성했던 파일이 존재하는지 확인

    kubectl exec -it deploy/nginx -- cat /mnt/message.txt
  23. 리소스 삭제

    {
        kubectl delete deploy nginx
        kubectl delete pvc my-pvc
    }
  24. PV가 삭제되었는지 확인 - 삭제 될때까지 시간이 걸릴수도 있음

    kubectl get pv
  25. PV에 연동된 EBS 볼륨이 삭제되었는지 확인

    aws ec2 describe-volumes --volume-ids $VOL_ID

EFS

  1. ClusterConfig를 아래와 같이 수정

  2. Amazon EFS CSI driver 설치

  3. 설치 확인

  4. EFS 파일 시스템 생성

  5. 생성된 EFS 파일 시스템 확인

  6. EKS 클러스터가 생성된 VPC의 프라이빗 서브넷 목록 확인

  7. EFS 마운트 대상에 부여할 보안 그룹 생성

  8. EKS 노드에서 EFS로 접근이 가능하도록 인바운드 규칙 추가

  9. EFS 마운트 대상 생성

  10. EFS 마운트 대상 상태 확인

  11. StorageClass 생성

  12. PV 생성

  13. PVC 생성

  14. PVC 상태 확인

  15. 데모 애플리케이션 배포

  16. Pod 생성 확인

  17. 첫번째 Pod에서 PV(EFS)가 마운트된 경로에 파일 생성

  18. 두번째 Pod에서 첫번째 Pod에서 생성한 파일 확인

  19. 두번째 Pod에서 파일 수정

  20. 첫번째 Pod에서 파일 확인

  21. 리소스 삭제

  22. PVC 생성

  23. PVC 생성 확인

  24. PV 생성 확인

  25. 생성된 EFS Access Point 확인

  26. PVC 삭제

  27. PV가 삭제되었는지 확인 - 삭제 될때까지 시간이 걸릴수도 있음

  28. PV에 연동된 EFS Access Point가 삭제되었는지 확인

  29. 리소스 삭제

Secret

  1. Secrets Store CSI Driver 설치

  2. AWS provider for the Secrets Store CSI Driver 설치

  3. AWS Secrets Manager에 저장할 파일 생성

  4. JSON 파일 생성

  5. Secret 생성

  6. 생성된 Secret 확인

  7. SecretProviderClass 생성

  8. 데모 애플리케이션 배포

  9. Pod 생성 확인

  10. Pod에 발생한 이벤트 확인

  11. ServiceAccount 생성

  12. Pod에 위에서 생성한 ServiceAccount 부여

  13. Pod 생성 확인

  14. Pod에 발생한 이벤트 확인

  15. Pod에 마운트된 파일 확인

  16. 파일 내용 확인

  17. SecretProviderClass 수정

  18. Pod 재생성

  19. Pod에 마운트된 파일 확인

  20. 파일 내용 확인

  21. 파일 수정

  22. JSON 파일 생성

  23. Secret 수정

  24. 수정된 Secret 확인

  25. 수정 사항이 반영되는지 확인

  26. Pod에 발생한 이벤트 확인

  27. AWS Secrets Manager에 저장할 파일 생성

  28. Secret 생성

  29. 생성된 Secret 확인

  30. SecretProviderClass 생성

  31. 데모 애플리케이션 수정

  32. Pod에 지정된 환경 변수 확인

  33. 생성된 Secret 확인

  34. 생성된 Secret 데이터의 평문 확인

  35. 파일 수정

  36. Secret 수정

  37. 수정된 Secret 확인

  38. Pod에 수정 사항이 반영되는지 확인

  39. Pod에 발생한 이벤트 확인

  40. Secret에 수정 사항이 반영되었는지 확인

  41. Pod에 수정 사항이 반영되는지 확인

  42. 파일 수정

  43. Secret 수정

  44. 수정된 Secret 확인

  45. Pod에 발생한 이벤트 확인

  46. Secret에 수정 사항이 반영되었는지 확인

  47. Pod에 수정 사항이 반영되는지 확인

  48. 리소스 삭제

Last updated