Kubernetes의 정의
*k8s – ’K’와’s’ 사이의 문자 수를 나타내는 8을 표현하여 k8s로 줄여서 부릅니다.
컨테이너 운영의 장점
1. 이식성(Portability)
- 독립성: 애플리케이션과 서비스를 호스팅하는 머신과 분리하여, 호스트 OS와 독립적인 환경을 제공합니다.
- 호환성: 호스트 OS와 상관없이 애플리케이션을 배포하므로, 다양한 환경에서 쉽게 실행할 수 있습니다.
2. 효율성(Efficiency)
- 가볍고 빠른 배포: 컨테이너를 실행하기 위해 필요한 모든 파일과 의존성을 포함하므로, 빠르고 쉽게 배포할 수 있습니다.
- 자원 사용량 최적화: 컨테이너를 사용하여 애플리케이션을 실행하면 가상화된 환경에서 실행되기 때문에 더 적은 자원을 사용하며, 더 많은 서비스를 제공할 수 있습니다.
3. 보안성(Security)
- 격리성: 애플리케이션을 실행하기 위한 환경을 격리시켜, 다른 애플리케이션에 영향을 미치지 않습니다.
- 이미지 보안: 컨테이너 이미지는 레지스트리를 통해 분배되므로, 안전한 이미지를 사용하여 애플리케이션을 실행할 수 있습니다.
4. 확장성(Scalability)
- 수평 확장: 컨테이너 기술을 이용하면, 쉽게 서비스 인스턴스를 추가하거나 제거할 수 있으므로, 더 많은 요청을 처리할 수 있습니다.
Docker와 Kubernetes
처음 컨테이너 운영을 고려한다면 Docker와 Kubernetes 사이에서 많은 고민을 합니다.
Docker만의 장점도 있지만 Docker 대신 Kubernetes 를 사용했을 때의 장점 또한 많이 존재합니다.
K8s의 장점에 대해서 알아 보겠습니다.
Why k8s?
Docker | Kubernetes | |
컨테이너 관리 | O | O |
모니터링 | O | O |
배포 관리 (무중단 배포) | O | O |
Self-Healing | X | O |
비밀 관리 | X | O |
로드 밸런싱 (LB) | X | O |
Auto-Scaling | X | O |
Docker의 부족한 유연성과 기능을 해결할 수 있는 컨테이너 관리 기술이 Kubernetes입니다.
어떤 상황에 k8s를 사용할 것인가?
- 마이크로서비스를 컨테이너 방식으로 운영하는 조직이 확장성을 고려해야할 때
- 무중단 서비스, 즉 고가용성을 제공해야할 때
- 대규모 분산 시스템, 수백~수천 개의 컨테이너 관리가 필요할 때
- 그 밖에 다양한 기능들이 필요할 때: 자가 치유, 배치 실행, 구성 관리, 로드 밸런싱
Kubernetes 구조 소개
Master Node, Worker Node 로 구분
Master Node
kube-apiserver : API 서버는 쿠버네티스의 고가용성 보장
- 인스턴스간의 트래픽을 균형있게 조절
- 인스턴스 배포 확장
etcd : 모든 클러스터 데이터를 담아 둘 수 있는 키-값 저장소
- 데이터베이스 역할
- 일관성 및 고가용성 보장
kube-scheduler : 노드가 배정 되지 않은 파드를 감지 실행시킬 노드를 배치 역할
- 파드의 스펙과 요구사항을 분석하여 적절한 노드 선택
- 클러스터 자원 사용률 최적화
kube-controller-manager : 쿠버네티스가 일관된 상태를 유지하고 안정적인 운영되도록 지원 역할
- 레플리카셋 컨트롤러 : 레플리카셋의 정의된 파드 수 유지
- 엔드포인트 컨트롤러 : 서비스와 파드를 연결할 때 사용되는 엔드포인트 관리
- 노드 컨트롤러 : 노드 상태 감시
- 외 다양한 컨트롤러 존재
Worker Node
kubelet : 각 노드에서 실행중인 컨테이너와 관련된 모든 작업을 처리하고 관리
- 컨테이너 생성
- 상태 모니터링
kube proxy : 클러스터 내부에서 외부 사용자와 서비스 연결 역할
- Service IP – Pod IP 맵핑을 통해 네트워크 통신
- 로드 밸런싱
container runtime : 컨테이너 실행 담당
- CRI-O : 현재 디폴트 컨테이너 런타임으로 다른 런타임의 비해 경량화된 런타임
- cri-dockerd : Docker Engine을 사용하는 런타임 (1.24버전부터 지원 종료)
GKE(Google Kubernetes Engine)
Google Cloud Platform에서 제공하는 완전 관리형 서비스로 사용자는 복잡한 Master Node를 관리를 신경 쓸 필요가 없어지고, 서비스를 확장하기에 용이해지기 때문에 K8s를 처음 도입한다면 추천하는 서비스입니다.
또한 백업 서비스(Backup for GKE)를 제공하기 때문에 안정성까지 챙길 수 있습니다.
Kubernetes를 구축하는 방법
1. 자체서버 환경에서 설치
2. 클라우드 서버 인프라 위에 설치
3. GKE(GCP), AKS(Azure), EKS(AWS)등의 CSP 사용
→ 3번째 방법에 해당
제공 서비스 구분 (on-premise, iaas, paas)
→ Managed K8s 사용 시 애플리케이션 배포에만 집중할 수 있습니다.
GKE의 장점은?
1. GKE는 확장성이 뛰어나며 Kubernetes 클러스터 관리의 여러 측면을 자동화 가능합니다.
- Cloud Build & Cloud Deploy를 통한 배포 자동화 (CI/CD)
2. GKE는 Standard, Autopilot 구성을 선택 가능
- Standard
– Zonal, Regional Cluster 지원
– Zonal Cluster 기준 Node 3대 이상으로 구성 시 SLA 99.5% 보장
– Cluster수와 Worker Node 숫자 기준으로 비용 청구 - Autopilot
– Regional Cluster 만 지원
– Node 관리를 GKE에서 지원하며 SLA 99.95% 보장
– Standard와 달리 Pod 당 비용으로 청구
3. Backup for GKE
- Backup for GKE는 GKE 클러스터에서 워크로드를 백업하고 복원할 수 있는 서비스
배포 자동화 (CI/CD)
CI/CD는 지속적인 통합 (Continuous Integration) 및 지속적인 배포 (Continuous Deployment)를 의미하는 용어로서, 소프트
웨어 개발 프로세스를 자동화하고 개발자가 빠르게 소프트웨어를 릴리스할 수 있도록 하는 방법입니다.
CI/CD는 또한 다수의 개발자들이 함께 작업하는 경우 코드 충돌 및 코드 변경으로 인한 문제를 예방할 수 있도록 도와줍니다.
이를 위해 자동화된 빌드 및 배포 프로세스를 사용하여 코드 변경 사항을 통합하는 역할을 합니다.
CI/CD 파이프 라인에 장점
- 시장 출시 기간 단축 – 매번 테스트를 거친 후 배포 하기 때문에 사용자의 요구에 매주 혹은 매일 신속한 피드백 수렴이 가능하기 때문에 시장 경쟁력을 갖출 수 있습니다.
- 위험 감소 – 배포과정에서 발생할 수 있는 휴먼에러를 최소화하고 테스트를 거친 배포이기 때문에 안정성이 높습니다.
- 빌드 시간 단축 – 개별적으로 이미지를 빌드, 푸시하는 수작업 과정을 생략 할 수 있습니다.
GCP CI/CD
GCP product를 이용한 CI/CD 파이프라인 구성 아키텍처입니다.
자세한 설명은 링크 영상에서 다루고 있으니 참고바랍니다. (영상 링크)
이와 관련된 문의 사항이 있으시다면 클루커스 GCP팀으로 문의 바랍니다.