3
3
# - freehan
4
4
title : 엔드포인트슬라이스
5
5
content_type : concept
6
- weight : 45
6
+ weight : 60
7
+ description : >-
8
+ 엔드포인트슬라이스 API는 서비스가 대규모 백엔드를 처리할 수 있도록 확장할 수 있게 해주고,
9
+ 클러스터가 정상적인 백엔드의 리스트를 효율적으로 업데이트 할 수 있도록
10
+ 쿠버네티스가 사용하는 메커니즘이다.
7
11
---
8
12
9
13
10
14
<!-- overview -->
11
15
12
16
{{< feature-state for_k8s_version="v1.21" state="stable" >}}
13
17
14
- _ 엔드포인트슬라이스_ 는 쿠버네티스 클러스터 내의 네트워크 엔드포인트를
15
- 추적하는 간단한 방법을 제공한다. 이것은 엔드포인트를 더 확장하고 , 확장 가능한
18
+ 쿠버네티스의 _ 엔드포인트슬라이스_ API 는 쿠버네티스 클러스터 내의 네트워크 엔드포인트를
19
+ 추적하는 방법을 제공한다. 엔드포인트슬라이스는 [ 엔드포인트 ] ( /ko/docs/concepts/services-networking/service/#endpoints ) 보다 더 유동적이고 , 확장 가능한
16
20
대안을 제안한다.
17
21
18
-
19
-
20
22
<!-- body -->
21
23
22
- ## 사용동기
23
-
24
- 엔드포인트 API는 쿠버네티스에서 네트워크 엔드포인트를 추적하는
25
- 간단하고 직접적인 방법을 제공한다. 불행하게도 쿠버네티스 클러스터와
26
- {{< glossary_tooltip text="서비스" term_id="service" >}}가 더 많은 수의 백엔드 파드로
27
- 더 많은 트래픽을 처리하고 전송하는 방향으로 성장함에 따라, 이 API의 한계가 더욱 눈에 띄게
28
- 되었다.
29
- 특히나, 많은 수의 네트워크 엔드포인트로 확장하는 것에
30
- 어려움이 있었다.
31
-
32
- 이후로 서비스에 대한 모든 네트워크 엔드포인트가 단일 엔드포인트
33
- 리소스에 저장되기 때문에 엔드포인트 리소스가 상당히 커질 수 있다. 이것은 쿠버네티스
34
- 구성요소 (특히 마스터 컨트롤 플레인)의 성능에 영향을 미쳤고
35
- 엔드포인트가 변경될 때 상당한 양의 네트워크 트래픽과 처리를 초래했다.
36
- 엔드포인트슬라이스는 이러한 문제를 완화하고 토폴로지 라우팅과
37
- 같은 추가 기능을 위한 확장 가능한 플랫폼을 제공한다.
38
-
39
- ## 엔드포인트슬라이스 리소스 {#endpointslice-resource}
24
+ ## 엔드포인트슬라이스 API {#endpointslice-resource}
40
25
41
26
쿠버네티스에서 엔드포인트슬라이스는 일련의 네트워크 엔드포인트에 대한
42
27
참조를 포함한다. 쿠버네티스 서비스에 {{< glossary_tooltip text="셀렉터"
@@ -48,8 +33,8 @@ term_id="selector" >}}가 지정되면 컨트롤 플레인은 자동으로
48
33
엔드포인트슬라이스 오브젝트의 이름은 유효한
49
34
[ DNS 서브도메인 이름] ( /ko/docs/concepts/overview/working-with-objects/names/#dns-서브도메인-이름 ) 이어야 한다.
50
35
51
- 예를 들어, 여기에 ` example ` 쿠버네티스 서비스를 위한 엔드포인트슬라이스
52
- 리소스 샘플이 있다.
36
+ 예를 들어, 여기에 ` example ` 쿠버네티스 서비스가 소유하는 엔드포인트슬라이스
37
+ 객체 샘플이 있다.
53
38
54
39
``` yaml
55
40
apiVersion : discovery.k8s.io/v1
@@ -81,8 +66,7 @@ endpoints:
81
66
82
67
엔드포인트슬라이스는 내부 트래픽을 라우트하는 방법에 대해
83
68
{{< glossary_tooltip term_id="kube-proxy" text="kube-proxy" >}}에
84
- 신뢰할 수 있는 소스로 역할을 할 수 있다. 이를 활성화 하면, 많은 수의 엔드포인트를 가지는
85
- 서비스에 대해 성능 향상을 제공해야 한다.
69
+ 신뢰할 수 있는 소스로 역할을 할 수 있다.
86
70
87
71
# ## 주소 유형
88
72
@@ -92,12 +76,16 @@ endpoints:
92
76
* IPv6
93
77
* FQDN (전체 주소 도메인 이름)
94
78
95
- # ## 조건
79
+ 각 엔드포인트슬라이스 객체는 특정한 IP 주소 유형을 나타낸다.
80
+ IPv4와 IPv6를 사용할 수 있는 서비스가 있을 경우,
81
+ 최소 두개의 엔드포인트슬라이스 객체가 존재한다(IPv4를 위해 하나, IPv6를 위해 하나).
82
+
83
+ # ## 컨디션
96
84
97
85
엔드포인트슬라이스 API는 컨슈머에게 유용한 엔드포인트에 대한 조건을 저장한다.
98
- 조건은 `준비 `, `제공 ` 및 `종료 ` 세 가지가 있다.
86
+ 조건은 `ready `, `serving ` 및 `Terminating ` 세 가지가 있다.
99
87
100
- # ### 준비
88
+ # ### Ready
101
89
102
90
` ready` 는 파드의 `Ready` 조건에 매핑되는 조건이다. `Ready` 조건이 `True`로 설정된 실행 중인 파드는
103
91
이 엔드포인트슬라이스 조건도 `true`로 설정되어야 한다. 호환성의
@@ -106,7 +94,7 @@ endpoints:
106
94
이 규칙의 유일한 예외는 `spec.publishNotReadyAddresses`가 `true`로 설정된 서비스이다.
107
95
이러한 서비스의 엔드 포인트는 항상 `ready`조건이 `true`로 설정된다.
108
96
109
- # ### 제공( Serving)
97
+ # ### Serving
110
98
111
99
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
112
100
@@ -125,14 +113,14 @@ endpoints:
125
113
126
114
{{< /note >}}
127
115
128
- # ### 종료( Terminating)
116
+ # ### Terminating
129
117
130
118
{{< feature-state for_k8s_version="v1.22" state="beta" >}}
131
119
132
120
` 종료(Terminating)` 는 엔드포인트가 종료되는지 여부를 나타내는 조건이다.
133
121
파드의 경우 삭제 타임 스탬프가 설정된 모든 파드이다.
134
122
135
- # ## 토폴로지 정보 {#토폴로지 }
123
+ # ## 토폴로지 정보 {#topology }
136
124
137
125
엔드포인트슬라이스 내의 각 엔드 포인트는 관련 토폴로지 정보를 포함할 수 있다.
138
126
토폴로지 정보에는 엔드 포인트의 위치와 해당 노드 및
@@ -242,11 +230,48 @@ v1 API의 `zone` 필드로 접근할 수 있다.
242
230
엔드포인트슬라이스 변경의 특성으로 인해, 엔드포인트는 동시에 둘 이상의
243
231
엔드포인트슬라이스에 표시될 수 있다. 이는 다른 엔드포인트슬라이스 오브젝트에
244
232
대한 변경 사항이 다른 시간에서의 쿠버네티스 클라이언트 워치(watch)/캐시에
245
- 도착할 수 있기 때문에 자연스럽게 발생한다. 엔드포인트슬라이스를 사용하는 구현은
246
- 엔드포인트가 둘 이상의 슬라이스에 표시되도록 할 수 있어야 한다. 엔드포인트
247
- 중복 제거를 수행하는 방법에 대한 레퍼런스 구현은 `kube-proxy` 의
233
+ 도착할 수 있기 때문에 자연스럽게 발생한다.
234
+
235
+ {{< note >}}
236
+ 엔드포인트슬라이스 API의 클라이언트는 반드시 서비스에 연관된 모든 존재하는 엔드포인트슬라이스에 대해
237
+ 반복하고, 고유한 각 네트워크 엔드포인트들의 완전한 리스트를 구성해야 한다. 엔드포인트는 다른
238
+ 엔드포인트슬라이스에서 중복될 수 있음에 유의한다.
239
+
240
+ 엔드포인트 집계와 중복 제거 방법에 대한 레퍼런스 구현은 `kube-proxy` 의
248
241
` EndpointSliceCache` 구현에서 찾을 수 있다.
242
+ {{< /note >}}
243
+
244
+ # # 엔드포인트와 비교 {#motivation}
245
+
246
+ 기존 엔드포인트 API는 쿠버네티스에서 네트워크 엔드포인트를 추적하는
247
+ 간단하고 직접적인 방법을 제공했다. 쿠버네티스 클러스터와
248
+ {{< glossary_tooltip text="서비스" term_id="service" >}}가 더 많은 수의 백엔드 파드로
249
+ 더 많은 트래픽을 처리하고 전송하는 방향으로 성장함에 따라, 이 API의 한계가 더욱 눈에 띄게
250
+ 되었다.
251
+ 특히나, 많은 수의 네트워크 엔드포인트로 확장하는 것에
252
+ 어려움이 있었다.
253
+
254
+ 서비스에 대한 모든 네트워크 엔드포인트가 단일 엔드포인트
255
+ 객체에 저장되기 때문에 이러한 엔드포인트 객체들이 상당히 커지는 경우도 있었다. 안정적인
256
+ 서비스(오랜 기간 동안 같은 엔드포인트 세트)의 경우 영향은
257
+ 비교적 덜 눈에 띄지만, 여전히 쿠버네티스의 일부 사용 사례들은 잘 처리되지 않았다.
258
+
259
+ 서비스가 많은 백엔드 엔드포인트를 가지고
260
+ 워크로드가 자주 증가하거나, 새로운 변경사항이 자주 롤 아웃 될 경우,
261
+ 해당 서비스의 단일 엔드포인트 객체에 대한 각 업데이트는
262
+ 쿠버네티스 클러스터 컴포넌트 사이(컨트롤 플레인 내, 그리고 노드와 API 서버 사이)에
263
+ 상당한 네트워크 트래픽이 발생할 것임을 의미했다.
264
+ 이러한 추가 트래픽은 또한 CPU 사용 관점에서도 굉장한 비용을 발생시켰다.
265
+
266
+ 엔드포인트슬라이스 사용 시, 단일 파드를 추가하거나 삭제하는 작업은 (다수의 파드를 추가/삭제하는 작업과 비교했을 때)
267
+ 해당 변경을 감시하고 있는 클라이언트에 동일한 _수_의 업데이트를 트리거한다.
268
+ 하지만, 파드 대규모 추가/삭제의 경우 업데이트 메시지의 크기는 훨씬 작다.
269
+
270
+ 엔드포인트슬라이스는 듀얼 스택 네트워킹과 토폴로지 인식 라우팅과 같은
271
+ 새로운 기능에 대한 혁신을 가능하게 했다.
249
272
250
273
# # {{% heading "whatsnext" %}}
251
274
252
- * [서비스와 애플리케이션 연결하기](/ko/docs/concepts/services-networking/connect-applications-service/)를 읽어보기
275
+ * [서비스와 애플리케이션 연결하기](/docs/concepts/services-networking/connect-applications-service/) 튜토리얼을 따라하기
276
+ * [엔드포인트슬라이스 API 레퍼런스](/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1/) 를 읽어보기
277
+ * [엔드포인트 API 레퍼런스](/docs/reference/kubernetes-api/service-resources/endpoints-v1/) 를 읽어보기
0 commit comments