헬름차트

헬름차트는 차트 저장소에 등록된 차트를 DevOps Console에서 사용가능 하도록 등록하는 기능입니다.

헬름차트는 헬름인스톨 하기를 통해 사용할 수 있습니다. 또한 지원 헬름차트 추가하기를 통해 App. 템플릿과 연계할 수 있습니다.

헬름차트 시작하기

헬름차트 관리를 시작하려면 다음 절차를 따르세요.

  1. 메인 페이지 오른쪽 위의 관리 아이콘을 클릭하세요. 관리 페이지가 열립니다.
  2. 왼쪽 메뉴에서 툴 & 템플릿 > 헬름차트 메뉴를 클릭하세요.

프로젝트 헬름차트 시작하기

Note
프로젝트 내부에서만 사용 가능한 헬름차트를 등록/수정/삭제 할 수 있습니다.
  1. 메인 페이지에서 프로젝트 카드를 클릭하세요. 프로젝트 대시보드 페이지로 이동합니다.
  2. 왼쪽 메뉴에서 저장소 > 헬름차트 메뉴를 클릭하세요. 헬름차트 페이지로 이동합니다.

헬름차트 추가하기

사용자는 자신만의 헬름차트를 추가할 수 있습니다.

사용자는 헬름차트 등록 전 차트 업로드하기를 통해 사용할 차트를 먼저 업로드해야 합니다.

헬름차트를 추가하려면 다음 절차를 따르세요.

  1. 메인 페이지 오른쪽 위의 관리 아이콘을 클릭하세요. 관리 페이지가 열립니다.
  2. 왼쪽 메뉴에서 툴 & 템플릿 > 헬름차트 메뉴를 클릭하세요. 헬름차트 페이지가 열립니다.
  3. 헬름차트 유형 메뉴에서 헬름차트 유형을 선택하세요. 선택한 정보에 따라 등록 권한이 있는 경우에만 헬름차트 추가 버튼이 보입니다.
  4. 헬름차트 추가 버튼을 클릭하세요. 헬름차트 등록 페이지로 이동합니다.
  5. 헬름차트 기본 정보 입력 후 시작 버튼을 클릭하세요.
    항목설명
    헬름차트 유형추가할 헬름차트의 유형을 선택하세요.
    테넌트/프로젝트그룹헬릌차트를 추가할 테넌트/프로젝트그룹을 선택
    • 테넌트 선택 시, 선택한 테넌트의 프로젝트에서만 등록한 차트를 사용할 수 있습니다.
    • 프로젝트그룹 선택 시, 선택한 프로젝트그룹의 프로젝트에서만 등록한 차트를 사용할 수 있습니다.
    신규설치 허용여부헬름인스톨 하기를 통한 신규설치 허용여부를 선택하세요
    표. 헬름차트 기본 정보 설정 항목
  6. 헬름차트 저장소헬름차트 선택 후 Validation Check 버튼을 클릭하세요.
  7. 나머지 정보를 입력 후 다음 버튼을 클릭하세요.
    저장소
    항목
    설명
    ChartMuseum헬름 차트 저장소차트 저장소를 ChartMuseum으로 선택하세요.
    차트 선택차트 업로드하기를 통해 등록한 차트중 헬름차트로 등록할 차트를 선택하세요.
    Harbor OCI헬름 차트 저장소차트 저장소를 Harbor OCI로 선택하세요.
    인증정보차트 저장소의 인증정보를 넣고 Connection Test 버튼을 클릭하세요.
    차트 선택입력한 인증정보로 조회가능한 헬름차트를 선택하고 Validation Check 버튼을 클릭하세요.
    OCI헬름 차트 저장소차트 저장소를 OCI로 선택하세요.
    인증정보차트 저장소의 인증정보를 넣고 Connection Test 버튼을 클릭하세요.
    차트 입력인증정보에서 입력한 인증정보로 조회가능한 헬름차트를 입력하고 Validation Check 버튼을 클릭하세요.
    (ex. oci://chart.url/repo/chartname:version)
    공통아이콘헬름차트를 표현할 아이콘을 선택하세요.
    CI/CD 정보CI/CD 기능의 지원 여부를 선택
    • App. 템플릿과의 연계 여부를 나타냅니다.
    • 차트의 Values.yaml 파일에 image.repository, image.tag imagePullSecrest[0].name 키값이 존재해야 합니다.
    • Support CI/CD선택 시, CI/CD 정보 단계가 추가됩니다.
    차트 이미지이미지 등록 여부를 선택
    • 차트의 Values.yaml 파일에 imagePullSecrets[0].name 키값이 존재해야 합니다.
    • 이미지 없음 선택 시 이미지 시크릿 정보 단계가 제외됩니다.
    표. 차트 저장소 설정 항목
  8. 이미지 저장소 선택 및 인증정보 입력 후 Connection Test 버튼을 클릭하세요.
  9. 나머지 정보를 입력 후 다음 버튼을 클릭하세요.
    항목설명
    이미지 저장소 정보이미지 저장소를 선택 및 인증정보를 입력하세요.
    • 이미지 저장소의 관리자 권한이 필요합니다.
    • 헬름차트를 사용하여 헬름인스톨을 하려는 사용자에게 이미지 저장소의 조회 권한을 부여합니다.
    • 입력한 인증정보를 이용하여 이미지 저장소에 권한을 부여합니다.
    사용되는 이미지 추가선택한 이미지 저장소의 이미지 경로를 추가하세요.
    • 목록에서 이미지 선택: Organization, Repository, Tag를 선택하여 추가합니다.
    • 사용자가 직접 입력: 이미지의 docker repository, docker tag를 직접 입력하여 추가합니다.
    • 복수 개 입력 가능합니다.
    등록자의 인증정보 사용이미지 저장소에서 선택한 이미지 저장소가 권한을 부여할 수 없는 툴인 경우(ex. SCR) 선택할 수 있는 옵션입니다.
    • 체크를 하지 않는 경우 헬름차트 사용자가 인스톨을 수행할 때, 헬름차트 사용자에게 사용되는 이미지의 Pull 권한을 추가합니다. 권한 부여를 할수 없는 툴인 경우 권한 부여를 수행하지 않습니다.
    • 체크를 하지 않는 경우 헬름차트 사용자가 인스톨을 수행할 때, 헬름차트 사용자의 권한 대신 헬름차트 등록자의 인증정보를 사용합니다.
    체크 시 주의사항
    • 헬름차트 사용자에게 등록자의 인증정보가 노출될 수 있으므로, 필요한 경우에만 사용하도록 주의를 요합니다.
    • 이미지 Pull만 제공하는 이미지저장소인 경우에 선택해야 사용 중에 문제가 발생하지 않습니다. 반드시 별도의 Pull 용도로만 사용할 이미지저장소를 입력해야 합니다. (체크한 경우 하나의 이미지저장소에 대해 Pull, Push가 동시에 불가능합니다.)
    • 등록자의 인증정보는 프로젝트 > 이미지저장소 > Pull 전용 이미지와 헬름릴리스의 ImagePull Secret에서 사용합니다. 해당 인증정보는 헬름차트 사용자는 변경이 불가능하며, 헬름차트에서 등록자의 인증정보를 변경한 경우 일괄적으로 변경됩니다.
    도커 베이스 이미지 선택도커 베이스 이미지로 사용될 이미지를 선택
    • 이전 단계에서 Support CI/CD를 선택한 경우에만 선택하며, Docker build 시 사용할 베이스 이미지로 사용합니다.
    표. 이미지 시크릿 정보 설정 항목
  10. 지원할 App. 템플릿 선택 후 완료 버튼을 클릭하세요.
참고
Environment Only로 표기된 App. 템플릿은 프로젝트 샘플 소스코드 없이 빌드/배포환경만 제공합니다.

헬름차트 수정하기

헬름차트를 수정하려면 다음 절차를 따르세요.

  1. 메인 페이지 오른쪽 위의 관리 아이콘을 클릭하세요. 관리 페이지가 열립니다.
  2. 왼쪽 메뉴에서 툴 & 템플릿 > 헬름차트 메뉴를 클릭하세요.
  3. 헬름차트 목록에서 수정하려는 헬름차트 카드를 클릭하세요. 헬름차트 상세 페이지가 열립니다.
  4. 오른쪽 아래의 수정 버튼을 클릭 하세요.
  5. 정보를 수정한 후 저장 버튼을 클릭해서 수정을 완료하세요.

헬름차트 버전 추가하기

헬름차트 버전을 추가하기 위해서는 차트 업로드하기를 통해 버전만 다른 동일한 차트가 미리 등록되어 있어야 합니다.

헬름차트의 버전을 추가하려면 다음 절차를 따르세요.

  1. 메인 페이지 오른쪽 위의 관리 아이콘을 클릭하세요. 관리 페이지가 열립니다.
  2. 왼쪽 메뉴에서 툴 & 템플릿 > 헬름차트 메뉴를 클릭하세요.
  3. 헬름차트 목록에서 수정하려는 헬름차트 카드를 클릭하세요. 헬름차트 상세 페이지가 열립니다.
  4. 오른쪽 아래의 버전 추가 버튼을 클릭하세요. 헬름차트 버전 추가 팝업창이 열립니다.
  5. 정보를 입력한 후 저장 버튼을 클릭해서 버전 추가를 완료하세요.
    항목설명
    차트 버전추가할 차트 버전을 선택
    • 차트 저장소에 등록된 차트 중 헬름차트로 등록되지 않은 차트의 버전이 보여집니다.
    표. 헬름차트 버전 추가 설정 항목

헬름차트 삭제하기

헬름차트를 삭제하려면 다음 절차를 따르세요.

  1. 메인 페이지 오른쪽 위의 관리 아이콘을 클릭하세요. 관리 페이지가 열립니다.
  2. 왼쪽 메뉴에서 툴 & 템플릿 > 헬름차트 메뉴를 클릭하세요. 헬름차트 페이지가 열립니다.
  3. 헬름차트 목록에서 삭제하려는 헬름차트 카드를 클릭하세요. 헬름차트 상세 페이지가 열립니다.
  4. 오른쪽 아래의 삭제 버튼을 클릭하세요.
  5. 확인 팝업창에서 확인 버튼을 클릭해서 삭제를 완료하세요.

1 - Form 입력을 지원하는 헬름차트 작성하기

사용자는 Form 입력을 지원하는 헬름차트를 작성할 수 있습니다.

참고
Helm 3 이상의 버전에서만 사용 가능합니다.

Form 입력을 지원하는 헬름차트

Form 입력을 지원하는 헬름차트를 사용해서 헬름인스톨을 하면 각 항목을 입력할 수 있는 사용자 UI가 제공됩니다.

헬름차트 파일 구성 및 values.schema.json 파일

헬름차트 파일 구성

Form 입력을 지원하기 위해서는 기본적인 헬름차트의 파일 구성에 values.schema.json 파일이 추가로 필요합니다.

헬름차트 디렉토리 구조
그림. 헬름차트 디렉토리 구조

values.schema.json 과 values.yaml 파일의 관계

values.schema.json 과 values.yaml 파일의 관계
그림. values.schema.json 과 values.yaml 파일의 관계

values.schema.json

  • values.yaml 파일에 입력된 값을 validation 하기 위해 JSON Schema로 정의한 파일입니다.
  • DevOps Console에서는 JSON Schema의 기능에 더해 화면에 Form을 표시하고 사용자가 쉽게 입력할 수 있도록 기능을 추가 하였습니다.

JSON Schema 기본

DevOps Console에서 사용하는 values.schema.json 파일은 JSON Schema에서 정의한 표준 포맷을 지원하고 있습니다.

참고

표준 포맷에 대한 자세한 가이드는 아래 사이트를 참고하세요.

기본적인 속성에 대한 설명은 다음과 같습니다.

속성Description데이터 타입허용 값
$schemastringhttp://json-schema.org/schema#
type데이터 타입
  • 데이터 타입에 따라 default rendering form이 결정 됨
string
  • string
    • 문자열을 입력받는 input field를 생성
    • oneOf, enum 존재시 combobox 렌더링
    • render가 password인 경우 input password 렌더링
  • number
    • 정수+실수를 입력받는 input field 생성
  • integer
    • 정수를 입력받는 input field 생성
  • object
    • properties와 함께, form 그룹을 정의
    • 계층형 구조 처리를 위해 사용
  • array
    • 다건의 데이터를 입력받을 수 있는 input field 목록 렌더링
  • boolean
    • 체크박스 렌더링
  • null
title라벨string항목의 라벨 정의
descriptiondescriptionstringtooltip으로 표시 됨
readOnlyread only 여부boolean
  • default: false
  • 생성된 form이 read only로 표시됨
required필수 입력 항목 목록arraye.g, "required": ["username", "password"]
표. JSON Schema 속성 항목

DevOps Console에서 정의한 항목

아래 항목은 DevOps Console에서 정의한 항목으로 DevOps Console에서만 유효하게 동작합니다.

속성Description데이터 타입허용 값
formDevOps Console 화면 표시 여부
  • true로 지정한 경우에만 화면에 Form으로 표시
booleandefault: false
render렌더러 변경string
  • password: Form 에서 암호 등 특수한 처리(마스킹)를 해야 하는 경우에 사용
formatstring format reference 참고string
  • ip, hostname, uri 등: JSON Schema에서 기본으로 제공되는 포맷을 입력할 수 있음
  • password_confirm: 암호 확인용 input field 생성
form_locale국제화 처리를 위해 정의
  • 설정된 로케일이 없을 경우, 기본 속성값을 사용
  • 국문(ko)/영문(en) 지원
object
  • ko
    • label
    • description
  • en
    • label
    • description
표. DevOps Console에서 정의한 항목

계층형 처리

계층형 구조를 처리하기 위해서 JSON Schema는 "type": "object" 속성 값과 properties 라는 속성을 정의할 수 있습니다.
하위 속성의 경우는 properties 항목 하위에 정의합니다.

아래는 service.internalPort 속성을 정의한 예시입니다.

배경색 변경
"service": {
    "type": "object",
    "form": true,
    "properties": {
        "internalPort": {
            "type": "number",
            "title": "Container Port",
            "description": "HTTP port to expose at container level",
            "form": true
        }
<중략>
"service": {
    "type": "object",
    "form": true,
    "properties": {
        "internalPort": {
            "type": "number",
            "title": "Container Port",
            "description": "HTTP port to expose at container level",
            "form": true
        }
<중략>
계층형 처리 예시

국제화 처리

국제화 처리를 위해서는 form_locale 속성을 사용하고 아래와 같이 정의합니다.

국문/영문을 지원하고 있습니다.

배경색 변경
"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"
    }
  }
}
국제화 처리 예시

values.schema.json 작성 예제

Form 유형별 예제

Input

values.schema.json 파일에 정의된 필드를 화면에 form으로 보여주기 위해서는 form 필드의 값을 true로 설정해 주어야 합니다.

배경색 변경
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "form_field": {
      "type": "string", <--- 문자열을 입력받는 input field 생성
      "form": true <----- true 시 화면에 표시
    },
    "hide_field": {  <-- 미표시
      "type": "string"
    }
  }
}
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "form_field": {
      "type": "string", <--- 문자열을 입력받는 input field 생성
      "form": true <----- true 시 화면에 표시
    },
    "hide_field": {  <-- 미표시
      "type": "string"
    }
  }
}
Input 처리 예시

Password

배경색 변경
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "password_field": {
      "type": "string",
      "form": true,
      "render": "password", <---- password 로 표시
      "format": "password_confirm" <--- password 확인 입력창 추가 시
    }
  }
}
{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "password_field": {
      "type": "string",
      "form": true,
      "render": "password", <---- password 로 표시
      "format": "password_confirm" <--- password 확인 입력창 추가 시
    }
  }
}
Password 처리 예시

Checkbox

배경색 변경
"enabled": {
  "title": "enable persistence",
  "type": "boolean",
  "form": true
}
"enabled": {
  "title": "enable persistence",
  "type": "boolean",
  "form": true
}
Checkbox 처리 예시

Dropdown 필드를 화면에 표시하고 허용값을 지정하기 위해서, enum 과 oneOf 속성을 이용할 수 있습니다.

enum

화면에 표시되는 텍스트와 저장되는 값이 동일한 경우 사용합니다.

배경색 변경
"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 처리 예시

oneOf

화면에 표시되는 텍스트와 저장되는 값을 각각 다르게 할 경우 사용합니다.

배경색 변경
"Oneof": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in",  <-- 선택시 yaml 파일에 저장되는 값
      "title": "internal" <-- dropdown form에 표시되는 값
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true
}
"Oneof": {
  "type": "string",
  "title": "DB",
  "description": "choose db type",
  "oneOf": [
    {
      "const": "in",  <-- 선택시 yaml 파일에 저장되는 값
      "title": "internal" <-- dropdown form에 표시되는 값
    },
    {
      "const": "ex",
      "title": "external"
    }
  ],
  "form": true
}
oneOf 처리 예시

Array

배경색 변경
"Array": {
  "type": "array",
  "items": {
    "type": "string",
    "form": true
  },
  "form": true
}
"Array": {
  "type": "array",
  "items": {
    "type": "string",
    "form": true
  },
  "form": true
}
Array 처리 예시

Object Array

배경색 변경
"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 처리 예시

values.schema.json 전체 파일 작성 예제

system-nginx

배경색 변경
{
    "$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 전체 파일 작성 예제