1. 기본 개념
쿠버네티스는 파드라는 단위로 컨테이너를 묶어서 관리한다.
아래와 같이 각 컨테이너마다 역할을 부여하여 관리하는것도 가능하다.
- 역할 부여의 예
- 웹 서버
- 로그 수집기
- 볼륨 컨테이너
파드하나에 한개의 아이피를 공유하며 각 컨테이너와 통신할때는 포트를 이용하여 접근한다.
2. 파드 설정 파일로 POD 사용하기
pod-sample.yaml
apiVersion: v1
kind: Pod
metadata:
name: kubernetes-simple-pod
labels:
app: kubernetes-simple-pod
spec:
containers:
- name: kubernetes-simple-pod
image: arisu1000/simple-container-app:latest
ports:
- containerPort: 8080
- .metadata.name: 파드명
- .metadata.labels.app: 오브젝트를 식별하는 라벨
- .spec.containers[].name: 컨테이너명
- .spec.containers[].image: 컨테이너 이미지명 (https://hub.docker.com/r/arisu1000/simple-container-app)
- .spec.containers[].ports[].containerPort: 컨테이너 포트
2.1. 설정 명령어
- kubectl apply -f pod-sample.yaml
- kubectl get pods
3. 파드 생명 주기
3.1. 파드 생명주기 확인 명령어
- kubectl describe pods kubernetes-simple-pod
Status
- pending: 파드 생성 중
- running: 파드 내 모든 컨테이너가 실행 중
- 1개 이상의 컨테이너가 실행 중이거나 시작 또는 재시작 상태일 수 있습니다.
- Succeed: 파드 안 모든 컨테이너가 정상 실행 종료된 상태로 재시작되지 않습니다.
- Failed: 파드안 콘테이너 중 정상적으로 실행 종료되지 않음
- Unknown: 상태확인 불가 (보통 파드가 있는 노드와 통신할 수 없을 때임)
Conditions
- Initialized: 모든 초기화 컨테이너가 성공적으로 시작 완료됨
- Ready: 파드의 요청실행 가능하며 연결된 모든 서비스의 로드밸런싱 풀에 추가되어야 함
- ContainersReady: 파드안 모든 컨테이너가 준비상태임
- PodScheduled: 파드가 하나의 노드로 스케줄을 완료함
- Unschedulable: 자원부족이나 다른 제약으로 현재 스케줄 불가능
4. Kubelet으로 컨테이너 진단하기
컨테이너가 실행된 후에는 kubelet이 컨테이너를 주기적으로 진단한다.
이 때 사용되는 프로브가 2가지가 있다.
- livenessProbe: 컨테이너가 실행됬는지 확인한다
- 만약 진단실패 시 kubelet은 컨테이너를 종료시키고 재시작한다.
- 따로 설정하지 않으면 기본 상태값은 Success이다.
- readinessProbe: 컨테이너가 실행된 후 실제로 서비스 요청에 응답할 수 있는지 진단한다
- 만약 진단실패 시 Endpoint Controller는 해당 파드에 연결된 모든 서비스를 대상으로 엔드포인트 정보를 제거한다.
- 첫 번째 readinessProbe를 하기 전까지의 기본 상태 값은 Failure입니다.
- ReadinessProbe를 지원하지 않는 컨테이너라면 기본상태 값은 Success이다.
- 해당 Probe의 장점은 실제 트래픽을 받을 준비가 되었음을 확인하고 트래픽을 받는다.
- 그러므로 자바 애플리케이션처럼 프로세스가 시작된 후 앱이 초기화될 때까지 시간이 걸리는 상황에 유용하다.
컨테이너 진단은 컨테이너가 구현한 Handler를 Kubelet이 호출해서 실행한다.
해당 Handler 종류는
- ExecAction: 컨테이너 안에 지정된 명령을 실행하고 종료 코드가 0일때 Success
- TCPSocketAction: 컨테이너 안에 지정된 IP와 포트로 TCP상태를 확인하고 포트가 열려있으면 Success
- HTTPGetAction: 컨테이너 안에 지정된 IP, 포트, 경로로 HTTP GET요청을 보냄, 응답코드가 200~400 사이면 Success
진단 결과는
- Success: 성공
- Failure: 실패
- Unknown: 알 수 없음
'Infra > Kubernetes' 카테고리의 다른 글
Docker 명령어 정리 (0) | 2020.09.19 |
---|---|
3. 쿠버네티스 개념 (0) | 2020.06.05 |
2. 쿠버네티스로 컨테이너 실행하기 (0) | 2020.06.04 |
1. 쿠버네티스 관련 설정 및 설치 (0) | 2020.06.03 |
4. 파드와 노드 (0) | 2020.05.24 |