Using spring-boot maven project together with Google JIB and Skaffold
- level 0: no skaffold: local workflow
- level 1: no skaffold: docker workflow
- level 2: no skaffold: jib docker workflow
- level 3: skaffold pod workflow
- level 4: full skaffold jib workflow
- level 5: skaffold jib on k3d
- links
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
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'
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
./mvnw package dockerBuild
docker run -it --rm --name app -p 8080:8080 daggerok/boot-skaffold
http :8080/actuator/info
docker build -t daggerok/boot-skaffold .
docker run -it --rm --name app -p 8080:8080 daggerok/boot-skaffold
http :8080/actuator/info
./mvnw package dockerBuild
java -jar ./target/*.jar
http :8080/actuator/info
For further reference, please consider the following sections:
- GitHub: daggerok/k8s-nginx-ingress-example
- https://www.youtube.com/watch?v=62GLbBDLiPE
- https://skaffold-latest.firebaseapp.com/docs/pipeline-stages/builders/jib/
- https://skaffold-latest.firebaseapp.com/docs/references/yaml/
- YouTube: Develop Faster on Kubernetes With Google Container Tools and Cloud Build (Cloud Next '19)
- https://stedolan.github.io/jq/manual/#Basicfilters
- https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#without-kubectl-proxy
- https://github.com/rancher/k3d/blob/master/docs/examples.md
- TODO: https://github.com/rancher/k3d/blob/master/docs/examples.md
- https://medium.com/@yannalbou/k3d-k3s-k8s-perfect-match-for-dev-and-testing-896c8953acc0