Skip to content

Commit c39a5c5

Browse files
authored
Merge pull request #52075 from wonyongg/sync-ko-overview-_index.md
[ko] Sync /ko/docs/concepts/architecture/_index.md
2 parents 5793853 + 2e27839 commit c39a5c5

File tree

1 file changed

+211
-0
lines changed
  • content/ko/docs/concepts/architecture

1 file changed

+211
-0
lines changed

content/ko/docs/concepts/architecture/_index.md

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,214 @@ weight: 30
44
description: >
55
쿠버네티스 뒤편의 구조와 설계 개념들
66
---
7+
8+
쿠버네티스 클러스터는 컨트롤 플레인과 노드라고 불리는 일련의 워커 머신으로 구성되어 있으며,
9+
이 노드들은 컨테이너화된 애플리케이션을 실행한다. 모든 클러스터는 파드를 실행하기 위해 최소한 하나의 워커 노드가 필요하다.
10+
11+
워커 노드는 애플리케이션 워크로드의 구성 요소인 파드를 호스팅한다.
12+
컨트롤 플레인은 클러스터 내의 워커 노드와 파드를 관리한다. 프로덕션 환경에서,
13+
컨트롤 플레인은 보통 여러 대의 컴퓨터에서 실행되며, 클러스터는
14+
일반적으로 여러 개의 노드를 실행하여, 장애 허용성과 고가용성을 제공한다.
15+
16+
이 문서는 완전하고 동작하는 쿠버네티스 클러스터를 구성하기 위해 필요한 다양한 컴포넌트를 설명한다.
17+
18+
{{< figure src="/images/docs/kubernetes-cluster-architecture.svg" alt="컨트롤 플레인 (kube-apiserver, etcd, kube-controller-manager, kube-scheduler)과 여러 노드이다. 각 노드는 kubelet과 kube-proxy를 실행한다." caption="그림 1. 쿠버네티스 클러스터 컴포넌트." class="diagram-large" >}}
19+
20+
{{< details summary="이 아키텍처에 대해서" >}}
21+
그림 1의 다이어그램은 쿠버네티스 클러스터에 대한 예시 참조 아키텍처를 나타낸다.
22+
실제 컴포넌트의 분포는 특정 클러스터의 설정과 요구사항에 따라 달라질 수 있다.
23+
24+
다이어그램에서, 각 노드는 [`kube-proxy`](#kube-proxy) 컴포넌트를 실행한다. 클러스터 네트워크에서
25+
{{< glossary_tooltip text="서비스" term_id="service">}} API와 관련 동작을
26+
사용할 수 있도록 각 노드에는
27+
네트워크 프록시 컴포넌트가 필요하다. 그러나, 일부 네트워크 플러그인은
28+
자체 서드파티 프록시 구현을 제공한다. 그러한 네트워크 플러그인을 사용할 경우,
29+
해당 노드에서 `kube-proxy`를 실행할 필요가 없다.
30+
{{< /details >}}
31+
32+
## 컨트롤 플레인 컴포넌트
33+
34+
컨트롤 플레인의 컴포넌트는 클러스터에 대한 전역적인 결정(예를 들어, 스케줄링)뿐만 아니라,
35+
클러스터의 이벤트를 감지하고 대응한다. (예를 들면, 디플로이먼트의
36+
`{{< glossary_tooltip text="레플리카" term_id="replica" >}}` 필드가 충족되지 않을 때
37+
{{< glossary_tooltip text="파드" term_id="pod">}}를 새로 시작)
38+
39+
컨트롤 플레인 컴포넌트는 클러스터 안의 어떤 머신에서도 실행될 수 있다. 그러나 설정 스크립트는
40+
일반적으로 모든 컨포넌트를 동일한 머신에서 시작하며, 이 머신에서는 사용자 컨테이너를 실행하지 않는다.
41+
여러 머신에 걸쳐 컨트롤 플레인을 실행하는 예시 설정은
42+
[kubeadm을 사용한 고가용성 클러스터 생성](/docs/setup/production-environment/tools/kubeadm/high-availability/)에서 참고한다.
43+
44+
### kube-apiserver
45+
46+
{{< glossary_definition term_id="kube-apiserver" length="all" >}}
47+
48+
### etcd
49+
50+
{{< glossary_definition term_id="etcd" length="all" >}}
51+
52+
### kube-scheduler
53+
54+
{{< glossary_definition term_id="kube-scheduler" length="all" >}}
55+
56+
### kube-controller-manager
57+
58+
{{< glossary_definition term_id="kube-controller-manager" length="all" >}}
59+
60+
컨트롤러에는 여러 가지 유형이 있다. 몇 가지 예시는 다음과 같다.
61+
62+
- 노드 컨트롤러(Node Controller): 노드가 다운될 때 이를 감지하고 대응한다.
63+
- 잡 컨트롤러(Job Controller): 일회성 작업을 나타내는 잡(Job) 오브젝트를 감시하고, 해당 작업을 수행하기 위한 파드를 생성한다.
64+
- 엔드포인트슬라이스 컨트롤러(EndpointSlice controller): 엔드포인트슬라이스 오브젝트를 채워서 파드와 서비스 사이의 연결을 제공한다.
65+
- 서비스어카운트 컨트롤러(ServiceAccount controller): 신규 네임스페이스에 기본 서비스어카운트를 생성한다.
66+
67+
위 목록이 전부는 아니다.
68+
69+
### 클라우드 컨트롤러 매니저
70+
71+
{{< glossary_definition term_id="cloud-controller-manager" length="short" >}}
72+
73+
클라우드 컨트롤러 매니저는 오직 클라우드 공급자에 특화된 컨트롤러만 실행한다.
74+
쿠버네티스를 온프레미스 환경이나, 개인 PC의 학습환경에서
75+
실행하는 경우, 클러스터에는 클라우드 컨트롤러 매니저가 없다.
76+
77+
kube-controller-manager와 마찬가지로, 클라우드 컨트롤러 매니저는 여러 개의 논리적으로
78+
독립된 컨트롤 루프를 단일 바이너리로 결합하여 하나의 프로세스로 실행한다. 성능을 향상시키거나 장애 허용성을 높이기 위해
79+
수평 확장(하나 이상의 복제본을 실행)할 수 있다.
80+
81+
다음과 같은 컨트롤러는 클라우드 공급자 의존성을 가질 수 있다.
82+
83+
- 노드 컨트롤러(Node controller): 노드가 응답을 멈춘 뒤 클라우드에서 해당 노드가
84+
삭제되었는지를 판단하기 위해 클라우드 공급자를 확인한다.
85+
- 라우트 컨트롤러(Route controller): 클라우드 인프라스트럭처 기반에서 라우트를 설정한다.
86+
- 서비스 컨트롤러(Service controller): 클라우드 공급자의 로드 밸런서를 생성, 업데이트, 삭제한다.
87+
88+
---
89+
90+
## 노드 컴포넌트
91+
92+
노드 컴포넌트는 모든 노드에서 실행되며, 실행 중인 파드를 유지하고 쿠버네티스 런타임 환경을 제공한다.
93+
94+
### kubelet
95+
96+
{{< glossary_definition term_id="kubelet" length="all" >}}
97+
98+
### kube-proxy (선택 사항) {#kube-proxy}
99+
100+
{{< glossary_definition term_id="kube-proxy" length="all" >}}
101+
서비스에 대한 패킷 포워딩을 자체적으로 구현하고, kube-proxy와 동등한 동작을 제공하는
102+
[네트워크 플러그인](#network-plugins)을 사용하는 경우, 클러스터 노드에서 kube-proxy를
103+
실행할 필요가 없다.
104+
105+
### 컨테이너 런타임
106+
107+
{{< glossary_definition term_id="container-runtime" length="all" >}}
108+
109+
## 애드온
110+
111+
애드온은 쿠버네티스 리소스({{< glossary_tooltip term_id="daemonset" >}},
112+
{{< glossary_tooltip term_id="deployment" >}}, 등)를 사용하여, 클러스터의 기능을 구현한다.
113+
클러스터 수준의 기능을 제공하기 때문에, 애드온의 네임스페이스 리소스는
114+
`kube-system` 네임스페이스에 속한다.
115+
116+
선택된 애드온은 아래에 설명되어 있다. 사용 가능한 애드온의 더 많은 목록은,
117+
[애드온](/ko/docs/concepts/cluster-administration/addons/)을 참고한다.
118+
119+
### DNS
120+
121+
다른 애드온들은 반드시 필요하지 않지만, 많은 예제가 이를 기반으로 하기에,
122+
모든 클러스터에는 [클러스터 DNS](/ko/docs/concepts/services-networking/dns-pod-service/)가 있어야 한다.
123+
124+
클러스터 DNS는 쿠버네티스 서비스에 대한 DNS 레코드를 제공하는 DNS 서버로,
125+
사용자 환경에 있는 다른 DNS 서버와 별개로 동작한다.
126+
127+
쿠버네티스에 의해 실행된 컨테이너는 자동으로 이 DNS 서버를 DNS 검색에 포함한다.
128+
129+
### 웹 UI (대시보드)
130+
131+
[대시보드](/ko/docs/tasks/access-application-cluster/web-ui-dashboard/)는 쿠버네티스 클러스터를 위한
132+
범용 웹 기반 UI이다. 이를 통해 사용자는 클러스터 자체 뿐만 아니라, 클러스터에서 실행중인 애플리케이션을
133+
관리하고 문제를 해결할 수 있다.
134+
135+
### 컨테이너 리소스 모니터링
136+
137+
[컨테이너 리소스 모니터링](/ko/docs/tasks/debug/debug-cluster/resource-usage-monitoring/)
138+
컨테이너에 대한 일반적인 시계열 메트릭을 중앙 데이터베이스에 기록하고, 해당 데이터를 탐색할 수 있는 UI를 제공한다.
139+
140+
### 클러스터 수준 로깅
141+
142+
[클러스터 수준 로깅](/docs/concepts/cluster-administration/logging/) 메커니즘은
143+
컨테이너 로그를 검색/탐색 인터페이스를 갖춘 중앙 로그 저장소에 저장하는 역할을 한다.
144+
145+
### 네트워크 플러그인
146+
147+
[네트워크 플러그인](/ko/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins)
148+
컨테이너 네트워크 인터페이스(CNI) 사양을 구현하는 소프트웨어 컴포넌트이다.
149+
이는 파드에 IP 주소를 할당하고 클러스터 내에서
150+
서로 통신할 수 있도록 하는 역할을 한다.
151+
152+
## 아키텍처 변형
153+
154+
쿠버네티스의 핵심 컴포넌트는 일관성을 유지하지만, 배포되고 관리되는 방식은
155+
달라질 수 있다. 이러한 변형을 이해하는 것은 특정 운영 요구 사항을 충족하는 쿠버네티스 클러스터를
156+
설계하고 유지하는 데 매우 중요하다.
157+
158+
### 컨트롤 플레인 배포 옵션
159+
160+
컨트롤 플레인 컴포넌트는 여러 방식으로 배포될 수 있다.
161+
162+
전통적인 배포
163+
: 컨트롤 플레인 컴포넌트가 전용 머신이나 VM에서 직접적으로 실행되며, 보통 systemd 서비스로 관리된다.
164+
165+
정적 파드
166+
: 컨트롤 플레인 컴포넌트가 정적 파드로 배포되며, 특정 노드의 kubelet에 의해 관리된다.
167+
이는 kubeadm과 같은 도구에서 사용하는 일반적인 방식이다.
168+
169+
셀프 호스팅(Self-hosted)
170+
: 컨트롤 플레인이 쿠버네티스 클러스터 자체 내에서 파드로 실행되며, 디플로이먼트(Deployment)와
171+
스테이트풀셋(StatefulSet) 또는 다른 쿠버네티스 리소스에 의해 관리된다.
172+
173+
매니지드 쿠버네티스 서비스(Managed Kubernetes services)
174+
: 클라우드 공급자는 종종 컨트롤 플레인을 추상화하여, 자사 서비스 제공의 일부로 컴포넌트를 관리해 준다.
175+
176+
### 워크로드 배치 고려사항
177+
178+
컨트롤 플레인 컨포넌트를 포함한 워크로드 배치는 클러스터의 크기,
179+
성능 요구사항, 운영 정책에 따라 달라질 수 있다.
180+
181+
- 작은 규모의 클러스터나 개발용 클러스터에서는, 컨트롤 플레인 컴포넌트와 사용자 워크로드가 동일한 노드에서 실행될 수 있다.
182+
- 대규모 프로덕션 클러스터에서는 보통 컨트롤 플레인 컴포넌트 전용 노드를 두어,
183+
사용자 워크로드와 분리한다.
184+
- 일부 조직은 중요한 애드온이나 모니터링 도구를 컨트롤 플레인에서 실행한다.
185+
186+
### 클러스터 관리 도구
187+
188+
kubeadm, kops 그리고 Kubespray 같은 도구들은 클러스터를 배포하고 관리하는 데 서로 다른 접근 방식을 제공하며,
189+
각 도구는 고유한 컴포넌트 배치 및 관리 방식을 가진다.
190+
191+
쿠버네티스 아키텍처의 유연성 덕분에 조직은 기능 복잡성, 성능, 그리고 관리 부담과 같은 요소들을 균형있게 고려하여
192+
클러스터를 특정 요구사항에 맞게 조정할 수 있다.
193+
194+
### 커스터마이제이션과 확장성
195+
196+
쿠버네티스 아키텍처는 다양한 커스터마이제이션을 허용한다.
197+
198+
- 기본 쿠버네티스 스케줄러와 함께 동작하거나 완전히 대체하기 위해 커스텀 스케줄러를 배포할 수 있다.
199+
- API 서버는 커스텀리소스정의(CustomResourceDefinitions)와 API 집계를 통해 확장될 수 있다.
200+
- 클라우드 공급자는 클라우드 컨트롤러 매니저를 사용하여 쿠버네티스와 긴밀하게 통합할 수 있다.
201+
202+
쿠버네티스 아키텍처의 유연성 덕분에 조직은 기능 복잡성, 성능, 그리고 관리 부담과 같은 요소들을 균형있게 고려하여
203+
클러스터를 특정 요구사항에 맞게 조정할 수 있다.
204+
205+
## {{% heading "whatsnext" %}}
206+
207+
다음 내용을 통해 더 알아보자.
208+
209+
- [노드](/ko/docs/concepts/architecture/nodes/)
210+
컨트롤 플레인과의
211+
[통신](/ko/docs/concepts/architecture/control-plane-node-communication/).
212+
- 쿠버네티스 [컨트롤러](/ko/docs/concepts/architecture/controller/).
213+
- 쿠버네티스의 기본 스케줄러인 [kube-scheduler](/ko/docs/concepts/scheduling-eviction/kube-scheduler/).
214+
- Etcd의 공식 [문서](https://etcd.io/docs/).
215+
- 쿠버네티스에서 사용되는 여러 [컨테이너 런타임](/ko/docs/setup/production-environment/container-runtimes/).
216+
- [클라우드 컨트롤러 매니저](/ko/docs/concepts/architecture/cloud-controller/)를 사용한 클라우드 공급자 통합.
217+
- [kubectl](/docs/reference/generated/kubectl/kubectl-commands) 명령어.

0 commit comments

Comments
 (0)