[Kubernetes] 설치 및 실행해보기

2025. 4. 3. 18:04·CI & CD

이전 포스팅

[Kubernetes] 개념 및 구성요소

 

이번 포스팅에서는 로컬 환경에서 쿠버네티스를 설치하고 실행해 보도록 한다.

설치

참고) MacOS의 brew를 이용하여 설치를 진행

Docker, Kubectl, Minikube를 설치할 예정이며, 각각의 역할을 간단히 짚고 넘어가자면 다음과 같다

  • Docker : 가상 컨테이너 빌드
  • Kubectl : kubernetes 조작을 위한 CLI
  • Minikube : kubernetes 클러스터 생성

Docker Desktop 혹은 Docker Cli 설치

Docker Desktop

https://www.docker.com/products/docker-desktop/ 로 이동하여 다운로드 및 설치

Docker CLI

brew install docker

Kubectl 설치

brew install kubectl

Minikube 설치

brew install minikube

실행

MiniKube 실행

minikube start

minikube 클러스터를 생성하고 네임스페이스를 설정한 것을 확인할 수 있다.

kubectl 커맨드를 통해 구동중인 노드를 확인해 보자

kubectl get nodes

minkube가 떠 있는 것을 확인할 수 있다

클러스터 구성(Minikube 사용)

api, batch 모듈을 만들고, 각 컨테이너를 생성하기 위한 Dockerfile을 각 모듈 내 생성해 준다.

빨간 박스 - 모듈 / 파랑 박스 - 쿠버 설정 파일 위치
모듈별 도커파일 생성

Dockerfile 설정

설정 파일 보기

더보기

[api 모듈 기준으로 작성]

build.gradle에 다음 bootJar 추가

bootJar {
    archiveFileName = "api.jar"
}

Dockerfile

FROM gradle:7.6-jdk17 AS builder
WORKDIR /app
COPY . .
RUN ./gradlew :api:bootJar --no-daemon
FROM openjdk:17-jdk-slim
WORKDIR /app
EXPOSE 8080
COPY --from=builder /app/api/build/libs/api.jar api.jar
ENTRYPOINT ["java", "-jar", "api.jar"]

K8s 설정 파일

api 모듈 기준으로 총 4개를 설정해 두었다.

service.yaml

더보기
apiVersion: v1
kind: Service
metadata:
  name: api
  namespace: user
spec:
  selector:
    app: api
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30080

deployment.yaml

더보기
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
  namespace: user
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: api
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
          envFrom:
            - configMapRef:
                name: api-config
            - secretRef:
                name: api-secret

configmap.yaml

더보기
apiVersion: v1
kind: ConfigMap
metadata:
  name: api-config
  namespace: user
data:
  DB_URL: 'db_url'
  DB_USER: 'root'

secret.yaml

더보기
apiVersion: v1
kind: Secret
metadata:
  name: api-secret
  namespace: user
type: Opaque
stringData:
  DB_PASSWORD: 'DB_PASSWORD'

네임스페이스 생성

위 api, batch 모듈은 user를 위한 모듈이라고 가정하고 생성했기에, namespace를 user로 지정해주고자 한다.

namespace.yaml 생성

파일 경로 : 루트프로젝트/k8s/namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: user

파일을 생성해 주고 다음 커맨드를 입력한다. (실행 위치는 루트 프로젝트 내)

kubectl apply -f k8s/namespace.yaml

네임스페이스 생성 확인

kubectl get namespaces

로컬 쉘 환경을 Minikube가 사용하는 Docker 데몬으로 전환

eval $(minikube docker-env)

원래대로 돌리고 싶다면 다음을 수행하자!

eval $(minikube docker-env -u)

이미지 빌드

💡minikube는 이미지를 pull 받아서 사용할 뿐이다. 빌드는 직접 해 주도록 하자!
실무에서는 CI에서 빌드 + Registry push → CD에서 배포 과정을 거치도록 한다.

docker build -f api/Dockerfile -t api .
docker build -f batch/Dockerfile -t batch .

클러스터에 리소스 배포

kubectl apply -f k8s/user/api
kubectl apply -f k8s/user/batch

Minikube 서비스 노출

kubectl expose deployment api --type=NodePort --port=8080 --namespace=user
더보기

[참고] 서비스 관련 커맨드

user namespace의 서비스 확인

kubectl get svc -n user

user namespace의 api 서비스 삭제

kubectl delete service api -n user

URL 확인

eval $(minikube docker-env -u)
// 원래 로컬 도커 환경으로 복귀
minikube service api -n user --url

브라우저로 위 링크에 api 페이지에 접근하면 웹 서버에 접속이 가능하다

저작자표시 비영리 변경금지 (새창열림)

'CI & CD' 카테고리의 다른 글

[Kubernetes] 개념 및 구성요소  (0) 2025.04.02
Jenkins Slave Node  (0) 2024.12.04
CI/CD - Continuous Integration/Continuous Deployment  (0) 2022.06.27
'CI & CD' 카테고리의 다른 글
  • [Kubernetes] 개념 및 구성요소
  • Jenkins Slave Node
  • CI/CD - Continuous Integration/Continuous Deployment
코드파고
코드파고
  • 코드파고
    Digging Code
    코드파고
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • Memorization (12)
      • Spring (18)
      • Java (1)
      • Algorithm (40)
      • Server (2)
      • DB (0)
      • CS (0)
      • CI & CD (4)
      • Architecture (0)
      • Design Patterns (0)
      • Study (1)
      • Book (9)
        • DEV (7)
        • Non-DEV (0)
      • Infra (1)
        • Kafka (6)
        • AWS (4)
      • TroubleShooting (1)
        • Etc (1)
      • Tools (0)
  • 블로그 메뉴

    • 홈
    • Github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    클린아키텍쳐
    Spring
    알고리즘
    헥사고날아키텍쳐
    Spring Boot
    clean architecture
    architecture
    Spring독학
    Clean Code
    SpringFramework
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
코드파고
[Kubernetes] 설치 및 실행해보기
상단으로

티스토리툴바