
이전 포스팅
[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 |