Deploy to minikube is very similar to deploying it to a hosted cluster but you don't need to use a docker registry as the image can be created directly in the context of the minikube docker.
- Build a docker image which contains the new ozone build
- Replace the image reference to your newly built image in the kubernetes resource files (eg. use youruser/ozone:0.5.0-SNAPSHOT image instead of apache/ozone/0.5 in the k8s files)
- Deploy the kubernetes resources files.
Step (1) and (2) is handled by the docker-build maven profile.
The most important part is to switch to use the minikube docker context instead of your local docker context:
eval $(minikube docker-env)
Build ozone, build and publish docker image
Now you can build a new ozone and create the new docker images (activated by docker-build profile)
mvn clean install -DskipTests=true -f pom.ozone.xml -P docker-build
Deploy to kubernetes
Finally you can deploy any of the example cluster to kubernetes:
cd hadoop-ozone/dist/target/ozone-*/kubernetes/examples/minikube kubectl apply -f .
And you can check the results with
kubectl get pod
Note: the kubernetes/examples/minikube resource set is optimized for minikube usage:
- You can have multiple datanodes even if you have only one host (in a real production cluster usually you need one datanode per physical host)
- The services are publish with node port
Access the services
Now you can access any of the services. For each web endpoint an additional NodeType service is defined in the minikube k8s resource set. NodeType services are available via a generated port of any of the host nodes:
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE datanode ClusterIP None <none> <none> 27s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 118m om ClusterIP None <none> 9874/TCP 27s om-public NodePort 10.108.48.148 <none> 9874:32649/TCP 27s s3g ClusterIP None <none> 9878/TCP 27s s3g-public NodePort 10.97.133.137 <none> 9878:31880/TCP 27s scm ClusterIP None <none> 9876/TCP 27s scm-public NodePort 10.105.231.28 <none> 9876:32171/TCP 27s
Minikube contains a convenience command to access any of the NodePort services:
minikube service s3g-public Opening kubernetes service default/s3g-public in default browser...