k8s + spring (w. wsl2)

์ตœ์ค€ํ˜ธยท2022๋…„ 12์›” 20์ผ
0

molu

๋ชฉ๋ก ๋ณด๊ธฐ
2/3
post-thumbnail

์ฐธ๊ณ  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ

๐Ÿ“— Window์—์„œ WSL2๋กœ ์‹คํ–‰

๐Ÿ“„ WSL2 ์„ค์ •

Microsoft Store์—์„œ ubuntu 20.04๋กœ ์‹คํ–‰ํ–ˆ๋‹ค. WSL2๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์„ธํŒ…์€ ์ด๋ฏธ ์ง„ํ–‰๋˜์—ˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜๊ฒŒ ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค!

๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ ์œˆ๋„์šฐ์— ์„ค์น˜๋˜์–ด ์žˆ๋Š” Docker Desktop์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •์„ ํ•ด์ค€๋‹ค.

๐Ÿ“— k8s ์„ค์น˜

๐Ÿ“„ k8s ์„ค์น˜

k8s ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋ฉด ์‰ฝ๊ฒŒ ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜์ง€๋งŒ k8s ์ตœ์†Œ ์š”๊ตฌ์‚ฌํ•ญ์ด ram 2g ์ด์ƒ, cpu 2 core ์ด์ƒ์ด๋ฏ€๋กœ ์‚ฌ์–‘์— ์ ํ•ฉํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ง„ํ–‰์ด ์–ด๋ ต๋‹ค.

์„ค์น˜ ์ดํ›„์—

minikube start

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

์ด์ œ k8s๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด ๋˜์—ˆ๋‹ค.

๐Ÿ“— Spring ์ ์šฉํ•ด๋ณด๊ธฐ

๐Ÿ“„ Spring ์†Œ์Šค ๊ฐ€์ ธ์˜ค๊ธฐ

git clone https://github.com/juno-choi/k8s-practice.git

๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•ด๋†“์€ spring ์˜ˆ์ œ ํŒŒ์ผ์„ ๋ฐ›์•„์˜จ๋‹ค.

โœ… java ์„ค์น˜

java ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์•„ java๋ฅผ ์šฐ์„  ์„ค์น˜ํ–ˆ๋‹ค.

sudo apt install openjdk-17-jdk

์ด์œ ๋Š” gradle์„ ์‚ฌ์šฉํ•˜์—ฌ build๋ฅผ ์ง„ํ–‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

./gradlew clean build

๋ฅผ ํ†ตํ•ด jar ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

๐Ÿ“„ Docker image ๋งŒ๋“ค๊ธฐ

#Dockerfile
FROM openjdk:17.0.2-slim
ADD build/libs/sticker-0.1.jar sticker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","sticker.jar"]
docker build -t ililil9482/test:1.0 .

ํ•ด๋‹น Dockerfile์„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑํ•ด๋‚ธ๋‹ค.

๊ทธ ์ดํ›„์— ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ธฐ๋ณธ ๋ฆฌ๋ˆ…์Šค์˜€๋‹ค๋ฉด

docker login -u [user id]

๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธ ํ–ˆ๊ฒ ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” WSL2๋กœ Docker Desktop์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

๋‹ค์Œ๊ณผ ๊ฐ™์ด Docker Desktop์—์„œ ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

Docker hub์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด repository๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ 

docker push ililil9482/test:1.0

๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ push ํ•ด์ค€๋‹ค.

๐Ÿ“„ k8s์— ์Šคํ”„๋ง ์˜ฌ๋ฆฌ๊ธฐ

test-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
        - name: test
          image: ililil9482/test:1.0
          imagePullPolicy: Always
          ports:
            - containerPort: 8080

test-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: test
  namespace: default
  labels:
    app: test
spec:
  selector:
    app: test
  ports:
    - protocol: TCP
      port: 8080
      nodePort: 30000
  type: NodePort

๋‘๊ฐœ์˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

kubectl apply -f test-deployment.yaml
kubectl apply -f test-service.yaml

deployment๋Š” pod, replicaSet, deployment๋ฅผ ๋ชจ๋‘ ์ •์˜ํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค.

service๋Š” ์œ„์—์„œ ์ƒ์„ฑ๋œ pod์˜ port์˜ ํƒ€์ž…๊ณผ port ๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค.

kubectl get svc

๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด

์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ 

minikube service test

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด service๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น url๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด

๋‹ค์Œ๊ณผ ๊ฐ™์ด test๋กœ ๋“ค์–ด๊ฐ”์„ ๋•Œ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ๋ฐ˜ํ™˜์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
์ฝ”๋”ฉ์„ ๊น”๋”ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž (ํŽธํ•˜๊ฒŒ ๊ธ€์„ ์“ฐ๊ธฐ์œ„ํ•ด ๋ฐ˜๋ง์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ ค์š”!) ํ˜„์žฌ KakaoVX ๊ทผ๋ฌด์ค‘์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€