diff --git a/content/ko/docs/concepts/services-networking/endpoint-slices.md b/content/ko/docs/concepts/services-networking/endpoint-slices.md index 0b2e98138ec41..1548053a6ab88 100644 --- a/content/ko/docs/concepts/services-networking/endpoint-slices.md +++ b/content/ko/docs/concepts/services-networking/endpoint-slices.md @@ -3,7 +3,11 @@ # - freehan title: 엔드포인트슬라이스 content_type: concept -weight: 45 +weight: 60 +description: >- + 엔드포인트슬라이스 API는 서비스가 대규모 백엔드를 처리할 수 있도록 확장할 수 있게 해주고, + 클러스터가 정상적인 백엔드의 리스트를 효율적으로 업데이트 할 수 있도록 + 쿠버네티스가 사용하는 메커니즘이다. --- @@ -11,32 +15,13 @@ weight: 45 {{< feature-state for_k8s_version="v1.21" state="stable" >}} -_엔드포인트슬라이스_ 는 쿠버네티스 클러스터 내의 네트워크 엔드포인트를 -추적하는 간단한 방법을 제공한다. 이것은 엔드포인트를 더 확장하고, 확장 가능한 +쿠버네티스의 _엔드포인트슬라이스_ API 는 쿠버네티스 클러스터 내의 네트워크 엔드포인트를 +추적하는 방법을 제공한다. 엔드포인트슬라이스는 [엔드포인트](/ko/docs/concepts/services-networking/service/#endpoints)보다 더 유동적이고, 확장 가능한 대안을 제안한다. - - -## 사용동기 - -엔드포인트 API는 쿠버네티스에서 네트워크 엔드포인트를 추적하는 -간단하고 직접적인 방법을 제공한다. 불행하게도 쿠버네티스 클러스터와 -{{< glossary_tooltip text="서비스" term_id="service" >}}가 더 많은 수의 백엔드 파드로 -더 많은 트래픽을 처리하고 전송하는 방향으로 성장함에 따라, 이 API의 한계가 더욱 눈에 띄게 -되었다. -특히나, 많은 수의 네트워크 엔드포인트로 확장하는 것에 -어려움이 있었다. - -이후로 서비스에 대한 모든 네트워크 엔드포인트가 단일 엔드포인트 -리소스에 저장되기 때문에 엔드포인트 리소스가 상당히 커질 수 있다. 이것은 쿠버네티스 -구성요소 (특히 마스터 컨트롤 플레인)의 성능에 영향을 미쳤고 -엔드포인트가 변경될 때 상당한 양의 네트워크 트래픽과 처리를 초래했다. -엔드포인트슬라이스는 이러한 문제를 완화하고 토폴로지 라우팅과 -같은 추가 기능을 위한 확장 가능한 플랫폼을 제공한다. - -## 엔드포인트슬라이스 리소스 {#endpointslice-resource} +## 엔드포인트슬라이스 API {#endpointslice-resource} 쿠버네티스에서 엔드포인트슬라이스는 일련의 네트워크 엔드포인트에 대한 참조를 포함한다. 쿠버네티스 서비스에 {{< glossary_tooltip text="셀렉터" @@ -48,8 +33,8 @@ term_id="selector" >}}가 지정되면 컨트롤 플레인은 자동으로 엔드포인트슬라이스 오브젝트의 이름은 유효한 [DNS 서브도메인 이름](/ko/docs/concepts/overview/working-with-objects/names/#dns-서브도메인-이름)이어야 한다. -예를 들어, 여기에 `example` 쿠버네티스 서비스를 위한 엔드포인트슬라이스 -리소스 샘플이 있다. +예를 들어, 여기에 `example` 쿠버네티스 서비스가 소유하는 엔드포인트슬라이스 +객체 샘플이 있다. ```yaml apiVersion: discovery.k8s.io/v1 @@ -81,8 +66,7 @@ endpoints: 엔드포인트슬라이스는 내부 트래픽을 라우트하는 방법에 대해 {{< glossary_tooltip term_id="kube-proxy" text="kube-proxy" >}}에 -신뢰할 수 있는 소스로 역할을 할 수 있다. 이를 활성화 하면, 많은 수의 엔드포인트를 가지는 -서비스에 대해 성능 향상을 제공해야 한다. +신뢰할 수 있는 소스로 역할을 할 수 있다. ### 주소 유형 @@ -92,12 +76,16 @@ endpoints: * IPv6 * FQDN (전체 주소 도메인 이름) -### 조건 +각 엔드포인트슬라이스 객체는 특정한 IP 주소 유형을 나타낸다. +IPv4와 IPv6를 사용할 수 있는 서비스가 있을 경우, +최소 두개의 엔드포인트슬라이스 객체가 존재한다(IPv4를 위해 하나, IPv6를 위해 하나). + +### 컨디션 엔드포인트슬라이스 API는 컨슈머에게 유용한 엔드포인트에 대한 조건을 저장한다. -조건은 `준비`, `제공` 및 `종료` 세 가지가 있다. +조건은 `ready`, `serving` 및 `Terminating` 세 가지가 있다. -#### 준비 +#### Ready `ready`는 파드의 `Ready` 조건에 매핑되는 조건이다. `Ready` 조건이 `True`로 설정된 실행 중인 파드는 이 엔드포인트슬라이스 조건도 `true`로 설정되어야 한다. 호환성의 @@ -106,7 +94,7 @@ endpoints: 이 규칙의 유일한 예외는 `spec.publishNotReadyAddresses`가 `true`로 설정된 서비스이다. 이러한 서비스의 엔드 포인트는 항상 `ready`조건이 `true`로 설정된다. -#### 제공(Serving) +#### Serving {{< feature-state for_k8s_version="v1.22" state="beta" >}} @@ -125,14 +113,14 @@ endpoints: {{< /note >}} -#### 종료(Terminating) +#### Terminating {{< feature-state for_k8s_version="v1.22" state="beta" >}} `종료(Terminating)`는 엔드포인트가 종료되는지 여부를 나타내는 조건이다. 파드의 경우 삭제 타임 스탬프가 설정된 모든 파드이다. -### 토폴로지 정보 {#토폴로지} +### 토폴로지 정보 {#topology} 엔드포인트슬라이스 내의 각 엔드 포인트는 관련 토폴로지 정보를 포함할 수 있다. 토폴로지 정보에는 엔드 포인트의 위치와 해당 노드 및 @@ -242,11 +230,48 @@ v1 API의 `zone` 필드로 접근할 수 있다. 엔드포인트슬라이스 변경의 특성으로 인해, 엔드포인트는 동시에 둘 이상의 엔드포인트슬라이스에 표시될 수 있다. 이는 다른 엔드포인트슬라이스 오브젝트에 대한 변경 사항이 다른 시간에서의 쿠버네티스 클라이언트 워치(watch)/캐시에 -도착할 수 있기 때문에 자연스럽게 발생한다. 엔드포인트슬라이스를 사용하는 구현은 -엔드포인트가 둘 이상의 슬라이스에 표시되도록 할 수 있어야 한다. 엔드포인트 -중복 제거를 수행하는 방법에 대한 레퍼런스 구현은 `kube-proxy` 의 +도착할 수 있기 때문에 자연스럽게 발생한다. + +{{< note >}} +엔드포인트슬라이스 API의 클라이언트는 반드시 서비스에 연관된 모든 존재하는 엔드포인트슬라이스에 대해 +반복하고, 고유한 각 네트워크 엔드포인트들의 완전한 리스트를 구성해야 한다. 엔드포인트는 다른 +엔드포인트슬라이스에서 중복될 수 있음에 유의한다. + +엔드포인트 집계와 중복 제거 방법에 대한 레퍼런스 구현은 `kube-proxy` 의 `EndpointSliceCache` 구현에서 찾을 수 있다. +{{< /note >}} + +## 엔드포인트와 비교 {#motivation} + +기존 엔드포인트 API는 쿠버네티스에서 네트워크 엔드포인트를 추적하는 +간단하고 직접적인 방법을 제공했다. 쿠버네티스 클러스터와 +{{< glossary_tooltip text="서비스" term_id="service" >}}가 더 많은 수의 백엔드 파드로 +더 많은 트래픽을 처리하고 전송하는 방향으로 성장함에 따라, 이 API의 한계가 더욱 눈에 띄게 +되었다. +특히나, 많은 수의 네트워크 엔드포인트로 확장하는 것에 +어려움이 있었다. + +서비스에 대한 모든 네트워크 엔드포인트가 단일 엔드포인트 +객체에 저장되기 때문에 이러한 엔드포인트 객체들이 상당히 커지는 경우도 있었다. 안정적인 +서비스(오랜 기간 동안 같은 엔드포인트 세트)의 경우 영향은 +비교적 덜 눈에 띄지만, 여전히 쿠버네티스의 일부 사용 사례들은 잘 처리되지 않았다. + +서비스가 많은 백엔드 엔드포인트를 가지고 +워크로드가 자주 증가하거나, 새로운 변경사항이 자주 롤 아웃 될 경우, +해당 서비스의 단일 엔드포인트 객체에 대한 각 업데이트는 +쿠버네티스 클러스터 컴포넌트 사이(컨트롤 플레인 내, 그리고 노드와 API 서버 사이)에 +상당한 네트워크 트래픽이 발생할 것임을 의미했다. +이러한 추가 트래픽은 또한 CPU 사용 관점에서도 굉장한 비용을 발생시켰다. + +엔드포인트슬라이스 사용 시, 단일 파드를 추가하거나 삭제하는 작업은 (다수의 파드를 추가/삭제하는 작업과 비교했을 때) +해당 변경을 감시하고 있는 클라이언트에 동일한 _수_의 업데이트를 트리거한다. +하지만, 파드 대규모 추가/삭제의 경우 업데이트 메시지의 크기는 훨씬 작다. + +엔드포인트슬라이스는 듀얼 스택 네트워킹과 토폴로지 인식 라우팅과 같은 +새로운 기능에 대한 혁신을 가능하게 했다. ## {{% heading "whatsnext" %}} -* [서비스와 애플리케이션 연결하기](/ko/docs/concepts/services-networking/connect-applications-service/)를 읽어보기 +* [서비스와 애플리케이션 연결하기](/docs/concepts/services-networking/connect-applications-service/) 튜토리얼을 따라하기 +* [엔드포인트슬라이스 API 레퍼런스](/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1/) 를 읽어보기 +* [엔드포인트 API 레퍼런스](/docs/reference/kubernetes-api/service-resources/endpoints-v1/) 를 읽어보기 \ No newline at end of file