클러스터 = 마스터 노드 + 워커 노드들의 집합
-> 사람 개입없이 자율 동작
Deployment
→ “어떤 상태로 앱을 유지할지” 정의 (버전, replica 수 등)
ReplicaSet
→ 지정된 개수만큼 Pod가 유지되도록 관리
Pod
→ 실제 컨테이너가 실행되는 최소 단위
Deployment → (자동 생성/관리) ReplicaSet → Pod
Service
→ Pod들을 묶어서 네트워크로 접근 가능하게 해주는 “별개의 리소스”
[Deployment]
↓
[ReplicaSet]
↓
[Pod]
(Service는 옆에서 Pod들을 선택해서 트래픽 연결)
apiVersion: # API그룹 및 버전 (apps/v1, core/v1)
kind: # 리소스 유형 (Deployment, Service, Pod)
metadata: # 메타데이터 (name, labels, namespace)
name: # (중항목) 파드의 이름
labels: # (중항목) 레이블
spec: # 리소스 내용 (컨테이너 정보, 개수 등)
containers: # (중항목) 컨테이너 구성
- name: # (소항목) 컨테이너 이름
iamge: # (소항목) 이미지 이름
ports: # (소항목) 포트 설정
apiVersion: v1
kind: Pod
metadata:
name: apa000pod
labels:
app: apa000kube
spec:
containers:
- name: apa000ex91
image: httpd
ports:
- containerPort: 80
apiVersion:
kind:
metadata:
name: # (중항목) 디플로이먼트 이름
spec:
selector: # (중항목) 셀렉터 설정
matchLabels: # (소항목) 셀렉터가 선택할 관리 대상 레이블
replicas: # (중항목) 레플리카 설정
template: # (중항목) 템플릿(파드의 정보)
metadata: # (소항목) 파드의 메타데이터를 기재
spec: # (소항목) 파드의 스펙을 기재
apiVersion: apps/v1
kind: Deployment
metadata:
name: apa000dep
spec:
selector:
matchLabels:
app: apa000kube
replicas: 3
template:
metadata:
labels:
app: apa000kube
spec:
containers:
- name: apa000ex91
image: httpd
ports:
- containerPort: 80
apiVersion:
kind:
metadata:
name: # (중항목) 서비스 이름
spec:
type: # (중항목) 서비스의 유형
ports: # (중항목) 포트 설정
- port: # (중항목) 서비스의 포트
targetPort: # (소항목) 컨테이너의 포트
protocol: # (소항목) 통신에 사용되는 프로토콜
nodePort: # (소항목) 워커 노드의 포트
selector: # (중항목) 셀렉터 설정
apiVersion: v1
kind: Service
metadata:
name: apa000ser
spec:
type: NodePort
ports:
- port: 8099
targetPort: 80
protocol: TCP
nodePort: 30080
selector:
app: apa000kube
kubectl 커맨드 옵션
# 1. 디플로이먼트의 매니페스트 파일 읽기 (얌파일 저장한 경로)
kubectl apply -f C:\work\kube_folder\apa000dep.yml
# 2. 생성됐는지 확인
kubectl get pods
# 3. 서비스의 매니페스트 파일 읽기 (얌파일 저장한 경로)
kubectl apply -f C:\work\kube_folder\apa000ser.yml
# 4. 생성됐는지 확인
kubectl get services
# 5. 동작 확인
# localhost:30080 접근해서 확인
# 접근 안될때는 포트포워딩 사용
kubectl port-forward service/apa000ser 8099:8099
# 포워딩 후 localhost:8099 로 접속해서 확인
# 디플로이먼트 매니페스트 파일 수정
...
replicas: 5 # 레플리카 수 5로 증가
...
# 수정한 파일 읽어들이기
kubectl apply -f C:\work\kube_folder\apa000dep.yml
# 확인
kubectl get pods
# 디플로이먼트 매니페스트 수정
...
image: nginx
...
# 수정한 파일 읽어들이기
kubectl apply -f C:\work\kube_folder\apa000dep.yml
# localhost:300080 또는 localhost:8099들어가서 확인
# 안되면
docker pull nginx
# 로 수동으로 nginx이미지 다운받고 확인
# 파드 목록 확인
kubectl get pods
# delete로 커맨드로 파드 하나 삭제
kubectl delete pod apa000dep-...(파드 이름)
# 파드 확인
kubectl get pods
# 디플로이먼트 삭제
kubectl delete -f C:\work\kube_folder\apa000dep.yml
# 확인
kubectl get deployment
# 서비스 삭제
kubectl delete -f C:\work\kube_folder\apa000ser.yml
# 확인
kubectl get service