Skip to main content

Installing on Linode

OpenCost may be installed on Kubernetes clusters running on Linode Kubernetes Service (LKS).

You will need to install Prometheus, create your OpenCost namespace, configure your cluster pricing and cloud costs, and then install OpenCost.

Install Prometheus

Prometheus is a prerequisite for OpenCost installation. OpenCost requires Prometheus for scraping metrics and data storage. For the installation of Prometheus please use the following command:

helm install prometheus --repo https://prometheus-community.github.io/helm-charts prometheus \
--namespace prometheus-system --create-namespace \
--set prometheus-pushgateway.enabled=false \
--set alertmanager.enabled=false \
-f https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/prometheus/extraScrapeConfigs.yaml

This will install Prometheus in the prometheus-system namespace with default settings for use with OpenCost.

If you wish to use a different Prometheus installation or work with another compatible technology, please refer to the Prometheus installation page.

Create the OpenCost Namespace

Create the opencost namespace for your installation:

kubectl create namespace opencost

Alternate namespaces may be used if necessary.

Linode Configuration

Cost Allocation

OpenCost will automatically read the node information node.spec.providerID to determine the cloud service provider (CSP) in use. If it detects the CSP is LKE, it will attempt to pull the Linode on-demand pricing with no further configuration required.

Custom Pricing

Custom Pricing is not fully supported by Linode provider. Only the following values are free to change.

opencost:
customPricing:
enabled: true
configmapName: pricing-configs
provider: linode
costModel:
description: Modified Linode prices
linodeTokenSecret: Modified token secret namespaced name
zoneNetworkEgress: 0.0
regionNetworkEgress: 0.0
internetNetworkEgress: 0.0
defaultLBPrice: 0.15
controlPlaneCosts: 0.0
HaControlPlaneCosts: 0.9

Security for Linode integration

OpenCost uses the Linode SDK for Go to pull price data.

Linode integration works out of the box, uses the token deployed by default kube-system/linode, but OpenCost doesn't have permission to use it.

Please create the following role and binding to ensure permissions.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: get-secret-linode
rules:
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["linode"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: opencost-secret-access-linode
subjects:
- kind: ServiceAccount
name: opencost
namespace: default
roleRef:
kind: ClusterRole
name: get-secret-linode
apiGroup: rbac.authorization.k8s.io

Sometimes it makes sense to maintane separated token or solving rotation of token.

First create Linode API token with Read-Only Kubernetes access.

Create your own secret.

kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: linode
namespace: opencost
type: Opaque
data:
token: $(echo -n "$LINODE_TOKEN" | base64 -w0)
EOF

Ensure permissions to read secret.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: get-secret-linode
namespace: opencost
rules:
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["linode"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: opencost-secret-access-linode
namespace: opencost
subjects:
- kind: ServiceAccount
name: opencost
namespace: opencost
roleRef:
kind: Role
name: get-secret-linode
apiGroup: rbac.authorization.k8s.io

Configure custom pricing.

opencost:
customPricing:
enabled: true
configmapName: pricing-configs
provider: linode
costModel:
linodeTokenSecret: opencost/linode

Alternatively you can overwrite secret via Helm value opencost.exporter.linode.tokenSecret.

Linode Cloud Costs

Cloud Cost integration isn't supported at the moment.

Install OpenCost

Helm is the preferred installation method for OpenCost.

Using the OpenCost Helm Chart

You may check out the source for the OpenCost Helm Chart or you may install the Helm chart directly to your Kubernetes cluster. Review the values.yaml for the settings available for customization. With your custom settings in the Helm values file local.yaml, install OpenCost:

helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost \
--namespace opencost -f local.yaml

Updating OpenCost via Helm

Upgrading the Helm chart version or updating settings may be done with the following:

helm upgrade opencost --repo https://opencost.github.io/opencost-helm-chart opencost \
--namespace opencost -f local.yaml

Installing with the OpenCost Manifest

Installing from the OpenCost manifest is supported on Linode.

For basic Kubernetes Cost Allocations without Cloud Costs or any customizations you may use the OpenCost manifest. Prometheus is still required and the Helm chart installation is recommended for anything beyond this simple use case.

kubectl apply --namespace opencost -f https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/opencost.yaml
Documentation Distributed under CC BY 4.0.  The Linux Foundation® (TLF) has registered trademarks and uses trademarks. For a list of TLF trademarks, see: Trademark Usage.