This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Helm Chart

Helm Chart is a feature that allows you to register charts from the Chart Repository to be used in the DevOps Console.

Helm Chart can be used through Helm Install. It can also be linked to App templates through Adding Supported Helm Charts.

Getting Started with Helm Chart

To start managing Helm Charts, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart.

Getting Started with Project Helm Chart

Note
You can register, modify, or delete Helm Charts that are only available within the project.
  1. Main page, click the Project card. The Project Dashboard page moves.
  2. In the left menu, click Repository > Helm Chart. The Helm Chart page moves.

Adding Helm Chart

Users can add their own Helm Charts.

Before registering a Helm Chart, users must upload the chart to be used through Uploading Charts.

To add a Helm Chart, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart. The Helm Chart page opens.
  3. In the Helm Chart Type menu, select the type of Helm Chart. The Add Helm Chart button is only visible if you have registration permissions based on the selected information.
  4. Click the Add Helm Chart button. The Register Helm Chart page opens.
  5. Enter the Helm Chart Basic Information and click the Start button.
    ItemDescription
    Helm Chart TypeSelect the type of Helm Chart to add.
    Tenant/Project GroupSelect the tenant or project group where the Helm Chart will be added.
    • If you select a tenant, the registered chart can only be used in projects within that tenant.
    • If you select a project group, the registered chart can only be used in projects within that project group.
    Allow New InstallationSelect whether to allow new installations through Helm Install
    Table. Helm Chart Basic Information Setting Items
  6. Select the Helm Chart Repository and Helm Chart, then click the Validation Check button.
  7. Enter the remaining information and click the Next button.
    Repository
    Item
    Description
    ChartMuseumHelm Chart RepositorySelect ChartMuseum as the chart repository.
    Chart SelectionSelect the chart to register as a Helm Chart from the charts uploaded through Uploading Charts.
    Harbor OCIHelm Chart RepositorySelect Harbor OCI as the chart repository.
    Authentication InformationEnter the authentication information for the chart repository and click the Connection Test button.
    Chart SelectionSelect the Helm Chart that can be retrieved using the entered authentication information and click the Validation Check button.
    OCIHelm Chart RepositorySelect OCI as the chart repository.
    Authentication InformationEnter the authentication information for the chart repository and click the Connection Test button.
    Chart InputEnter the Helm Chart that can be retrieved using the authentication information entered in Authentication Information and click the Validation Check button.
    (e.g., oci://chart.url/repo/chartname:version)
    CommonIconSelect an icon to represent the Helm Chart.
    CI/CD InformationSelect whether to support CI/CD functionality.
    • This indicates whether the Helm Chart can be linked to an App template.
    • The Values.yaml file of the chart must contain the image.repository, image.tag, and imagePullSecrets[0].name keys.
    • If Support CI/CD is selected, the CI/CD information step is added.
    Chart ImageSelect whether to register an image.
    • The Values.yaml file of the chart must contain the imagePullSecrets[0].name key.
    • If No Image is selected, the image secret information step is excluded.
    Table. Chart Repository Setting Items
  8. Select the image repository and enter the authentication information, then click the Connection Test button.
  9. Enter the remaining information and click the Next button.
    ItemDescription
    Image Repository InformationSelect the image repository and enter the authentication information.
    • Administrator privileges are required for the image repository.
    • The user who will use the Helm Chart to perform Helm Install will be granted Read privileges for the image repository.
    • The entered authentication information will be used to grant privileges to the image repository.
    Add Used ImagesAdd the image paths from the selected image repository.
    • Select images from the list: Organization, Repository, and Tag can be selected and added.
    • User input: The docker repository and docker tag of the image can be entered directly and added.
    • Multiple inputs are possible.
    Use Register’s Authentication InformationThis option is available when the selected image repository is a tool that cannot grant privileges (e.g., SCR).
    • If not checked, when a user performs Helm Install, the user will be granted Pull privileges for the used image. If the tool cannot grant privileges, no privileges will be granted.
    • If checked, the Helm Chart user will use the registrant’s authentication information instead of their own privileges when performing Helm Install.
    Be cautious when checking this option:
    • The registrant’s authentication information may be exposed to the Helm Chart user, so use this option only when necessary.
    • This option must be selected for image repositories that only provide image pull functionality. A separate image repository for pull purposes only must be entered. (If checked, one image repository cannot be used for both pull and push at the same time.)
    • The registrant’s authentication information is used in Project > Image Repository > Pull-only Image and Helm Release’s Image Pull Secret. This information cannot be changed by the Helm Chart user, and changes to the registrant’s authentication information in the Helm Chart will be applied universally.
    Select Docker Base ImageSelect the image to be used as the Docker base image.
    • This option is only available if Support CI/CD was selected in the previous step.
    • The selected image will be used as the base image for Docker build.
    Table. Image Secret Information Setting Items
  10. Select the supported App template and click the Complete button.
Note
App templates marked as Environment Only provide only build/deployment environments without project sample code.

Modifying Helm Chart

To modify a Helm Chart, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart.
  3. In the Helm Chart list, click the Helm Chart card you want to modify. The Helm Chart Details page opens.
  4. Click the Modify button at the bottom right.
  5. Modify the information and click the Save button to complete the modification.

Adding Helm Chart Version

To add a Helm Chart version, the chart with a different version must be registered in advance through Uploading Charts.

To add a Helm Chart version, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart.
  3. In the Helm Chart list, click the Helm Chart card you want to modify. The Helm Chart Details page opens.
  4. Click the Add Version button at the bottom right. The Add Helm Chart Version popup opens.
  5. Enter the information and click the Save button to complete the version addition.
    ItemDescription
    Chart VersionSelect the chart version to add.
    • Chart versions that are not registered as Helm Charts in the chart repository are displayed.
    Table. Helm Chart Version Addition Setting Items

Deleting Helm Chart

To delete a Helm Chart, follow these steps:

  1. Main page, click the Manage icon at the top right. The Manage page opens.
  2. In the left menu, click Tools & Templates > Helm Chart. The Helm Chart page opens.
  3. In the Helm Chart list, click the Helm Chart card you want to delete. The Helm Chart Details page opens.
  4. Click the Delete button at the bottom right.
  5. In the confirmation popup, click the Confirm button to complete the deletion.

1 - Creating a Helm Chart that Supports Form Input

Users can create a Helm chart that supports form input.

Note
Only available in Helm 3 or later versions.

Form Input Support Helm Chart

Using a Helm chart that supports form input, users can input each item through a user interface when installing the Helm chart.

Helm Chart File Composition and values.schema.json File

Helm Chart File Composition

To support form input, a values.schema.json file is required in addition to the basic Helm chart file composition.

Helm Chart Directory Structure
Figure. Helm Chart Directory Structure

Relationship between values.schema.json and values.yaml Files

Relationship between values.schema.json and values.yaml files
Figure. Relationship between values.schema.json and values.yaml files

values.schema.json

  • A file defined in JSON Schema to validate the values entered in the values.yaml file.
  • DevOps Console provides additional features to display forms on the screen and allow users to easily input values.

JSON Schema Basics

The values.schema.json file used in DevOps Console supports the standard format defined in JSON Schema.

Note

For detailed guides on standard formats, please refer to the following sites:

The basic properties are described as follows:

PropertyDescriptionData TypeAllowed Values
$schemastringhttp://json-schema.org/schema#
typeData type
  • Determines the default rendering form based on the data type
string
  • string
    • Creates an input field for string input
    • Combobox rendering if oneOf or enum exists
    • Password input rendering if render is password
  • number
    • Creates an input field for integer and decimal input
  • integer
    • Creates an input field for integer input
  • object
    • Defines a form group with properties
    • Used for hierarchical structure processing
  • array
    • Renders a list of input fields for multiple data input
  • boolean
    • Renders a checkbox
  • null
titleLabelstringDefines the label for the item
descriptionDescriptionstringDisplays as a tooltip
readOnlyRead-only statusboolean
  • Default: false
  • The created form is displayed as read-only
requiredList of required input itemsarraye.g., "required": ["username", "password"]
Table. JSON Schema Property Items

DevOps Console Defined Items

The following items are defined in DevOps Console and only work in DevOps Console.

PropertyDescriptionData TypeAllowed Values
formDevOps Console screen display status
  • Only displays on the screen if set to true
booleandefault: false
renderRenderer changestring
  • password: Used for special processing (masking) in the form
formatString format referencestring
  • ip, hostname, uri, etc.: Input formats provided by JSON Schema
  • password_confirm: Creates an input field for password confirmation
form_localeDefined for internationalization processing
  • Uses the default property value if the set locale is not available
  • Supports Korean (ko) and English (en)
object
  • ko
    • label
    • description
  • en
    • label
    • description
Table. DevOps Console Defined Items

Hierarchical Processing

To process hierarchical structures, JSON Schema defines the "type": "object" property value and the properties property. Sub-properties are defined under the properties item.

The following example defines the service.internalPort property.

Color mode
"service": {
    "type": "object",
    "form": true,
    "properties": {
        "internalPort": {
            "type": "number",
            "title": "Container Port",
            "description": "HTTP port to expose at container level",
            "form": true
        }
<omitted>
"service": {
    "type": "object",
    "form": true,
    "properties": {
        "internalPort": {
            "type": "number",
            "title": "Container Port",
            "description": "HTTP port to expose at container level",
            "form": true
        }
<omitted>
Hierarchical Processing Example

Internationalization Processing

For internationalization processing, use the form_locale property and define it as follows.

Supports Korean and English.

Color mode
"db": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in",
      "title": "internal"
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true,
  "form_locale": {
    "ko": {
      "label": "데이터베이스",
      "description": "데이터베이스 타입을 선택하세요",
      "internal": "내부",
      "external": "외부"
    },
    "en": {
      "label": "Database"
    }
  }
}
"db": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in",
      "title": "internal"
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true,
  "form_locale": {
    "ko": {
      "label": "데이터베이스",
      "description": "데이터베이스 타입을 선택하세요",
      "internal": "내부",
      "external": "외부"
    },
    "en": {
      "label": "Database"
    }
  }
}
Internationalization Processing Example

values.schema.json Writing Example

Form Type Examples

Input

To display the defined fields in the values.schema.json file as a form on the screen, set the form field value to true.

Color mode
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "form_field": {
      "type": "string", 
      "form": true 
    },
    "hide_field": { 
      "type": "string"
    }
  }
}
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "form_field": {
      "type": "string", 
      "form": true 
    },
    "hide_field": { 
      "type": "string"
    }
  }
}
Input Processing Example

Password

Color mode
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "password_field": {
      "type": "string",
      "form": true,
      "render": "password", 
      "format": "password_confirm" 
    }
  }
}
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "password_field": {
      "type": "string",
      "form": true,
      "render": "password", 
      "format": "password_confirm" 
    }
  }
}
Password Processing Example

Checkbox

Color mode
"enabled": {
  "title": "enable persistence",
  "type": "boolean",
  "form": true
}
"enabled": {
  "title": "enable persistence",
  "type": "boolean",
  "form": true
}
Checkbox Processing Example

To display a dropdown field on the screen and specify allowed values, use the enum and oneOf properties.

enum

Used when the displayed text and stored value are the same.

Color mode
"postgres": {
  "type": "string",
  "title": "Postgres",
  "description": "choose PostgreSQL type.",
  "enum": [
    "internal",
    "external",
    "both"
  ],
  "form": true
}
"postgres": {
  "type": "string",
  "title": "Postgres",
  "description": "choose PostgreSQL type.",
  "enum": [
    "internal",
    "external",
    "both"
  ],
  "form": true
}
enum Processing Example

oneOf

Used when the displayed text and stored value are different.

Color mode
"Oneof": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in", 
      "title": "internal" 
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true
}
"Oneof": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in", 
      "title": "internal" 
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true
}
oneOf Processing Example

Array

Color mode
"Array": {
  "type": "array",
  "items": {
    "type": "string",
    "form": true
  },
  "form": true
}
"Array": {
  "type": "array",
  "items": {
    "type": "string",
    "form": true
  },
  "form": true
}
Array Processing Example

Object Array

Color mode
"objectArray": {
  "type": "array",
  "title": "Object Array",
  "form": true,
  "items": {
    "type": "object",
    "form": true,
    "properties": {
      "host": {
        "type": "string",
        "form": true
      },
      "path": {
        "type": "string",
        "form": true
      }
    }
  }
}
"objectArray": {
  "type": "array",
  "title": "Object Array",
  "form": true,
  "items": {
    "type": "object",
    "form": true,
    "properties": {
      "host": {
        "type": "string",
        "form": true
      },
      "path": {
        "type": "string",
        "form": true
      }
    }
  }
}
Object Array Processing Example

values.schema.json full file writing example

system-nginx

Color mode
{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "form": true,
    "properties": {
        "service": {
            "type": "object",
            "form": true,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Service Type",
                    "form": true,
                    "enum": ["ClusterIP", "NodePort", "LoadBalancer", "ExternalName"]
                },
                "externalPort": {
                    "type": "number",
                    "title": "Service Port",
                    "description": "HTTP port to expose at service level",
                    "form": true
                },
                "internalPort": {
                    "type": "number",
                    "title": "Container Port",
                    "description": "HTTP port to expose at container level",
                    "form": true
                }
            },
            "required": ["type", "externalPort", "internalPort"]
        },
        "ingress": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use Ingress",
                    "form": true
                },
                "domain": {
                    "type": ["string", "null"],
                    "format": "hostname",
                    "title": "Ingress Domain",
                    "description": "Default host for the ingress resource (required when `ingress.enabled=true`)",
                    "form": true
                }
            }
        },
        "networkPolicy": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use NetworkPolicy",
                    "form": true
                }
            }
        }
    }
}
{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "form": true,
    "properties": {
        "service": {
            "type": "object",
            "form": true,
            "properties": {
                "type": {
                    "type": "string",
                    "title": "Service Type",
                    "form": true,
                    "enum": ["ClusterIP", "NodePort", "LoadBalancer", "ExternalName"]
                },
                "externalPort": {
                    "type": "number",
                    "title": "Service Port",
                    "description": "HTTP port to expose at service level",
                    "form": true
                },
                "internalPort": {
                    "type": "number",
                    "title": "Container Port",
                    "description": "HTTP port to expose at container level",
                    "form": true
                }
            },
            "required": ["type", "externalPort", "internalPort"]
        },
        "ingress": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use Ingress",
                    "form": true
                },
                "domain": {
                    "type": ["string", "null"],
                    "format": "hostname",
                    "title": "Ingress Domain",
                    "description": "Default host for the ingress resource (required when `ingress.enabled=true`)",
                    "form": true
                }
            }
        },
        "networkPolicy": {
            "type": "object",
            "form": true,
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "title": "Use NetworkPolicy",
                    "form": true
                }
            }
        }
    }
}
values.schema.json full file writing example