Docker - Kubernetes의 작동 방식
안녕하세요, 미래의 기술 마법사 여러분! Kubernetes의 세상으로 여러분을 안내하게 되어 매우 기쁩니다. 컴퓨터 과학을 오랫동안 가르쳐온 사람으로서 Kubernetes는 과학 소설 영화에서 나오는 신비한 존재처럼 들릴 수 있지만, 사실은 컨테이너화된 애플리케이션을 관리하는 방식을 혁신시키는 강력한 도구입니다. 그麼, 시작해 보겠습니다!
Kubernetes는 무엇인가요?
Kubernetes는 자주 축약하여 K8s로 부르는(왜냐하면 'K'와 's' 사이에 8개의 글자가 있기 때문입니다) 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. 이 말이 입이 가물어지는 말이지만, 설명을 쉽게 만들어 보겠습니다.
거대한 피자 배달 서비스를 운영하고 있다고 상상해 보세요. 많은 주문(애플리케이션)이 들어오고, 이를 효율적으로 관리해야 합니다. Kubernetes는 이러한 배달기(컨테이너)를 결정하고 항상 충분한 배달기가 도로에 나가 있도록 보장하며, 배달기의 차가 고장나면 대체 배달기를 불러들이는 초고능력 매니저와 같습니다.
핵심 개념
자세한 내용에 들어가기 전에, Kubernetes의 몇 가지 핵심 개념을 알아보겠습니다:
- Pods: Kubernetes에서 가장 작은 배포 가능 단위.
- Nodes: Kubernetes 클러스터의 워크어 machine.
- Cluster: 컨테이너화된 애플리케이션을 실행하는 노드의 집합.
- Control Plane: 클러스터를 관리하는 Kubernetes의 뇌.
Kubernetes의 작동 방식
이제 우리는 기본 재료를 갖추었으니, Kubernetes가 이를 맛있는 기술 수프로 만드는 방법을 보겠습니다!
1. Control Plane
Control Plane은 우리의 주방에서 헤드 셰프와 같습니다. 클러스터에 대한 전역적인 결정을 내리고 클러스터 이벤트를 탐지하고 응답하는 역할을 합니다.
apiVersion: v1
kind: Pod
metadata:
name: control-plane-pod
spec:
containers:
- name: kube-apiserver
image: k8s.gcr.io/kube-apiserver:v1.21.0
- name: kube-controller-manager
image: k8s.gcr.io/kube-controller-manager:v1.21.0
- name: kube-scheduler
image: k8s.gcr.io/kube-scheduler:v1.21.0
이 YAML 파일은 Control Plane의 주요 구성 요소를 포함한 Pod를 정의합니다. 실제 환경에서는 이 구성 요소들이 일반적으로 고가용성을 위해 별도의 기계에서 실행됩니다.
2. Nodes
Nodes는 우리의 Kubernetes 벌집에서 일하는 일벌입니다. 그들은 실제로 컨테이너화된 애플리케이션을 실행하는 기계입니다.
apiVersion: v1
kind: Node
metadata:
name: worker-node-1
spec:
podCIDR: 10.244.1.0/24
status:
capacity:
cpu: "2"
memory: 4Gi
이 YAML은 2개의 CPU와 4GB 메모리를 갖춘 Node를 설명합니다. 실제로는 노드를 수동으로 생성하는 것이 일반적이지 않으며, 클라우드 제공자나 온프레미스 인프라에 의해 프로비저닝됩니다.
3. Pods
Pods는 마법이 일어나는 곳입니다! 그들은 Kubernetes에서 가장 작은 배포 가능 단위로, 일반적으로 하나 이상의 컨테이너를 포함합니다.
apiVersion: v1
kind: Pod
metadata:
name: my-awesome-app
spec:
containers:
- name: my-app-container
image: my-app:1.0
ports:
- containerPort: 8080
이 YAML은 "my-awesome-app"라는 이름의 Pod를 정의하며, 단일 컨테이너를 포함하고 있습니다. 컨테이너는 "my-app:1.0" 이미지를 기반으로 하며 포트 8080을 공개합니다.
Kubernetes in Action
이제 우리는 재료를 준비했으니, Kubernetes가 이를 모두 오케스트레이션하는 방법을 보겠습니다!
- 여러분의 애플리케이션을 Kubernetes에 제출합니다(보통 YAML 파일 형식으로).
- Control Plane의 API 서버가 이 요청을 수신합니다.
- �케줄러가 애플리케이션을 실행할 충분한 자원을 가진 Node를 결정합니다.
- 선택된 Node의 kubelet이 Pod를 생성하고 컨테이너를 시작합니다.
- Control Plane은 모든 Pod와 Node의 상태를 지속적으로 모니터링합니다.
Pod가 실패하면 Kubernetes는 자동으로 재시작할 수 있습니다. Node가 실패하면 Kubernetes는 해당 Node에서 실행 중인 모든 Pod를 다른 건강한 Node로 다시 예약합니다. 마치 초고능력 웨이터들이 여러분의 식사 경험을 완벽하게 만들어 주는 것과 같습니다!
Kubernetes 메서드
다음은 일반적인 Kubernetes 메서드 표입니다:
메서드 | 설명 |
---|---|
kubectl create | 파일이나 표준 입력에서 리소스를 생성합니다 |
kubectl get | 하나 이상의 리소스를 표시합니다 |
kubectl describe | 리소스에 대한 자세한 정보를 보여줍니다 |
kubectl delete | 리소스를 삭제합니다 |
kubectl apply | 리소스에 구성을 적용합니다 |
kubectl logs | Pod의 컨테이너에 대한 로그를 출력합니다 |
kubectl exec | 컨테이너에서 명령어를 실행합니다 |
kubectl port-forward | 하나 이상의 로컬 포트를 Pod로 포워딩합니다 |
결론
이제 여러분은 Kubernetes의 기본 개념에서 작동 방식까지 빠르게 둘러보았습니다. Kubernetes를 마스터하려면 시간과 연습이 필요합니다. 하지만 인내심과 호기심을 가지고 있으면, 곧 컨테이너를 오케스트레이션하는 프로가 될 것입니다!
마지막으로, 한 학생이 나에게 한 말을 떠올립니다. "Kubernetes는 고양이를 키우는 것과 같지만, 고양이는 컨테이너고, Kubernetes는 세계에서 가장優秀한 고양이 키우는 사람입니다." 나보다 더 잘 말한 사람이 없을 것입니다!
계속 탐구하고, 배우고, 가장 중요한 것은 기술과 함께 즐거움을 느껴보세요. 다음 번에 다시 만납시다, 행복한 컨테이너링을 기원합니다!
Credits: Image by storyset