Skip to content

Use awesome Skaffold tool to simplify your java k8s development workflow

Notifications You must be signed in to change notification settings

daggerok/boot-skaffold

Repository files navigation

boot-skaffold Build Status

Using spring-boot maven project together with Google JIB and Skaffold

table of content

level 5: skaffold jib on k3d

brew reinstall skaffold k3d

k3d create --name k3d --api-port 6551 --publish 80:80 --workers 2
#...
export KUBECONFIG="$(k3d get-kubeconfig --name='k3d')"
kubectl cluster-info

#skaffold init -f k8s-k3d.yaml
#vi skaffold.yaml
skaffold dev
#...

http :80

docker rm -f -v `docker ps -aq`
rm -rf ~/.config/k3d/k3d/kubeconfig.yaml

level 4: full skaffold jib workflow

brew reinstall skaffold
skaffold init -f k8s.yaml

You will need at least one k8s yaml files:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: boot-skaffold
  labels:
    app: boot-skaffold
spec:
  selector:
    matchLabels:
      app: boot-skaffold
  replicas: 1
  template:
    metadata:
      name: boot-skaffold
      labels:
        app: boot-skaffold
    spec:
      containers:
        - name: boot-skaffold
          image: daggerok/boot-skaffold
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: boot-skaffold
  labels:
    app: boot-skaffold
spec:
  ports:
    - port: 8080
      name: http
  type: LoadBalancer
  selector:
    app: boot-skaffold

Next, all you need to do is only add to build section:

build:
  artifacts:
  - image: daggerok/boot-skaffold
    context: .
    jib: {}

Full skaffold.yaml should looks like so:

apiVersion: skaffold/v1beta17
kind: Config
metadata:
  name: boot-skaffold
build:
  artifacts:
  - image: daggerok/boot-skaffold
    jib: {}
deploy:
  kubectl:
    manifests:
    - k8s.yaml

Now we can develop!

kubectl get pods -o wide -w 
skaffold dev
http :8080/actuator/info
http :8080/actuator/env | jq '.propertySources[].properties.HOSTNAME.value' 

level 3: skaffold pod workflow

brew reinstall skaffold
skaffold init -f k8s.yaml

You will need at least one k8s yaml file:

apiVersion: v1
kind: Pod
metadata:
  name: boot-skaffold
  labels:
    app: boot-skaffold
spec:
  containers:
    - name: boot-skaffold
      image: daggerok/boot-skaffold
      imagePullPolicy: IfNotPresent

Next, all you need to do is only add jib: {} to artifact built with maven jib project:

apiVersion: skaffold/v1beta17
kind: Config
metadata:
  name: boot-skaffold
build:
  artifacts:
  - image: daggerok/boot-skaffold
    jib: {}
deploy:
  kubectl:
    manifests:
    - k8s-pod.yaml

Now we can run in dev mode:

kubectl port-forward boot-skaffold 8080
http :8080/actuator/info

level 2: no skaffold: jib docker workflow

./mvnw package dockerBuild
docker run -it --rm --name app -p 8080:8080 daggerok/boot-skaffold
http :8080/actuator/info

level 1: no skaffold: docker workflow

docker build -t daggerok/boot-skaffold .
docker run -it --rm --name app -p 8080:8080 daggerok/boot-skaffold
http :8080/actuator/info

level 0: no skaffold: local workflow

./mvnw package dockerBuild
java -jar ./target/*.jar
http :8080/actuator/info

links

For further reference, please consider the following sections:

Releases

No releases published

Packages

No packages published