쿠버네티스의 기본 오브젝트는 다음 4가지이다.
1. 파드
쿠버네티스에서 실행되는 최소 단위, 웹 서비스를 구동하는 데 필요한 최소 단위.
독립적인 공간과 사용 가능한 IP를 가지고 있다.
1개 이상의 컨테이너를 갖고 있기 때문에 여러 기능을 묶어 하나의 목적으로 사용할 수도 있다.
2. 네임스페이스
리소스들을 구분해 관리하는 그룹
기본으로 default, 쿠버네티스 시스템의 kube-system 등이 있다.
3. 볼륨
파드가 생성될 때 파드에서 사용할 수 있는 디렉토리를 제공한다. 하지만 파드는 언제든지 사라질 수 있는 개념이다. 즉 파드가 사용하는 디렉토리도 같이 사라질 수 있다.
그러나 파드가 사라지는 것과 별개로 보전되어야하거나 다른 파드와 공유하기 위해 사용되는 디렉토리가 볼륨이다.
4. 서비스
파드는 클러스터 내에서 유동적이기 때문에 접속 정보가 고정이 아닙니다.
그러나 외부에서 연결해서 들어오기 위해서는 고정된 ip가 필요합니다.
서비스는 파드의 접속을 안정적으로 유지할 수 있도록 서비스를 통해 내/외부로 연결시켜주는 역할을 합니다.
이러한 쿠버네티스 오브젝트는 오브젝트 구성을 결정해주는 두 개의 오브젝트 필드가 있다.
1. spec
오브젝트를 생성할 대 리소스에 원하는 특징에 대한 설명을 제공
2. status
오브젝트의 현재 상태
이렇게 사용자가 원하는 오브젝트의 상태를 spec과 status로 정의하는데 이러한 값들을 .yaml 파일에 작성하고 실행시키면 .yaml 파일에 선언한 상태로 쿠버네티스 오브젝트가 구성된다.
기본 오브젝트만으로도 쿠버네티스를 사용할 수 있지만, 좀 더 효율적으로 사용하기 위해 이외의 기능을 조합하고 추가한 것이 디플로이먼트입니다.
파드와 레플리카셋에 대한 선언적 업데이트를 제공하며,
디플로이먼트는 .yaml 파일로 의도하는 상태를 설명하고, 디플로이먼트 컨트롤러가 현재 상태에서 의도하는 상태로 비율을 조정하며 변경합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment # 이 이름으로 디플로이먼트가 생성됨.
labels:
app: nginx
spec:
replicas: 3 # 지정된 수만큼의 pod를 생성하고 유지
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx # 파드에 레이블을 붙인다.
spec:
containers:
- name: nginx
image: nginx:1.14.2 # 컨테이너에서 사용할 이미지
ports:
- containerPort: 80
이렇게 생성한 디플로이먼트를 생성하는 방법은
kubectl apply -f 디플로이먼트파일명.yaml
# 확인
kubectl get rs # 레플리카셋 확인
kubectl get pod # 레플리카셋에 정의된 갯수만큼 pod 생겼는지 확인
앞선 장에서 보았지만 pod를 삭제하는 방법은
kubectl delete pod명
이다.
하지만 디플로이먼트로 생성된 pod는 다르다.
디플로이먼트는 .yaml 파일에 지정된 replica수만큼 항상 유지되도록 체크된다고 하였다.
그렇기에 아무리 우리가 위 명령어로 삭제해도 컨트롤러가 계속해서 지정된 replica pod 수를 맞추기위해 생성해내므로 의미가 없게된다..
따라서, 디플로이먼트로 생성한 pod를 삭제하려면 상위 디플로이먼트가 삭제되어야 파드가 삭제된다.
kubectl delete deployment 디플로이명
kubectl get pod # 파드 삭제되었는지 확인