Deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: jpapractice-deployment spec: replicas: 3 # Set the desired number of replicas selector: matchLabels: app: jpapractice template: metadata: labels: app: jpapractice spec: containers: - name: jpapractice image: adultkim/jpapractice:latest # Your Spring Boot application image ports: - containerPort: 8081 # Port your Spring Boot application is running on
Service.yaml
apiVersion: v1 kind: Service metadata: name: jpapractice-service spec: selector: app: jpapractice ports: - protocol: TCP port: 80 targetPort: 8081 # Port your Spring Boot application is running on type: LoadBalancer
ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: jpapractice-ingress spec: rules: - host: insung-jpadocker.store # ์ค์ ๋๋ฉ์ธ ์ค์ http: paths: - pathType: Prefix path: "/" backend: service: name: jpapractice-service port: number: 80
์๋ฌด๋ฆฌ ์คํํด๋ ์ธ๋ถ์์ ์ ์์ด ์๋๊ณ , ๋๋ฌด ๋ต๋ตํ์๋ค..
1. ์ฐ์ pod์ ์ด์ด์ง๋ ํฌํธ ์ค์ ์ 8080์ผ๋ก ์์ํ์๋๋ฐ, application ์ค์ ์ 8081๋ฒ์ผ๋ก ํฌํธ ์ง์ ์ ํด๋์ ๊ณ ์ณค์.
kubectl get svc jpapractice-service
curl http://insung-jpadocker.store
๋ช
๋ น์ด๋ฅผ ํตํด์ ์์ฒญํ์ธ์ ํ๋๋ฐ, ์ปค๋ฅ์
ํ์์์์ด ๋ ๋ฒ๋ฆผ..curl http://insung-jpadocker.store curl: (7) Failed to connect to insung-jpadocker.store port 80: Connection refused
์ฌ๊ธฐ์ Ingress ๋ฆฌ์์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑ๋์ง ์์๊ฑด๊ฐ..? ๋์์ด ์๋ชป๋๊ฑด๊ฐ ํด์ ๋ค์ ํ์ธ ํด๋ด๋ ๋ฌธ์ ์์..
kubectl get ingress
-> ์ธ๊ทธ๋ ์ ์์ ์ ์คํ๋๊ณ ์์์
๋ฐฉํ๋ฒฝ ๋ฌธ์ ์ธ๊ฐ ์ถ์ด์ ๊ตฌ๊ธ๋ง์ ํด๋ณด์์ง๋ง ๋ฑํ ๋ฐฉํ๋ฒฝ ๋ฌธ์ ๋ก ๋ณด์ด์ง์์๋ค..
์ค๊ฐ์ service ํ์ ์ด ๋ฌธ์ ์ธ๊ฐ ์ถ์ด์ type: ClusterIP๋ก ํ ๋นํ๋ค๊ฐ, ์๋น์ค์ External IP๊ฐ ํ ๋น๋์ง ์๋ ๊ฒ์ ๋ณด๊ณ ๋ค์ LoadBalancer๋ก ์์ ํจ.
๋๋์ฒด ๋ ๋ญ๊ฐ ๋ฌธ์ ์ง ํ๋ค๊ฐ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ด๋ฏธ vmํ๊ฒฝ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐฐํฌํ ๊ฒฝํ์ด ์์ด์ ์คํํ was ์ด๋ฏธ์ง ํ์ผ์ ๋ฌธ์ ๊ฐ ์์๊ฑฐ๋ผ๊ณ ์๊ฐ๋ ๋ชปํ๋ค..
@cloudshell:~/prac (jpa-practice)$ kubectl get all NAME READY STATUS RESTARTS AGE pod/jpapractice-deployment-555d5bbc64-h84rg 0/1 CrashLoopBackOff 2 (16s ago) 39s pod/jpapractice-deployment-555d5bbc64-jk4k7 0/1 CrashLoopBackOff 2 (18s ago) 39s pod/jpapractice-deployment-555d5bbc64-jrr2r 0/1 CrashLoopBackOff 2 (15s ago) 39s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/jpapractice-service ClusterIP 10.8.9.32 <none> 80/TCP 30s service/kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 106s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/jpapractice-deployment 0/3 3 0 40s NAME DESIRED CURRENT READY AGE replicaset.apps/jpapractice-deployment-555d5bbc64 3 3 0 40s a01043753181@cloudshell:~/prac (jpa-practice)$ kubectl get all NAME READY STATUS RESTARTS AGE pod/jpapractice-deployment-555d5bbc64-h84rg 0/1 CrashLoopBackOff 3 (14s ago) 64s pod/jpapractice-deployment-555d5bbc64-jk4k7 0/1 Error 3 (43s ago) 64s pod/jpapractice-deployment-555d5bbc64-jrr2r 0/1 Error 3 (40s ago) 64s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/jpapractice-service ClusterIP 10.8.9.32 <none> 80/TCP 56s service/kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 2m12s
pod์ ์ํ๋ฅผ Status๋ฅผ ํ์ธํ๋ CrashLoopBackOff ์ Error ์ํ์ธ ๊ฒ์ ๋ค๋ฆ๊ฒ ํ์ธํ์๋ค..
์งํผํฐ์ ๋์์ ๋ฐ์์ ์์ธ์ ๋๋์ด ์ฐพ์๋ด๊ฒ๋จ... ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋
ERROR org.springframework.book.SpringApplication - Application run failed java.lang.IllegalArguemtnException: Could not resolve placeholder 'active' in value "${active}"
active๋ผ๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์๋ฌ....
๋์ปค ์ด๋ฏธ์ง๋ฅผ TravisCI๋ฅผ ํตํด์ CI ํ๊ฒฝ์ ๋ฐฐํฌํ application.ymlํ์ผ ์ค์ ์ ๊ฐ๋ฐ(dev), ๋ฐฐํฌ(prod) ๋๊ฐ์ง๋ก ๋ฐ๋ก ํด๋จ์๋๋ฐ, ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ์๊ฐ์ jar ํ์ผ์ ์คํํ๋ ์ต์ ํ๊ทธ๋ฅผ ์ฃผ์๋ ๊ฒ์ด ์์ธ ์ด์๋ค..FROM openjdk:11 ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=${active}", "-Duser.timezone=Asia/Seoul", "/app.jar"]
- ์ด์ ์๋ ์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ vm ํ๊ฒฝ์์ docker-compose ํ์ผ์ ์ด์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ์คํ์ํฌ ๋ ํด๋น ํ๊ฒฝ๋ณ์๋ฅผ ์ฑ์์คฌ๋๋ฐ, ์ฌ๊ธฐ์๋ ๋ฐ๋ก ์ฒ๋ฆฌํ์ง ์์์ ์ฑ ์คํ ์์ฒด๊ฐ ๋์ง ์์๋ ๊ฒ...
์ด๋ฏธ์งํ์ผ์ ์์ ํด์ ๋ค์ ๋น๋ํ๊ณ ๋์ปคํ๋ธ์ ํธ์ฌํด์ผํ๋? ํ์ง๋ง, ์ด๋ ์ ์ ํ ๋ฐฉ๋ฒ์ด ์๋๋ผ๊ณ ์๊ฐํ์๊ณ , Pod์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ ์ ์ฉํ ์ ์์๋ค..
https://kubernetes.io/ko/docs/tasks/inject-data-application/define-environment-variable-container/
apiVersion: apps/v1
kind: Deployment
metadata:
name: jpapractice-deployment
spec:
replicas: 3 # Set the desired number of replicas
selector:
matchLabels:
app: jpapractice
template:
metadata:
labels:
app: jpapractice
spec:
containers:
- name: jpapractice
image: adultkim/jpapractice:latest # Your Spring Boot application image
env: # ๋ฌธ์ ์๋ ํ๊ฒฝ ๋ณ์ ์ถ๊ฐ
- name: active
value: "prod"
ports:
- containerPort: 8081 # Port your Spring Boot application is running on
๋ฌธ์ ์๋ ํ๊ฒฝ๋ณ์๋ฅผ ํด๊ฒฐํ๊ณ ๋ค์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ status ๊ฐ Running ์ํ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋์๋ค..!
์์ฑํด๋ Ingress์ GKE์์ ์ง์ํ๋ ๋ก๋๋ฐธ๋ฐ์์ ๋์์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ External Ip๋ฅผ ํตํด์ WAS์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์ ํ์ธํ์๋ค ใ
rule์ ์์ฑํด๋ host๋ DNS์๋น์ค๋ฅผ ์ด์ฉํด External IP์ ์ฐ๊ฒฐํด๋์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋๋ฉ์ธ์ฃผ์๋ก๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค..!
์ ์๋ nginx๋ฅผ ํตํด์ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ์ด์ฉํ์ฌ ์น ์๋ฒ๋ฅผ ์คํํ์๋๋ฐ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ๋ ๋๋ฌด๋ ํธ์ํจ...
์ข ๋ ์๋ฒฝํ๊ฒ ๊ณต๋ถํด์ ์ฝ๊ฒ ๋ค๋ฃฐ์ ์๋๋ก CI/CDํ๊ฒฝ์ ๋ฐฐํฌํ ์ ์๋ ๋ฅ๋ ฅ์ ํค์์ผ๊ฒ ๋ค