- 컨테이너 운영을 자동화하기 위한 도구이며 도커 관리자이다.
- 도커스웜 : 도커를 managing 해준다.
- 컨테이너 관리자 중 일반적으로 많이 쓰이는게 Kubernetes이다.
- k8s라고도한다. 쓰기 귀찮아서 그렇다고 한다...
- 내 컴퓨터 한대로 실습하기는 어렵다... 그래서 클라우드에서 이것을 지원해준다. ==> 그것이 Kubernetes이다
- 컴퓨터들 안에서 어떤 도커가 죽었는지, 살았는지를 알려면 서로 연결이 되있어야 한다. 내 컴퓨터 한대로 보기에는 어려우니까 클라우드 서비스로 가야한다!!
- 죽은 도커를 살리고, 도커가 얼마나 더 필요한지를 파악해준다.
- 클라우드에서 Kubernetes를 채택한 이유는 커뮤니티도 잘 형성되어 있기 때문이다.
- 만약, update된 board가 있다면 다시 재배포를 해줘야한다.
- 그럼 수정된 api가 생긴다.
- 하지만, docker-compose stop 과정에서 서비스가 일시 중단된다. 그러고 나서 수정한 후 docker-compose up -d로 재가동 한다.
- 만약 실시간 서비스인 경우 중단없이는 어떻게 할까??
1. 똑같은 컴퓨터를 1대 빌린다(backend)
- git clone으로 똑같은걸 불러온다.
- 어차피 이걸 만들어 봤자 원래 있던 api로 접속을 하게 된다 => 레코드를 수정 안했기 때문
- 수정된 api를 넣고, 빌린 컴퓨터를 연다. 그런 다음 다시 원래 있던 컴퓨터를 다시 설정하면 중단 없이 배포가 이뤄진다(무중단 배포)
- 롤링배포 : 한번에 요청을 보내는 것이아니라 조금씩 조금씩 보내는 방법
- 카나리 배포 : 처음에 조금 요청을 넘겨보고, 이상없으면 한번에 다 보내는 방법
=> 이것들을 자동으로 해주는 것이 Kubernetes이다!! 기본적으로 Kubernetes는 롤링배포와 자동확장을 가지고 있다.
여기서 자동확장이라 하면, 파드가 필요할때마다 파드를 자동으로 확장시켜준다!!
- Node : 하나의 컴퓨터를 지칭한다.
- 노드 중 일하는 노드를 워커노드라고 한다.
- 클러스터(Cluster) : 컴퓨터들의 집합체(노드들의 집합체)
- 파드(POD) : 하나의 파드에는 하나의 도커를 넣는 것이 일반적이다.
- 의존성이 있는 도커들을 모아 놓는 집합체
- 맨 밑에 사진처럼 파드들이 노드안에 들어간다.
- GKE Standard : 직접설정
- GKE Autopilot : 자동설정
- 위처럼 Autopilot으로 만들어준다. 혹시나 오류가 생길수 있기 때문에, 예비로 2개를 만들어준다
- cf. 작업부하(deployment) : 파드 배포하기
- cf. 서비스 및 수신
- cf. 보안 비밀 및 condigMap: .env(환경변수)을 만든다
- 배포 버튼을 누르면 위와 같은 창이 나온다.
- 컨테이너 추가는 도커 컨테이너를 더 만들 수 있게 해준다. => 하지만, 하나의 파드에는 하나의 도커가 일반적이다!
- 컨테이미지 설정을 해준다. 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를 자주 쓰는 습관을 가지자.