소개
Kubernetes 에서 프로브 (probe) 는 컨테이너가 활성 상태이고 트래픽을 수락할 준비가 되었는지 확인하는 데 사용되는 진단 도구입니다. 라이브니스 프로브 (liveness probe) 와 레디니스 프로브 (readiness probe) 의 두 가지 유형의 프로브가 있습니다. 이 랩에서는 컨테이너가 트래픽을 수락할 준비가 되었을 때 감지하는 데 사용되는 도구인 ContainerProbe 에 중점을 둡니다.
Minikube 클러스터 시작
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 경량 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다.
cd /home/labex/projectMinikube 시작:
Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.
minikube start- 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
- Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다.
minikube statuskubelet및apiserver와 같은 구성 요소가Running으로 나열되어 있는지 확인합니다.- 클러스터가 실행 중이지 않으면
minikube start를 다시 실행합니다.
Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.
배포 생성
첫 번째 단계는 Kubernetes 에서 배포를 생성하는 것입니다. 이 배포를 사용하여 ContainerProbe 를 테스트합니다.
/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
이 코드는 하나의 레플리카 (replica), app: containerprobe 레이블이 있는 선택기 (selector), nginx 이미지를 실행하는 컨테이너가 있는 배포를 생성합니다.
- 클러스터에 배포를 적용합니다.
kubectl apply -f deployment.yaml
Liveness Probe 추가
다음 단계는 nginx 컨테이너에 liveness probe 를 추가하는 것입니다. liveness probe 는 컨테이너가 살아 있는지 확인하는 데 사용됩니다. 프로브가 실패하면 Kubernetes 는 컨테이너를 다시 시작합니다.
/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 요청을 보내도록 지정합니다.
- 배포를 업데이트합니다.
kubectl apply -f deployment.yaml
Liveness Probe 테스트
이제 liveness probe 를 추가했으므로 제대로 작동하는지 테스트할 수 있습니다.
- 파드 (pod) 이름 가져오기:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'
이 명령어는 배포에 의해 생성된 파드의 이름을 가져옵니다.
- 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 는 컨테이너로 트래픽을 보내지 않습니다.
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 요청을 보내도록 지정합니다.
- 배포 업데이트:
kubectl apply -f deployment.yaml
Readiness Probe 테스트
이제 readiness probe 를 추가했으므로, 제대로 작동하는지 테스트할 수 있습니다.
- 파드 (pod) 이름 가져오기:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'
이 명령어는 배포에 의해 생성된 파드의 이름을 가져옵니다.
- 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 를 사용함으로써 컨테이너가 트래픽을 수락할 준비가 되었고 올바르게 작동하는지 확인할 수 있습니다.


