[구글스터디잼] Kubernetes in the Google Cloud #2

해당 글은 현재 하고 있는 구글 스터디잼 Kubernetes in the Google Cloud 을 학습하는 과정에서 배우는 것을 정리하는 글입니다.

3장 부터 4장은 Kubernetes 에서 Pod, Service, Scaling과 deployment 를 보여주고, 5,6장은 젠킨스와 slackbot 예제를 보여주고 있습니다.

실제로 이 예제를 따라가다 보면, 영어를 착실하게 보지 않는다면, Pod는 무엇이고 Service는 무엇인가에 대해서 막 혼란이 오게 됩니다.

Pod는 하나 또는 여러개의 컨테이너와 볼륨으로 구성된 오브젝트입니다. namespace 를 공유하고 Pod당 하나의 ip가 할당됩니다.(여기서 할당되는 ip는 public 일수도 있고, 그냥 private 일 수도 있습니다. 그러나, 보통 private 이 할당되겠죠?)

pods_1

그리고 Service는 특정 Pod들에 대한 endpoint 가 됩니다. 해당 Service의 endpoint 에 접속하면 아래의 Pod들에게 자동으로 데이터가 한번씩 전달되게 됩니다.(Load Balancer 역할)

service_1

예제를 살펴봐도, 하나의 Pod가 여러개의 container를 포함하지만, 하나의 Pod가 한 종류의 여러 Container를 가지는 걸로 보이지는 않고, 하나의 서버 단위가 하나의 Pod라고 봐도 될듯합니다. 예를 들어, 하나의 Pod에 API Server, Volume 가 들어가고, 이제 Service가 그 Pod들을 로드밸런싱 합니다. 서비스에 더 처리용량이 필요하면, Pod를 계속 추가하는 거죠. 이제 kubernetes의 scaling 이라고 보시면 됩니다.

아래 그림을 보면 kind 가 Pod로 나옵니다.
스크린샷 2019-01-20 오후 8.00.53

그리고 이 Pod 는 다음과 같이 실행이 가능합니다.

kubectl create -f pods/monolith.yaml

이제 이 앞단에 들어갈 서비스를 생성해봅시다.

스크린샷 2019-01-20 오후 8.00.40

생성하는 방법은 동일합니다.

kubectl create -f service/monolith.yaml

또, 논리적으로 구분하는 Namespace 라는 개념과, Label 이라는 개념을 이용해서 관리가 가능합니다. 해당 Pod는 frontend 다, backend다 이런식으로 태그를 달아주는 것이죠.

그리고 이런 오브젝트들을 관리하기 위해 컨트롤로러라는 개념이 있다고 합니다. 여기에 replicaset, deployment 라는 컨트롤러가 있고 이를 이용해서 쉽게 scale 변경이 가능합니다.

kubectl scale deployment hello --replicas=3
kubectl scale deployment hello --replicas=5

그리고 Rolling Update 도 지원합니다(한번에 정해진 단위로만 업데이트를 해서 전체를 업데이트 합니다.)
다음과 같이 edit deployment 를 이용하여 container 이미지를 수정하게 되면 자동으로 Rolling update가 시작합니다.

kubectl edit deployment hello

Rolling update를 멈추거나 멈춘 업데이트를 재개하고 싶다면 다음 명령을 이용합니다.

kubectl rollout pause deployment/hello
kubectl rollout resume deployment/hello

여기서 중요한 것은, 업데이트 이후에 이전 버전으로 돌리고 싶다면… rollout undo를 이용해서 이전 버전으로 쉽게 돌릴 수 있습니다. 이것도 Rolling update로 진행됩니다.

kubectl rollout undo deployment/hello

Reference
1. https://zzsza.github.io/development/2018/04/17/docker-kubernetes/
2. https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/kubernetes-objects/
3. http://bcho.tistory.com/1256
4. https://blog.2dal.com/2017/03/07/kubernetes/

Advertisements