Skip to content
This repository has been archived by the owner on Jun 14, 2024. It is now read-only.

Latest commit

 

History

History
99 lines (66 loc) · 5.79 KB

CONTRIBUTING.md

File metadata and controls

99 lines (66 loc) · 5.79 KB

Contributing to our project

Thanks for your help improving the OpenCost project! There are many ways to contribute to the project, including the following:

Getting Help

If you have a question about OpenCost or have encountered problems using it, you can start by asking a question on CNCF Slack in the #opencost channel or via email at [email protected]

Workflow

This repository's contribution workflow follows a typical open-source model:

Building OpenCost

Follow these steps to build the OpenCost cost-model and UI from source and deploy:

  1. docker build --rm -f "Dockerfile" -t <repo>/opencost:<tag> .
  2. Edit the pulled image in the kubernetes/opencost.yaml to <repo>/opencost:<tag>
  3. Set this environment variable to the address of your Prometheus server
  4. cd ui
  5. docker build --rm -f "Dockerfile" -t <repo>/opencost-ui:<tag> .
  6. cd ..
  7. Edit the pulled image in the kubernetes/opencost.yaml to <repo>/opencost-ui:<tag>
  8. kubectl create namespace opencost
  9. kubectl apply -f kubernetes/opencost --namespace opencost
  10. kubectl -n opencost port-forward service/opencost 9090 9003

To test, build the OpenCost containers and then push them to a Kubernetes cluster with a running Prometheus.

To confirm that the server and UI are running, you can hit http://localhost:9090 to access the OpenCost UI. You can test the server API with curl http://localhost:9003/allocation/compute -d window=60m -G.

Running locally

To run locally cd into cmd/costmodel and go run main.go

OpenCost requires a connection to Prometheus in order to operate so setting the environment variable PROMETHEUS_SERVER_ENDPOINT is required. In order to expose Prometheus to OpenCost it may be required to port-forward using kubectl to your Prometheus endpoint.

For example:

kubectl port-forward svc/prometheus-server 9080:80

This would expose Prometheus on port 9080 and allow setting the environment variable as so:

PROMETHEUS_SERVER_ENDPOINT="http://127.0.0.1:9080"

If you want to run with a specific kubeconfig the environment variable KUBECONFIG can be used. OpenCost will attempt to connect to your Kubernetes cluster in a similar fashion as kubectl so the env is not required. The order of precedence is KUBECONFIG > default kubeconfig file location ($HOME/.kube/config) > in cluster config

Example:

export KUBECONFIG=~/.kube/config

An example of the full command:

ETL_PATH_PREFIX="/my/cool/path/kubecost/var/config" CONFIG_PATH="/my/cool/path/kubecost/var/config" PROMETHEUS_SERVER_ENDPOINT="http://127.0.0.1:9090" go run main.go

Running the integration tests

To run these tests:

  • Make sure you have a kubeconfig that can point to your cluster, and have permissions to create/modify a namespace called "test"
  • Connect to your the Prometheus OpenCost emits to on localhost:9003: kubectl port-forward --namespace opencost service/prometheus-server 9003:80
  • Temporary workaround: Copy the default.json file in this project at cloud/default.json to /models/default.json on the machine your test is running on. TODO: fix this and inject the cloud/default.json path into provider.go.
  • Navigate to cost-model/test
  • Run go test -timeout 700s from the testing directory. The tests right now take about 10 minutes (600s) to run because they bring up and down pods and wait for Prometheus to scrape data about them.

Certificate of Origin

By contributing to this project, you certify that your contribution was created in whole or in part by you and that you have the right to submit it under the open source license indicated in the project. In other words, please confirm that you, as a contributor, have the legal right to make the contribution. This is enforced on Pull Requests and requires Signed-off-by with the email address for the author in the commit message.

Committing

Please write a commit message with Fixes Issue # if there is an outstanding issue that is fixed. It’s okay to submit a PR without a corresponding issue; just please try to be detailed in the description of the problem you’re addressing.

Please run go fmt on the project directory. Lint can be okay (for example, comments on exported functions are nice but not required on the server).

Please email us [email protected] or reach out to us on CNCF Slack in the #opencost channel if you need help or have any questions!