Intro::
쿠버네티스 인 액션 책에서 minikube를 사용하는 예제 입니다.
2장
minikube start
Bash
복사
kubectl get pods
kubectl get services
kubectl get nodes
kubectl get rc
...
Bash
복사
파드
파드는 하나 이상의 밀접하게 연관된 컨테이너의 그룹으로 같은 워커 노드에서 같은 리눅스 네임스페이스로 함께 실행된다.
서비스
파드는 일시적이기 때문에, 항상 변경되는 파드의 IP 주소 문제와 여러 개의 파드를 단일 IP와 포트의 쌍으로 노출시키는 문제를 해결해 줍니다. 서비스가 생성되면 정적 IP를 할당받고 서비스가 존속하는 동안 변경되지 않습니다.
레플리케이션컨트롤러
파드의 생명주기를 관리해주는 역할을 한다.
kubectl scale rc {pod} --replicas=3
Bash
복사
3장
YAML 매니페스트
# kubia-manual.yaml
apiVersion: v1
kind: Pod
metadata:
name: kubia-manual
spec:
containers:
- image: luksa/kubia
name: kubia
ports:
- containerPort: 8080
protocol: TCP
YAML
복사
kubectl create -f kubia-manual.yaml
kubectl get po kubia-manual -o yaml
kubectl get po kubia-manual -o json
Bash
복사
파드 로그 확인
kubectl logs {pod}
kubectl logs {pod} -c {container}
Bash
복사
서비스를 만들지 않고 포트포워딩
kubectl port-forward kubia-manual 8888:8080
Bash
복사
레이블
•
정의: 레이블은 쿠버네티스 리소스(Pod, Service, Deployment 등)에 붙이는 키-값 쌍입니다.
•
역할: 특정 리소스를 **태깅(Tagging)**하여 그룹화하거나 식별하는 데 사용됩니다.
•
적용 대상: 레이블은 리소스 간의 관계를 나타내거나, 작업을 필터링하거나, 서비스와 매칭하는 데 사용됩니다.
apiVersion: v1
kind: Pod
metadata:
name: kubia-manual-v2
labels:
creation_method: manual
env: prod
spec:
containers:
- image: luksa/kubia
name: kubia
ports:
- containerPort: 8080
protocol: TCP
YAML
복사
kubectl get po --show-labels
kubectl get po -L creation_method,env
kubectl label po kubia-manual creation_method=manual#기존 파드 레이블 추가
kubectl label po kubia-manual env=debug --overwrite
YAML
복사
레이블 셀렉터
kubectl get po -l creation_method=manual
kubectl get po -l env
kubectl get po -l '!env'
YAML
복사
특정 노드에 파드 스케줄링
kubectl label node {노드} gpu=true
YAML
복사
apiVersion: v1
kind: Pod
metadata:
name: kubia-gpu
spec:
nodeSelector:
gpu: "true"
containers:
- image: luksa/kubia
name: kubia
YAML
복사
네임스페이스
•
정의: 네임스페이스는 논리적인 격리 공간으로, 리소스를 분리하고 독립적으로 관리할 수 있게 합니다.
•
역할: 쿠버네티스 클러스터 내에서 리소스를 그룹화하고, 서로 격리된 환경을 제공합니다.
•
적용 대상: 네임스페이스는 프로젝트, 팀, 환경(개발, 테스트, 프로덕션 등)을 분리하는 데 사용됩니다.
kubectl get ns
kubectl get po --n kube-system
YAML
복사
매니페스트로 네임스페이스 생성
apiVersion: v1
kind: Namespace
metadata:
name: custom-namespace
YAML
복사
kubectl create namespace 명령으로 네임스페이스 생성
kubectl create namespace custom-namespac
YAML
복사
파드 삭제
kubectl delete po {파드}
kubectl delete po -l creation_method=manual
kubectl delete ns custom-namepace
kubectl delete po --all
kubectl delete all --all
YAML
복사
4장
라이브니스 프로브
•
컨테이너 상태 확인: 애플리케이션이 응답하지 않거나 중단된 경우를 감지.
•
자동 복구: 비정상 상태인 컨테이너를 종료하고 새로 시작하여 복구.
•
무한 루프 감지: 애플리케이션이 멈추거나 무한 루프 상태에 빠졌을 때 문제를 해결.
라이브니스 프로브는 주로 아래 3가지 방식으로 컨테이너의 상태를 확인합니다:
•
HTTP GET 요청
•
TCP 소켓
•
컨테이너 내부 커맨드 실행
파드에 라이브니스 프로브 추가
apiVersion: v1
kind: Pod
metadata:
name: kubia-liveness
spec:
containers:
- image: luksa/kubia-unhealthy
name: kubia
livenessProbe:
httpGet:
path: /
port: 8080
YAML
복사