실습
EBS
현재 설정된 StorageClass 목록 확인
kubectl get scClusterConfig를 아래와 같이 수정
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: trueAmazon EBS CSI driver 설치
eksctl create addon -f mycluster.yaml설치 확인
kubectl get pod -n kube-system \ -l app.kubernetes.io/name=aws-ebs-csi-driverStorageClass 생성 - 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생성된 StorageClass 확인
kubectl get sc기본 StorageClass 변경
{ kubectl annotate sc gp2 storageclass.kubernetes.io/is-default-class- --overwrite kubectl annotate sc ebs storageclass.kubernetes.io/is-default-class=true --overwrite }StorageClass 확인
kubectl get sc데모 애플리케이션 배포
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 EOFPod 상태 확인
kubectl get pod -l app=nginxPod에 발생한 이벤트 확인
kubectl describe pod -l app=nginxPVC 상태 확인
kubectl get pvc my-pvcPVC에 발생한 이벤트 확인
kubectl describe pvc my-pvc생성된 PV 확인
kubectl get pv $(kubectl get pvc my-pvc -o=jsonpath='{.spec.volumeName}')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 }위에서 확인한 EBS 볼륨 상태 확인
aws ec2 describe-volumes --volume-ids $VOL_ID --no-cli-pagerPV(EBS)가 마운트된 경로에 파일 생성
kubectl exec -it deploy/nginx -- \ bash -c "echo hello EBS > /mnt/message.txt"파일 내용 확인
kubectl exec -it deploy/nginx -- cat /mnt/message.txtPod 삭제
kubectl scale deploy nginx --replicas=0Pod 재생성
kubectl scale deploy nginx --replicas=1Pod 상태 확인
kubectl get podPV에 생성했던 파일이 존재하는지 확인
kubectl exec -it deploy/nginx -- cat /mnt/message.txt리소스 삭제
{ kubectl delete deploy nginx kubectl delete pvc my-pvc }PV가 삭제되었는지 확인 - 삭제 될때까지 시간이 걸릴수도 있음
kubectl get pvPV에 연동된 EBS 볼륨이 삭제되었는지 확인
aws ec2 describe-volumes --volume-ids $VOL_ID
EFS
ClusterConfig를 아래와 같이 수정
Amazon EFS CSI driver 설치
설치 확인
EFS 파일 시스템 생성
생성된 EFS 파일 시스템 확인
EKS 클러스터가 생성된 VPC의 프라이빗 서브넷 목록 확인
EFS 마운트 대상에 부여할 보안 그룹 생성
EKS 노드에서 EFS로 접근이 가능하도록 인바운드 규칙 추가
EFS 마운트 대상 생성
EFS 마운트 대상 상태 확인
StorageClass 생성
PV 생성
PVC 생성
PVC 상태 확인
데모 애플리케이션 배포
Pod 생성 확인
첫번째 Pod에서 PV(EFS)가 마운트된 경로에 파일 생성
두번째 Pod에서 첫번째 Pod에서 생성한 파일 확인
두번째 Pod에서 파일 수정
첫번째 Pod에서 파일 확인
리소스 삭제
PVC 생성
PVC 생성 확인
PV 생성 확인
생성된 EFS Access Point 확인
PVC 삭제
PV가 삭제되었는지 확인 - 삭제 될때까지 시간이 걸릴수도 있음
PV에 연동된 EFS Access Point가 삭제되었는지 확인
리소스 삭제
Secret
Secrets Store CSI Driver 설치
AWS provider for the Secrets Store CSI Driver 설치
AWS Secrets Manager에 저장할 파일 생성
JSON 파일 생성
Secret 생성
생성된 Secret 확인
SecretProviderClass 생성
데모 애플리케이션 배포
Pod 생성 확인
Pod에 발생한 이벤트 확인
ServiceAccount 생성
Pod에 위에서 생성한 ServiceAccount 부여
Pod 생성 확인
Pod에 발생한 이벤트 확인
Pod에 마운트된 파일 확인
파일 내용 확인
SecretProviderClass 수정
Pod 재생성
Pod에 마운트된 파일 확인
파일 내용 확인
파일 수정
JSON 파일 생성
Secret 수정
수정된 Secret 확인
수정 사항이 반영되는지 확인
Pod에 발생한 이벤트 확인
AWS Secrets Manager에 저장할 파일 생성
Secret 생성
생성된 Secret 확인
SecretProviderClass 생성
데모 애플리케이션 수정
Pod에 지정된 환경 변수 확인
생성된 Secret 확인
생성된 Secret 데이터의 평문 확인
파일 수정
Secret 수정
수정된 Secret 확인
Pod에 수정 사항이 반영되는지 확인
Pod에 발생한 이벤트 확인
Secret에 수정 사항이 반영되었는지 확인
Pod에 수정 사항이 반영되는지 확인
Reloader 설치 - https://github.com/stakater/Reloader
파일 수정
Secret 수정
수정된 Secret 확인
Pod에 발생한 이벤트 확인
Secret에 수정 사항이 반영되었는지 확인
Pod에 수정 사항이 반영되는지 확인
리소스 삭제
Last updated