bridge, host, none은 Docker 데몬(daemon)이 실행되면서 디폴트로 생성되는 네트워크입니다. 대부분의 경우에는 이러한 디폴트 네트워크를 이용하는 것 보다는 사용자가 직접 네트워크를 생성해서 사용하는 것이 권장됩니다.
기본적으로 새 컨테이너를 시작하면 자동으로 기본 bridge 네트워크에 연결된다
bridge 네트워크
Host 네트워크
오버레이 네트워크
Macvlan 네트워크
None 네트워크
컨테이너화된 애플리케이션의 배포, 확장 등을 관리하는 것을 자동화하기 위한 플랫폼
(컨테이너 오케스트레이션 엔진)이다.
도커는 설치된 호스트(도커 호스트)를 동시에 여러 대 동작시키거나 중앙에서 통합, 관리할 수 없는 단점이 있어
여러 호스트로 구성하거나 일정 규모 이상의 서비스 혼경에서 사용할 수 있는 시스템을 구축하기가 힘들다.
쿠버네티스로 대표되는 컨테이너 오케이스트레이션 엔진을 사용해 이러한 시스템을 구축할 수 있다.
컨테이너란 ‘어떤 애플리케이션을 실행하도록 빌드된 컨테이너 이미지를 기반으로 기동된 워크로드’ 이러한 컨테이너를 서비스 환경에서 사용하기 위해서는 아래의 과제들을 고려해야 한다.
쿠버네티스는 YAML 형식이나 JSON형식으로 작성한 선언적 코드(매니패스트)를 통해 qovgksms 컨테이너로 주변 리소스를 곤리할 수 있다. 즉 IaC(Infrastructure as Code)를 구현할 수 있다.
<매니패스트 파일 예제>
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.16
쿠버네티스는 컨테이너 클러스터를 구성하여 여러 쿠버네티스 노드를 관리한다.
쿠버네티스의 오토스케일링은 같은 컨테이너 이미지를 기반으로 하여 여러 컨테이너 레플리카를 배포하여 부하 분산 및 다중화 구조를 생성한다. (부하에 따라 자동으로 레플리카 수를 늘이거나 줄인다.)
컨테이너를 쿠버네티스 노드에 배포할 때 어떤 쿠버네티스 노드에 배포할지를 결정하는 단계이다.
이때 워크로드의 특징이나 노드의 성능을 그 기준으로 삼는다.
ex) 디스크 I/O가 많은 컨테이너를 디스크가 SSD인 쿠버네티스 노드에 배치
또 쿠버네티스 클러스터를 GCP/AWS/OpenStack 등에 구축한 경우 쿠버네티스 노드에 가용영역 등을 식별하는 추가 정보가 부여되어 있어 쉽게 멀티존 위에 컨테이너를 분산 배치할 수 있다.
■ 막간 용어
- 어피니티(Affinity) : ‘선호도’라는 뜻을 가지고 있으며 레이블, 토폴로지 및 기타 요소를 기반으로 노드에서 Pod 예약 규칙을 지정할 수 있는 쿠버네티스 기능이다.
즉 선호도 규칙을 정하는 것이라고 생각하면 된다.- 안티어피니티(Anti-Affinity) : 특정 포드가 동일한 노드에 함께 배치되지 않도록 지정하는 일종의 포드 스케줄링 제약 조건이다.
중요한 포드가 다른 포드의 장애 또는 성능문제의 영향을 받지 않도록 하기 위해 사용한다.- 포드(Pod) : 쿠버네티스 객체 모델에서 가장 작고 단순한 단위이다.
클러스터에서 실행중인 단일 인스턴스를 나타낸다.
포드에는 하나 이상의 컨테이너가 포함되며 동일한 호스트, 동일한 네트워크 네임스페이스를 공유한다.
컨테이너 배치에 대한 지정이 없을 경우 쿠버네티스 노드의 CPU나 메모리의 여유 리소스 상태에 따라 스케줄링된다.
다중화(fault tolerant) 관점에서 쿠버네티스의 중요한 콘셉트 중 하나이다.
쿠버네티스는 표준으로 컨테이너 프로세스를 모니터링하고 프로세스 정지를 감지하면 다시 컨테이너 스케줄링을 실행하여 컨테이너를 자동으로 재배포한다.
클러스터 노드에 장애가 발생하거나 노드를 축출했을 경우 그 노드의 컨테이너가 사라진다 해도 서비스에 영향 없이 애플리케이션을 자동으로 복구 할 수 있다.
복구 실행 조건에는 프로세스 모니터링 외에 HTTP/TCP나 셸 스크립트로 헬스 체크의 성공 여부를 설정할 수도 있다.
여러대로 구성된 애플리케이션을 하나의 애플리케이션으로 사용자에게 보여주고 접속시키려면 목적지가 되는 엔드 포인트를 하나로 통합할 필요가 있다. 로드밸런서의 주소가 그 역할을 한다.
컨테이너 확장시 엔드포인트가 되는 서비스에 컨테이너의 자동 등록과 삭제 컨테이너 장애시 분리, 롤링 업데이트 시 필요한 사전 분리 작업을 자동으로 진행한다. (엔드포인트의 관리를 쿠버네티스에게 맡긴다.)
컨테이너를 사용해 시스템을 구축시 마이크로서비스 아키텍처를 많이 선택하게 된다, 이때 각각의 마이크로서비스는 서로를 참조하는데 이때 서비스 디스커버리 기능이 매우 유용하다.
이를 통해 각각의 마이크로 서비스가 정의된 복수의 매니페스트를 이용하여 시스템 전체를 쉽게 연계 할 수 있다.
쿠버네티스는 백엔드 데이터 스토어로 etcd를 채용하고 있다.
etcd는 클러스트를 구성하여 이중화가 가능하고 컨테이너나 서비스의 매니페스트 파일도 이중화 구조로 저장한다.
컨테이너가 사용하는 설정 파일이나 인증 정보 등의 데이터를 저장하는 구조도 가지고 있어 컨테이너 공통 설정이나 애플리케이션에서 사용되는 데이터베이스 인증 정보 등을 안전하고 이중화된 상태로 쿠버네티스에서 집중적으로 관리할 수 있다.
해당 자료는 Kubernetes 완벽 가이드 도서의 내용을 바탕으로 정리되었습니다.