K8s 에선 오브젝트(Object) 라는 개념이 있습니다.
상태를 반영구적으로 가지며 바라는 상태
를 유지하기 위해 자신의 역할을 수행하는 K8s 의 개념입니다.
K8s 는 기본적으로 마이크로서비스 아키텍쳐이다는 점을 알고 있으면 좋습니다.
이러한 오브젝트는 yaml 포맷으로 정의할 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
apiVersion
: 이 오브젝트를 해석할 API 버전 (예 : apps/v1
)kind
: 어떤 종류*타입)의 오브젝트인지 (예 : Deployment
)metadata
: name, label, namespace 등 메타데이터 정보spec
: 사용자가 원하는 상태를 정의오브젝트를 생성하는데는 선언형과 명령형 두 방식이 존재합니다.
kubectl apply -f {replica.yml}
kubectl create
, kubectl delete
같은 명령어로 설정 과정을 직접 처리해야합니다.Pod
: K8s 의 가장 작은 배포 단위. 여러 컨테이너를 포함한다.ReplicaSet
: Pod 를 지정된 수만큼 유지시킵니다.Deployment
: Pod 의 배포를 담당합니다. (레플리카의 상위 레벨 오브젝트. ReplicaSet 의 내용을 포함할 수 있다.)Service
: Pod 에 네트워크 서비스 제공 (리눅스 같은 K8s 클러스타 바로 밖과 K8s 클러스터 내부를 연결시킨다.)ConfigMap / Secret
: 애플리케이션 설정값, 민감 정보 등을 외부에서 주입한다.Ingress
: 외부 트래픽을 내부 Service 에게 라우팅한다.외에도 여러 오브젝트가 존재합니다.
생성 / 업데이트
kubectl apply -f {svc.yml}
조회
kubectl get {오브젝트 타입}
kubectl get pods
kubectl get services
상세 정보 확인
kubectl describe {오브젝트 타입} {오브젝트 이름}
삭제
kubectl delete -f {svc.yml}
kubectl delete {오브젝트 타입} {오브젝트 이름}
같은 namespace 안에선 name으로 식별합니다. 따라서 name 은 namespace 안에서 유일해야 합니다.
labels 라는 필드가 존재하는데 중복되어도 좋고 그루핑 등에 사용될 수 있습니다.