Kubernetes

Minikube

  1. EBS 볼륨 사이즈 변경

    curl -s https://raw.githubusercontent.com/youngwjung/aws-tools/main/resize.sh \
    | bash /dev/stdin 30
  2. Minikube 설치

    {
        curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
        sudo install minikube-linux-amd64 /usr/local/bin/minikube
    }
  3. 클러스터 생성

    minikube start
  4. 실행중인 Pod 확인

    minikube kubectl -- get pod --all-namespaces
  5. 데모 애플리케이션 배포

    minikube kubectl -- run nginx --image=nginx
  6. 서비스 엔드포인트 생성

    minikube kubectl -- expose pod nginx --port=80 --type=NodePort
  7. 서비스 엔드포인트 및 포트 확인

    minikube service nginx
  8. 서비스 엔드포인트로 접속되는지 확인

    curl $(minikube service nginx --url)
  9. 클러스터 삭제

    minikube delete

쿠버네티스 클러스터 생성

  1. 실습 환경 생성

  2. 인스턴스 정보 확인

  3. SSH 비밀번호 확인

  4. 새로운 터미널을 열고 첫번째 컨트롤 플레인 노드로 사용할 인스턴스로 SSH 연결

  5. 시스템 구동에 필요한 라이브러리 설치

  6. 컨테이너 런타임 구동에 필요한 overlay와 br_netfilter 커널 모듈 불러오기

  7. 컨테이너 런타임 구동에 필요한 커널 파라미터 설정

  8. containerd 설치

  9. 쿠버네티스 설치 및 구동에 필요한 바이너리 설치

  10. /etc/hosts 파일에 아래와 같은 라인 추가 - CP_IP_ADDRESS는 CP 노드 IP주소

    예를들어 CP의 IP주소가 123.45.67.89라면 아래처럼 입력

  11. 클러스터 설정 파일 생성

  12. 컨트롤 플레인 노드 구성

  13. kubeconfig 파일 복사

  14. kubeconfig 파일 확인

  15. 실행중인 Pod 확인

  16. Pending 상태의 Pod의 상세내용 확인

  17. 노드 목록 확인

  18. CP 노드 상태 확인

  19. kubelet 로그 확인

  20. CNI 플러그인 설치

  21. 실행중인 Pod 확인

  22. CP 노드 상태 확인

  23. kubectl 명령어에 대한 bash completion 설정

  24. 새로운 터미널을 열고 워커 노드로 사용할 인스턴스로 SSH 연결

  25. 시스템 구동에 필요한 라이브러리 설치

  26. 컨테이너 런타임 구동에 필요한 overlay와 br_netfilter 커널 모듈 불러오기

  27. 컨테이너 런타임 구동에 필요한 커널 파라미터 설정

  28. containerd 설치

  29. 쿠버네티스 설치 및 구동에 필요한 바이너리 설치

  30. /etc/hosts 파일에 아래와 같은 라인 추가 - CP_IP_ADDRESS는 CP 노드 IP주소

  31. 컨트롤 플레인 노드에 연결된 터미널로 이동

  32. Worker 노드 조인 명령어 생성

  33. Worker 노드에 연결된 터미널로 이동해서 위의 명령어를 실행하고 나온 명령어를 실행

  34. 컨트롤 플레인 노드에 연결된 터미널로 이동

  35. 노드 상태 확인

샘플 애플리케이션 배포

  1. Deployment 생성

  2. Deployment 상태 확인

  3. Pod가 생성되었는지 확인

  4. 생성된 NGINX Deployment 상태 상세 확인

  5. 클러스터에 발생한 이벤트 확인

  6. Deployment에 속하는 Pod 삭제

  7. Pod가 존재하는지 확인

  8. Service 생성

  9. NGINX 서비스 확인

  10. NGINX 서비스에 연결된 Endpoints 확인

  11. 실행중인 Pod의 IP 주소 확인

  12. 서비스 엔드포인트 및 포트 확인

  13. NGINX 서비스의 ClusterIP에 HTTP 요청

  14. NGINX 서비스에 연결된 Endpoints 주소로 HTTP 요청

  15. NGINX Deployment의 Replica 갯수를 3개로 변경

  16. Pod가 추가로 생성됐는지 확인

  17. NGINX 서비스에 연결된 Endpoints 확인

  18. NGNIX 서비스를 NodePort 타입으로 변경

  19. NGINX Service 엔드포인트 및 포트 확인

  20. 웹브라우저에서 ANY_NODE_IP:SERVICE_NODE_PORT 로 접속되는지 확인 - 아래 명령어로 주소 확인 가능

  21. NGINX Deployment의 Replica 갯수를 0개로 변경

  22. 웹브라우저에서 ANY_NODE_IP:SERVICE_PORT 로 접속되는지 확인

  23. NGINX Deployment의 Replica 갯수를 2개로 변경

  24. 웹브라우저에서 ANY_NODE_IP:SERVICE_PORT 로 접속되는지 확인

  25. 리소스 삭제

고가용성 쿠버네티스 클러스터 구성

  1. HAProxy로 SSH 접속

  2. HAProxy 설치

  3. HAProxy 설정파일 /etc/haproxy/haproxy.cfg 에 아래의 라인들을 추가 - CP_IP_ADDRESS에 CP 노드의 IP 주소를 넣으세요.

  4. HAProxy 데몬을 재시작하고 상태 확인

  5. CP 노드에 연결된 터미널로 이동

  6. /etc/hosts 파일에서 k8scp에 지정된 IP주소를 HAProxy IP 주소로 변경

  7. Worker 노드에 연결된 터미널로 이동

  8. /etc/hosts 파일에서 k8scp에 지정된 IP주소를 HAProxy IP 주소로 변경

  9. 웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속

  10. CP 노드에 연결된 터미널로 이동

  11. kubectl 명령어로 API 호출

  12. HAProxy 통계 페이지를 리프레시해서 트래픽 정보가 업데이트 되는지 확인

  13. SecondCP로 SSH 접속

  14. 시스템 구동에 필요한 라이브러리 설치

  15. 컨테이너 런타임 설치

  16. 쿠버네티스 설치

  17. /etc/hosts 파일에 아래와 같은 라인 추가

  18. ThirdCP로 SSH 접속

  19. 14번부터 17번 단계를 실행

  20. CP 노드에 연결된 터미널로 이동

  21. 컨트롤 플레인 조인 명령어 생성

  22. 위에서 생성한 명령어를 SecondCP 노드 및 ThirdCP 노드에 실행

  23. HAProxy 노드에 연결된 터미널로 이동

  24. HAProxy 설정파일 /etc/haproxy/haproxy.cfg 을 아래와 같이 수정

  25. HAProxy 데몬을 재시작하고 상태 확인

  26. 웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 위에서 추가한 노드들의 연결 상태 확인

  27. CP 노드에 연결된 터미널로 이동

  28. Node 목록 확인

  29. kubectl 명령어로 몇가지 API 호출을 실행하고 HAProxy 통계사이트에서 로드가 분산되는지 확인

고가용성 테스트

  1. 실행중인 ETCD Pod 확인

  2. ETCD Pod 로그 확인

  3. 실행중인 ETCD Pod의 IP 주소 확인

  4. ETCD 클러스터의 멤버 목록 확인

  5. ETCD 클러스터 멤버 목록을 환경변수로 지정

  6. ETCD 클러스터의 리더 확인

  7. ETCD 클러스터의 각 멤버별 상태 확인

  8. ETCD 클러스터의 리더 Pod가 배포된 노드에 가서 kubelet 및 컨테이너 런타임 정지- CP 노드의 ETCD가 가장 먼저 구성되었기 때문에 일반적으로 CP 노드에 배포된 ETCD가 리더

  9. ETCD Pod 로그 확인

  10. 웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 위에서 노드들의 연결 상태 확인

  11. ETCD 클러스터의 리더가 변경되었는지 확인

  12. ETCD 클러스터 각 멤버별 상태 확인

  13. Node 상태 확인

  14. CP 노드에서 kubelet 및 컨테이너 런타임을 재실행

  15. 웹 브라우저를 열고 HAPROXY_IP_ADDRESS:9999/stats 주소로 접속해서 위에서 노드들의 연결 상태 확인

  16. 노드 상태 확인

  17. 모든 Pod가 정상적으로 실행되고 있는지 확인

  18. ETCD 클러스터의 리더가 다시 변경되었는지 확인

  19. ETCD 클러스터 각 멤버별 상태 확인

  20. Cloud9에 연결된 터미널로 이동해서 리소스 삭제

Amazon EKS

  1. eksctl 설치

  2. eksctl 버전 확인

  3. 현재 로그인된 IAM 자격증명 확인

  4. EKS 클러스터 생성

  5. kubectl 설치

  6. Node 목록 확인

  7. 쿠버네티스 클러스터 버전 확인

  8. Deployment 생성

  9. 생성된 Pod 확인

  10. Service 생성

  11. 생성된 Service 확인

  12. 생성된 ELB 주소 확인

  13. 웹브라우저에서 위에서 확인한 URL로 접속

  14. 리소스 삭제

  15. Pod의 리소스 사용량 확인

  16. Pod의 리소스 사용량 확인

  17. 데모 애플리케이션에 부하를 발생시키는 Pod 생성

  18. Pod의 리소스 사용량 확인

  19. HPA 생성

  20. 위에서 생성한 HPA 상태 확인

  21. HPA 상태 모니터링

  22. Ctrl+C를 입력해서 HPA 모니터링을 중지하고 Pod가 생성되었는지 확인

  23. Pod의 리소스 사용량 확인

  24. Pending 상태의 Pod가 있다면 아래의 명령어를 통해서 그 이유를 확인

  25. Cluster Autoscaler 설치

  26. Cluster Autoscaler 로그 확인

  27. Pending 상태였던 Pod가 생성 되었는지 확인

  28. Node 갯수 확인

  29. Pod의 리소스 사용량 확인

  30. 데모 애플리케이션에 부하를 발생시키는 Pod 삭제

  31. Pod의 리소스 사용량 확인

  32. HPA 상태 확인

  33. HPA 상세 내용 확인

  34. 데모 애플리케이션의 복제본 갯수는 1개로 강제 지정

  35. Pod가 삭제 되었는지 확인

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

  37. Pod가 삭제 되었는지 확인

  38. Node가 삭제 되는지 확인

  39. Cluster Autoscaler 로그 확인

  40. EKS 클러스터 삭제

Last updated