[Kubernetes] Chapter 3.3

ynkim·2023년 6월 1일
0

외부 사용자가 파드를 이용하는 방법
서비스: 쿠버네티스에선 외부에서 쿠버네티스 클러스터에 접속하는 방법을 의미

NodePort

모든 워커 노드의 특정 포트(노드포트)를 열고 여기로 오는 모든 요청을 노드포트 서비스로 전달한다. 그리고 노드포트 서비스는 해당 업무를 처리할 수 있는 파드로 요청을 전달한다.

노드포트 서비스로 외부에서 접속하기

# 파드 생성
kubectl create deployment np-pods --image=sysnet4admin/echo-hname

# 파드 확인
kubectl get pods

# 노드포트 서비스 생성
kubectl create -f ~/_Book_k8sInfra/ch3/3.3.1/nodeport.yaml

부하 분산 테스트

# Powershell
## 반복적으로 노드포트에 접속해 접속한 파드 이름을 화면에 표시하는 명령

$i=0; while($true)
{
	% { $i++; write-host -NoNewline "$i $_" }
    (Invoke-RestMethod "http://192.168.1.101:30000")-replace '\n', " "
}
# 파드를 3개로 증가
kubectl scale deployment np-pods --replicas=3

# 파드 확인
kubectl get pods

expose로 노드포트 서비스 생성

# 서비스로 내보낼 deployment, 서비스의 이름, 타입, 연결 포트 지정
kubectl expose deployment np-pods --type=NodePort --name=np-svc-v2--port=80

# 서비스 확인
kubectl get services # expose를 사용하면 노드포트의 포트 번호를 지정할 수 없음(30000~32767 랜덤값)

사용 목적별로 연결하는 인그레스

노드포트는 포트를 중복 사용할 수 없기 때문에 1개의 노드포트에 1개의 디플로이먼트만 적용된다. 때문에 여러 개의 디플로이먼트가 있을 때는 인그레스를 사용한다.
NGINX 인그레스 컨트롤러
1. 사용자는 노드마다 설정된 노드포트를 통해 노드포트 서비스로 접속. 이 때 노드포트 서비스를 nginx 인그레스 컨트롤러로 구성
2. nginx 컨트롤러는 적합한 클러스터 IP 서비스로 경로를 제공
3. 클러스터 IP 서비스는 사용자를 해당 파드로 연결해줌
4. 인그레스 컨트롤러는 파드와 직접 통신이 불가하기 때문에 노드포트나 로드밸런서 서비스와 연동되어야 함

# 디플로이먼트 2개 배포
kubectl create deployment in-hname-pod --image=sysnet4admin/echo-hname
kubectl create deployment in-ip-pod --image-sysnet4admin/echo-ip

# 파드 상태 확인
kubectl get pods

# nginx 인그레스 컨트롤러 설치
kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.2/ingress-nginx.yaml

# nginx 인그레스 컨트롤러 파드 배포 확인
kubectl get pods -n ingress-nginx

# 설정 적용
kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.2/ingress-config.yaml

# 설정 파일 등록 확인
kubectl get ingress

# 인그레스에 적용된 내용 확인
kubectl get ingress -o yaml

# nginx 인그레스 컨트롤러를 외부에 노출
kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.2/ingress.yaml

# nginx 인그레스 컨트롤러 확인
kubectl get services -n ingress-nginx

# 디플로이먼트도 서비스로 노출
kubectl expose deployment in-hname-pod --name=hname-svc-default --port=80,443
kubectl expose deployment in-ip-pod --name=ip-svc --port=80,443

# 서비스 확인
kubectl get services

온프레미스에서 로드밸런서를 제공하는 MetalLB

# 디플로이먼트로 2종류의 파드 생성 후 파드를 3개로 증가
kubectl create deployment lb-hname-pods --image=sysnet4admin/echo-hanme
kubectl scale deployment lb-hname-pods --replicas=3
kubectl create deployment lb-ip-pods --image=sysnet4admin/echo-ip
kubectl scale deployment lb-ip-pods --replicas=3

# 오브젝트 스펙 적용
kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.4/metallb.yaml

# 설정 적용
kubectl apply -f ~/_Book_k8sInfra/ch3/3.3.4/metallb-l2config.yaml

# 컨피그맵 생성 확인
kubectl get configmap -n metallb-system

# 디플로이먼트를 로드밸런서 서비스로 노출
kubectl expose deployment lb-hname-pods --type=LoadBalancer --name=lb-hname-svc --port=80
kubectl expose deployment lb-ip-pods --type=LoadBalancer --name=lb-ip-svc --port=80

# scale 명령으로 파드를 6개로 증가
kubectl scale deployment lb-hname-pods --replicas=6

부하에 따라 자동으로 파드 수를 조절하는 HPA

HPA(Horizontal Pod Autoscaler)란 부하량에 따라 디플로이먼트의 파드 수를 유동적으로 관리하는 기능을 말한다.

# 디플로이먼트 생성
kubectl create deployment hpa-hname-pods --image=sysnet4admin/echo-hname

# 로드밸런서 서비스로 설정
kubectl expose deployment hpa-hname-pods --type=LoadBalancer --name=hpa-hname-svc --port=80

# 메트릭 서버 생성
kubectl create -f ~/_Book_k8sInfra/ch3/3.3.5/metric-server.yaml

# 부하 확인
kubectl top pods

# scale이 실행되도록 디플로이먼트에 기준 값을 기록
# resources.requests.cpu: 10m
# resources.limits.cpu: 50m
kubectl edit deployment hpa-hname-pods

# autosacle 설정 -> 특정 조건이 만족되는 경우에 자동으로 scale 명령 수행
kubectl autoscale deployment hpa-hname-pods --min=1 --max=30 --cpu-percent=50

0개의 댓글