실습

StatefulSet

  1. Service 생성

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: web
      labels:
        app: httpd
    spec:
      ports:
      - port: 80
      clusterIP: None
      selector:
        app: httpd
    EOF
  2. 생성된 Service 및 Endpoint 확인

    kubectl get svc,ep -l app=httpd
  3. StatefulSet 생성

    cat <<EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: httpd
      labels:
        app: httpd
    spec:
      serviceName: web
      replicas: 1
      selector:
        matchLabels:
          app: httpd
      template:
        metadata:
          labels:
            app: httpd
        spec:
          containers:
          - name: httpd
            image: httpd
    EOF
  4. 생성된 StatefulSet 및 Pod 확인

    kubectl get sts,pod -l app=httpd
  5. Endpoint 확인

    kubectl get ep web
  6. Endpoint에 포함된 Pod의 상세정보 확인

    kubectl get ep web -o=jsonpath='{.subsets}' | jq
  7. 생성된 Pod의 이름 및 IP 확인

    kubectl get pod -l app=httpd -o wide
  8. Pod 생성

    kubectl run curl --image=curlimages/curl --command -- sleep 3600
  9. cURL 명령어로 기존에 생성한 Pod에 배포된 웹서버 호출

    kubectl exec curl -- curl -s httpd-0.web
  10. StatefulSet의 Replica 수를 3개로 수정

    kubectl scale statefulset httpd --replicas=3
  11. 생성된 Pod 확인

    kubectl get pod -l app=httpd
  12. cURL 명령어로 새로 생성된 Pod에 배포된 웹서버 호출

    {
        kubectl exec curl -- curl -s httpd-1.web
        kubectl exec curl -- curl -s httpd-2.web
    }
  13. 첫번째로 생성된 Pod를 삭제

    kubectl delete pod httpd-0
  14. Pod가 다시 생성되는지 확인

    kubectl get pod -l app=httpd
  15. 생성된 리스소 삭제

    {
        kubectl delete sts httpd
        kubectl delete svc web 
        kubectl delete pod curl
    }

Persistent Volume

  1. 현재 설정된 Storage Class 확인

  2. NFS 서버 생성

  3. NFS 서버 생성 확인

  4. NFS 서버에 HTML 파일 생성

  5. HTML 파일이 정상적으로 생성되었는지 확인

  6. PersistentVolume 생성

  7. 생성된 PersistentVolume 확인

  8. 생성된 PVC가 있는지 확인

  9. PVC 생성

  10. 생성된 PVC 확인

  11. PV 확인

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

  13. 위에서 배포한 애플리케이션의 Pod가 정상적으로 생성되었는지 확인

  14. 배포된 NGINX 웹서버들이 동일한 페이지를 보여주는지 확인

  15. PVC 상태 확인

  16. 하나의 Pod에 접속해서 PV가 마운트된 경로에 파일 생성

  17. NFS 서버에 접속해서 위에서 생성한 파일이 보이는지 확인

  18. 배포된 Pod들에서 위에서 생성한 파일이 보이는지 확인

  19. 데모 애플리케이션 삭제

  20. NFS 서버에 접속해서 파일이 삭제되었는지 확인

  21. PVC 상태 확인

  22. 데모 애플리케이션 재배포

  23. 이전에 생성했던 파일이 존재 하는지 확인

  24. PVC 삭제 시도

  25. 위에서 실행한 명령어가 완료되지 않을 경우에 Ctrl+C를 입력해서 명령어 종료

  26. PVC 상태 확인

  27. 데모 애플리케이션 삭제

  28. PVC가 삭제되었는지 확인

  29. PV 상태 확인

  30. PVC 생성

  31. PVC 상태 확인

  32. PV에 명시된 PVC 정보 확인

  33. 새로 생성한 PVC 상세정보 확인

  34. PV 수정 - spec.claimRef 삭제

  35. PVC 상태 확인

  36. PV에 명시된 PVC 정보 확인

  37. PVC의 uid 확인

  38. PV 삭제 시도

  39. 위에서 실행한 명령어가 완료되지 않을 경우에 Ctrl+C를 입력해서 명령어 종료

  40. PV 상태 확인

  41. PVC 삭제

  42. PV가 삭제되었는지 확인

  43. NFS 서버에 접속해서 파일이 삭제되었는지 확인

  44. NFS 서버 삭제

Dynamic Volume Provisioning

  1. 현재 설정된 StorageClass 확인

  2. PVC 생성

  3. PVC 상태 확인

  4. PVC 상태가 Pending인 이유 확인

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

  6. 위에서 배포한 애플리케이션의 Pod가 정상적으로 생성되었는지 확인

  7. Pod 상태가 Pending인 이유 확인

  8. PVC 상태가 Pending인 이유 확인

  9. PVC 재생성

  10. Pod 상태 확인 - Running 상태로 될때까지 시간이 걸릴수도 있음

  11. PVC 상태 확인

  12. PVC에 명시된 PV가 생성되었는지 확인

  13. PVC에 명시한 볼륨 요청 크기 만큼 실제로 할당되었는지 확인

  14. 데모 애플리케이션 삭제

  15. PVC 삭제

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

  17. LimitRange 생성

  18. LimitRagne 확인

  19. PVC 생성 시도

  20. PVC 생성

  21. PVC 상태 확인

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

  23. Pod 상태 확인

  24. PVC 상태 확인

  25. PVC에 명시된 PV가 생성되었는지 확인

  26. PVC에 명시한 볼륨 요청 크기 만큼 실제로 할당되었는지 확인

  27. Deployment의 Replica 수를 10개로 수정

  28. 추가로 생성되는 Pod 상태 확인

  29. Pending 상태의 Pod가 있다면 그 이유 확인

  30. 각 Node의 가용영역 확인

  31. Pod가 배포된 Node 확인

  32. Deployment의 Replica 수를 1개로 수정

  33. Pod가 배포된 Node의 이름 확인

  34. 해당 Node에 문제가 생겼다는 상황을 가정하고 Pod를 다른 Node로 이전하고 Node 상태를 SchedulingDisabled로 변경

  35. Pod가 생성되는지 확인

  36. Pod가 Pending 상태라면 그 이유를 확인

  37. Node 상태 확인

  38. Node에 부여된 Taint 확인

  39. PV 이름 확인

  40. PV에 연동된 EBS 볼륨를 확인하고 볼륨 ID를 환경변수로 지정

  41. 위에서 확인한 EBS 볼륨 상태 확인

  42. Node가 정상으로 돌아왔다고 가정하고 Node에 부여된 Taint 삭제

  43. Node 상태 확인

  44. Pod가 생성되는지 확인

  45. PV에 연동된 EBS 볼륨 상태 확인

  46. 리소스 삭제

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

  48. PV에 연동된 EBS 볼륨이 삭제되었는지 확인

MySQL 클러스터 구성

  1. ConfigMap 생성

  2. Service 생성

  3. StatefulSet 생성

  4. Pod 생성 확인

  5. 생성된 PVC 확인

  6. PVC에 명시된 PV가 생성되었는지 확인

  7. 각 PV에 맵핑된 EBS 볼륨 확인

  8. Pod 생성

  9. mysql-0 Pod를 통해서 데이터베이스 및 레코드 생성

  10. 읽기 엔드포인트 mysql-read 통해서 위에서 생성한 데이터를 확인

  11. 읽기 엔드포인트 mysql-read 가 읽기에 대한 쿼리를 분산하는지 확인

  12. Ctrl+C를 입력해서 위에서 실행한 프로세스 종료

  13. mysql-read Endpoint에 타켓으로 포함되어 있는 Pod 목록 확인

  14. mysql-2 Pod의 ReadinessProbe가 실패하도록 수정

  15. mysql-2 Pod의 상태 확인

  16. mysql-2 Pod의 상세 상태 확인

  17. 읽기 엔드포인트 mysql-read 로 쿼리를 실행해서 mysql-2 Pod로 트래픽이 전달되는지 확인

  18. mysql-read Endpoint에 타켓으로 mysql-2 Pod가 포함되어 있는지 확인

  19. mysql-2 Pod의 ReadinessProbe가 성공하도록 수정

  20. mysql-2 Pod의 상태 확인

  21. mysql-read Endpoint에 타켓으로 mysql-2 Pod가 포함되어 있는지 확인

  22. StatefulSet의 Replica 갯수를 0개로 조정

  23. Pod 상태 확인

  24. PVC가 삭제되었는지 확인

  25. StatefulSet의 Replica 갯수를 3개로 조정

  26. Pod 상태 확인

  27. 새로운 PVC가 생성되었는지 확인

  28. 기존에 생성한 데이터베이스 및 레코드가 존재하는지 확인

  29. Ctrl+C를 입력해서 위에서 실행한 프로세스 종료

  30. StatefulSet 삭제

  31. PVC가 삭제되었는지 확인

  32. StatefulSet 재생성

  33. Pod 생성 확인

  34. 새로운 PVC가 생성되었는지 확인

  35. 기존에 생성한 데이터베이스 및 레코드가 존재하는지 확인

  36. Ctrl+C를 입력해서 위에서 실행한 프로세스 종료

  37. 리소스 삭제

Last updated