PART 18 - Deploying Spring Boot application with MySQL on Kubernetes

preview_player
Показать описание
in this tutorial we will learn how to deploy Spring Boot application with MySQL database on Kubernetes cluster.

S U B S C R I B E 👉

S O U R C E C O D E

M Y R E P O S I T O R I E S

S L I D E S H A R E C O U R S E S

📩 C O N T A C T M E

Spring boot crud example with jpa mysql thymeleaf - Part 1

E-COMMERCE APPLICATION USING SPRING BOOT AND ANGULAR + SOURCE CODE 🔥

Timecodes
0:00 - Intro
2:04 - Prerequisites: Docker & K8s
4:16 - Clone the project and Configure Application Properties
6:22 - Build the JAR
7:30 - Create Dockerfile
8:48 - Create Kubernetes manifests
15:08 - Build docker image
15:55 - Apply Kubernetes manifests
17:30 - Running Application

#SpringBoot #DeployToK8s #k8sCluster
Рекомендации по теме
Комментарии
Автор

Nice! Hope this video helps you out

Steps that i followed to deploy Spring Boot application with MySQL on Kubernetes.

Prerequisites: Docker & K8s


1) Clone the project and Configure Application Properties:
spring:
datasource:
url:
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
jpa:
hibernate:
ddl-auto: update
databasePlatform:




2) Build the JAR
mvn install -DskipTests




3) Create Dockerfile
FROM openjdk:8
COPY ./target/my-crud-app.jar app.jar
EXPOSE 9090
CMD ["java", "-jar", "app.jar"]



4) Create Secrets: add secrets.yaml file
apiVersion: v1
kind: Secret
data:
root-password: <BASE64-ENCODED-PASSWORD>
database-name: <BASE64-ENCODED-DB-NAME>
user-username: <BASE64-ENCODED-DB-USERNAME>
user-password: <BASE64-ENCODED-DB-PASSWORD>
metadata:
name: mysql-secret






5 Create Persistent Volume: add deployment-mysql-db.yaml file
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
storageClassName: standard
capacity:
storage: 250Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
labels:
app: spring-boot-mysql
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 250Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
labels:
app: spring-boot-mysql
spec:
selector:
matchLabels:
app: spring-boot-mysql
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: spring-boot-mysql
tier: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: mysql-secret
key: database-name
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: user-username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: user-password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc



7) Create MySQL Service: add service-mysql-db.yaml file
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
labels:
app: spring-boot-mysql
spec:
ports:
- port: 3306
selector:
app: spring-boot-mysql
tier: mysql
clusterIP: None


8) Create Spring Boot Deployment: add deployment-spring-app.yaml file
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-deployment
labels:
app: spring-boot-mysql
spec:
replicas: 2
selector:
matchLabels:
app: spring-boot-mysql
template:
metadata:
labels:
app: spring-boot-mysql
spec:
containers:
- image: crud-application
name: spring-boot-container
imagePullPolicy: Always
ports:
- containerPort: 9090
env:
- name: DB_NAME
valueFrom:
secretKeyRef:
name: mysql-secret
key: database-name
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: mysql-secret
key: user-username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: user-password


9) Create Spring Boot Service: add service-spring-app.yaml file
apiVersion: v1
kind: Service
metadata:
name: spring-boot-svc
spec:
ports:
- port: 9090
targetPort: 9090
protocol: TCP
name: http
selector:
app: spring-boot-mysql
type: LoadBalancer


10) Build docker image:
docker build -t crud-application .
docker tag crud-application
docker push


11) apply our configurations:
kubectl apply -f secrets.yaml
kubectl apply -f deployment-mysql-db.yaml
kubectl apply -f service-mysql-db.yaml
kubectl apply -f deployment-spring-app.yaml
kubectl apply -f service-spring-app.yaml


12) Verify the Application:
kubectl get svc






insert into roles values (1, "ADMIN");
insert into roles values (2, "USER");

insert into users_roles values (1, 1);
insert into users_roles values (1, 2);

lhouceineouhamza