This document outlines some of the development practices with ModelMesh Serving.
Local Kubernetes clusters can easily be set up using tools like kind and minikube.
(Note) Regarding webhook certificates, there are 2 options: cert-manager and self-signed-certificate. Please refer to install help.
For example, using kind:
kind create clusterThen ModelMesh Serving can be installed by using the fvt option of the install script:
kubectl create ns modelmesh-serving
./scripts/install.sh --namespace modelmesh-serving --fvtThis installs the modelmesh-controller and dependencies in the modelmesh-serving namespace. The minio pod that this deploys
contains special test images that are used in the functional tests.
If you already deployed ModelMesh Serving on a Kubernetes or OpenShift cluster before and are reconnecting to it now,
make sure to set the default namespace to modelmesh-serving.
kubectl config set-context --current --namespace=modelmesh-servingIf you made changes and want to build an image with your updated changes, simply run:
make buildThen you can tag and push it to a registry of your choice. For information on using local registries with kind, check
out their documentation.
docker tag kserve/modelmesh-controller:latest localhost:5000/modelmesh-controller:latest
docker push localhost:5000/modelmesh-controller:latestTo use your image in your local deployment of ModelMesh Serving, run the following:
kubectl set image deployment/modelmesh-controller manager=localhost:5000/modelmesh-controller:latestThis will update the controller image and will rollout a new controller pod. If you make changes to your custom image and re-push it, you will need to restart the controller pod. This can be done through the following:
kubectl rollout restart deploy modelmesh-controllerIf you have a custom controller image in your repository, set MODELMESH_SERVING_IMAGE to deploy it. The following example deploys the custom controller image quay.io/$org/modelmesh-controller:custom in the modelmesh-serving namespace with fvt dependencies:
NAMESPACE=modelmesh-serving \
MODELMESH_SERVING_IMAGE=quay.io/$org/modelmesh-controller:custom \
make deploy-release-dev-mode-fvtA dockerized development environment is provided to help set up dependencies for testing, linting, and code generating. Using this environment is suggested as this is what the GitHub Actions workflows use. To create the development image, perform the following:
make build.developTo use the dockerized development environment run:
make developThen, from inside the developer container, proceed to run the linting, code generation, and testing as described below.
After building the development image, you can lint and format the code with:
make run fmtThis will run both golangci-lint for Go linting and prettier for code formatting.
Anytime you make code changes or documentation/markdown changes, this should be run.
Similarly, after building the development image, you can run unit tests with:
make run testIf API changes were made, you can run the following to generate utility code and Kubernetes YAML with controller-gen.
make run generate
make run manifestsRunning the functional tests can take a while and requires kubectl to be currently pointing to an accessible cluster.
To run them, do the following:
make fvtNote: sometimes the tests can fail on the first run because pulling the serving runtime images can take a while, causing a timeout. Just try again after the pulling is done.