📌 3주차 과제 수행 결과 입니다.
목표
: Ingress(with 도메인, 단일 ALB 사용)에 PATH /mario 는 mario 게임 접속하게 설정하고, /tetris 는 tetris 게임에 접속하게 설정하고, SSL 적용 후 관련 스샷 올려주세요# assignment.yaml apiVersion: v1 kind: Namespace metadata: name: games --- apiVersion: apps/v1 kind: Deployment metadata: name: mario namespace: games spec: replicas: 1 selector: matchLabels: app: mario template: metadata: labels: app: mario spec: containers: - name: mario image: pengbai/docker-supermario --- apiVersion: v1 kind: Service metadata: name: mario namespace: games annotations: alb.ingress.kubernetes.io/healthcheck-path: /mario/index.html spec: selector: app: mario ports: - port: 80 protocol: TCP targetPort: 8080 type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: tetris namespace: games spec: replicas: 1 selector: matchLabels: app: tetris template: metadata: labels: app: tetris spec: containers: - name: tetris image: bsord/tetris --- apiVersion: v1 kind: Service metadata: name: tetris namespace: games annotations: alb.ingress.kubernetes.io/healthcheck-path: /tetris/index.html spec: selector: app: tetris ports: - port: 80 protocol: TCP targetPort: 80 type: NodePort --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: games name: ingress-games annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/certificate-arn: CERT_ARN alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]' alb.ingress.kubernetes.io/healthcheck-protocol: HTTP alb.ingress.kubernetes.io/healthcheck-port: traffic-port alb.ingress.kubernetes.io/healthcheck-interval-seconds: '15' alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '5' alb.ingress.kubernetes.io/success-codes: '200' alb.ingress.kubernetes.io/healthy-threshold-count: '2' alb.ingress.kubernetes.io/unhealthy-threshold-count: '2' spec: ingressClassName: alb rules: - host: albweb.xgro.be http: paths: - path: /mario pathType: Prefix backend: service: name: mario port: number: 80 - path: /tetris pathType: Prefix backend: service: name: tetris port: number: 80
목표
: 호스트 Path(local-path-provisioner) 실습 및 문제점 확인과 성능 측정 후 관련 스샷 올려주세요
도서의 내용을 참고하여 실습을 진행하였습니다.
hostPath 스토리지 클래스는 파드가 실행 중인 노드의 특정 디렉토리를 파드에 할당 합니다.
파드의 데이터는 오직 노드안에 존재하며, 다른 노드로 파드를 이동하는것이 불가능합니다.
# 모니터링 watch kubectl get pod,pv,pvc -owide # 디플로이먼트 cat ~/pkos/3/localpath-fail.yaml | yh kubectl apply -f ~/pkos/3/localpath-fail.yaml # 배포 확인 kubectl exec deploy/date-pod -- cat /data/out.txt # 파드가 배포된 워커노드 변수 지정 PODNODE=$(kubectl get pod -l app=date -o jsonpath={.items[0].spec.nodeName}) echo $PODNODE i-0c6536e27638e94cb # 파드가 배포된 워커노드에 장애유지 보수를 위한 drain 설정 kubectl drain $PODNODE --force --ignore-daemonsets --delete-emptydir-data && kubectl get pod -w # 상태 확인 kubectl get node kubectl get deploy/date-pod kubectl describe pod -l app=date | grep Events: -A5
# local-path 스토리지클래스에서 생성되는 PV 에 Node Affinity 설정 확인 kubectl describe pv ... Node Affinity: Required Terms: Term 0: kubernetes.io/hostname in [i-0898acf5c6da94a3e] ...
# 파드가 배포된 워커노드에 장애유지 보수를 완료 후 uncordon 정상 상태로 원복 Failback kubectl uncordon $PODNODE && kubectl get pod -w kubectl exec deploy/date-pod -- cat /data/out.txt
목표
: AWS EBS를 PVC로 사용 후 온라인 볼륨 증가 후 관련 스샷 올려주세요
✅ PV의 이름을 기준으로 4G > 10G 로 증가
# 현재 pv 의 이름을 기준하여 4G > 10G 로 증가 : .spec.resources.requests.storage의 4Gi 를 10Gi로 변경 kubectl edit pvc ebs-claim kubectl get pvc ebs-claim -o jsonpath={.spec.resources.requests.storage} ; echo kubectl get pvc ebs-claim -o jsonpath={.status.capacity.storage} ; echo kubectl patch pvc ebs-claim -p '{"spec":{"resources":{"requests":{"storage":"10Gi"}}}}' kubectl patch pvc ebs-claim -p '{"status":{"capacity":{"storage":"10Gi"}}}' # status 는 바로 위 커멘드 적용 후 EBS 10Gi 확장 후 알아서 10Gi 반영됨 aws ec2 describe-volumes --volume-ids $(kubectl get pv -o jsonpath="{.items[0].spec.csi.volumeHandle}") | jq
✅ 반영된 결과 확인하기
# 확인 : 수치 반영이 조금 느릴수 있다 kubectl exec -it app -- sh -c 'df -hT --type=ext4' kubectl df-pv
목표
: AWS Volume SnapShots 실습 후 관련 스샷 올려주세요
# kOps 클러스터 편집 kops edit cluster ----- spec: **snapshotController: enabled: true** ----- ****# 업데이트 적용 **kops update cluster --yes && sleep 3 && kops rolling-update cluster** # 확인 >> 배포 시 3분 정도 소요됨 **watch kubectl get pod -n kube-system** **kubectl get crd | grep volumesnapshot** # vsclass 생성 **kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/snapshot/manifests/classes/snapshotclass.yaml** **kubectl get volumesnapshotclass**
✅ kubectl 명령으로 볼륨 스냅샷을 확인합니다.
# VolumeSnapshot 확인 **kubectl get volumesnapshot** **kubectl get volumesnapshot ebs-volume-snapshot -o jsonpath={.status.boundVolumeSnapshotContentName}**
✅ 스냅샷이 정상적으로 생성되었는지 확인합니다.
# AWS EBS 스냅샷 확인 aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[]' --output table