1. Kubernetes 개요
- Application 배포 방법

- Tranditional Deployment
Application 구성
- application binary (bin)
- application 이 의존하는 libary (lib)
- Virtualized Deployment
Hypervisor 기반의 가상 머신을 통해 application 생성 및 배포
- Container Deployment
application이 격리된 프로세스에서 동작할 수 있도록 하는 image 배포 방식
- Application Architecture
- Application을 구성하는 방법

- Monolithic Architecture
application 전체가 하나의 운영체제 프로세스로 실행
하나의 객체로 개발, 배포, 관리됨
하나의 변경 사항을 적용하기 위해 전체를 다시 빌드/테스트/배포 해야 함
application 확장이 어려움
- Microservice Architecture
각 micro service 는 독립적인 프로세스로 실행되며 API로 또 다른 micro service 와 통신함
새로 추가되거나 변경 사항이 발생하면 해당 서비스만 빠르게 빌드/테스트/배포 가 가능함
resource 가 더 필요한 서비스만 별도로 확장 가능
Microservice Architecture의 구성 요소는 독립적인 방식으로 개발됨
단점
- 각각의 기능을 micro service 단위로 나누어서 개발/테스트/배포 함으로써 구성 요소의 수가 증가하고ㅗ 각각의 micro service 간의 종속성 관리가 어려움
- Application 개발 과정
개발 - 개발 환경
테스트 - 테스트 환경
통합 - monolithic architecture
배포 - 운영 환경
유지 보수
- 개발, 프로덕션 환경에 대한 일관된 환경 구성
- 개발, 배포 하는 구성 요소와 상관없이 개발자와 운영자가 해결해야 하는 문제는 application 실행 환경이 매번 다른 환경이라는 점이다
- 위의 문제를 줄이기 위해서 프로덕션 환경에서는 application 개발과 프로덕션이 정확히 동일한 환경에서 되도록 구성한다.
- 개발자와 운영자간 다른 생각
- 개발자 : 새로운 기능을 만들고 사용자 경험 향상에 중요도를 정한다
- 운영자 : 개발자에게 우선순위가 낮은 시스템 보안, 사용률과 같은 측면에 중요도를 정한다
- Kubernetes 필요성
개발자는 기능 개발을, 시스템 관리자(운영자)는 보안, 사용률과 같은 측면에 중요도를 부여
kubernetes 를 사용하면
- 개발자는 특정 인프라 관련 서비스를 application 에 구현하지 않아도 되고 실제 기능 개발에 집중함
- 시스템 관리자(운영자)는 kubernetes가 application 을 재배치하고 조합함으로서 리소스를 훨씬 효율적으로 관리할 수 있고 장애가 발생하더라도 자동으로 처리하게 할 수 있음
- kubernetes는 container화된 application을 쉽게 배포, 관리할 수 있는 orchestration 도구이다.

- 마스터 노드 (Control Plane)
전체 kubernetes 시스템을 제어하고 관리하는 kubernetes control plane 실행
- 워커 노드
실제 배포되는 container application이 실행
- 클러스터
마스터노드와 워커노드의 집합
2. Kubernetes 구성 요소
- kubernetes (K8s)
kubernetes는 container화된 application을 쉽게 배포 관리할 수 있는 orchestration 도구
구글이 내부적으로 사용하던 container 관리 도구를 오픈소스화 하여 공개한 container orchestration 도구이다
현재는 CNCF 재단에 관리 운영되고있음
참고 -
- Kubernetes 구성 요소

- 마스터 노드 (Control Plane) - 서버
클러스터 제어 - 워커 노드 관리
구성 요소
- kube-apiserver
사용자 상호 작용 수행
kubernetes 제어 명령 수신
API 명령 수신
- kube-scheduler
새로운 pod 생성 감지
실행시킬 워커 노드 선택
- etcd
클러스터의 모든 데이터 보관
고가용성을 보장하는 key-value 저장소
어떤 노드가 존재하고 클러스터에 어떤 리소스가 있는지와 같은 정보를 저장
- kube-controller-manager
deployment 같은 리소스 컨트롤 관리
API 서버를 통해 클러스터 공유 상태 감지
현재 상태를 원하는 상태로 이행하는 컨트롤 루프 관리
- cloud-controller-manager
public cloud 와 연동하여 로드밸런서나 디스크 볼륨 같은 자원 관리
- 워커 노드
컨테이너화된 application 실행
kubelet
- 각 노드에서 실행되는 에이전트
- container run-time 을 관리하고 상태를 모니터링함
- pod 에서 container 가 확실하게 동작하도록 관리
kube-porxy
- 각 노드에서 실행되는 네트워크 프록시
- service 개념 구현 부분
- 서로 다른 노드에 있는 pod 간 통신이나 pod와 인터넷 사이의 트래픽 라우팅
container run-time
- container 제어 기능(실행-중지-삭제) - Docker
- CRI(container run-time interface) - 공통 container run-time 규격
kubernetes를 사용하기 위한 기본 환경 구성은 클러스터 생성을 의미하고 클러스터는 여러개의 클러스터를 생성할 수 있다.
3. Kubernetes 환경 구성
- Kubernetes 환경 구성 요소

- Kubernetes 환경 구성 필수 요소
CRI (Container Run-time Initiative)
Kubeadm
Kubectl
Kubelet
CNI (Container Network Interface)
- Kubernetes 환경 구성 종류
Kubeadm - kubenetes에서 제공하는 클러스터 생성/관리 도구
kubespray
- kubernetes 클러스터를 배포하는 오픈 소스 프로젝트
- 다양한 형식으로 kubernetes 클러스터 구성 가능
- on-premise 에서 상용 서비스 클러스터 운영시 유용
- 다양한 CNI 제공
minikube
- local 시스템에 설치 가능
- 설치가 간단하면서 kubernetes가 제공하는 기능 활용 가능
- 개발 도구와 minikube 연계 가능
- 단일 노드(워커노드) 형태로 동작
- 노드를 가상화 형태로 생성하기 때문에 Docker, VirtualBox등의 가상화 도구가 추가로 필요
- 학습/개발용
Docker Desktop
- Linux / Windows / MacOs
- Docker Desktop 에 설정에서 kubernetes를 활성화하면 minikube와 유사하게 kubernetes 사용 가능
K3s
- 경량 kubernetes 배포판
- CNCF 에서 육성하는 프로젝트이며 rancher labs 에서 제작
- k3s 실행 파일을 통해 서버와 에이전트만 구동하면 kubernetes 각 구성 요소가 간편하게 설치되고 kubernetes 클러스터가 구성된다
- 마스터 노드의 etcd를 경량 파일형 DBMS sqlite 사용
- IoT, 학습용 초소형 컴퓨터(라즈베리파이 등) 에도 사용 가능
- CRI (Container Run-time Interface)
- Docker 기반 Kubernetes 구조

- kuberlet이 명령을 받으면 Docker runtime을 통해 container를 생성하거나 삭제하는 생명 주기 관리 구조
- Docker 이외 다양한 container 기술 적용 kubernetes 구조

- Docker 이외 다양한 container 기술이 생기면서 kubernetes 에서 다양한 container runtime을 지원하게 되었고, 그때마다 kubelet의 코드를 수정하는 문제 발생
- Kubelet 수정 없이 다양한 container 지원 kubernetes 구조

- kubelet 수정 없이 다양한 container runtime을 지원하기 위한 통일된 인터페이스 스펙이 CRI 임
- container runtime이 CRI 스펙에 맞추어 구현되면 kubelet 수정 없이 새로운 container runtime을 plug-in 구조로 추가하여 사용할 수 있는 구조를 제공함
- OCI (Open Container Intiative)
새로운 container runtime이 생길때마다 CRI 를 수정하는 문제가 생김, container runtime을 표준화하고자 하는 결과물임
OCI 스펙에 맞춰서 구현된 container runtime은 별도의 CRI 구현 없이 OCI 구현체의 관리가 가능함
OCI 스펙에 따른 container runtime, 관리하는 CRI component를 CRI-O 라는 component 로 구현
OCI 스펙을 준수한다면 CRI-O 를 통해서 명령을 받을 수 있다
참고
- OCI github : https://github.com/opencontainers
- image-spec : https://github.com/opencontainers/image-spec/blob/main/spec.md
- runtime-spec : https://github.com/opencontainers/runtime-spec/blob/master/spec.md
- distribution-spec : https://github.com/opencontainers/distribution-spec/blob/main/spec.md
CRI-O


- CNI (Container Network Interface)
CNI 는 CNCF 프로젝트
CNI 는 container 간의 네트워킹을 제어할 수 있는 plug-in 방식으로 만든 표준다양한 형태의 container runtime과 orchestration 사이의 네트워크 게층을 구현하는 방식kubernetes 에서는 pod간 통신을 위해서 CNI 사용

CNI는 Calico, Weavenet, AWS CNI 등 다양한 종류가 있다.
'Kubernetes > [구름] 쿠버네티스 전문가 양성 과정 k-digital' 카테고리의 다른 글
[11주-10.11] kubectl 명령어 (1) | 2022.10.23 |
---|---|
[10주-10.7] Kubernetes 환경 구성 (1) | 2022.10.22 |
[10주-10.5] Docker Network, Compose (0) | 2022.10.21 |
[10주-10.4] Docker Image 생성 (0) | 2022.10.05 |
[9주-9.30] docker container 명령어2 (0) | 2022.10.05 |