티스토리 뷰
해당 글은 구글 스터디잼 Kubernetes in the Google Cloud를 통해 경험한 내용을 바탕으로 합니다.
해당 과정의 Link는 https://run.qwiklabs.com/quests/29
Kubernetes란 무엇일까? (https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/)
- Kubernetes는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다.
Kubernetes에 대한 첫 인상은,
- 컨테이너 기반이므로, VM 이미지를 사용하는 방식보다 이미지 생성이 쉽고 효율적이겠다. (지난 공감세미나에서 보았듯이, Container를 활용하면 Cold booting을 없앨 수 있다.)
- CI/CD 구성에 대한 고민들이 시스템 곳곳에 반영되어 있다.
- 각 종 클라우드 및 OS 배포판간 이식성이 있다.
이 스터디는 우선 Docker Container에 대한 경험을 시작으로 한다.
1) Introduction to Docker
Docker build -> run -> debug -> publish단계로 구성되어 있다.
Docker와 관련해서는 이 블로그를 한번 보는 것이 좋을 것 같고, 실습 경험은 이 사이트를 참조하는 것도 좋겠다.
1 | gcloud docker -- push gcr.io/[project-id]/node-app:0.2 | cs |
한가지 기억에 남는 부분은, GCP를 사용하니 이런 형태로 build한 docker images를 GCR(Google cloud registry)에 deploy할 수 있다는 것이다.
nexus에 docker registry를 세팅해서 관리했던 이전의 방식을 생각해보면, 클라우드를 통해 생산성이 매우 높아짐을 절감하게 된다.
2) Kuberntes 노드 소개 (https://google.qwiklabs.com/focuses/1029?parent=catalog&qlcampaign=1s-seoul-0219)
이 실습에서는, 애플리케이션으로 Docker conatiner를 만든 후 이 이미지로 Pods를 만든다. 이후 외부 액세스 허용 및 Scale out, Version Update등을 하게된다.
기존에는 application을 직접 upload해서 빌드하고 포트들을 지정해서 서버를 띄우고, 앞단에서 nginx 혹은 HA proxy 등으로 트래픽 관리를 하는 등 여러 도구들의 조합으로 이뤄졌던 것이, 이제 단일 api를 사용하여 가능하게 되었다.
1 2 3 4 5 6 7 8 9 10 | # Docker image를 기반으로 Pods 생성 kubectl run hello-node \ --image=gcr.io/PROJECT_ID/hello-node:v1 \ --port=8080 # 외부 액세스 허용 kubectl expose deployment hello-node --type="LoadBalancer" # Scale out kubectl scale deployment hello-node --replicas=4 | cs |
그 결과 아키텍처 구성은 하기와 같아진다.
이 후 애플리케이션 버전이 올라갈 경우 빌드, 배포 후 spec만 변경하면 자동으로 배포가 이루어진다. 이 때 서비스 사용자들은 어떠한 방해도 받지 않는다. 물론 실제 서비스의 성격, 애플리케이션간의 의존성, DB Schema 변경여부 등에 따라 영향범위는 달라지겠지만, Kubernetes가 인프라가 아닌 애플리케이션 자체에 집중하도록 구성되었다는 점은 느낄 수 있는 경험이었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | docker build -t gcr.io/PROJECT_ID/hello-node:v2 . gcloud docker -- push gcr.io/PROJECT_ID/hello-node:v2 kubectl edit deployment hello-node ... spec: containers: - image: gcr.io/PROJECT_ID/hello-node:v1 ## Update this line ## imagePullPolicy: IfNotPresent name: hello-node ports: - containerPort: 8080 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log dnsPolicy: ClusterFirst restartPolicy: Always securityContext: {} terminationGracePeriodSeconds: 30 | cs |
'Log > .TIL' 카테고리의 다른 글
Kubernetes 체험기 #3 (0) | 2019.01.27 |
---|---|
Kubernetes 체험기 #2 (0) | 2019.01.20 |
[TIL]180724-0729 (0) | 2018.07.30 |
[TIL]180622-0624 (0) | 2018.06.22 |
[TIL]180620 (0) | 2018.06.20 |