본문으로 바로가기

K8S 기초 및 실습

category SKALA 2025. 5. 3. 12:38
반응형

 

Kubernetes (K8s)란?

컨테이너를 자동으로 배포, 스케일링, 관리하는 오픈소스 시스템

쉽게 말해, 여러 개의 컨테이너(Docker 같은)를 운영 환경에 자동으로 잘 돌도록 관리해주는 시스템

근데 docker-compose가 있지 않음?

Docker-compose

여러 개의 컨테이너를 하나의 YAML 파일로 정의하고, docker-compose up 명령어로 한 번에 띄우는 도

장점 :

  • 설정이 간단함
  • 로컬 개발 환경에 적합
  • 학습 곡선이 낮음

vs K8S

수십~수천 개의 컨테이너를 자동으로 배포하고 관리하는 대규모 운영 환경용 플랫폼

주요 기능:

  • Pod, Deployment, Service 등 구조화된 리소스
  • 자동 복구, 오토스케일링, 롤링 업데이트
  • 클라우드 환경에서 대규모 서비스 운영에 적합

클러스터란?

Kubernetes의 실행 단위. 여러 대의 서버(혹은 노드)를 묶어 하나의 운영 단위로 만든 것

클러스터 구성

  • Master Node (Control Plane): 전체 클러스터를 제어하는 브레인
  • Worker Node: 실제로 **애플리케이션(Pod)**이 돌아가는 곳

클러스터 안에는 여러 개의 워커 노드가 있을 수 있고, 그 안에 여러 개의 Pod가 실행된다


🔹 Pod란?

Kubernetes에서 컨테이너를 감싸는 가장 작은 배포 단위

  • 하나의 Pod에는 보통 하나의 컨테이너가 들어간다
  • 여러 컨테이너를 하나의 Pod로 묶을 수도 있다(같은 IP와 볼륨 공유)

 

실습

미리 ./gradlew build 명령어로 jar파일을 생성한다

FROM eclipse-temurin:21-jre
COPY build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

위 Dockerfile을 기반으로 이미지를 빌드 한다

현재 docker-desktop 클러스터는 Docker Desktop에서 제공하는 로컬 Kubernetes 클러스터이며, 이 클러스터는 Spring Boot 애플리케이션을 테스트하거나, spring-pod.yaml 파일을 적용하여 Pod를 실행하는 데 사용된다

 

apiVersion: v1
kind: Pod
#Pod라는 것을 만들 것인데 그때 api version은 v1이다.

metadata:
  name: spring-pod
# pod에 대한 기본정보를 입력한다

spec:
  containers:
    - name: spring-container
      image: k8s-pod
      ports:
        - containerPort: 2525
      imagePullPolicy: IfNotPresent
# pod에 대한 세부 정보
# imagePullPolicy는 총 3가지가 있다
# Always, IfNotPresent, Never

위와같이 yaml파일을 만들어준다!!

imagePullPolicyKubernetes에서 컨테이너 이미지를 가져오는 정책을 정의하는 속성이다. 총 3가지 옵션이 있으며, 각각의 의미는 다음과 같다

Always

항상 이미지를 다시 가져온다 레지스트리에서 최신 이미지를 가져오도록 강제한다 주로 개발 환경에서 사용된다

IfNotPresent

로컬에 이미지가 없을 때만 이미지를 가져온다 기본값으로 설정되며, 이미 로컬에 이미지가 있다면 레지스트리에서 가져오지 않는다 네트워크 트래픽을 줄이고 빠른 배포를 위해 사용된다

Never

이미지를 절대 가져오지 않는다. 로컬에 이미지가 반드시 있어야 하며, 없으면 오류가 발생한다. 오프라인 환경이나 특정 이미지를 강제적으로 사용할 때 유용하다.

 

 

 

위와 같이 pod를 만들어 준다

그리고 포트 포워딩을 해준다!!

이러면 이제 localhost:12345로 접근하면 2525번으로 띄어져있는 컨테이너에 접근 가능하다!!

 


 

 

아니다. 사실 저기 yaml파일에 2525라고 포트번호를 적는다고 컨테이너가 2525로 띄어지진 않는다

심지어 에러 띄우면서 port-forwading도 끊긴다.

걍 개발자들끼리 이 컨테이너 몇번에서 띄어진다고 명시적으로 알려주려고, 가독성 올리고, Kubernets에 알려주려고 작성해놓는 부분이지 진짜로 컨테이너를 2525번에 띄어주는 것이 아니다. 즉 Spring Boot이므로 8080번과 포트 포워딩을 해줘야한다.

또한 도구나 문서화에 유리

kubectl describe pod 같은 명령어로 보면,

 

즉 내 Spring Boot 서버 기본 포트인 8080으로 열어줘야 한다

 

위 이미지를 기억해주면 좋을 것 같다

반응형

'SKALA' 카테고리의 다른 글

Jitsi 이용법 총 정리!!  (0) 2025.05.03
Python 지니 차트 크롤링하기  (2) 2025.03.26
Sk c&c Leader AI Academy 1기 한 달 차 후기  (1) 2025.03.10