RubyMine 2022.3 Help

Kubernetes

Kubernetes is a container orchestration engine for the deployment, scaling, and management of containerized applications. Install and enable the Kubernetes plugin for RubyMine to add the following features for managing your Kubernetes cluster:

  • Coding assistance for Kubernetes resource configuration files.

  • Coding assistance for Helm charts and templates.

  • Validation of custom resources with custom resource definition (CRD) specifications.

  • Coding assistance for Kustomize files: field and local file path completion, quick documentation, and navigation between Kustomize files and patches. The list of related Kustomize files appears in the editor at the top of the open Kustomize patch.

  • Interaction with the cluster from RubyMine: use the Services tool window to see all resources of the Kubernetes cluster in the current context, jump to relevant resource definitions, view logs for containers running on pods, and much more.

Specify a custom path to kubectl and helm

RubyMine uses the default kubectl (and helm if you use it) executables as determined by the PATH environment variable. If you install Kubernetes or Helm in custom directories, you can manually specify the path to them.

  1. In the Settings dialog (Ctrl+Alt+S), select Build, Execution, Deployment | Kubernetes.

  2. In the Path to kubectl executable field, specify the path to the kubectl executable file.

  3. In the Path to helm executable field, specify the path to the helm executable file.

Kubernetes settings window

Use multiple Kubernetes configuration files

RubyMine detects the default kubeconfig file. You can use a different configuration file. You can either apply it globally or use a different file for each project.

  1. In the Settings dialog (Ctrl+Alt+S), select Build, Execution, Deployment | Kubernetes.

  2. In the Path to kubeconfig file field, specify the path to a kubeconfig file.

  3. If you want to use different configuration files in different projects, clear the Set this kubeconfig file path globally for all projects checkbox.

Resource configuration files

The Kubernetes plugin supports Kubernetes API starting from version 1.5. It provides rich support for resource configuration files in YAML, and only basic support for the JSON format.

Supported features

Feature

YAML

JSON

Auto-completion

Supported

Supported

Quick documentation

Supported

Supported

Inspections and quick fixes

  • Invalid, missing, and duplicated keys

  • Non-editable (read-only) keys and resources

  • Deprecated keys and resources

  • Invalid integer and enum key values

  • Invalid, missing, and duplicated properties

Live templates

Predefined templates for common configuration kinds:

  • kcm: ConfigMap

  • kdep: Deployment

  • kpod: Pod

  • kres: Generic resource

  • kser: Service

No predefined live templates

Smart completion

Supported

Not supported

Custom resource definitions

Supported

Not supported

Label definitions and selectors

Navigation using gutter icons, find usages, and renaming

Not supported

Enhancements of the original Kubernetes model

Enums instead of plain strings where applicable

None

RubyMine recognizes Kubernetes resource configuration files using the following mandatory fields:

  • apiVersion: identifies the versioned schema of the object representation

  • kind: identifies the object kind (for example, Service, Pod, Deployment, and so on)

If both of the previous fields are present in a YAML or JSON file, RubyMine will mark the file with the corresponding Kubernetes icon and enable all available features:

How a Kubernetes resource file is recognized

For YAML files, you can also use predefined Live Templates to create the necessary type of configuration:

  • kcm: Kubernetes ConfigMap

  • kdep: Kubernetes Deployment

  • kpod: Kubernetes Pod

  • kres: Kubernetes Generic Resource

  • kser: Kubernetes Service

Using a Live Template to create a Kubernetes deployment configuration

Configure the Kubernetes API version

RubyMine provides completion for configuration key values, navigation to relevant selectors and definitions via gutter icons, specialized inspections that check for deprecated values and required keys, and other assistance features. These depend on the version of the API you are using. By default, RubyMine sets it to the latest version. However, if your resources use an earlier version of the API, you can change it.

  1. In the Settings dialog (Ctrl+Alt+S), select Languages & Frameworks | Kubernetes.

  2. Change the Kubernetes API version and Kustomize version options as necessary.

Helm support

Helm is a tool for managing Kubernetes applications. Helm charts are packages of pre-configured resource definitions that you run inside a Kubernetes cluster. A chart contains a description of the package Chart.yaml and one or more templates used to generate Kubernetes manifest files.

Coding assistance for Helm charts and templates includes code completion, refactorings, inspections, quick-fixes, and quick documentation. Code completion includes values of dependencies from the specified repository (by default, from Helm Hub).

In Go template directives, RubyMine provides completion for Helm built-in objects and for values passed from a values.yaml file. You can press Ctrl+B to navigate to a source of object values, for example, to a child chart value imported into a parent chart.

In template objects, you can use code folding: press Ctrl+NumPad + and Ctrl+NumPad - to toggle between values and directives. You can also hover over a value to expand and show the directive.

Helm imported data

You can also use gutter icons for navigating between label definitions and label selectors, and between overridden and overriding values.

Create a new Helm chart

  1. In the Project tool window, right-click a folder and select New | Helm Chart.

  2. In the Create New Helm Chart window that opens, enter a name for the chart.

This runs the helm create command, which adds all the basic files required to get started:

  • .helmignore: Patterns to ignore when building packages

  • Chart.yaml: A basic chart description with metadata

  • values.yaml: Default values for chart templates

  • charts/: Directory for sub-charts

  • templates/: Directory for chart definitions

    • _helpers.tpl: Partials and functions for your templates

    • NOTES.txt: Information that is printed out after a chart is deployed

    • deployment.yaml: Example Kubernetes deployment definition

    • ingress.yaml: Example Kubernetes ingress definition

    • service.yaml: Example Kubernetes service definition

Preview the result of Helm template rendering

  • Right-click the template file, point to Kubernetes, and click Helm Template.

This runs the helm template command that renders a chart template. The rendered preview opens inside the diff viewer to compare it with the original template file.

Update external dependencies

  • Right-click the chart, point to Kubernetes, and click Helm Dependency Update.

This runs the helm dependency update command.

In Helm 2, dependencies should be specified in the requirements.yaml file. This action also generates or updates requirements.lock.

In Helm 3, dependencies should be specified in the Chart.yaml file. If you specify the dependencies in the wrong file, RubyMine provides an inspection with a quick-fix to move them.

Examine a chart for possible issues

  • Right-click the chart, point to Kubernetes, and click Helm Lint.

This runs the helm lint command that executes a series of tests to discover possible problems without actually installing the chart.

Custom resource definitions support

If you extend the Kubernetes cluster with custom resources, RubyMine can validate them with custom resource definition (CRD) specifications.

Specify the path to CRD specifications

  1. Press Ctrl+Alt+S to open the IDE settings and select Languages & Frameworks | Kubernetes.

  2. Click the Add button and either select a local CRD file or specify a URL. Then click OK.

Use the Up button and the Down button to rearrange the list of CRD files. This defines the priority for conflicting definitions: RubyMine will use the lowest one if it is defined in more than one file.

By default, CRDs are applied to the current project only. Change the Scope: option to IDE if you want a certain CRD to be available for any project that you open with this IDE instance.

To load the CRD from the running Kubernetes cluster, enable Use API schema from the active cluster if available.

You can view CRDs for the current cluster, including all their applied resources, under the Kubernetes node of the Services tool window.

The Kubernetes plugin supports CRD files of the following types:

CustomResourceDefinition files in YAML

The following example shows a simple CustomResourceDefinition specification for a custom resource stable.example.com/v1 of the kind CronTab. Obligatory fields to identify the resource are metadata.name, spec.group, spec.versions, and spec.names.

apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: crontabs.stable.example.com # Obligatory field to identify the resource spec: group: stable.example.com # Obligatory field to identify the resource versions: # Obligatory field to identify the resource - name: v1 served: true storage: true scope: Namespaced names: # Obligatory field to identify the resource plural: crontabs singular: crontab kind: CronTab shortNames: - ct validation: openAPIV3Schema: # Schema for validating custom objects properties: spec: properties: cronSpec: type: string pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' # not supported for validation replicas: type: integer minimum: 1 # not supported for validation maximum: 10 # not supported for validation

OpenAPI v2.0 schema in JSON

The following example shows a simple OpenAPI v2.0 schema with a CRD specification for a custom resource sample/v1 of the kind Config. The root definition of the custom resource must contain the x-kubernetes-group-version-kind field with the specified group, version, and kind. In the example, the root.Definition object uses a build property to reference the some.Definition object.

{ "swagger": "2.0", "info": { "title": "Sample Schema", "version": "sample/v1" }, "paths": {}, "definitions": { "some.Definition": { "description": "Example of a definition.", "properties": { "someProperty": { "type": "string" } } }, "root.Definition": { "description": "This is the root definition for the resource", "properties": { "build": { "$ref": "#/definitions/some.Definition" } }, "x-kubernetes-group-version-kind": [ { "group": "sample", "kind": "Config", "version": "v1" } ] } } }

CRD validation restrictions

RubyMine does not support the following OpenAPI v3 schema features:

  • multipleOf

  • maximum

  • exclusiveMaximum

  • minimum

  • exclusiveMinimum

  • maxLength

  • minLength

  • pattern

  • maxItems

  • minItems

  • uniqueItems

  • maxProperties

  • minProperties

  • allOf

  • oneOf

  • anyOf

  • not

  • format

  • default

  • nullable

  • readOnly

  • writeOnly

  • xml

  • externalDocs

  • example

  • deprecated

Productivity tips

If you use the features described here frequently, the following tips may be helpful:

Assign shortcuts

You can assign a keyboard shortcut for Kubernetes actions.

  1. In the Settings dialog (Ctrl+Alt+S), select Keymap.

  2. Type kubernetes in the search field, then double-click an action to set a shortcut for it.

Alternatively, you can use the Find Action dialog Ctrl+Shift+A, type kubernetes, select the necessary action, and press Alt+Enter.

Configure code folding

By default, RubyMine uses code folding to render value references in Helm templates and definitions in Kubernetes configuration files as the actual values. You can click the value to expand it or press Ctrl+NumPad + and Ctrl+NumPad - to toggle folding. If you want to see the references and definitions expanded by default, do the following:

  1. In the Settings dialog (Ctrl+Alt+S), select Editor | General | Code Folding.

  2. On the Code Folding page, clear the necessary checkboxes:

    • Kubernetes: value references in Helm templates

    • Kubernetes: EnvVar definitions in YAML files

    • Kubernetes: ExecAction definitions in YAML files

Last modified: 18 January 2023