본문 바로가기

Kubernetes Tutorials

# Kubernetes Tutorials


공식 Docs 를 바탕으로 한 챕터씩 학습하며 기록했습니다.


-


Kubernetes Basics 목차

    • What is Kubernetes
    • Create a Cluster
    • Deploy an App
    • Explore Your App
    • Expose Your APp Publicly
    • Scale Your App
    • Update Your App


Kubernetes cluster orchestration system 에 대한 튜토리얼 입니다.

이 튜토리얼을 통해, 간단한 클러스터와 컨테이너화된 애플리케이션을 만들 수 있게 됩니다.


이 튜토리얼은 학습자의 웹 브라우저 (Minikube를 돌리는) 에 가상 터미널을 돌리기위해 Katacoda 를 사용합니다.

* Katacoda 는 어디에서나 돌 수 있는 Kubernetes의 작은 스케일의 local deployment 입니다.






0. Kubernetes 로 뭘 할 수 있죠?


현대 웹 서비스의 유저들은 24/7 이용가능한 서비스를 기대하고, 개발자들은 하루에 몇번씩 새로운 버전을 배포하길 바랍니다.

Containerization (컨테이너화) 는 이런 목적을 달성시켜줍니다.

컨테이너화는, 다운타임없이 빠르고 쉽게 애플리케이션을 릴리즈하고 업데이트할 수 있도록 소프트웨어를 패키지하는데 도움을 줍니다.


Kubernetes 는 이렇게 컨테이너화된 애플리케이션을 언제 어디서나 운영할 수 있게 해주고, 개발자가 필요한 리소스를 찾을 수 있게 도와웁니다.


그럼 이제 Kubernetes 를 사용해봅시다.



Step 1. Create a Kubernetes Cluster


Kubernetes 가 무엇인지, Kubernetes 클러스터를 만들기 위해 사용하는 Minicube 는 무엇인지 를 학습하고,

온라인 터미널을 사용하여 Kubernetes cluster 를 사용해봅니다.


  • Kubernetes Cluster 란?

Kubernetes 는 싱글 유닛으로 작업에 연결되어있는 컴퓨터의 highly-available cluster 를 조정하는 역할을 합니다.
간단하게는, 특별한 동작없이도 클러스터에 컨테이너화된 애플리케이션을 배치(deploy)할 수 있도록 해주는 것이 Kubernetes의 역할이라 할 수 있습니다.

이러한 배치의 새로운 모델을 사용하기 위해서는, 애플리케이션은 개별의 호스트로부터 분리된 방식으로 패키지 되어야합니다.

즉, 컨테이너화 되어야 합니다.


컨테이너화된 애플리케이션은 이전 배치 모델에 비해, 더욱 유연하고 사용성이 좋습니다.

호스트에 깊게 통합된 패키지들로, 애플리케이션을 특정 머신에 곧바로 설치할 수 있습니다.


Kubernetes 는 애플리케이션 컨테이너들의 분배와 스케쥴링을 더욱 효과적인 방법으로 자동화합니다.


Kubernetes is a production-grade, open-source platform that orchestrates the placement (scheduling) and execution of application containers within and across computer clusters.


  • Kubernetes 는 두가지 리소스를 가지고 있습니다.

  • 1_  Master : 클러스터를 배정합니다.

    2_ Nodes : 애플리케이션을 실행하는 workers.



Master & Node


Master 는 클러스터를 managing 하는 역할을 합니다.

마스터는 사용자의 클러스터의 모든 액티비티를 조정합니다. 

- 애플리케이션 스케쥴링, 애플리케이션의 desired state 를 유지하는것, 스케일링, 새로운 업데이트를 만들어내는것 같은 액티비티들.


Node 는 VM 이거나 Kubernetes 클러스터 안에서 worker machine 으로서 일하는 물리적인 컴퓨터입니다.

각각의 노드는 Kubelet 을 가지고있는데, 이 Kubelet 은 노드를 매니징하고, Master 와 소통하기위한 대리인입니다.

노드는 컨테이너 운영을 처리하기위해 여러 도구를 가지고 있는데, Docker 와 rkt 가 그 예입니다.


Kubernetes 클러스터는 최소 3개의 노드를 가져야합니다.


번외_) 왜 3개의 노드일까?


https://coreos.com/etcd/docs/latest/v2/admin_guide.html#optimal-cluster-size

문서를 참조하면, 최적의 Cluster Size 표를 보실 수 있습니다.


우선 노드 개수가 홀수인 이유는 '과반수' 개념이 필요하기 때문인데요,

예를 들어 4개의 노드가 있을 경우, 2개의 노드는 과반수가 될 수 없기 때문입니다.


Raft Algorithm

https://raft.github.io/

http://i5on9i.blogspot.com/2016/09/raft.html


참고 문서

https://coreos.com/etcd/docs/latest/v2/admin_guide.html#optimal-cluster-size

https://blog.manifold.co/migrating-to-kubernetes-with-zero-downtime-the-why-and-how-d64ba9a92619

https://blog.seulgi.kim/2017/11/raft-consensus-algorithm.html


사용자가 Kubernetes 에서 애플리케이션을 배치하려고 할 때, 애플리케이션 컨테이너들을 시작하기 위해서는 Master 에게 알려주면 됩니다.

Master 는 클러스터의 Nodes 위에서 애플리케이션을 run 시키기위해 컨테이너들을 스케쥴링 합니다.


Nodes 는 Kubernetes API 를 통해 Master 와 소통합니다.

End-User 또한 클러스터와 상호작용하기 위해 Kubernetes API 를 직접적으로 사용할 수 있습니다.


Kubernetes 배치를 시작할 때, Minikube 를 사용할 수 있습니다.

Minikube 는 사용자의 로컬머신에 VM을 생성하고 오직 하나의 node 를 포함하는 간단한 클러스터를 배치하는 역할을 합니다.

* Minikube는 Linux, macOS, Window 에서 모두 사용가능 합니다.

* Minikube CLI 는 기본적인 부트스트래핑을 제공해줍니다.