Kubernetes?? 뭔데??

0
post-thumbnail

1. Kubernetes

  • 컨테이너 운영을 자동화하기 위한 도구이며 도커 관리자이다.
  • 도커스웜 : 도커를 managing 해준다.
  • 컨테이너 관리자 중 일반적으로 많이 쓰이는게 Kubernetes이다.
  • k8s라고도한다. 쓰기 귀찮아서 그렇다고 한다...

2. Kubernetes를 사용하는 이유

  • 내 컴퓨터 한대로 실습하기는 어렵다... 그래서 클라우드에서 이것을 지원해준다. ==> 그것이 Kubernetes이다
  • 컴퓨터들 안에서 어떤 도커가 죽었는지, 살았는지를 알려면 서로 연결이 되있어야 한다. 내 컴퓨터 한대로 보기에는 어려우니까 클라우드 서비스로 가야한다!!
  • 죽은 도커를 살리고, 도커가 얼마나 더 필요한지를 파악해준다.
  • 클라우드에서 Kubernetes를 채택한 이유는 커뮤니티도 잘 형성되어 있기 때문이다.

  1. 만약, update된 board가 있다면 다시 재배포를 해줘야한다.
  2. 그럼 수정된 api가 생긴다.
  3. 하지만, docker-compose stop 과정에서 서비스가 일시 중단된다. 그러고 나서 수정한 후 docker-compose up -d로 재가동 한다.
  • 만약 실시간 서비스인 경우 중단없이는 어떻게 할까??
    1. 똑같은 컴퓨터를 1대 빌린다(backend)
    1. git clone으로 똑같은걸 불러온다.
    2. 어차피 이걸 만들어 봤자 원래 있던 api로 접속을 하게 된다 => 레코드를 수정 안했기 때문
    3. 수정된 api를 넣고, 빌린 컴퓨터를 연다. 그런 다음 다시 원래 있던 컴퓨터를 다시 설정하면 중단 없이 배포가 이뤄진다(무중단 배포)
  • 롤링배포 : 한번에 요청을 보내는 것이아니라 조금씩 조금씩 보내는 방법
  • 카나리 배포 : 처음에 조금 요청을 넘겨보고, 이상없으면 한번에 다 보내는 방법

=> 이것들을 자동으로 해주는 것이 Kubernetes이다!! 기본적으로 Kubernetes는 롤링배포자동확장을 가지고 있다.
여기서 자동확장이라 하면, 파드가 필요할때마다 파드를 자동으로 확장시켜준다!!

3. Kubernetes 개념 용어

  • Node : 하나의 컴퓨터를 지칭한다.
  • 노드 중 일하는 노드를 워커노드라고 한다.

  • 클러스터(Cluster) : 컴퓨터들의 집합체(노드들의 집합체)

  • 파드(POD) : 하나의 파드에는 하나의 도커를 넣는 것이 일반적이다.
  • 의존성이 있는 도커들을 모아 놓는 집합체
  • 맨 밑에 사진처럼 파드들이 노드안에 들어간다.

4. Kubernetes 실습

4-1) 클러스터 만들기

  • GKE Standard : 직접설정
  • GKE Autopilot : 자동설정

  • 위처럼 Autopilot으로 만들어준다. 혹시나 오류가 생길수 있기 때문에, 예비로 2개를 만들어준다
  • cf. 작업부하(deployment) : 파드 배포하기
  • cf. 서비스 및 수신
  • cf. 보안 비밀 및 condigMap: .env(환경변수)을 만든다

4-2) 파드 배포

  • 배포 버튼을 누르면 위와 같은 창이 나온다.
  • 컨테이너 추가는 도커 컨테이너를 더 만들 수 있게 해준다. => 하지만, 하나의 파드에는 하나의 도커가 일반적이다!

  • 컨테이미지 설정을 해준다. mysql로 설정을 했다.

  • 환경변수를 입력해준다.

  • 계속을 누르고, 애플리케이션 이름을 설정해준다.
  • YAML 파일을 보면, 만들어질 YAML파일을 볼 수 있다.
  • 여기서 클러스터를 새로 만들면 안된다!! 왜냐하면, 이미 앞에서 하나 만들었기 때문에 저걸 누르면 새로 만들어진다....정확히는 더 알아봐야겠다..왜그런지
  • 배포를 누르면 파드가 만들어진다.

  • 클러스터에 연결을 눌러서 CLOUD SHELL을 실행시켜 확인을 해보면 된다.
  • 지금부터는 GCP와 내 프로젝트를 연결해서 확인을 해보자!!
  • 먼저, Google Cloud 컨테이너 레지스트리에 이미지를 push해야한다. 그래서 사전에 몇몇의 작업이 필요하다.
    => Google Cloud SDK(=gcloud)를 설치해야 한다.
    Cloud SDK 설치 참고

  • 그다음 위에 스크린샷 처럼 yaml파일을 수정해준다.

  • 그 후 위의 그림처럼 host에는 SQL의 비공개 IP주소를 넣는다.
  • database에는 파드의 이름을 넣어준다.

  • 그 후 docker-compose -f docker-compose.prod.yaml build를 통해 이미지를 빌드한다.
  • 그러고나서, docker-compose -f docker-compose.prod.yaml push 를 통해 빌드한 이미지를 Google Container Registery 올린다.

  • 서비스 및 수신의 서비스를 만들어야 하는데, 그것은 작업부하에서 노출해주면 자동으로 생성 된다. => 서비스가 만들어진다는 것은 접속이 가능해진다는 뜻
  • 서버를 노출 하면, 플레이그라운드(Nestjs)를 볼 수 있다.
  • DB를 노출 하면, DB접속이 가능하다.

  • 노출 해보기!!
  • 저 이름과 host 이름이 같아야 네임리졸루션이 된다.
  • 포트 번호도 수정해주자!
  • 지금 database를 노출할거여서 서비스 유형은 내부IP로 만들어준다.
  • 노출을 한 후 연결했던 백엔드를 리스타트 해주자!
  • 이것은 파드만 재시작 하는게 아니라 deployment자체를 재시작 해줘야한다. 그러면, 모든 파드들도 재시작 되는 것이다.

cf . 리눅스를 사용할때, 명령어 --help를 자주 쓰는 습관을 가지자.

profile
끝날때 까지 끝난게 아니야. 결국 내가 이겨!

0개의 댓글