
아래 내용들은 44BITS 님의 강의 내용을 정리한 내용입니다.
내용들은 추가적으로 제가 쿠버네티스를 공부하며, 중요하다고 생각된 내용들을 정리해서 작성해두었습니다..
쿠버네티스에 대해 알아보자.
기본적으로 쿠버네티스를 이해하려면 컨테이너와 오케스트레이션 개념에 대해 함께 알아야한다. 같이 한번 알아보자.
컨테이너 오케스트레이션란? (여러 컨테이너들을 관리 하는 방법)
컨테이너 오케스트레이션이란? : 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화 하는 기술을 말한다.
대규모 서비스(naver, aws, amazone) 를 구현하기 위해, 여러개의 서버 여러개의 클라이언트가 필요한 경우가 있다. 이러한 다양한 종류의 서버와 클라이언트를 하나의 컴퓨터에서 돌릴 때 라이브러리 버전이 다르거나, 충돌이 발생할수 있는데, 이러한 오류들을 방지하기위해, 각각의 서버나 클라이언트를 컨테이너화 하게된다. 문제는 컨테이너의 수가 많아지면 배포, 관리 ,확장, 네트워킹 자동화가 하는데 작업량이 필요하다. 컨테이너 오케스트레이션을 통해 자동화 시켜줄수 있다.
1. 컨테이너란?
컨테이너는 리눅스 기술을 사용하여 선박의 컨테이너 처럼 프로세스가 사용하는 애플리케이션을 관련 라이브러리 및 종속 항목을 격리 하는 것입니다
vm 과 도커 차이 : vm의 경우, 호스트 os위에 각각의 vm즉 guestOS를 설치합니다. (호스트 os와 게스트 os사이에 커널을 하나씩 생성해야하고, 이러한 커널작업과, guest마다 os를 생성하다 보니, 무겁고 느려집니다.) 컨테이너의 경우, 하나의 호스트에 도커 엔진을 올리고 도커 엔진 위에 Application 실행에 필요한 바이너리만 올라가게 됩니다.

사진참고
vm과 도커 차이 잘 정리 되어있음.
2. 컨테이너 장점.
- 가상머신 보다 컨테이너 생성이 쉽고 효율적.
- 컨테이너 이미지를 이용한 배포와 롤백이 간단.
- 언어나 프레임워크에 상관없이 동일한 환경에서 어플리케이션으로 관리 가능.
개발 로컬 컴퓨터에서 잘 작동했는데, 실행환경에서 운영해보면 정상적이지 않앗던 부분이 있다. 컨테이너 화를 하면 개발환경과 실행환경을 동일하게 세팅가능하다.
컨테이너 원리 : 컨테이너는 계층형태로 구성되어있다. 도커에서 컨테이너를 만들 떄 이미지 계층 방식을 이용한다.
예를들면 하나의 컨테이너 위에 os와 nginx를 올리고 싶다면, os 레이어를 컨테이너에 쌓고, 추가적으로 nginx 레이어를 추가해서 os와 nginx가 설치된 컨테이너를 만들수 있다.
이렇듯 컨테이너를 만들떄는 한층한층씩 이미지에 쌓인다.
이미지는 도커에서 컨테이너를 만들 때, 읽기 전용으로 만 사용되며 여러개의 컨테이너를 만들 때 하나의 이미지로 여러개의 동일한 컨테이너를 쉽게 만들 수 있다.
컨테이너의 원리
3. 컨테이너를 여러개 생성했을 때 단점
- 컨테이너의 수가 많아지면 컨테이너 하나하나 관리하기가 힘들어 집니다.
a. 하나의 프로그램이 100 개의 컨테이너가 필요한 경우, 프로그램을 실행하기 위해 관리자는 100개의 컨테이너를 실행해야 한다.
b. 서비스 중인 컨테이너가 멈춰버리거나 또는 서버가 갑자기 부하를 많이 받을 때 여러개의 컨테이너들이 재부팅해야할 경우, 로드벨런스를 시켜주어야 하는 경우 이를 하나하나 수작업으로 하기엔 많은 인력이 필요하다.
로드벨런서란? : 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스입니다.
2. 쿠버네티스란?
- 쿠버네티스는 컨테이너들을 관리하기 위한 구글에서 만든 오픈소스 플랫폼이다.
구글은 서비스 할 때 20억개의 컨테이너를 관리하고 있고, 20억개의 컨테이너를 오케스트레이션 해주는게 쿠버네티스다. 그 만큼 대량의 컨테이너를 관리하는데 효율적이다.
3. 쿠버네티스의 구성
- kubernetes 는 마스터(master), 노드(node), 애드온(addon)으로 구성됩니다. 추가적으로 마스터와 노드로 구성된 클러스터도 살펴보도록 하겠습니다.
1. 마스터
마스터에는 etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy, docker등이 실행됩니다
2. 노드
- 노드는 쿠버네티스에서 워커 머신을 말하며 클러스터에 따라 가상 또는 물리 머신일 수 있다. 각 노드는 마스터에 의해 관리된다. 하나의 노드는 여러 개의 파드를 가질 수 있고, 쿠버네티스 마스터는 클러스터 내 노드를 통해서 파드에 대한 스케쥴링을 자동으로 처리한다.
3. 애드온
Kubernetes Cluster가 필요한 기능을 실행하기 위해 pod와 service 형태로 존재,
애드온은 클러스터 내부에서 필요한 기능들을 위해 실행되는 포드들입니다. 애드온에 사용되는 포드들은 디플로이먼트, 리플리케이션컨트롤러등에 의해 관리됩니다. 애드온이 사용하는 네임스페이스는 kube-system입니다.(에드온은 쿠버네티스에서 데쉬보드같이 여러 형태로 사용자가 볼수 있게 제공해준다.)

(조대협님 블로그 사진참조)[https://bcho.tistory.com/1256][쿠버네티스 아키텍처](https://arisu1000.tistory.com/27827)
4. 클러스터
-
쿠버네티스를 배포하면 클러스터를 얻습니다. 즉, 쿠버네티스를 실행 중이라는 건 클러스터 생성되었다는걸 의미합니다.
-
클러스터는 크게 2가지 종류로 구성됩니다. 클러스터를 관리하는 역할을 하는 마스터(master)와 실제 컨테이너를 실행시키는 작업을 하는 노드(node)입니다.
쿠버네티스 클러스터에는 원하는 상태가 있으며, 이 상태는 실행해야 할 애플리케이션이나 워크로드, 사용하는 이미지, 사용할 수 있는 리소스 등과 같은 기타 구성 세부 사항을 정의합니다.
클러스터란? 한번 읽어보기
-
클러스터가 갖춰야 3가지 특성.
1. 보안성: 최신 보안 모범 사례를 따라야 합니다.
2. 사용 편이성: 몇 가지 간단한 명령으로 작동할 수 있어야 합니다.
3. 확장 가능성: 하나의 제공업체만을 선호해서는 안 되고 구성 파일을 통해 사용자 정의할 수 있어야 합니다.
4. 쿠버네티스 용어
- master : 마스터 노드 실행되는 세개의 프로젝트 집합(kube-apiserver, kube-controller-manager, kube-scheduler)
- Node : kubelet, kube-proxy, 동작중인 pod를 유지시키고 런타임 환경제공 노드는 클러스터에 따라 가상 또는 물리적 시스템 일 수 있습니다
- Control Plane : master + kubelet
- object : Pod, Service, Volume, Namespace 등으로 시스템의 상태를 나타내는 추상 개념 (써보면 감이 올거다. 간단한 예로, 파드에 연결하는 외부포트설정도 objecte 중 하나이다.)
- Controller : ReplicaSet, Deployment, StatefulSet, DaemonSet, Job 등으로 기초 오브젝트를 기반으로 부가 기능 및 편의 기능을 제공하는 개념. (deployment 나 replicaset의 경우 pod에 해당하는 부가적인 기능을 추가할수 있다.)
- Pod : 컨테이너의 집합으로 가장 작은 배포 단위. Pod 내부의 컨테이너 들은 네트워크와 볼륨을 공유, 클러스터내의 Running 프로세스
pod 특징 : Pod 내의 컨테이너는 IP와 Port를 공유한다. 서로다른 컨테이너가 하나의 pod를 통해서 배포 되었을경우, localhost 를 통해서 통신이 가능하다. 예를들면 하나의 컨테이너 A가 포트가 8080이고 다른 하나는B가 7002라면 배포가 되었을 때, B에서 A를 호출할떄, localhost:7001로 호출하면 된다., Pod 내에 배포된 컨테이너간에는 디스크 볼륨을 공유할 수 있다.


- volume : 쿠버네티스에서 볼륨이란 Pod에 종속되는 디스크이다. (컨테이너 단위가 아님). Pod 단위이기 때문에, 그 Pod에 속해 있는 여러개의 컨테이너가 공유해서 사용될 수 있다.
- 볼륨에는 종류에는 여러가지가 있는데, 나는 pod를 껏다켜도 안전하게 데이터를 복원할수 있고, 컴퓨터 저장공간도 여유가 있기에, 실습에선 persistentvolume을 사용하고자한다.
persistentvolume 이란? 시스템 관리자가 생성한 물리 디스크를 쿠버네티스 클러스터에 표현한것이 PV 입니다. 시스템 관리자가 실제 물리 디스크를 생성한 후에, 이 디스크를 PersistentVolume이라는 이름으로 쿠버네티스에 등록합니다
persistentvolumeclame 이란? : pv를 사용할떄는 pvc도 함께 사용하는데, pvc는 PVC는 사용자가 PV에 하는 요청이다. 사용하고 싶은 용량은 얼마인지, 읽기/쓰기는 어떤 모드를 사용하고 싶은지 등을 정하여 요청한다. 즉 사용자가 직접 볼륨을 할당 하는게, 아니라, pvc를 두어 좀더 쉽게 volume을 생성할수 있게 도와주는게 pvc이다.

사진참조
- Service : pod의 집합들을 외부와 연결해주는 정책에 대한 추상화.
- Cluster IP : 클러스터 내에서 사용되는 내부 IP
- External IP : 외부 ip
이외에도 다른 용어들이 있다. 더 궁금한게 있다면, 쿠버네티스 공홈 여기 들어가서 살펴보길 바란다.
5. 쿠버네티스 역활(가볍게 읽어보기)
1. 클러스터 역활(가볍게만 읽어보기)
1. 중앙제어
- 컨테이너가 무수히 많아진다고 가졌했을떄,
- cpu1000, ram8gb, cpu8000,ram32gb, cpu100,ram256mb 처럼 서버가 나뉘어 져있들떄 기존에는 서버관리자가 다 알고 관리를 햇지만, 이런 서버가 무수히 많아졌을때 관리를 편하게 하기위해, 여러 서버를 하나의 클러스터로 합치고 관리를 한다.
- 이런 클러스터들들은 여러 서버들을 집합체인데, 이 서버들에 하나하나 접속해서 관리하기는 어렵기 떄문에, 하나의 마스터 서버를 두고 마스터서버에 명령 을 내리면 어떤서버든 접속가능하게 만들어주엇다.
2. 네트워킹
- 클러스터의 노드들끼리는 네트워크가 잘 되어있어, 서버들끼리 통신하는데 문제가 없어야한다.
3. 노드 스케일
- 노드의 개수가 1000가 넘어갈수도 있다. 잘 관리되게 설계해야한다.
- 노드의 개수가 수천개 수만개 가 되더라도 클러스터역활이 잘 되어야한다.
2. state (상태관리)
- 컨테이너가 3개를 사용한다고 설정을 해두 었는데, 사용중 한개가 갑자기 꺼지면 알아서 새로운 컨테이너 하나를 열어 3개를 유지하게 만들어 주는기능
3. scheduling (배포관리)
- 여러 프로그램이 있는데, 어떤 서버는 여유가 있고 어떤 서버는 여유가 없다. 이럴떄 여유있는 서버에 넣고 여유없는곳은 그대로 두는 배포관리역활도 함.
4. 배포 버전관리
- 컨테이너 마다 버전이 다른데, 이버전들을 하나하나 업데이트시키는게 아니라 한번에 해줌. 롤백도 가능함.
5. 서비스 등록 및 조회
사용자나 쿠버네틱이(오케이스트레이션) 서버를 사용하겠다고 등록하면, 새로운 서버를 사용하는 프록시 서버에 자동으로 설정해주는 기능''
6. 볼륨 스토리지
- 각 노드마다, NFS나 AWS EBS, GCEPD 같은 volume들을 마운트해줘야하는데, 이를 손으로 할수 있지만, 설정으로도 할 수 있게 해줌.
이외에도 오케이스트레이션에는 컨테이너를 관리하는 다양한 기능들이 있다.
한번 읽어 보기
1. 왜 쿠버네티스를 많이 사용할까?
- 구글은 1주일에 20억개의 컨테이너를 만들고 있엇다. 이런 구글이 만든 오케이스트레이션이 쿠버네티스이다.
(아무래도 많은 컨테이너를 다룬 구글이니까 더 용의하게 만들었겠지?)
2. 어떤걸 배울까?
쿠버네티스 == 어렵다.
- 구성요소를 이해하고, 동작원리를 파악하고 기본적인 사용법을 익혀보자.
- 롤도 잘할려면 어렵다... 하지만 즐겜으로 마우스 움직이고 캐릭터 움직이는건 할만하다 그정도만 일단 배워보자.
3. 도커를 사용하며 바뀐점
- 과거에는 웹서버 pc가 따로 있었고, db서버 pc가 따로있었다면, 요즘에는 컴퓨터하나의 컴퓨터라도 컨테이너로 묶어서 뛰워두기만 하면 문제없이 잘 동작하기 떄문에 하드웨어 자원에 상관없이 서버나 db, 프로그램등을 나누어 사용할수 있게 되었다.

위 사진은 44BITS강의를 캡쳐한 사진입니다.
다음 할일
- 오늘은 쿠버네티스의 개념과 용어 및 특징들에 대해 살펴보았다. 다음시간에는 쿠버네티스 설치와, 사용법 및 예제를 보도록하자.