■ 쿠버네티스
컨테이너 오케스트레이션 도구의 일종
시스템 전체를 통괄하고 여러 개의 컨테이너를 관리하는 일을 말함
쿠버네티스 = k8s 라고 줄여씀
■ 마스터 노드 / 워커 노드
마스터 노드 = 전체적인 제어 담당
워커 노드 = 실제 동작을 담당
클러스터 = 마스터 노드와 워커 노드로 구성된 일군의 쿠버네티스 시스템
■ 쿠버네티스 관련 용어
파드 : 컨테이너와 볼륨을 함께 묶은 것 // 파드,컨테이너와 볼륨을 합친 것
서비스 : 로드 밸런서 역할, 각 서비스는 자동으로 고정 ip주소를 부여받고 그 주소로 들어오는 통신처리 // 파드에 요청을 배분
디플로이먼트 : 파드의 디플로이(배포)를 관리하는 요소, 파드가 사용하는 이미지 등 파드에 대한 정보를 가지고 있음 // 파드의 배포를 관리
레플리카세트 : 파드의 수를 관리하는 반장, 장애 등의 이유 로 파드가 종료됐을 때, 모자라는 파드를 보충하거나
정의 파일에 정의된 파드의 수가 감소하면 그만큼 파드의 수를 실제로 감소시킴 // 파드의 수를 관리
■ 매니페스트 파일
쿠번네티스는 매니페스트 파일(정의 파일)에 기재된 내용에 따라 파드를 생성한다.
매니페스트 파일의 내용을 쿠버네티스에 업로드하면 그 내용이 데이터베이스(etcd)에 '바람직한 상태'로 등록되며, 서버환경을 이 바람직한 상태로 유지
파드나 서비스에 대한 설정을 쿠버네티스트에서는 매니페스트 라고한다
이것을 적은 파일을 매니페스트 파일(정의 파일)이라고 하며 YAML 또는 JSON 형식으로 기재
※ 매니페스트 파일의 예(주 항목만)
apiVersion: API 그룹 및 버전
kind: 리소스 유형
metadata: 메타데이터
spec: 리소스 내용
■ 파드 설정
Docker폴더에 kube_folder 폴더생성
apa000pod.yml파일 생성
apiVersion: v1
kind: Pod
metadata:
name: apa000pod
labels:
app: apa000kube
spec:
containers:
- name: apa000ex91
image: httpd
ports:
- containerPort: 80
■ 디플로이먼트 생성
kube_folder에 apa000dep.yml 생성
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
■ 셀렉터 설정
apa000ser.yml파일생성
apiVersion: apps/v1
kind: Service
metadata:
name: apa000ser
spec:
type: NodePort
ports:
targetPort: 80
protocol: TCP
nodePort: 30080
selector:
app: apa000kube
========================================
C:\Docker\kube_folder> kubectl apply -f C:\Docker\kube_folder\apa000dep.yml
kubectl get pods // 파드 확인하는 명령어
C:\Docker\kube_folder> kubectl apply -f apa000ser.yml
kubectl get services // 서비스 확인하는 명령어
apa000dep.yml파일에
레플리카를 5로 늘리고
kubectl apply -f apa000dep.yml // 파일적용
kubectl get pods 해보면
파드의 수가 5개로 늘어남
※ 삭제
삭제할땐 kubectl delete pod [파드명]
디플로이먼트 삭제할때
kubectl delete -f apa000dep.yml
서비스 삭제할때
kubectl delete -f apa000ser.yml
문제 1) 쿠버네티스 매니페스트 파일을 생성하여 nginx 서비스 파드를 5개를 생성하세요
※ 하는법
nginxdep.yml 파일생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginxdep
spec:
selector:
matchLabels:
app: nginxkube
replicas: 5
template:
metadata:
labels:
app: nginxkube
spec:
containers:
- name: nginxquiz01
image: httpd
ports:
- containerPort: 80
nginxpod.yml 파일생성
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
labels:
app: nginxkube
spec:
containers:
- name: nginxquiz01
image: httpd
ports:
- containerPort: 80
nginxser.yml 파일생성
apiVersion: v1
kind: Service
metadata:
name: nginxser
spec:
type: NodePort
ports:
targetPort: 80
protocol: TCP
nodePort: 30080
selector:
app: nginxkube