도커를 학습하다 보니까 자연스럽게 쿠버네티스를 만나게 되었습니다.
등장하는 개념이 많아서 블로그에 글로 정리하고 복습해보려고 글을 작성하였습니다.
Kubernetes
컨테이너화된 애플리케이션을 자동으로 배포, 스케일링, 관리해주는 오픈소스 플랫폼입니다.
도커를 사용할 때 다음과 같은 의문이 드신 적이 있나요?
- 컨테이너가 죽으면 어떻게 자동으로 재시작할까?
- 트래픽이 많아질 때 어떻게 자동으로 스케일링 할까?
- 새로운 버전을 무중단으로 배포할 수 없을까?
- 여러 서버에 걸쳐있는 컨테이너들을 어떻게 관리할까?
쿠버네티스는 이런 고민들을 해결할 수 있습니다.
구성 요소
쿠버네티스의 클러스터는 크게 마스터 노드와 워커 노드로 그 역할이 확실히 구분되어있습니다.
마스터 노드는 클러스터 전체를 제어하고 관리하는 역할을 합니다.
API 서버는 모든 요청의 관문 역할을 합니다. 쿠버네티스의 명령어나 다른 API 클라이언트 요청을 처리하고 인증과 권한에 대한 검사를 수행합니다.
스케줄러는 새로 생성된 pod를 어떤 워커 노드에 배치할지 결정합니다.
컨트롤러 매니저는 클러스터의 상태를 지속해서 모니터링합니다.
etcd는 클러스터의 모든 상태와 데이터를 저장할 수 있는 분산 데이터베이스입니다.
워커 노드에서는 실제 애플리케이션 컨테이너가 실행됩니다.
kublet는 각 노드에서 실행되는 에이전트로 pod의 생성, 수정, 삭제를 담당합니다. 또한 pod 내의 컨테이너들이 정상적으로 동작하는지 모니터링합니다.
kube-proxy는 pod의 네트워크 관리, 서비스에 대한 로드밸런싱 처리, 클러스터 내부 네트워크 규칙 관리를 담당합니다.
오브젝트
위에서 pod이라는 단어가 나와서 당황했을 수 있습니다.
주요 오브젝트인 pod, deployment, service에 대해서 간단하게 설명하겠습니다.
- pod
- 가장 기본적인 배포 단위
- 하나 이상의 컨테이너 포함
- 같은 pod 내의 컨테이너들은 스토리지와 네트워크를 공유
- deployment
- pod의 선언적 업데이트와 관리를 담당
- 롤링 업데이트와 롤백 기능 제공
- pod 장애시 자동으로 복구
- service
- pod들을 네트워크 서비스로 노출하는 방법을 제공
- 로드 밸런싱 기능
- 고정된 IP 주소 제공
- 서비스의 종류에는 ClusterIP, NodePort, LoadBalancer 등이 존재
기본 명령어
자주 사용하는 기본 명령어 몇가지만 소개하겠습니다.
# 클러스터 정보 확인
kubectl cluster-info
# 노드 목록 조회
kubectl get nodes
# Pod 목록 조회
kubectl get pods
kubectl get pods -o wide # 상세 정보
# Deployment 생성
kubectl create deployment nginx --image=nginx
# 로그 확인
kubectl logs [pod-name]
# Pod 내부 접속
kubectl exec -it [pod-name] -- /bin/bash
# 리소스 삭제
kubectl delete pod [pod-name]
kubectl delete deployment [deployment-name]
# YAML 파일 적용
kubectl apply -f deployment.yaml
# 배포 상태 확인
kubectl get deployments
용어와 개념이 너무 많아서 처음에는 압도 당했지만 실습하면서 정말 좋다고 느꼈습니다.
특히 문제가 생겨도 자동으로 복구되는 점이나 yaml만 수정해서 pod을 쉽게 복제할 수 있다는 점이 놀라웠습니다.
글을 끝까지 봐주셔서 감사합니다.
틀린 내용이 있다면 댓글로 지적 부탁드립니다.
'개발환경' 카테고리의 다른 글
[Jenkins] CI/CD 파이프라인 (0) | 2024.12.05 |
---|---|
[Docker] 컨테이너 세계 입문 (1) | 2024.12.02 |
[VSCode] Snippet 사용하기 (1) | 2024.11.19 |
[Postman] 편리한 API 호출 툴 사용해보자 (1) | 2024.09.04 |
Windows11에서 Node.js 설치하기 (0) | 2024.08.22 |