> For the complete documentation index, see [llms.txt](https://donghyunlee.gitbook.io/write-up/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://donghyunlee.gitbook.io/write-up/project/how-to-find-container-platform-escape-bug/kubernetes/introduction-to-kubernetes.md).

# Introduction to Kubernetes

아래 영상을 보고 정리하였다.

{% embed url="<https://youtu.be/S3FVcdZcZnA>" %}

쿠버네티스는 컨테이너를 관리하기 위한 툴이다.

도커를 이용해 Node.js 혹은 장고 웹사이트를 배포하려고 한다면, 그리고 그걸 도커 컨테이너 안에 넣어서 AWS로 보내고 싶다면 이 프로세스에서는 쿠버네티스를 알아야할 이유가 없다. 도커를 업로드하고, 배포하는 것이 전부이기 때문이다.

## Monitoring Containers

도커는 여러개의 컨테이너를 갖고 있을 때 쓰인다.

만약 micro-service archtechture를 갖고 있다면, 그래서 어떤 컨테이너는 유저 업로드만 다루고 어떤 컨테이너는 인증만 다루고 어떤 건 결제만 다루고 있다면 이 모든 컨테이너들은 동시에 업로드가 되어야 한다.

배포를 할 땐 그렇게 하면 되긴 하는데, 많은 컨테이너들을 갖고 있다면 문제가 생길 수 있다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-MG8Ab4NypMac8fnvsud%2F-MG8AkiD-gM1vBneleMl%2Fimage.png?alt=media\&token=e906a2b6-d347-4da7-b708-ff46f07fb941)

예시로, 컨테이너 하나가 죽으면 재빠르게 해당 컨테이너를 재시작해야한다. 서비스의 핵심 파트일 수 있으므로.

이때 쿠버네티스가 등장한다. 수동으로 컨테이너들을 바라보며 문제가 있는지 없는지 체크해 죽으면 재빠르게 재시작하고 이러는게 아니라, 쿠버네티스로 하여금 (예를 들어) 최소 n개의 컨테이너들이 작동하게끔 할 수 있다. 그리고 그 중 하나라도 죽으면 쿠버네티스가 바로 재시작할 것이다. 즉, 컨테이너들을 모니터링한다. 컨테이너가 많은 경우, 쿠버네티스는 매우 유용할 것이다.

## Load Balancing

만약 1만 명의 유저가 접속하였지만 웹/앱은 준비가 되지 않았을 경우 쿠버네티스는 자동으로 새로운 컨테이너들을 만들 수 있다. 해당 웹사이트의 니즈를 수용할 수 있게 말이다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-MG8C8ELK2t6uV02NTt_%2F-MG8CXbqAB2diiqTnGXv%2Fimage.png?alt=media\&token=15b7e33d-cf3b-409b-9b22-b5b2be653a2e)

쿠버네티스가 알아서 해당 웹 니즈에 맞춰서 컨테이너들을 준비하고 사람들이 떠나고 니즈가 줄어들면 컨테이너를 지정해둔 최소 숫자로 자동으로 조정한다. 이전에는 수동으로 해야하는 작업이었지만 쿠버네티스가 도와주는 것이다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-MG8CavpiH9rN6xkk7p4%2F-MG8CvYJeU0Y_i9XGOGw%2Fimage.png?alt=media\&token=987a9110-a1e0-413f-8dd9-9123879ff1a4)

## Rolling Update

클라우드에 5개의 컨테이너가 있다고 해보자. 코드의 버그를 고치고 싶거나, 버전을 업데이트 하고 싶은 경우 쿠버네티스 없이 수동으로 해야한다면 컨데이너들을 끄고 새로운 버전을 올린 후 다시 컨테이너들을 켜야할 것이다. 이는 웹사이트가 잠시 다운되어야 한다는 의미이다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-MG8EN8ACL9zQ6fAPnaE%2F-MG8EqQOafVVKslGMvrl%2Fimage.png?alt=media\&token=aebceeb0-ad37-4712-970d-b233223b5053)

쿠버네티스를 이용하면 쿠버네티스가 컨테이너의 신규 버전을 차례로 업데이트 해줄 것이다. 웹사이트가 다운되는 경우 없이 말이다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-MG8F8H91CZwH6CKCICQ%2F-MG8FPkjZrhb5UMzA1j5%2Fimage.png?alt=media\&token=c1335cba-2548-46e9-b98c-a8d21f64eb9a)

## Conclusion

컨테이너로 작업 할 때 자동화해야할 것들이 많다. 새로운 버전을 배포하거나, 컨테이너 사이즈를 조정하거나, 혹은 컨테이너가 죽었을 때 빠르게 재시작한다거나 등.

많은 컨테이너가 필요한 웹/앱 서비스를 운영한다면 컨테이너를 업데이트하고, 재시작하고, 사이즈를 조정하는 등등의 경우 쿠버네티스가 필요할 것이다.
