guswns1659 / guswns1659.github.io

MIT License
1 stars 0 forks source link

24.07.08 pod 추가자료 - 서비스와 엔드포인트만 남음 #16

Closed guswns1659 closed 2 months ago

guswns1659 commented 2 months ago

7-2주차

대표적인 오브젝트

7-3주차

카카오페이의 k8s

guswns1659 commented 2 months ago

검색자료

guswns1659 commented 2 months ago

Liveness Probe와 Readiness Probe

Kubernetes에서 livenessProbereadinessProbe는 컨테이너의 상태를 모니터링하고 관리하기 위해 사용되는 두 가지 중요한 메커니즘입니다.

Liveness Probe

Readiness Probe

Probe를 호출하는 주체는 Kubelet

요약

guswns1659 commented 2 months ago

Kubernetes RollingUpdate 전략: 동작 방식과 Readiness Probe의 역할

단계별 동작 과정

설정

예제 동작

  1. 초기 상태:

    • 4개의 기존 Pod가 실행 중입니다.
  2. 첫 번째 단계:

    • maxSurge에 따라 2개의 새로운 Pod가 생성됩니다.
    • 총 6개의 Pod가 실행 중입니다 (4개의 기존 Pod + 2개의 새로운 Pod).
  3. 두 번째 단계:

    • 1개의 기존 Pod가 maxUnavailable에 따라 종료됩니다.
    • 총 5개의 Pod가 실행 중입니다 (3개의 기존 Pod + 2개의 새로운 Pod).
  4. 세 번째 단계:

    • 새로운 Pod 2개 중 하나가 실행 가능해지면, 새로운 Pod 1개가 추가로 생성됩니다 (maxSurge가 2이기 때문에, 동시에 최대 2개의 추가 Pod가 존재할 수 있습니다).
    • 1개의 기존 Pod가 종료됩니다 (maxUnavailable에 따라).
    • 총 5개의 Pod가 실행 중입니다 (2개의 기존 Pod + 3개의 새로운 Pod).
  5. 네 번째 단계:

    • 새로운 Pod 2개 중 하나가 실행 가능해지면, 새로운 Pod 1개가 추가로 생성됩니다.
    • 1개의 기존 Pod가 종료됩니다.
    • 총 5개의 Pod가 실행 중입니다 (1개의 기존 Pod + 4개의 새로운 Pod).
  6. 다섯 번째 단계:

    • 마지막 기존 Pod가 종료됩니다.
    • 총 4개의 Pod가 실행 중입니다 (모두 새로운 Pod).

실행 가능 여부 판단: Readiness Probe

Kubernetes의 Deployment에서 컨테이너가 트래픽을 받을 준비가 되었는지를 판단하는 기준은 Readiness Probe입니다.

Readiness Probe

예제 설정

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: example-image:latest
    readinessProbe:
      httpGet:
        path: /ready
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 5
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 10

요약

참고 문서

guswns1659 commented 2 months ago

네, 맞습니다. Kubernetes에서 엔드포인트를 생성할 때, 서비스의 셀렉터(selector)는 해당 라벨(label)을 가진 Pod들을 검색하여 그 Pod들의 IP 주소를 찾아 엔드포인트로 등록합니다.

서비스와 엔드포인트 생성 과정

  1. Pod 생성: 애플리케이션의 인스턴스인 여러 Pod가 특정 라벨을 가지고 클러스터 내에 생성됩니다.

  2. 서비스 생성: 서비스가 생성되면, 이 서비스는 지정된 셀렉터(selector)를 사용하여 특정 라벨을 가진 Pod들을 선택합니다.

    • 예를 들어, 아래의 서비스는 app: example 라벨을 가진 모든 Pod를 선택합니다.
    apiVersion: v1
    kind: Service
    metadata:
     name: example-service
    spec:
     selector:
       app: example
     ports:
       - protocol: TCP
         port: 80
         targetPort: 8080
     type: ClusterIP
  3. 엔드포인트 생성: 서비스가 선택한 Pod들의 IP 주소와 포트를 기반으로 엔드포인트를 자동으로 생성합니다.

    • 엔드포인트는 서비스와 연결된 Pod들의 IP 주소와 포트를 포함합니다.
  4. 트래픽 전달: 서비스에 대한 요청이 들어오면, Kubernetes의 kube-proxy가 요청을 해당 엔드포인트로 전달합니다.

엔드포인트 확인

엔드포인트는 kubectl get endpoints 명령어를 사용하여 확인할 수 있습니다. 예를 들어, example-service라는 이름의 서비스에 대한 엔드포인트를 확인하려면 다음과 같이 실행합니다.

kubectl get endpoints example-service

엔드포인트 출력 예시

NAME             ENDPOINTS          AGE
example-service  10.244.1.5:8080    10m
                 10.244.1.6:8080    10m

위 출력에서 10.244.1.5:808010.244.1.6:8080이 서비스 트래픽을 받을 Pod들의 IP와 포트입니다.

참고 문서

이러한 과정에서 서비스의 셀렉터는 특정 라벨을 가진 Pod들을 검색하여 그 IP 주소를 엔드포인트로 사용합니다. 이를 통해 Kubernetes는 클러스터 내에서 Pod 간의 트래픽을 효율적으로 관리하고 로드 밸런싱을 제공합니다.