티스토리 뷰

Log/.TIL

Kubernetes 체험기 #1

가그린민트 2019. 1. 13. 19:12



해당 글은 구글 스터디잼 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
댓글
링크
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday