Kubernetes 컨테이너 프로브 (ContainerProbe) 사용법

KubernetesBeginner
지금 연습하기

소개

Kubernetes 에서 프로브 (probe) 는 컨테이너가 활성 상태이고 트래픽을 수락할 준비가 되었는지 확인하는 데 사용되는 진단 도구입니다. 라이브니스 프로브 (liveness probe) 와 레디니스 프로브 (readiness probe) 의 두 가지 유형의 프로브가 있습니다. 이 랩에서는 컨테이너가 트래픽을 수락할 준비가 되었을 때 감지하는 데 사용되는 도구인 ContainerProbe 에 중점을 둡니다.

Minikube 클러스터 시작

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 경량 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다.

    cd /home/labex/project
    
  2. Minikube 시작:

    Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.

    minikube start
    
    • 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 가 실행 중인지 확인:

    Minikube 클러스터의 상태를 확인합니다.

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.
    • 클러스터가 실행 중이지 않으면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

배포 생성

첫 번째 단계는 Kubernetes 에서 배포를 생성하는 것입니다. 이 배포를 사용하여 ContainerProbe 를 테스트합니다.

  1. /home/labex/project 디렉토리에 deployment.yaml이라는 새 파일을 생성합니다.
  2. 다음 코드를 복사하여 파일에 붙여넣습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80

이 코드는 하나의 레플리카 (replica), app: containerprobe 레이블이 있는 선택기 (selector), nginx 이미지를 실행하는 컨테이너가 있는 배포를 생성합니다.

  1. 클러스터에 배포를 적용합니다.
kubectl apply -f deployment.yaml

Liveness Probe 추가

다음 단계는 nginx 컨테이너에 liveness probe 를 추가하는 것입니다. liveness probe 는 컨테이너가 살아 있는지 확인하는 데 사용됩니다. 프로브가 실패하면 Kubernetes 는 컨테이너를 다시 시작합니다.

  1. /home/labex/project 디렉토리의 deployment.yaml을 다음 내용으로 업데이트합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80

이 코드는 liveness probe 가 포트 80 에서 루트 경로로 HTTP GET 요청을 보내도록 지정합니다.

  1. 배포를 업데이트합니다.
kubectl apply -f deployment.yaml

Liveness Probe 테스트

이제 liveness probe 를 추가했으므로 제대로 작동하는지 테스트할 수 있습니다.

  1. 파드 (pod) 이름 가져오기:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

이 명령어는 배포에 의해 생성된 파드의 이름을 가져옵니다.

  1. liveness probe 의 상태 가져오기:
kubectl describe pod <pod-name>

<pod-name>을 이전 단계에서 얻은 파드의 이름으로 바꿉니다.

다음과 같은 출력을 볼 수 있습니다.

Liveness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

이는 liveness probe 가 올바르게 구성되었음을 나타냅니다.

Readiness Probe 추가

다음 단계는 nginx 컨테이너에 readiness probe 를 추가하는 것입니다. Readiness probe 는 컨테이너가 트래픽을 수락할 준비가 되었는지 확인하는 데 사용됩니다. 프로브가 실패하면 Kubernetes 는 컨테이너로 트래픽을 보내지 않습니다.

  1. deployment.yaml의 컨테이너 정의에 다음 코드를 추가합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80
          readinessProbe:
            httpGet:
              path: /
              port: 80

이 코드는 readiness probe 가 포트 80 의 루트 경로로 HTTP GET 요청을 보내도록 지정합니다.

  1. 배포 업데이트:
kubectl apply -f deployment.yaml

Readiness Probe 테스트

이제 readiness probe 를 추가했으므로, 제대로 작동하는지 테스트할 수 있습니다.

  1. 파드 (pod) 이름 가져오기:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

이 명령어는 배포에 의해 생성된 파드의 이름을 가져옵니다.

  1. readiness probe 의 상태 가져오기:
kubectl describe pod <pod-name>

<pod-name>을 이전 단계에서 얻은 파드의 이름으로 바꿉니다.

다음과 같은 출력을 볼 수 있습니다.

Readiness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

이는 readiness probe 가 올바르게 구성되었음을 나타냅니다.

요약

이 랩에서는 Kubernetes 에서 ContainerProbe 를 사용하는 방법을 배웠습니다. 배포를 생성하고, liveness probe 를 추가하고, liveness probe 를 테스트하고, readiness probe 를 추가하고, readiness probe 를 테스트했습니다. ContainerProbe 를 사용함으로써 컨테이너가 트래픽을 수락할 준비가 되었고 올바르게 작동하는지 확인할 수 있습니다.