쿠버네티스 초보를 위한 책
- 컨테이너: 어디서나 어플리케이션 및 서비스를 실행하는데 필요한 모든 요소를 포함하는 소프트웨어 패키지
- vs 가상환경: 가상화 환경은 하드웨어 수준에서 격리를 수행하지만 컨테이너는 OS 커널을 공유하며 OS 레벨에서 격리된다
- 컨테이너 오케스트레이션: 여러 시스템(노드)에 분산된 컨테이너를 관리하는 툴
- 쿠버네티스: 구글의 대표적인 컨테이너 오케스트레이션 툴
- 도커 스웜: 설치와 관리가 쉬운 오케스트레이션 툴
- 용어
- 파드: 가장 기본적인 배포 단위 ( 여러 컨테이너를 포함할 수 있다 )
- 서비스: 파드를 외부에서 접근하기 위한 모듈
- 네임스페이스: 쿠버네티스 클러스터의 논리적인 분리 단위
- 볼륨: 컨테이너의 파일을 저장하고 컨테이너 간 공유하기 위한 저장소
- 오브젝트: 서비스, 볼륨, 네임스페이스를 묶어서 부르는 상태 관리가 필요한 대상
- 노드: 쿠버네티스 서버의 논리적 표현
- 매니페스트: 오브젝트를 생성하기 위한 메타 정보를 yml이나 json으로 기술한 파일처 구조
- 클러스터: 마스터 + 워커(다수) 노드의 집합
- 마스터 노드(컨트롤 플레인): 클러스터 전체 환경을 관리하는 노드
- API 서버: 클러스터로 명령을 받아 검증 및 인증 수행
- ETCD: 클러스터 정보, 리소스(파드) 정보가 담긴 저장소
- 스케쥴러: 파드를 위치할 워커 노드 확인
- 컨트롤러 매니저: 다양한 컴포넌트의 상태를 모니터링하고 실행 상태를 유지
- 워커 노드: 파드를 생성하고 서비스
- Kubelet: 각 노드에서 실행되는 에이전트로 파드에서 컨테이너 동작(생성/운영)을 담당
- 프록시: 노드에 대한 네트워크 규칙 관리
- 리눅스 iptables 와 netfilter를 이용
- netfilter: 규칙 기반의 패킷 처리 엔진 → 서비스 ip 를 특정 ip로 변경가능하게 함
- 파드(컨테이너 + 런타임) 로 구성
- 영구 스토리지: CSI 인터페이스로 연결된 외부 저장소
- 통신 구조
- 파드 네트워크(가상)와 호스트(노드)의 네트워크(물리)는 서로 다름
- 기본적으로는 같은 노드의 파드끼리만 통신 가능
- CNI 를 통해 다른 노드의 파드 컨테이너와 통신 할 수 있음
- 오버레이 네트워크: 노드에서 사용하는 물리적인 네트워크 위에 가상의 네트워크를 구성
- 기본 구성 명령어
- kubeadm: 쿠버네티스 클러스터 구축을 위해 사용
- kubelet: 각 노드에서 실행되는 에이전트
- kubectl: 클러스터와 통신하는 명령어 라인 인터페이스
- kubernetes-cni: 컨테이너가 데이터를 교환하고 통신하는 네트워킹이 가능하게 함
- 서비스
- 클러스터 내의 파드가 어떤 노드에 위치하던 고정된 주소로 접근할 수 있도록 서비스
- 클러스터 내/외부 접근 가능하도록 허용 가능
- 외부 → 내부
- 엔드포인트: 서비스 셀렉터와 디플로이먼트 레이블이 같도록 맵핑해야 해당 파드로 통신을 보낸다
- IP 종류
- 클러스터 IP: 같은 클러스터 내부에서 파드들이 통신할 수 있는 방법을 제공
- 노드 포트: 서비스를 외부로 노출하기 위해 사용
- 로드 밸런서: 주로 퍼블릭 클라우드의 로드밸런서와 연결하기 위해 사용
- 인그레스: 클러스터 외부에서 내부로 접근하는 요청에 대한 처리 규칙 모음
- 주로 L7 로드 밸런서를 의미하며 URL로 경로를 찾음
- 내부 → 외부
- External Name: 내부에서 외부에 접근 할 때 사용
- 프록시나 특정 이름(주소)를 다른 이름으로 자동 변환하는 리다이렉트 용도
- RBAC(Role Base Access Controll)
- 역할을 기반으로 쿠버네티스의 접속할 수 있는 권한을 관리
- 서비스 어카운트(계정)에 역할을 부여하여 권한을 관리
- 종류
- 단순 역할: 역할이 속한 네임스페이스에만 영향을 줌
- 클러스터 역할: 클러스터 전체에 적용
- 컨트롤러
- 파드를 관리하는 역할
- 종류: 디플로이먼트, 레플리카 셋, 잡, 크론잡, 데몬셋
- 디플로이먼트
- 무 상태 어플리케이션을 배포할 때 사용하는 가장 기본 컨트롤러
- 레플리카 셋의 상위 개념
- 배포전략
- 롤링: 새 버전을 하나씩 늘리고 기존 버전을 줄이는 방식
- 재 생성: 기존 파드을 전부 종료하고 신규 파드로 한 번에 교체하는 방식
- 블루/그린: 이전/신규 버전을 동시에 운영하는 방식
- 이전 버전은 테스트 목적으로만 특수하게 접근 가능
- 카나리: 이전/신규 버전을 동시에 운영하는 방식
- 블루/그린 과는 다르게 새 버전의 트래픽을 조금씩 증가시킨다
- 새 버전에 문제가 없다면 기존 버전을 종료시킨다
- 레플리카 셋: 몇 개의 파드를 유지할지 결정하는 컨트롤러
- 데몬 셋: 특정/모든 노드에 배치되는 파드 전략을 관리
- 잡: 하나 이상의 파드를 지정하고 지정된 수가 실행 유지되도록 관리
- 크론잡: 특정 시간에 특정 파드를 실행 → 주기적으로 어떤 액션을 실행
- CoreDns
- 클러스터를 모니터링하며 새로운 서비스나 파드 생성에 따라 클러스터 DNS를 업데이트
- 일반적으로 53번 포트를 사용
- 컨피그 맵과 시크릿
- 컨피그 맵: 환경 변수와 같은 값을 도커 이미지가 아닌 별도로 분리해서 관리하는 방법 제공
- 시크릿: 외부에 노출되어서는 안되는 정보를 저장하기 위해 사용
- 볼륨
- 데이터를 보관하는 저장소의 논리적 표현 → 각 컨테이너에서 마운트해서 사용해야 한다
- 위치에 따른 휘발성
- 영구 볼륨과 볼륨 클레임
- 리소스 관리
- CI/CD
- 크라이오 런타임: 쿠버네티스가 2020년부터 도커 런타임을 지원하지 않으면서 컨테이너d 와 함께 부상한 컨테이너 런타임