Spring Cloud Kubernetes using Spring Data REST on kind
This project is deployed on kind.
The followings are dependencies for this project.
$ kind create cluster --config=kubernetes/kind/cluster.yml
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
Wait until is ready to process requests running:
$ kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
$ kubectl create configmap postgres-config \
--from-literal=postgres.service.name=postgresql \
--from-literal=postgres.db.name=employee
$ kubectl create secret generic db-security \
--from-literal=db.user.name=sample \
--from-literal=db.user.password=password
$ kubectl apply -f kubernetes/postgres-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
labels:
app: postgresql
spec:
replicas: 1
selector:
matchLabels:
app: postgresql
template:
metadata:
labels:
app: postgresql
spec:
volumes:
- name: data
emptyDir: {}
containers:
- name: postgres
image: postgres:9.6.5
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: db-security
key: db.user.name
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: db-security
key: db.user.password
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: postgres-config
key: postgres.db.name
ports:
- containerPort: 5432
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/
---
apiVersion: v1
kind: Service
metadata:
name: postgresql
labels:
app: postgresql
spec:
selector:
app: postgresql
ports:
- port: 5432
$ kubectl create configmap app-config \
--from-file=kubernetes/application.yml
spring:
jpa:
database: postgresql
datasource:
platform: postgresql
driver-class-name: org.postgresql.Driver
spring:
application:
name: cloud-k8s-app
cloud:
kubernetes:
config:
name: [app-config, postgres-config]
namespace: default
enable-api: true
secrets:
name: db-security
namespace: default
enable-api: true
datasource:
url: jdbc:postgresql://${${POSTGRES_SERVICE}.service.host}:${${POSTGRES_SERVICE}.service.port}/${POSTGRES_DB_NAME}
username: ${POSTGRES_DB_USER}
password: ${POSTGRES_DB_PASSWORD}
| Parameter | ConfigMap/Secret |
|---|---|
POSTGRES_SERVICE | ConfigMap |
POSTGRES_DB_NAME | ConfigMap |
POSTGRES_DB_USER | Secret |
POSTGRES_DB_PASSWORD | Secret |
$ ./gradlew clean jib
$ kubectl apply -f kubernetes/deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
labels:
app: spring-app
spec:
replicas: 1
selector:
matchLabels:
app: spring-app
template:
metadata:
labels:
app: spring-app
spec:
containers:
- name: app
image: shinyay/spring-cloud-k8s-gs:0.0.1-SNAPSHOT
ports:
- containerPort: 8080
env:
- name: POSTGRES_SERVICE
valueFrom:
configMapKeyRef:
name: postgres-config
key: postgres.service.name
- name: POSTGRES_DB_NAME
valueFrom:
configMapKeyRef:
name: postgres-config
key: postgres.db.name
- name: POSTGRES_DB_USER
valueFrom:
secretKeyRef:
name: db-security
key: db.user.name
- name: POSTGRES_DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-security
key: db.user.password
serviceAccountName: config-reader
---
apiVersion: v1
kind: Service
metadata:
name: app
labels:
app: spring-app
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: spring-app
# type: NodePort
---
# For KIND
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: app
servicePort: 8080
$ curl -X POST http://localhost/employees \
-H 'Content-Type: application/json' \
-d '{
"name": "JohnDoe",
"email": "[email protected]"
}'
# curl -X GET http://localhost/employees
$ kubectl exec -it postgresql-1234567890-abcde /bin/bash
root@postgresql-1234567890-abcde:/# psql -U sample employee
psql (9.6.5)
Type "help" for help.
employee=# select * from employee;
id | email | name
----+------------------+---------
1 | [email protected] | JohnDoe
employee=# \q
root@postgresql-1234567890-abcde:/# exit
Released under the MIT license
Content type
Image
Digest
Size
271.7 MB
Last updated
over 6 years ago
docker pull shinyay/spring-cloud-k8s-gs:0.0.1-SNAPSHOT