이전 내용
[Cloud] aws : aws cli 로 쿠버네티스 클러스터 만들기
이전 내용 [Cloud] aws : aws console로 쿠버네티스 클러스터 만들기이전 내용 [Cloud] aws: ECR(Amazon Elastic Container Registry)이전 내용 [Cloud] 도커로 DB 연결하기이전 내용 [Cloud] 컨테이너 이미지 경량화 시
puppy-foot-it.tistory.com
쿠버네티스(Kubernetes)
쿠버네티스(Kubernetes)는 여러 개의 도커(Docker) 컨테이너를 효과적으로 관리하기 위한 오픈 소스 플랫폼이다.
[클러스터 구성 요소 - control plane]
★ API Server
- 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트
- 쿠버네티스 컨트롤 플레인의 프론트 엔드
- 최종 사용자 - 클러스터의 다른 부분 - 외부 컴포넌트가 서로 통신할 수 있도록 HTTP API를 제공
- API 서버를 통해 쿠버네티스 오브젝트 (pod, namespace, configmap, event, query)를 조작
- kubectl, kubeadm과 같은 컴낸드 라인도구를 사용하여 수행
- REST 호출을 사용하여 API 서버에 직접 접근할 수도 있다.
★ control plane - controller-manager
- 클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트
- 클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 준다
- cloud-controller-manager는 클라우드 제공자 전용 컨트롤러만 실행
- 자신의 사내 또는 PC 내부의 학습 환경에서 쿠버네티스를 실행 중인 경우 클러스터에는 클라우드 컨트롤러 매니저가 없음
- 논리적으로 각 컨트롤러는 개별 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 바이너리로 컴파일되고 여러 컨틀롤 루프를 단일 프로세스 내에서 실행됨 (kube-controller-manager와 같음)
- node 컨트롤러 : 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인
- route 컨트롤러 : 기본 클라우드 인프라에 경로를 구성
- service 컨트롤러 : 클라우드 제공 사업자 로드밸런서를 생성, 업데이트 삭제
★ control plane - scheduler
- 노드가 할당되지 않은 새로운 파드 를 감지
- 새로운 파드가 실행될 최적의 노드 선택
- 파드가 실행 가능한 노드를 찾은 다음 점수를 측정한 후 가장 높은 점수를 가진 노드를 선택
- 리소스요구 사항, 하드웨어/소프트웨어/정책적 제약, 어피니티(affinity) 및 안티-어피니티(anti-affinity) 명세, 데이터 지역성, 워크로드-간 간섭, 데드라인 고려
★ control plane - etcd
- 모든 클러스터 데이터를 담는 저장소로 사용되는 키-값 저장소
- 쿠버네티스의 필수 구성 요소
- etcd 는 분산형 합의 기반 시스템
- 데이터를 백업하는 계획은 필수
[쿠버네티스의 주요 기능]
- 컨테이너 배포 및 관리: 쿠버네티스를 사용하면 여러 도커 컨테이너를 쉽게 배포하고 관리할 수 있다. 이를 통해 애플리케이션의 배포 및 업데이트가 간편해진다.
- 자동화된 스케일링: 쿠버네티스는 부하에 따라 컨테이너 수를 자동으로 조절할 수 있는 기능을 제공한다. 예를 들어, 트래픽이 증가하면 더 많은 인스턴스를 자동으로 생성하여 처리할 수 있다.
- 서비스 디스커버리: 쿠버네티스는 클러스터 내의 컨테이너들이 서로를 쉽게 찾아 소통할 수 있도록 도와준다. 이로 인해 서비스 간 연결이 용이해진다.
- 자체 복구: 이상이 발생하면 쿠버네티스는 장애가 발생한 컨테이너를 자동으로 교체한다. 이를 통해 시스템의 가용성을 높일 수 있다.
- 트래픽 관리: 쿠버네티스는 트래픽을 효과적으로 관리하고, 여러 버전의 애플리케이션을 동시에 실행할 수 있도록 지원한다. 이를 통해 점진적인 배포가 가능하다.
Docker와 Kubernetes는 모두 컨테이너 기술과 관련이 있지만, 각각의 목적이 다르다.
Kubernetes는 컨테이너를 관리하고 조정하는 데 매우 유용한 도구인 반면, Docker는 컨테이너를 생성하고 실행하는 데 필수적인 툴이다. 따라서, 이러한 기술을 함께 사용하는 것이 이점이 크며, Docker는 여전히 컨테이너 기술의 기본으로서 매우 중요한 역할을 한다. 이렇게 함으로써 개발자들은 효율적으로 애플리케이션을 개발하고 배포할 수 있다.
운영 수준의 컨테이너 오케스트레이션
K8s라고도 알려진 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다. 애플리케이션을 구성하는 컨테이너들의 쉬운 관리 및 발견을 위
kubernetes.io
도커와 쿠버네티스
[Kubernetes가 있음에도 Docker를 사용해야 하는 이유]
1. 컨테이너화
애플리케이션 포장: Docker는 애플리케이션을 컨테이너라는 독립된 환경에 포장할 수 있게 해준다. 이는 애플리케이션과 그 의존성을 모두 포함하여, 운영 체제에 관계없이 동일하게 실행될 수 있도록 한다.
2. 개발 환경 설정
일관된 개발 환경: Docker는 개발자들 간에 일관된 환경을 제공한다. 팀의 모든 개발자가 동일한 Docker 이미지를 사용하면, 개발 환경의 차이로 인한 버그를 줄일 수 있다.
3. 손쉬운 배포
신속한 배포: 개발자가 Docker 이미지를 작성하기만 하면, 특정 서버나 클라우드 환경에서 쉽게 배포할 수 있다. Docker Hub와 같은 이미지 레지스트리를 사용하여 애플리케이션 이미지를 공유할 수 있다.
4. 빠른 속도
경량화: Docker 컨테이너는 가상 머신에 비해 훨씬 경량이다. 따라서 애플리케이션 실행 시간이 빠르고, 시스템 자원도 절약할 수 있다.
5. 로컬 개발 환경
로컬에서 실행 가능: Docker는 개발자가 로컬 머신에서 컨테이너를 실행하여 개발할 수 있게 해준다. 이는 서버에 배포하기 전에 애플리케이션을 테스트하고 디버깅할 수 있는 기회를 제공한다.
6. 관리와 유지 보수
버전 관리: Docker는 애플리케이션의 여러 버전을 쉽게 관리할 수 있게 해준다. 각 버전의 이미지를 저장하고 필요할 때 이전 버전으로 되돌릴 수 있다.
7. Kubernetes와의 통합
Kubernetes의 기반: Kubernetes는 클라우드 환경에서 여러 컨테이너를 관리하는 오케스트레이션 도구이다. Docker는 그 기반이 되는 컨테이너 기술로, Kubernetes와 함께 사용할 수 있다. Docker를 사용하여 컨테이너를 정의하고, Kubernetes를 사용하여 이들을 관리, 스케일 및 배포한다.
8. 마이크로서비스 아키텍처 지원
서비스 간 독립성: Docker는 각 마이크로서비스를 독립적인 컨테이너로 실행할 수 있게 하여, 서비스 간의 종속성을 줄이고 개별 서비스의 배포 및 업데이트를 쉽게 할 수 있게 한다.
다음 내용
[Cloud] aws : aws console로 쿠버네티스 클러스터 만들기
이전 내용 [Cloud] aws: ECR(Amazon Elastic Container Registry)이전 내용 [Cloud] 도커로 DB 연결하기이전 내용 [Cloud] 컨테이너 이미지 경량화 시키기이전 내용 [Cloud] 도커 허브에서 컨테이너 이미지 다운로
puppy-foot-it.tistory.com
'프로그래밍 및 기타 > Cloud : AWS' 카테고리의 다른 글
[Cloud] aws: eksctl, kubectl 주요 명령어 (0) | 2025.03.01 |
---|---|
[Cloud] aws : aws cli 로 쿠버네티스 클러스터 만들기 (0) | 2025.03.01 |
[Cloud] aws: ECR(Amazon Elastic Container Registry) (0) | 2025.02.27 |
[Cloud] 도커로 DB 연결하기 (0) | 2025.02.27 |
[Cloud] 컨테이너 이미지 경량화 시키기 (0) | 2025.02.27 |