Helm Configuration
General Settings
license
You'll receive a license key as part of your subscription to Okteto. If you haven't received it, please open a support ticket.
If you are interested in evaluating Okteto, sign up for our free 30 days trial, no credit card required.
license: XXXXX
You can also use a secret to store the license.
subdomain
Okteto's automatic SSL endpoints allows you to expose secure and unique public endpoints for your development environments. By default, all endpoints created by Okteto will use a combination of the name of the app, the namespace, and the subdomain
.
For example, if you have a development environment named app
in the cindy
namespace, it will be accessible at https://app-cindy.example.com if subdomain
is example.com.
subdomain: "example.com"
Okteto's frontend and API services will be also accessible via https://okteto.$SUBDOMAIN.
Once Okteto is installed, you can use kubectl
to retrieve the public address of the Okteto NGINX Ingress Controller:
kubectl get service -l=app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/component=controller --namespace=okteto
The output will look something like this:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
okteto-ingress-nginx-controller LoadBalancer 10.0.7.73 34.68.230.234 80:30795/TCP,443:32481/TCP,1234:30885/TCP 5m
You'll need to take the EXTERNAL-IP
address to create a DNS entry for *.$SUBDOMAIN
.
You can overwrite Okteto's public URL using the publicOverride field.
publicOverride
Use this property to override the Public URL where Okteto is available. This option replaces okteto.$SUBDOMAIN
with your FQDN of choice.
publicOverride: "example.com"
Important: When using publicOverride
, the certificate referred by wildcardCertificate.name must be valid for publicOverride
, registry.$SUBDOMAIN
and buildkit.$SUBDOMAIN
.
When publicOverride
is set, an additional component is deployed for Okteto Private Endpoints feature.
You can configure its settings using the privateEndpoints section.
When setting your auth provider, the authentication callback URL and origin URL will change to the following:
Callback URL:
https://${publicOverride}/auth/callback
https://private-endpoints.${subdomain}/auth/callback
Origin URL:
https://${publicOverride}
https://private-endpoints.${subdomain}
auth
Use the auth
property to specify which users can access Okteto and the method they can use for logging in.
Okteto provides OAuth2 integrations for the following auth providers:
Additionally, Okteto provides a single user authentication method based on a Token for initial evaluations.
Theme
Use this property to customize the logo and the colors of the sidebar to match your team's identity or your favorite colors.
logo
: The logo displayed at the far top left of the Okteto UI. The value can be a url or a Base64 encoded image.primary
: The primary color of the sidebar. This is used for the color of the sidebar. The value can be a HTML color name (e.g. blue, red) or a hexadecimal code.secondary
: The secondary color of the sidebar. This is used for the icons and the text displayed in the sidebar. The value can be a HTML color name (e.g. blue, red) or a hexadecimal code.
theme:
logo: http://example.com/icon.png
primary: \#EFF3F2
secondary: black
Okteto Components
api
The API service. Account and Kubernetes credentials management, namespace creation, and sharing, deployment via the catalog, etc...
annotations
: Annotations to add to the API pods.extraEnv
: Environment variables to be set on the API containers.labels
: Labels to add to the API pods.priorityClassName
: The priority class to be used by the API pods.replicaCount
: The number of API pods. It defaults to 2.resources
: The resources for the API pods.
api:
extraEnv:
- name: NO_PROXY
value: ".example.com"
replicaCount: 2
resources:
requests:
cpu: 100m
memory: 128Mi
buildkit
The build service. It's used in combination with okteto build
to build containers directly in the cluster.
port
: Port used for the buildkit statefulset. Defaults to443
.annotations
: Annotations to add to the buildkit pods.extraEnv
: Environment variables to be set on the buildkit containers.hpa.enabled
: Enable horizontal pod autoscaling for the buildkit pods. Disabled by default.hpa.min
: Minimum number of buildkit pods to keep running.hpa.max
: Maximum number of buildkit pods to scale to.hpa.cpu
: The amount of CPU utilization that will cause the HPA to scale the buildkit pods.labels
: Labels to add to the buildkit pods.podManagementPolicy
: The podManagementPolicy of the buildkit pods. Defaults toParallel
.priorityClassName
: The priority class to be used by buildkit pods.replicaCount
: The number of buildkit pods. It defaults to 1.resources
: The resources for the buildkit pods.serviceAccount.create
: create a service account for buildkit. True by default.serviceAccount.name
: Buildkit service account name. Defaults tookteto-buildkit
.serviceAccount.annotations
: Annotations for the buildkit service account.serviceAccount.labels
: Labels for the buildkit service account.persistence.enabled
: Configures a persistence volume for buildkit. False by default.persistence.storageClass
: The storage class of the persistence volume attached to every buildkit pod.persistence.size
: The size of the persistence volume attached to every buildkit pod. Defaults to750Gi
.persistence.cache
: The size (in Mi) of the buildkit cache to store image caches. It should be around 30Gi smaller thanstorage.size
. Defaults to 500Gi.
buildkit:
port: 443
extraEnv:
- name: NO_PROXY
value: ".example.com"
replicaCount: 1
persistence:
enabled: true
storageClass: ssd
size: 180Gi
cache: 150000
In order to handle timeouts during communication between the client and the buildkit daemon, the following environment variables can be modified on the server side:
OKTETO_KEEPALIVE_SERVER_TIME_MS
: After this duration of time, if the server doesn't see any activity it pings the client to see if the transport is still alive. If set below 1s, a minimum value of 1s will be used. The current default value is 2 hours.OKTETO_KEEPALIVE_SERVER_TIMEOUT_MS
: After having pinged for keepalive check, the server waits for a duration of Timeout and if no activity is seen, the connection is closed. The current default value is 20 seconds.OKTETO_KEEPALIVE_SERVER_MAX_CONN_IDLE_MS
: Duration for the amount of time after which an idle connection would be closed by sending a GOAWAY. Idleness duration is defined since the most recent time the number of outstanding RPCs became zero or the connection establishment. The current default value is infinity.OKTETO_KEEPALIVE_SERVER_MAX_CONN_AGE_MS
: Duration for the maximum amount of time a connection may exist before it will be closed by sending a GOAWAY. A random jitter of +/-10% will be added to the value to spread out connection storms. The current default value is infinity.OKTETO_KEEPALIVE_SERVER_MAX_CONN_AGE_GRACE_MS
: An additive period afterOKTETO_KEEPALIVE_SERVER_MAX_CONN_AGE_MS
after which the connection will be forcibly closed. The current default value is infinity.OKTETO_KEEPALIVE_SERVER_POLICY_MINTIME_MS
: Minimum amount of time a client should wait before sending a keepalive ping. The current default value is 5 minutes.OKTETO_KEEPALIVE_SERVER_POLICY_PERMIT_WITHOUT_STREAM
: If true, server allows keepalive pings even when there are no active streams(RPCs). If false, and client sends pings when there are no active streams, server will send GOAWAY and close the connection. False by default.
If you're trying to configure Buildkit persistency for your Okteto installation, check out our video tutorial:
daemonset
The daemonset automatically configures every node of your cluster to work better with Okteto.
annotations
: Annotations to add to the daemonset pods.extraEnv
: Environment variables to be set on the daemonset containers.labels
: Labels to add to the daemonset pods.image
: Container image used by the daemonset pods.configurePrivateRegistriesInNodes.enabled
: Specifies if the daemonset should configure the private registry credentials in the nodes for kubelet or not. It defaults totrue
.priorityClassName
: The priority class to be used by the daemonset pods.
daemonset:
configurePrivateRegistriesInNodes:
enabled: true
The daemonset performs the following tasks on each node:
- Overrides the Okteto Registry hostname resolution to use internal IPs.
- Overrides the default kernel values for file watchers on every node.
- Configures the kubelet with registry credentials for private registries (if
configurePrivateRegistriesInNodes.enabled
key istrue
). - Installs your CA if
wildcardCertificate.privateCA
is enabled. - Installs a CA if using self-signed certificates (
wildcardCertificate.create: true
).
You can restrict the nodes where the daemonset is deployed using tolerations:
tolerations:
devPool: dev
defaultBackend
The defaultBackend receives errored requests from the ingress-controller and transform them returning them to the client.
affinity
: Affinities to add to the defaultBackend pods.annotations
: Annotations to add to the defaultBackend pods.enabled
: Control if defaultBackend is deployed. Defaults totrue
.extraEnvs
: Environment variables to be set on the defaultBackend containers.image
: Configuration block to customize the image used by the defaultBackend pods.repository
: Registry and repository for the defaultBackend pods.tag
: Tag used for the defaultBackend pods.
labels
: Labels to add to the defaultBackend pods.nodeSelector
: Labels to select on which nodes defaultBackend pods will be scheduled.port
: Internal port used for the defaultBackend. Defaults to8080
.priorityClassName
: The priority class to be used by the defaultBackend pods.replicaCount
: The number of defaultBackend pods. It defaults to 2.resources
: The resources for the defaultBackend pods.tolerations
: The toletations for the defaultBackend pods.
defaultBackend:
replicaCount: 3
resources:
requests:
cpu: 100m
memory: 128Mi
The defaultBackend provides the following features:
- Autowake namespaces: when a user access an endpoint from an slept namespace, the defaultBackend will issue a wake command.
- Custom error pages: when a user access an endpoint and an error is produced, the defaultBackend will return a custom error page with hints on how to solve it.
You can also restrict the nodes where the defaultBackend is deployed using tolerations:
tolerations:
devPool: dev
frontend
The frontend service serves the web application.
annotations
: Annotations to add to the frontend pods.extraEnv
: Environment variables to be set on the frontend containers.labels
: Labels to add to the frontend pods.priorityClassName
: The priority class to be used by the frontend pods.replicaCount
: The number of frontend pods. It defaults to 2.resources
: The resources for the frontend pods.
frontend:
extraEnv:
- name: NO_PROXY
value: ".example.com"
replicaCount: 2
resources:
requests:
cpu: 100m
memory: 128Mi
gc
The Okteto Garbage Collector service automatically scales idle applications to zero and deletes unused namespaces for optimal cost savings and resource management. It is enabled by default.
annotations
: Annotations to add to the gc pods.labels
: Labels to add to the gc pods.scaleToZeroPeriod
: The duration, in hours, that an application or resource must be idle before the garbage collector scales it to zero. Set to zero to disable.deleteNamespacePeriod
: The duration, in days, that a namespace must be idle before the garbage collector deletes it. Set to zero to disable.slackWebhook
: If set, the garbage collector will send a notification when it scales a resource to zero or when it deletes a namespace.upSessionByLastSyncedFile
: If true, okteto up sessions will be scaled to zero if no files have been synchronized in the scale to zero period. Default behavior is to check for an active connection (regardless of inactivity)priorityClassName
: The priority class to be used by the gc pods.
gc:
enabled: true
scaleToZeroPeriod: 24
deleteNamespacePeriod: 15
upSessionByLastSyncedFile: false
slackWebhook:
installer
The jobs that deploy your development environments from Git.
annotations
: Annotations to add to the installer job pods.extraEnv
: Environment variables to be set on the installer job containers.labels
: Labels to add to the installer job pods.image
: to configure your custom installer binaries, including a custom Okteto CLI version.runner
: to configure your custom installer image.activeDeadlineSeconds
: Maximum duration of the pipeline in seconds.gitSSHUser
: User to be used when cloning git repos using ssh.sshSecretName
: The name of the secret that contains the private key used when cloning git repos using ssh. If it doesn't exist, the key and the secret will be automatically generated by Okteto.resources
: The resources for pods created by the installer jobs.priorityClassName
: The priority class for pods created by the installer job pods.
installer:
image: okteto/installer:1.5.2
runner: okteto/pipeline-runner:1.0.0
extraEnv:
- name: NO_PROXY
value: ".example.com"
activeDeadlineSeconds: 1800
gitSSHUser: git
sshSecretName: "okteto-ssh"
resources:
requests:
cpu: 10m
memory: 50Mi
privateEndpoints
When publicOverride is set, Okteto Self Hosted deploys an additional component for Okteto Private Endpoints feature, which is responsible for authenticating and authorizing requests sent to Okteto Endpoints set to private mode.
port
: Internal port used for the Private Endpoint component. Defaults to8080
.resources
: The resources for the Private Endpoint component pods.replicaCount
: The number of Private Endpoint component pods. It defaults to 1.annotations
: Annotations to add to the Private Endpoint component pods.priorityClassName
: The priority class to be used by the Private Endpoints pods.
By default, the Private Endpoint component will inherit the configuration set at the [auth
] section, but you can override some values with the following properties:
clientID
: Overridesauth.*.clientID
.clientSecret
: Overridesauth.*.clientSecret
.
registry
Use this section to configure the Okteto Registry. We have dedicated guides to configure the Okteto Registry to store your images in the storage driver of your choice.
These are all the settings available to configure your Okteto Registry:
annotations
: Annotations to add to the registry pods.extraEnv
: Environment variables to be set on the registry containers.ingress.annotations
: Annotations to add to the registry ingress. These annotations take precedence over the ones defined in the ingress section.labels
: Labels to add to the registry pods.pullPolicy
: The security policy for image pulls. If set tocluster
, any Okteto user can pull any image from the registry. When set tonamespace
, only users with access to the namespace can pull images from the namespace. It defaults tonamespace
.priorityClassName
: The priority class to be used by the registry pods.replicaCount
: The number of registry pods. It defaults to 1.resources
: The resources for the registry pods.serviceAccountName
: Alternative service account to be used by the registry. The service account must exist in the same namespace for the Okteto Helm release. Defaults to none.serviceAccount.annotations
: Annotations to add to the registry service account.secret.name
: when using external storage, the name of the secret with the values of your cloud provider credentials.secret.accessKey
: the key of the access key in the secret referenced bysecret.name
(defaults toaccessKey
).secret.secretKey
: the key of the secret key in the secret referenced bysecret.name
(defaults tosecretKey
).
telemetry
The telemetry job "phones home" once a day with the following information:
- Number of managed users
- Number of managed namespaces
- Kubernetes Version and Platform
- A unique install ID
- Your license ID.
- The name of the authentication provider
- The name of the cloud provider
Okteto uses the information to help us better understand how our customers use Okteto, as well as to help us prioritize fixes and features. We don't share your information with anyone else.
enabled
: Enables or disables the telemetry job. Defaults totrue
.priorityClassName
: The priority class to be used by the telemetry pods.
telemetry:
enabled: true
If this configuration is disabled, Okteto CLI analytics are automatically disabled.
webhook
The webhook service. Ingress creation, generation of hostnames, enforcement of policies, etc...
annotations
: Annotations to add to the webhook pods.extraEnv
: Environment variables to be set on the webhook containers.hostNetwork
: Enables or disables host networking for the webhook deployment. The default is false.labels
: Labels to add to the webhook pods.port
: Port sets the port used for the webhook deployment. The default is 443.priorityClassName
: The priority class to be used by the webhook pods.replicaCount
: The number of webhook pods. It defaults to 2.resources
: The resources for the webhook pods.internalCertificate.annotations
: Annotations to add to the internal certificate generated for the webhook.
Advanced Configuration
affinity
Apply default affinities to pods deployed in namespaces created by Okteto.
devPool
: Affinities for pods created on namespaces managed by Okteto.oktetoPool
: Affinities for pods created during the Okteto installation.
affinity:
devPool:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: cloud.google.com/spot
operator: In
values:
- "true"
weight: 10
oktetoPool:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: dev.okteto.com/overloaded
operator: DoesNotExist
weight: 50
In this case, pods deployed in namespaces created by Okteto will have a preferred affinity to land on preemptive nodes.
clusterRole
Okteto assigns this cluster role to every user via a namespace-scoped role binding.
The default value assigns each developer a cluster-admin
role binding with only access to their personal namespaces.
clusterRole: "cluster-admin"
convertLoadBalancedServices
Converts services with type LoadBalancer into ClusterIP and automatically creates an ingress. Enabled by default.
convertLoadBalancedServices:
enabled: true
crds
Configures CRDs managed by Okteto
annotations
: The annotations to apply to the CRDs created during the Okteto installation.keep
: Keep CRDs on chart uninstall (defaults totrue
).install
: Install and upgrade CRDs on chart install (defaults totrue
).
crds:
install: true
keep: true
annotations: {}
devStorageClass
Uses the specified storage class for all persistent volume claims created when developers execute okteto up
. This setting will override any storage class defined on the Okteto manifest. Disabled by default.
storageClass
: The storage class enforced for persistent volume claims created byokteto up
.
devStorageClass:
enabled: true
storageClass: ebs-sc
There is only one exception where this storage class is overwritten. In case of having volume snapshots feature configured, if a storage class is required for the snapshots that storage class will have preference.
globalClusterRole
Okteto assings this cluster role to every user via a cluster role binding. By default, this behavior is disabled. This can be useful to give access to cluster level resources to every developer account, like accessing the Node API.
globalClusterRole: ""
ingress
Configure default values for the ingress created by Okteto.
annotations
: The annotations to apply to all the ingresses created during the Okteto installation.oktetoIngressClass
: TheingressClassName
to apply to all the ingresses created during the Okteto installation (defaults tonginx
).class
: If specified, Okteto will set this as theingressClassName
of all ingresses managed by Okteto. This is useful if you have more than one ingress controller in your cluster.forceIngressClass
: If enabled, all ingresses deployed in namespaces managed by Okteto will have the ingress class defined iningress.class
(default:false
).forceIngressSubdomain
: If enabled, the subdomain of the host of all ingresses deployed in namespaces managed by Okteto must match the okteto wildcard subdomain (default:false
).ip
: The internal IP of the ingress. Pods will call the Okteto API and the Okteto Registry using this IP. Required if the installation of the Okteto NGINX Ingress Controller is disabled.
ingress:
annotations: {}
oktetoIngressClass: nginx
class: nginx
forceIngressClass: false
forceIngressSubdomain: true
ip: ""
ingressLimits
Configure ingress connections limits for each public endpoint. Disabled by default.
connections
: Maximum parallel connections for each ingress.rps
: Maximum requests per second for each ingress.rpm
: Maximum requests per minute for each ingress.
ingressLimits:
enabled: true
connections: 40
rps: 40
rpm: 400