Home api server가 호출받고 etcd에 저장하는 방식
Post
Cancel

api server가 호출받고 etcd에 저장하는 방식

Kubernetes API 서버가 Pod 생성 명령을 받으면, 이 명령을 etcd에 저장하는 과정은 다음과 같은 일련의 단계를 거칩니다. 아래는 이 과정을 설명하는 예시입니다.

  1. kubectl 명령 실행:
    1
    
    kubectl apply -f pod.yaml
    
  2. API 서버가 명령을 수신:
    • kubectl 명령을 실행하면, 클라이언트는 API 서버에 HTTP 요청을 보냅니다.
    • 예: POST /api/v1/namespaces/default/pods
  3. API 서버가 요청을 처리:
    • API 서버는 요청을 수신하고, 요청의 유효성을 검사한 후 etcd에 저장할 준비를 합니다.
  4. etcd에 데이터 저장:
    • 유효성 검사가 완료되면, API 서버는 Pod 정의를 etcd에 저장합니다.
    • 저장되는 데이터의 예시는 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
  "kind": "Pod",
  "apiVersion": "v1",
  "metadata": {
    "name": "mypod",
    "namespace": "default",
    "uid": "12345678-1234-1234-1234-123456789abc",
    "resourceVersion": "12345",
    "creationTimestamp": "2024-06-21T12:00:00Z"
  },
  "spec": {
    "containers": [
      {
        "name": "mycontainer",
        "image": "nginx",
        "ports": [
          {
            "containerPort": 80
          }
        ]
      }
    ]
  },
  "status": {
    "phase": "Pending"
  }
}
  1. etcd의 저장 구조:
    • etcd는 위와 같은 JSON 데이터를 key-value 형식으로 저장합니다.
    • 예를 들어, 저장되는 key는 /registry/pods/default/mypod와 같은 형식이 됩니다.
  2. API 서버의 응답:
    • API 서버는 etcd에 성공적으로 저장된 후 클라이언트에게 응답을 반환합니다.
    • 응답 예시:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      
      {
        "kind": "Pod",
        "apiVersion": "v1",
        "metadata": {
          "name": "mypod",
          "namespace": "default",
          "uid": "12345678-1234-1234-1234-123456789abc",
          "resourceVersion": "12345",
          "creationTimestamp": "2024-06-21T12:00:00Z"
        },
        "spec": {
          "containers": [
            {
              "name": "mycontainer",
              "image": "nginx",
              "ports": [
                {
                  "containerPort": 80
                }
              ]
            }
          ]
        },
        "status": {
          "phase": "Pending"
        }
      }
      

이러한 과정으로 API 서버는 kubectl 명령을 통해 받은 Pod 생성 요청을 처리하고, 해당 정보를 etcd에 저장하게 됩니다. etcd는 Kubernetes 클러스터의 모든 상태 정보를 저장하는 중앙 저장소 역할을 합니다.

etcd 키의 구조화

Kubernetes에서 etcd의 key가 /registry/로 시작하는 이유는 Kubernetes의 리소스를 구조화하고 네임스페이스와 다른 리소스 타입을 구분하기 위해 사용됩니다. 이를 통해 Kubernetes는 다양한 리소스 유형을 체계적으로 관리할 수 있습니다.

  1. 키 구조화 및 조직화:
    • Kubernetes는 여러 유형의 리소스를 관리합니다(Pods, Services, ConfigMaps 등). 모든 리소스는 etcd에 저장되며, 이를 효과적으로 조직화하기 위해 특정 경로 구조를 사용합니다.
    • /registry/ 접두사는 Kubernetes 리소스를 구분하는 데 사용됩니다.
  2. 예시:
    • /registry/pods/default/mypod: 기본 네임스페이스에 있는 mypod Pod의 정보.
    • /registry/services/default/myservice: 기본 네임스페이스에 있는 myservice 서비스의 정보.
    • /registry/namespaces/default: 기본 네임스페이스 자체의 정보.
  3. 효율적인 검색 및 관리:
    • 이러한 경로 구조를 사용하면 etcd에서 특정 유형의 리소스를 쉽게 검색하고 관리할 수 있습니다.
    • 예를 들어, 모든 Pod를 검색하려면 /registry/pods/ 아래의 모든 키를 검색하면 됩니다.
  4. 네임스페이스와 리소스 타입 분리:
    • 각 네임스페이스와 리소스 타입별로 경로를 구분하여, 네임스페이스나 리소스 타입에 따른 데이터 충돌을 방지할 수 있습니다.

이러한 구조화된 접근 방식을 통해 Kubernetes는 효율적으로 리소스를 관리하고, 확장 가능한 클러스터 관리 기능을 제공합니다.

This post is licensed under CC BY 4.0 by the author.

사용자의 명령을 받은 kubectl은 내부적으로 HTTP 요청을 만들어 API 서버를 호출한다.

팟 생성 시 컨트롤러 매니저의 역할

Trending Tags