Skip to content

Commit

Permalink
Understanding kubernetes and architectural overview 보완 2
Browse files Browse the repository at this point in the history
  • Loading branch information
symplesims committed Aug 29, 2023
1 parent 5d5c226 commit ed65f44
Showing 1 changed file with 32 additions and 21 deletions.
53 changes: 32 additions & 21 deletions _posts/2023-08-29-kubernetes-series-lesson-01-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,28 @@ categories:
Kubernetes는 컨테이너화된 애플리케이션을 배포, 관리, 확장 및 운영 하기 위한 오픈소스 플랫폼입니다.
Kubernetes 플랫폼은 애플리케이션간의 유기적인 통합과 일관된 관리 프로세스로 워크로드 크기에 상관없이 서비스 가치를 IT 로 실현해 낼 수 있는 훌륭한 도구 입니다.

<br>

## Kubernetes UseCase 기반 특징

1. 웹 애플리케이션 배포:
1. 웹 애플리케이션 배포:
Kubernetes를 사용하여 회사 내부에서 사용되는 웹 애플리케이션을 안정적으로 배포하고 관리할 수 있습니다.
웹 애플리케이션의 컨테이너화된 버전을 배포하고 로드 밸런싱, 자동 확장 및 롤링 업데이트를 설정합니다.
이렇게 하면 애플리케이션의 가용성이 높아지고 개발자와 운영팀이 함께 협력하여 애플리케이션을 관리할 수 있습니다.

2. 마이크로서비스 아키텍처:
2. 마이크로서비스 아키텍처:
Kubernetes를 사용하여 마이크로 서비스 아키텍처 기반으로 워크로드르 운영 관리 할 수 있습니다.
각 마이크로서비스를 별도의 컨테이너로 배포하고, 서비스 디스커버리와 로드 밸런싱을 통해 서로 통신하도록 설정합니다. 각 마이크로서비스는 개별적으로 관리되므로 개발, 배포 및 유지보수가 용이해집니다.

3. DevOps 및 CI/CD 환경:
3. DevOps 및 CI/CD 환경:
Kubernetes를 사용하여 개발, 테스트, 스테이징 및 프로덕션을 위한 각 환경을 노드 그룹으로 나누어 구성할 수 있습니다.
GitOps와 CI/CD 도구를 위한 독립적인 Toolchain 서비스를 구성하고, Toolchain 서비스는 코드 변경 사항을 자동으로 클러스터에 배포하며, 롤링 업데이트와 롤백 기능으로 안정적인 애플리케이션 배포를 하게됩니다.

4. 스케일 기능:
4. 스케일 기능:
Kubernetes의 자동 스케일링 기능을 활용하여 트래픽의 증가에 대응 하는 애플리케이션 인스턴스를 자동으로 확장합니다.
가상화 컴퓨팅 인스턴스인 워커 노드 또한 자동으로 확장 / 축소 할 수 있습니다. 이를 통해 서비스의 가용성을 높이고 사용자의 요구에 빠르게 대응할 수 있습니다.

<br>

## Kubernetes 아키텍처

Expand All @@ -45,31 +48,32 @@ Kubernetes 클러스터는 [컨트롤 플레인 (Control Plane)](https://kuberne

예를 들어 애플리케이션 Pod 를 배포하고 서비스를 Endpoint 로 expose(노출) 하는 등의 리소스(Pod, Service, ...) 상태를 조정 하는 등의 역할은 `컨트롤 플레인 (Control Plane)`이 담당 하고, 실제 애플리케이션 Pod 가 인스턴스로 올라와서 서비스 기능 자체로 동작하도록 기반을 제공하는 것은 `데이터 플레인 (Data Plane)`이 담당하게 됩니다.


<br>

### [컨트롤 플레인 (Control Plane)](https://kubernetes.io/docs/concepts/overview/components/#control-plane-components)

- `컨트롤 플레인 (Control Plane)`은 클러스터 상태를 중앙 관리 및 제어를 통해 지속적으로 조정해 주는 컨트롤 센터 역할을 담당 합니다.
- `컨트롤 플레인 (Control Plane)`은 클러스터 상태를 중앙 관리 및 제어를 통해 지속적으로 조정해 주는 컨트롤 센터 역할을 담당 합니다.
클라이언트(사용자)가 API 및 kubectl 을 통해 Kubernetes 리소스를 생성, 수정, 삭제, 자동화 요청을 하게 되며 `컨트롤 플레인 (Control Plane)` 은 이 명령들을 처리하게 됩니다.

#### API 서버 (API Server):
#### API 서버 (API Server)
- 클러스터의 컨트롤 플레인의 중심이 되는 구성 요소로, 클러스터 관리 작업을 수행하고 API 요청을 처리합니다.

#### 스케줄러 (Scheduler):
#### 스케줄러 (Scheduler)
- 파드를 노드에 할당하는 역할을 담당합니다. 사용자가 생성한 파드를 최적의 노드에 할당하여 실행하도록 관리합니다.

#### 컨트롤러 매니저 (Controller Manager):
#### 컨트롤러 매니저 (Controller Manager)
- 클러스터의 상태를 지속적으로 확인하고 필요에 따라 상태를 조정합니다. 레플리케이션 컨트롤러, 디플로이먼트 컨트롤러 등의 컨트롤러가 포함됩니다.

#### etcd:
- 클러스터의 모든 구성 정보를 저장하는 분산 데이터 저장소로, 클러스터의 상태 및 설정 정보를 관리합니다.
#### Etcd (Cluster Storage)
- 클러스터의 모든 구성 정보를 저장하는 분산 데이터 저장소로, 클러스터의 상태 및 설정 정보를 관리합니다.

<br>

### [데이터 플레인 (Data Plane)](https://kubernetes.io/docs/concepts/overview/components/#node-components)

`데이터 플레인 (Data Plane)`은 모든 Node 에서 실제 컨테이너화된 애플리케이션 컨테이너가 실행중인 Pod 를 유지하고 Kubernetes 런타임 환경을 제공 합니다.

#### kubelet:
#### kubelet
- 각 노드에서 실행되는 에이전트로, Node 에서 PodSpec에 설명된 컨테이너가 Pod 로서 실행 중이고 정상적으로 동작하는지 확인합니다.


Expand All @@ -81,11 +85,13 @@ kube-proxy는 각 노드에서 실행되는 네트워크 프록시로 NAT 및
#### Container runtime:
- 컨테이너 런타임 (Container Runtime)은 Kubernetes 환경 내에서 컨테이너의 생성에서 제거까지 수명 주기를 관리하는 실행 주체입니다. Docker, Containerd, CRI-O 및 기타 Kubernetes CRI(컨테이너 런타임 인터페이스) 구현체가 컨테이너 런타임을 실행합니다.

<br>

#### Pods
### Pods
- 컨테이너화된 애플리케이션을 배포하는 가장 작은 단위 입니다. 여기에는 애플리케이션과 애플리케이션이 사용하는 공유 리소스(Volume 등)를 함께 구성하여 배포할 수 있습니다.
참고로, Pod 는 고유의 private IP 주소를 가집니다. Pod 를 구성하는 애플리케이션 서비스인 container 는 Pod 내에서 localhost 로 서로 통신 합니다.

<br>


## Kubernetes 클라우드 아키텍처
Expand All @@ -103,34 +109,37 @@ Kubernetes 의 기본 아키텍처를 Cloud Native한 환경에서 운영되도
#### Cloud DNS
- Cloud 에서 제공되는 public / private 도메인 네임 해석을 Pods 및 Services 에 라우팅 되도록 지원 합니다.

<br>

## Kubernetes 를 이용하는 최대 강점

### 자동화된 컨테이너 관리
#### 자동화된 컨테이너 관리
- Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 관리, 복구 등을 자동화하며, 개발자와 운영팀의 작업 부담을 줄여줍니다.

### 가용성 및 확장성
#### 가용성 및 확장성
- Kubernetes는 다양한 클러스터 환경에서 애플리케이션의 가용성을 보장하고 필요에 따라 자동으로 스케일링할 수 있습니다.

### 선언적 구성 관리
#### 선언적 구성 관리
- YAML 또는 JSON 형식의 리소스 정의 파일을 사용하여 애플리케이션의 상태를 선언적으로 관리하므로, 원하는 상태에 맞게 변경할 수 있습니다.

### 포터블한 환경
#### 포터블한 환경
- Kubernetes는 여러 환경에서 일관된 방식으로 애플리케이션을 배포하고 관리할 수 있습니다. 로컬 개발 환경부터 클라우드까지 효율적으로 작업할 수 있습니다.

### 설계상의 확장성
#### 설계상의 확장성
- Kubernetes는 모듈화된 아키텍처로 설계되어 확장성이 우수합니다. 필요에 따라 노드, 클러스터, 레플리카 등을 확장할 수 있습니다.

### 자동 복구 및 롤아웃
#### 자동 복구 및 롤아웃
- 애플리케이션의 장애 상황에서 자동으로 복구하고, 롤아웃 전략을 사용하여 버전 업그레이드를 안정적으로 진행할 수 있습니다.

### 많은 커뮤니티 및 에코시스템
#### 많은 커뮤니티 및 에코시스템
- Kubernetes는 큰 개발 및 사용자 커뮤니티를 가지고 있어 다양한 리소스, 도구, 플러그인, 서비스 등을 활용할 수 있는 풍부한 에코시스템을 제공합니다.

### 클라우드 네이티브 지원
#### 클라우드 네이티브 지원
- Kubernetes는 클라우드 네이티브 워크로드와 통합하기에 이상적인 도구로서, 다양한 클라우드 프로바이더와 연동하여 사용할 수 있습니다.


<br>

## helloworld 애플리케이션 서비스 배포

Kubernetes 환경에서 애플리케이션을 얼마나 빨리 서비스를 올리고 그 방법의 일관됨과 단순함을
Expand Down Expand Up @@ -198,13 +207,15 @@ NAME DESIRED CURRENT READY AGE
replicaset.apps/helloworld-9bf945f5f 2 2 2 121m
```

<br>

## Kubernetes 가 애플리케이션을 배포하는 흐름

![img_7.jpg](/assets/images/23q3/img_7.jpg)

위 다이어그램은 Kubernetes 클러스터의 컴포넌트가 유기적인 상호작용으로 애플리케이션을 어떻게 배포하고 상태를 현행화하는지를 보여주고 있습니다.

<br>

## Minikube

Expand Down

0 comments on commit ed65f44

Please sign in to comment.