수업 75일차 쿠버네티스

유동우·2023년 1월 14일
1

■ 쿠버네티스
컨테이너 오케스트레이션 도구의 일종
시스템 전체를 통괄하고 여러 개의 컨테이너를 관리하는 일을 말함
쿠버네티스 = k8s 라고 줄여씀

■ 마스터 노드 / 워커 노드

마스터 노드 = 전체적인 제어 담당

워커 노드 = 실제 동작을 담당

클러스터 = 마스터 노드와 워커 노드로 구성된 일군의 쿠버네티스 시스템

■ 쿠버네티스 관련 용어

파드 : 컨테이너와 볼륨을 함께 묶은 것 // 파드,컨테이너와 볼륨을 합친 것

서비스 : 로드 밸런서 역할, 각 서비스는 자동으로 고정 ip주소를 부여받고 그 주소로 들어오는 통신처리 // 파드에 요청을 배분

디플로이먼트 : 파드의 디플로이(배포)를 관리하는 요소, 파드가 사용하는 이미지 등 파드에 대한 정보를 가지고 있음 // 파드의 배포를 관리

레플리카세트 : 파드의 수를 관리하는 반장, 장애 등의 이유 로 파드가 종료됐을 때, 모자라는 파드를 보충하거나
정의 파일에 정의된 파드의 수가 감소하면 그만큼 파드의 수를 실제로 감소시킴 // 파드의 수를 관리

■ 매니페스트 파일

쿠번네티스는 매니페스트 파일(정의 파일)에 기재된 내용에 따라 파드를 생성한다.
매니페스트 파일의 내용을 쿠버네티스에 업로드하면 그 내용이 데이터베이스(etcd)에 '바람직한 상태'로 등록되며, 서버환경을 이 바람직한 상태로 유지

파드나 서비스에 대한 설정을 쿠버네티스트에서는 매니페스트 라고한다
이것을 적은 파일을 매니페스트 파일(정의 파일)이라고 하며 YAML 또는 JSON 형식으로 기재

※ 매니페스트 파일의 예(주 항목만)
apiVersion: API 그룹 및 버전
kind: 리소스 유형
metadata: 메타데이터
spec: 리소스 내용

■ 파드 설정

Docker폴더에 kube_folder 폴더생성
apa000pod.yml파일 생성

apiVersion: v1

리소스 유형

kind: Pod
metadata:

파드 이름

name: apa000pod

라벨명, service에서 사용함

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

생성할 파드 정보

파드 이름(name)을 설정하지 않음, 라벨로 관리

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:

접근할 IP 주소 타입 설정, ClusterIP/NodePort/LoadBalancer/ExternalName

NodePort는 사설 아이피 주소 사용

실제 서비스에서는 LoadBalancer를 사용 (공인 아이피를 사용)

type: NodePort
ports:

서비스의 포트

  • port: 8099

컨테이너의 포트

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개를 생성하세요

서비스 포트 : 8100

컨테이너 포트 : 80

워크 노드 포트 : 30080

레플리카 수 : 5

pod 파일명 : nginxPod.yml

디플로이먼트 파일명 : nginxDep.yml

서비스 파일명 : nginxSer.yml

컨테이너명 : nginxQuiz01

파드명 : nginxPod

라벨명 : nginxKube

서비스명 : nginxservice

디플로이먼트명 : nginxDep

서비스포트 타입 : NodePort

※ 하는법

nginxdep.yml 파일생성

apiVersion: apps/v1

리소스 유형

kind: Deployment
metadata:

디플로이먼트 이름

name: nginxdep
spec:

디플로이먼트가 지정된 파드를 관리할 수 있도록 설정

selector:
matchLabels:
app: nginxkube

레플리카 개수 설정

replicas: 5

생성할 파드 정보

파드 이름(name)을 설정하지 않음, 라벨로 관리

template:
metadata:
labels:
app: nginxkube
spec:
containers:
- name: nginxquiz01
image: httpd
ports:
- containerPort: 80

nginxpod.yml 파일생성

apiVersion: v1

리소스 유형

kind: Pod
metadata:

파드 이름

name: nginxpod

라벨명, service에서 사용함

labels:
app: nginxkube
spec:
containers:

실제 생성되는 컨테이너 이름

- name: nginxquiz01

실제 사용되는 도커 이미지

  image: httpd
  ports:

해당 컨터이너가 서비스할 포트번호

  - containerPort: 80

nginxser.yml 파일생성

apiVersion: v1

리소스 유형

kind: Service
metadata:
name: nginxser
spec:

접근할 IP 주소 타입 설정, ClusterIP/NodePort/LoadBalancer/ExternalName

NodePort는 사설 아이피 주소 사용

실제 서비스에서는 LoadBalancer를 사용 (공인 아이피를 사용)

type: NodePort
ports:

서비스의 포트

  • port: 8099

컨테이너의 포트

targetPort: 80
protocol: TCP

워크 노드의 포트

nodePort: 30080

파드나 디플로이먼트에서 설정한 라벨을 사용

selector:
app: nginxkube

profile
클라우드 엔지니어가 되고싶은 클린이

0개의 댓글