Study/Kubernetes

[실습4] Nginx 배포하기

Dream Amal 2025. 7. 14.
 

[실습3] kubectl 명령어 익히기

minikube 내에서 아래 명령어들을 이어서 실습해보세요! [실습2] Minikube 사용해보기Minikube 란?01. 기본 개념단일 노드 k8s 클러스터를 가상머신(VM) 또는 컨테이너 기반 환경(docker 등) 위에 생성해 줌로

dream-coding.tistory.com

실습 3에서 익힌 명령어를 기반으로 nginx pod 를 띄워봅시다!

 


01. 클러스터 확인

# minikube를 정지시켜놓은 상태라면 다시 실행시켜줘야 함
minikube start

# 클러스터 정보 출력
kubectl cluster-info

# node 정보 출력
kubectl get no

02. Nginx 웹 서버 배포

# nginx 이미지를 기반으로 test-nginx 라는 이름의 deployment를 생성
kubectl create deploy test-nginx --image=nginx

# deployment 확인
kubectl get deploy

# pod 확인
kubectl get po

03. NodePort 서비스 만들기

  • deployment를 배포한 후에, 이를 외부로 노출시키기 위한 service를 생성하여야 함
    • Service Type의 종류
      • ClusterIP : 클러스터 내부에서만 접근할 수 있는 IP를 할당 (외부통신 불가능)
      • NodePort : 노드의 특정 port를 사용하여 접근하는 방식, port당 하나의 서비스만 사용 가능
      • LoadBalancer : NodePort 앞단에 특정 LoadBalancer를 사용하여 접근
      • ExternalName : DNS 이름에 대해 서비스를 매핑
  • 때문에 외부에서 접속 가능하도록 NodePort type으로 expose하여야 함
# 80번 port를 사용하여 service 생성
## 생성시 --name 옵션을 사용하지 않으면 deployment와 동일한 이름으로 service가 생성됨
kubectl expose deploy test-nginx --type=NodePort --port=80

# service 확인
kubectl get svc

# minikube로 실행
minikube service test-nginx

expose 전에는 확인되지 않던 service가 생성된 것을 확인할 수 있음

04. 로그와 상태 확인

# pod 확인
kubectl get po

# pod 상태 확인
kubectl describe pod [pod 이름]

# pod log 확인
kubectl logs [pod 이름]

describe 명령어를 통해 pod의 전반적인 내용을 모두 확인할 수 있음
log 명령어를 사용하면 사용자의 접근 log까지 확인이 가능함

05. Pod 갯수 변경

  • 동일한 app을 3개로 확장 (scale-out)
# replicas(복제본)를 3으로 변경
kubectl scale deployment test-nginx --replicas=3

# pod 확인
kubectl get po

# edit 명령을 통해 yaml file을 변경하여 다시 scale-in 할 수 있음
kubectl edit deploy test-nginx

기존 replicas 3 변경 후 replicas 1
변경 후 pod가 다시 1개로 줄어들었음

06. Nginx 업데이트 & 롤백

  • image가 update되었을 때, version 변경이 가능함
# nginx version 설정
kubectl set image deployment/test-nginx nginx=nginx:1.19

# deployment image 변경 확인
kubectl describe deploy test-nginx

  • 이미지가 정상적으로 동작하지 않거나, 롤백이 필요할 때는 하기 명령어를 사용할 수 있음
# 배포 상태 확인
## 만약 set image로 배포를 시작한 후, 시간이 걸린다면 해당 명령어로 상태를 확인할 수 있음
kubectl rollout status deployment/test-nginx

# 직전에 실행한 업데이트를 롤백 (이전 이미지 버전으로 복원)
kubectl rollout undo deployment/test-nginx

# 현재 deployment image 확인 
kubectl describe deploy test-nginx

  • 이때까지의 배포 내역을 확인해 볼 수도 있음
# 기존 배포 내역 확인
kubectl rollout history deployment/test-nginx

# 배포 시에 주석을 추가하여 CHAGE-CAUSE를 명확하게 하는 것이 좋음
# 재배포 방법
## 1. annotate 작성
kubectl annotate deployment/test-nginx kubernetes.io/change-cause="nginx 1.19로 성능 개선" --overwrite
## 2. image 업데이트
kubectl set image deployment/test-nginx nginx=nginx:1.19
## 3. 변경 이력 확인
kubectl rollout history deployment/test-nginx

revision이 변경된 것을 확인할 수 있음

07. 실습 리소스 정리

# service 삭제
kubectl delete svc test-nginx

# deployment 삭제
kubectl delete deploy test-nginx

# minikue 정지
minikube stop

default namespace에 남아있는 자원이 없는 것을 확인하면, minikube를 stop하고 실습을 종료할 수 있음


More

  1. 다른 이미지(httpd, redis 등) 배포해보기
  2. 다른 port를 사용하여 NodePort 서비스 생성해보기
  3. kubectl explain 으로 리소스 구조 탐색해보기
728x90

댓글