
쿠버네티스란 뭘까?
요즘 개발자라면 쿠버네티스가 얼마나 인기 있는지 잘 알고 있을 거다. 그러면 도대체 "왜" 인기가 있는 거고 "왜" 써야만 하는지 알아보려 한다.
쿠버네티스는 컨테이너화 된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장 가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해 준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다. 쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했으며 K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스 화했다. 쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 15년 이상의 구글 경험과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있다.
위의 내용은 쿠버네티스 공식 독스에서 설명하는 글이다 사실 쿠버네티스 말고도 컨테이너 오케스트레이션 도구는 많지만 사실상 표준이라고 봐도 무방하다. 쿠버네티스를 설명하기 이전 과거와 현재의 배포시스템부터 알아보자
전통적인 배포 방식
초기 어플리케이션은 물리 서버에서 실행했었다.(실제 컴퓨터) 하나의 물리 서버에 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기 때문에, 리소스 할당의 문제가 발생했다. 예를 들어 물리 서버 하나에서 여러 애플리케이션을 실행하면, 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고, 결과적으로 다른 어플리케잇션의 성능이 저하될 수 있었다. 이것의 해결책으로 서로 다른 여러 물리 서버에서 애플리케이션들을 실행하는 것이다. 하지만 리소스가 충분히 활용되지 않는다는 점에서 확장 가능하지 않았기 때문에 물리 서버를 많이 유지하기 위해서 많은 비용이 들었다.
가상화된 배포 방식
전통적인 배포 방식의 해결책으로 가상회가 도입이 되었다. 이는 물리 서버의 CPU에서 여러 가상 시스템을 실행할 수 있게했다. 가상화를 사용하면 VM 간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없기 때문에, 일정 수준의 보안성을 제공할 수 있다. 또한 가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉡게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용까지 절감할 수 있어 더 나은 확장성을 제공한다. 각 VM은 가상 호된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신이다.
컨테이너 개발 방식
컨테이너는 VM과 유사하지만 격리 속성을 완화하여 어플리케이션 간에 운영체제를(OS)를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM과 마찬가지로 컨테이너에는 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있다. 또한 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다.
쿠버네티스의 컴포넌트
쿠버네티스를 공부하면서 가장 헷갈리지 않았나 생각이 드는 게 용어와 사용의 이유다. 이 글을 쓰는 이유도 개념이나 용어를 잘 이해한다면 사용하는데 더 좋다고 생각이 든다.

마스터 노드
마스터는 컨테이너를 관리하는 역할로 "컨트롤 플레인"이라고 불린다. 마스터는 각 노드에 배포, 업데이트, 스케일링 등의 지시를 내리는 역할이며 3개 이상의 서버에서 마스터를 구성할 것을 권장한다.
- API Server: 이것은 본질적으로 컨테이너인 Kubernates 클러스터의 진입점이다. 이는 서로 다른 Kubernetes 클라이언트와 클러스터 간의 통신을 허용하는 프로세스이다. 클라이언트에는 UI(Kubernetes 대시보드를 사용하는 경우), API (스크립트를 실행 중인 경우) 또는 명령줄 도구가 포함된다. 이러한 모든 클라이언트는 API 서버와 통신하여 클러스터와 상호 작용한다.
- Controller Manager: 클러스터의 상태를 추적한다. 클러스터를 주시하고 노드를 복구하거나 다시 시작해야 하는지 여부를 확인한다.
- Scheduler: 스케줄러는 사용 가능한 리소스 및 클러스터의 현재 로드와 같은 여러 요인을 기반으로 작업자 노드에서 적절한 파드 배치를 보장한다.
- etcd: 주어진 시간에 클러스터의 상태를 유지하는 키-값 저장소이다. etcd에는 클러스터의 각 노드에 대한 구성 정보 및 상태 데이터가 있습니다. etcd 스냅샷을 사용하면 전체 클러스터 상태를 복구할 수 있으므로 클러스터 백업 및 복원에 사용된다.
워커 노드
노드는 마스터의 지시로 컨테이너를 실행하는 역할을 하며 "데이터 플레인"이라 불린다. 노드는 최소 1개로 구성할 수 있지만 쿠버네티스는 두 대 이상의 노드를 구성할 것을 권장한다
작업자 노드는 컨테이너와 애플리케이션을 실제로 실행하는 Kubernetes 클러스터의 일부이며 두 개의 주요 구성 요소, 즉 Kubelet Service와 Kube-proxy 서비스를 가지고 있다.
- Kubelet 서비스: 각 작업자 노드에는 클러스터가 서로 통신하고 애플리케이션 프로세스 실행과 같은 작업자 노드에서 일부 작업을 실행할 수 있는 Kubelet process가 실행된다. API 서버의 지시를 수신하고 노드에서 실행 중인 컨테이너를 관리한다.
- Kube-proxy 서비스: Kube-Proxy 서비스 는 클러스터 내 서비스 간 통신을 가능하게 하는 역할을 한다.
이러한 작업자 노드에는 해당 노드에서 실행 중인 각 컨테이너 런타임인 도커 컨테이너가 있다. 워크로드의 분포에 따라 각 노드에서 실행되는 컨테이너의 수가 다를 수 있다.
작업자 노드는 수백 개의 클러스터를 실행해야 하므로 일반적으로 마스터 노드보다 강력하다. 그러나 마스터 노드는 워크로드의 분산과 클러스터의 상태를 관리하기 때문에 더 중요하다.
쿠버네티스가 너무 방대해서 여기에서 다 다룰 수 없다고 생각이 들어 나눠서 할 생각이다.
다음 시간에는 쿠버네티스의 가장 중요한 부분인 오브젝트에 대해서 알아보겠다.
기술 출처
https://www.educative.io/answers/what-is-kubernetes-cluster-what-are-worker-and-master-nodes
What is Kubernetes cluster? What are worker and master nodes?
A Kubernetes cluster is a cluster made up of master and worker nodes that runs containerized applications.
www.educative.io
https://kubernetes.io/ko/docs/concepts/overview/
쿠버네티스란 무엇인가?
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하
kubernetes.io
'DevOps > K8s' 카테고리의 다른 글
[K8s] 쿠버네티스 Deployment의 개념 (2) | 2022.12.22 |
---|---|
[K8s] 쿠버네티스 ReplicaSet의 개념 (0) | 2022.12.22 |
[K8s] 쿠버네티스 Label과 Selector (0) | 2022.12.21 |
[K8s] 쿠버네티스 Pod간의 네트워크 (1) | 2022.12.21 |
[K8s] 쿠버네티스 Pod의 개념과 환경변수 (0) | 2022.12.21 |