3장. 애플리케이션 생성


3.1. 템플릿 사용

템플릿을 사용하여 사전 구성된 애플리케이션을 배포하고 OpenShift Container Platform 클러스터에서 재사용 가능한 오브젝트 정의를 생성할 수 있습니다. 웹 콘솔 또는 CLI 템플릿을 업로드, 인스턴스화 및 작성하여 애플리케이션 생성을 빨라냅니다.

3.1.1. 템플릿 이해

템플릿을 사용하여 OpenShift Container Platform에서 Service 및 DeploymentConfig 오브젝트와 같은 리소스로 처리하는 재사용 가능한 매개변수화된 오브젝트 세트를 설명할 수 있습니다. 템플릿을 사용하면 웹 콘솔 또는 CLI 동일한 애플리케이션 구조를 일관되게 배포할 수 있습니다.

템플릿을 처리하여 프로젝트 내에서 생성할 권한이 있는 모든 항목을 생성할 수 있습니다. 템플릿은 템플릿에 정의된 모든 오브젝트에 적용할 레이블 세트를 정의할 수도 있습니다.

3.1.2. 템플릿 업로드

OpenShift Container Platform 프로젝트에 템플릿을 추가하려면 CLI 사용하여 JSON 또는 YAML 템플릿 파일을 업로드합니다. 업로드된 템플릿은 해당 프로젝트에 액세스할 수 있는 사용자가 재사용할 수 있도록 프로젝트 템플릿 라이브러리에 저장됩니다.

프로세스

  • 다음 방법 중 하나를 사용하여 템플릿을 업로드합니다.

    • 다음 명령을 실행하여 현재 프로젝트의 템플릿 라이브러리에 JSON 또는 YAML 템플릿 파일을 업로드합니다.

      $ oc create -f <filename>
    • 다음 명령을 실행하여 프로젝트 이름과 -n 옵션을 사용하여 템플릿을 다른 프로젝트에 업로드합니다.

      $ oc create -f <filename> -n <project>

      이제 웹 콘솔 또는 CLI를 사용하여 템플릿을 선택할 수 있습니다.

3.1.3. 웹 콘솔을 사용하여 애플리케이션 생성

OpenShift Container Platform 클러스터의 템플릿에서 애플리케이션을 생성하려면 웹 콘솔 개발자 카탈로그를 사용합니다. 템플릿 또는 빌더 이미지를 선택하고 배포하기 전에 생성된 오브젝트를 구성합니다.

프로세스

  1. 프로젝트로 이동하여 +추가를 클릭합니다.
  2. 개발자 카탈로그 타일에서 모든 서비스를 클릭합니다.
  3. 유형에서 빌더 이미지를 클릭하여 사용 가능한 빌더 이미지를 확인합니다.

    참고

    여기 설명된 것처럼 주석에 builder 태그가 표시된 이미지 스트림 태그만 이 목록에 나타납니다. 웹 콘솔에 이미지 스트림 태그가 빌더로 표시되도록 태그 주석에 builder를 포함합니다.

    kind: "ImageStream"
    apiVersion: "image.openshift.io/v1"
    metadata:
      name: "ruby"
      creationTimestamp: null
    spec:
    # ...
      tags:
        - name: "2.6"
          annotations:
            description: "Build and run Ruby 2.6 applications"
            iconClass: "icon-ruby"
            tags: "builder,ruby"
            supports: "ruby:2.6,ruby"
            version: "2.6"
    # ...
  4. 새 애플리케이션 화면에서 설정을 수정하여 애플리케이션을 지원하도록 오브젝트를 구성합니다.

3.1.4. CLI를 사용하여 템플릿에서 오브젝트 생성

CLI 사용하여 템플릿을 프로젝트의 오브젝트 목록으로 처리하여 OpenShift Container Platform 클러스터의 템플릿에서 오브젝트를 생성할 수 있습니다. CLI 명령을 사용하여 템플릿 레이블, 매개변수 및 생성된 오브젝트 목록을 관리합니다.

3.1.4.1. 레이블 추가

OpenShift Container Platform 클러스터에서 템플릿을 처리할 때 레이블을 추가하려면 레이블 선택기를 oc process 명령에 전달합니다. 템플릿에 지정된 레이블은 템플릿에서 생성된 모든 오브젝트에 적용됩니다.

레이블은 pod 같은 생성된 오브젝트를 관리하고 구성하는 데 사용됩니다.

프로세스

  • 다음 명령을 실행하여 템플릿에 라벨을 추가합니다.

    $ oc process -f <filename> -l name=otherLabel

3.1.4.2. 매개변수 나열

OpenShift Container Platform 클러스터에서 템플릿 매개변수를 나열하여 템플릿을 처리하기 전에 덮어쓸 수 있는 값을 확인할 수 있습니다. 템플릿 파일 또는 업로드된 템플릿 이름과 함께 oc process --parameters 명령을 사용합니다.

프로세스

  • 다음 명령을 실행하여 로컬 템플릿 파일에서 템플릿 매개변수를 나열합니다.

    $ oc process --parameters -f <filename>
  • 다음 명령을 실행하여 업로드된 템플릿의 템플릿 매개변수를 나열합니다.

    $ oc process --parameters -n <project> <template_name>

    예를 들어 기본 openshift 프로젝트에서 rails-postgresql-example 퀵 스타트 템플릿의 매개변수를 나열하려면 다음 명령을 실행합니다.

    $ oc process --parameters -n openshift rails-postgresql-example

    출력 예

    NAME                         DESCRIPTION                                                                                              GENERATOR           VALUE
    SOURCE_REPOSITORY_URL        The URL of the repository with your application source code                                                                  https://github.com/sclorg/rails-ex.git
    SOURCE_REPOSITORY_REF        Set this to a branch name, tag or other ref of your repository if you are not using the default branch
    CONTEXT_DIR                  Set this to the relative path to your project if it is not in the root of your repository
    APPLICATION_DOMAIN           The exposed hostname that will route to the Rails service                                                                    rails-postgresql-example.openshiftapps.com
    GITHUB_WEBHOOK_SECRET        A secret string used to configure the GitHub webhook                                                     expression          [a-zA-Z0-9]{40}
    SECRET_KEY_BASE              Your secret key for verifying the integrity of signed cookies                                            expression          [a-z0-9]{127}
    APPLICATION_USER             The application user that is used within the sample application to authorize access on pages                                 openshift
    APPLICATION_PASSWORD         The application password that is used within the sample application to authorize access on pages                             secret
    DATABASE_SERVICE_NAME        Database service name                                                                                                        postgresql
    POSTGRESQL_USER              database username                                                                                        expression          user[A-Z0-9]{3}
    POSTGRESQL_PASSWORD          database password                                                                                        expression          [a-zA-Z0-9]{8}
    POSTGRESQL_DATABASE          database name                                                                                                                root
    POSTGRESQL_MAX_CONNECTIONS   database max connections                                                                                                     10
    POSTGRESQL_SHARED_BUFFERS    database shared buffers                                                                                                      12MB

    출력에서는 템플릿이 처리될 때 생성기와 같이 정규식으로 생성되는 여러 매개변수를 식별합니다.

3.1.4.3. 오브젝트 목록 생성

OpenShift Container Platform 클러스터에서 템플릿이 생성하는 오브젝트를 미리 보려면 템플릿을 적용하지 않고 템플릿에서 oc process를 실행합니다. 프로젝트에 리소스를 생성하기 전에 생성된 오브젝트 목록을 검토하고 파일에 저장합니다.

프로세스

  • 템플릿 정의 파일을 처리하여 오브젝트 목록을 표준 출력으로 반환할 수 있습니다.

    $ oc process -f <filename>
  • 다음 명령을 실행하여 현재 프로젝트에서 업로드된 템플릿을 처리하여 오브젝트 목록을 표준 출력으로 반환합니다.

    $ oc process <template_name>
  • 템플릿을 처리하고 출력을 oc create로 파이핑하여 다음 명령을 실행하여 oc create에서 오브젝트를 생성합니다.

    $ oc process -f <filename> | oc create -f -
  • 템플릿을 처리하고 다음 명령을 실행하여 출력을 oc create로 파이핑하여 현재 프로젝트에서 업로드된 템플릿에서 오브젝트를 생성합니다.

    $ oc process <template> | oc create -f -
  • 재정의하려는 각 <name>=<value> 쌍에 -p 옵션을 추가하여 파일에 정의된 매개변수 값을 재정의할 수 있습니다. 매개변수 참조는 템플릿 항목 내의 텍스트 필드에 표시될 수 있습니다.

    예를 들어 다음에서는 템플릿의 POSTGRESQL_USER 및 POSTGRESQL_DATABASE 매개변수가 재정의되어 사용자 정의된 환경 변수가 있는 구성을 출력합니다.

    • 다음 명령을 실행하여 템플릿에서 오브젝트 목록을 생성합니다.

      $ oc process -f my-rails-postgresql \
          -p POSTGRESQL_USER=bob \
          -p POSTGRESQL_DATABASE=mydatabase
    • 다음 명령을 실행하여 처리된 출력에서 오브젝트를 생성합니다.

      $ oc process -f my-rails-postgresql \
          -p POSTGRESQL_USER=bob \
          -p POSTGRESQL_DATABASE=mydatabase \
          | oc create -f -
      참고

      JSON 출력을 파일로 리디렉션하거나 oc create 명령으로 템플릿을 파이핑하여 템플릿을 업로드하지 않고 직접 적용할 수 있습니다.

    • 많은 수의 매개변수가 있는 경우 파일에 저장한 후 해당 파일을 oc process로 전달할 수 있습니다.

      $ cat postgres.env
      $ oc process -f my-rails-postgresql --param-file=postgres.env

      출력 예

      POSTGRESQL_USER=bob
      POSTGRESQL_DATABASE=mydatabase

    • 다음 명령을 실행하여 "-"를 --param-file 옵션 값으로 지정하여 표준 입력에서 매개변수 값을 읽을 수도 있습니다.

      $ sed s/bob/alice/ postgres.env | oc process -f my-rails-postgresql --param-file=-

3.1.5. 업로드된 템플릿 수정

OpenShift Container Platform 프로젝트에 이미 저장된 템플릿을 업데이트하려면 템플릿 오브젝트를 편집하고 기존 버전을 교체합니다. 업데이트된 템플릿은 프로젝트 템플릿 라이브러리에서 재사용할 수 있습니다.

프로세스

  • 다음 명령을 실행하여 이미 업로드된 템플릿을 수정합니다.

    $ oc edit template <template>

3.1.6. 인스턴트 앱 및 빠른 시작 템플릿 사용

OpenShift Container Platform 클러스터의 instant-app 템플릿에서 샘플 애플리케이션을 시도하려면 템플릿에서 애플리케이션을 생성하고 템플릿의 소스 리포지토리를 선택적으로 분기합니다. 빌드 구성을 사용자 정의하여 변경 사항을 테스트하고 애플리케이션을 다시 빌드합니다.

OpenShift Container Platform은 다양한 기본 즉시 앱 및 퀵 스타트 템플릿을 제공하므로 다양한 언어를 위한 새 애플리케이션 생성을 쉽게 시작할 수 있습니다. Rails(Ruby), Django(Python), Node.js, CakePHP(PHP) 및 Dancer(Perl)에 대한 템플릿이 제공됩니다. 클러스터 관리자가 기본 글로벌 openshift 프로젝트에서 이러한 템플릿을 생성한 경우 해당 템플릿에 액세스할 수 있습니다.

기본적으로 템플릿은 필요한 애플리케이션 코드가 포함된 GitHub의 공용 소스 리포지터리를 사용하여 빌드합니다.

프로세스

  1. 다음 명령을 실행하여 사용 가능한 기본 Instant App 및 퀵 스타트 템플릿을 나열합니다.

    $ oc get templates -n openshift
  2. 소스를 수정하고 자체 애플리케이션 버전을 빌드하려면 다음을 수행합니다.

    1. 템플릿의 기본 SOURCE_REPOSITORY_URL 매개변수에서 참조하는 리포지터리를 포크합니다.
    2. 템플릿에서 생성하는 경우 기본값 대신 포크를 지정하여 SOURCE_REPOSITORY_URL 매개변수 값을 재정의합니다.

      이렇게 하면 템플릿에서 생성한 빌드 구성이 이제 애플리케이션 코드의 포크를 가리킵니다. 그런 다음 코드를 수정하고 필요에 따라 애플리케이션을 다시 빌드할 수 있습니다.

      참고

      일부 인스턴트 앱 및 퀵 스타트 템플릿은 데이터베이스 DeploymentConfig 구성을 정의합니다. 정의된 구성은 데이터베이스 컨텐츠에 ephemeral 스토리지를 사용합니다. 어떤 이유로든 데이터베이스 pod가 다시 시작되면 데이터베이스 데이터가 모두 손실되므로 이러한 템플릿은 설명용으로만 사용해야 합니다.

3.1.6.1. 퀵 스타트 템플릿

OpenShift Container Platform 클러스터에서 샘플 Instant App 및 퀵 스타트 템플릿을 찾으려면 openshift 프로젝트의 기본 템플릿을 검토합니다. 이러한 템플릿을 사용하여 공통 언어 및 프레임워크에 대한 예제 애플리케이션을 배포합니다.

퀵 스타트 템플릿은 OpenShift Container Platform에서 실행되는 애플리케이션의 기본 예입니다. 빠른 시작은 다양한 언어와 프레임워크로 제공되며 템플릿은 일련의 Service, BuildConfig 및 DeploymentConfig 오브젝트로 구성됩니다. 이 템플릿은 애플리케이션을 빌드하고 배포하는 데 필요한 이미지 및 소스 리포지터리를 참조합니다.

관리자가 이미 OpenShift Container Platform 클러스터에 이러한 템플릿을 이미 설치했을 수 있으며, 이 경우 간단히 웹 콘솔에서 선택할 수 있습니다.

퀵 스타트는 애플리케이션 소스 코드가 포함된 소스 리포지터리를 나타냅니다. 퀵 스타트를 사용자 정의하려면 리포지터리를 포크하고 템플릿에서 애플리케이션을 생성할 때 기본 소스 리포지토리 이름을 분기된 리포지터리로 대체합니다. 그러면 제공된 소스 예 대신 소스 코드를 사용하여 수행되는 빌드가 생성됩니다. 그런 다음, 소스 리포지터리에서 코드를 업데이트하고 새 빌드를 시작하여 배포된 애플리케이션에 변경 사항이 반영된 것을 확인할 수 있습니다.

3.1.6.1.1. 웹 프레임워크 퀵 스타트 템플릿

이러한 퀵 스타트 템플릿은 표시된 프레임워크 및 언어의 기본 애플리케이션을 제공합니다.

  • CakePHP: PHP 웹 프레임워크(MySQL 데이터베이스 포함)
  • Dancer: Perl 웹 프레임워크(MySQL 데이터베이스 포함)
  • Django: Python 웹 프레임워크(PostgreSQL 데이터베이스 포함)
  • NodeJS: NodeJS 웹 애플리케이션(MongoDB 데이터베이스 포함)
  • Rails: Ruby 웹 프레임워크(PostgreSQL 데이터베이스 포함)

3.1.7. 템플릿 작성

OpenShift Container Platform 클러스터에서 재사용 가능한 애플리케이션 템플릿을 정의하려면 배포할 리소스와 생성을 안내하는 메타데이터를 나열하는 Template 오브젝트를 생성합니다.

다음 샘플 YAML을 사용하여 자체 템플릿을 작성하기 전에 구조를 검토합니다.

apiVersion: template.openshift.io/v1
kind: Template
metadata:
  name: redis-template
  annotations:
    description: "Description"
    iconClass: "icon-redis"
    tags: "database,nosql"
objects:
- apiVersion: v1
  kind: Pod
  metadata:
    name: redis-master
  spec:
    containers:
    - env:
      - name: REDIS_PASSWORD
        value: ${REDIS_PASSWORD}
      image: dockerfile/redis
      name: master
      ports:
      - containerPort: 6379
        protocol: TCP
parameters:
- description: Password used for Redis authentication
  from: '[A-Z0-9]{8}'
  generate: expression
  name: REDIS_PASSWORD
labels:
  redis: master

3.1.7.1. 템플릿 설명 작성

사용자가 웹 콘솔에서 템플릿을 찾아 이해할 수 있도록 표시 이름, 태그, 아이콘 클래스와 같은 설명 메타데이터를 추가합니다. 이 참조의 주석을 문서 용도, 경고 및 지원 링크에 사용합니다.

다음은 템플릿 설명 메타데이터의 예입니다.

kind: Template
apiVersion: template.openshift.io/v1
metadata:
  name: cakephp-mysql-example
  annotations:
    openshift.io/display-name: "CakePHP MySQL Example (Ephemeral)"
    description: >-
      An example CakePHP application with a MySQL database. For more information
      about using this template, including OpenShift considerations, see
      https://github.com/sclorg/cakephp-ex/blob/master/README.md.


      WARNING: Any data stored will be lost upon pod destruction. Only use this
      template for testing."
    openshift.io/long-description: >-
      This template defines resources needed to develop a CakePHP application,
      including a build configuration, application DeploymentConfig, and
      database DeploymentConfig.  The database is stored in
      non-persistent storage, so this configuration should be used for
      experimental purposes only.
    tags: "quickstart,php,cakephp"
    iconClass: icon-php
    openshift.io/provider-display-name: "Red Hat, Inc."
    openshift.io/documentation-url: "https://github.com/sclorg/cakephp-ex"
    openshift.io/support-url: "https://access.redhat.com"
message: "Your admin credentials are ${ADMIN_USERNAME}:${ADMIN_PASSWORD}"

다음과 같습니다.

metadata.name
템플릿의 고유한 이름을 지정합니다.
metadata.annotations.openshift.io/display-name
사용자 인터페이스에서 사용할 수 있는 간단하고 사용자에게 친숙한 이름입니다.
metadata.annotations.description
템플릿에 대한 설명을 지정합니다. 사용자가 배포 사항을 이해할 수 있도록 충분한 세부 정보와 배포 전에 알아야 할 경고 사항을 포함합니다. README 파일과 같은 추가 정보에 대한 링크도 제공해야 합니다. 한 줄 구분을 포함하여 단락을 생성할 수 있습니다.
metadata.annotations.openshift.io/long-description
추가 템플릿 설명을 지정합니다. 서비스 카탈로그에 의해 표시될 수 있습니다.
metadata.annotations.tags
검색 및 그룹화에 필요한 템플릿과 연관된 태그를 지정합니다. 템플릿을 제공된 카탈로그 카테고리 중 하나로 그룹화하는 태그를 추가합니다. 콘솔 상수 파일에 있는 CATALOG_CATEGORIES의 id 및 categoryAliases를 참조합니다. 카테고리는 전체 클러스터에 맞게 사용자 정의할 수도 있습니다.
metadata.annotations.iconClass

웹 콘솔에서 템플릿과 함께 표시되는 아이콘입니다.

다음은 사용 가능한 아이콘 목록입니다.

  • icon-3scale
  • icon-aerogear
  • icon-amq
  • icon-angularjs
  • icon-ansible
  • icon-apache
  • icon-beaker
  • icon-camel
  • icon-capedwarf
  • icon-cassandra
  • icon-catalog-icon
  • icon-clojure
  • icon-codeigniter
  • icon-cordova
  • icon-datagrid
  • icon-datavirt
  • icon-debian
  • icon-decisionserver
  • icon-django
  • icon-dotnet
  • icon-drupal
  • icon-eap
  • icon-elastic
  • icon-erlang
  • icon-fedora
  • icon-freebsd
  • icon-git
  • icon-github
  • icon-gitlab
  • icon-glassfish
  • icon-go-gopher
  • icon-golang
  • icon-grails
  • icon-hadoop
  • icon-haproxy
  • icon-helm
  • icon-infinispan
  • icon-jboss
  • icon-jenkins
  • icon-jetty
  • icon-joomla
  • icon-jruby
  • icon-js
  • icon-knative
  • icon-kubevirt
  • icon-laravel
  • icon-load-balancer
  • icon-mariadb
  • icon-mediawiki
  • icon-memcached
  • icon-mongodb
  • icon-mssql
  • icon-mysql-database
  • icon-nginx
  • icon-nodejs
  • icon-openjdk
  • icon-openliberty
  • icon-openshift
  • icon-openstack
  • icon-other-linux
  • Ironic-other-known
  • icon-perl
  • icon-phalcon
  • icon-php
  • icon-play
  • iconpostgresql
  • icon-processserver
  • icon-python
  • icon-quarkus
  • icon-rabbitmq
  • icon-rails
  • icon-redhat
  • icon-redis
  • icon-rh-integration
  • icon-rh-spring-boot
  • icon-rh-tomcat
  • icon-ruby
  • icon-scala
  • icon-serverlessfx
  • icon-shadowman
  • icon-spring-boot
  • icon-spring
  • icon-sso
  • icon-stackoverflow
  • icon-suse
  • icon-symfony
  • icon-tomcat
  • icon-ubuntu
  • icon-vertx
  • icon-wildfly
  • icon-windows
  • icon-wordpress
  • icon-xamarin
  • icon-zend
metadata.annotations.openshift.io/provider-display-name
템플릿을 제공하는 사람 또는 조직의 이름을 지정합니다.
metadata.annotations.openshift.io/documentation-url
템플릿에 대한 추가 문서를 참조하는 URL을 지정합니다.
metadata.annotations.openshift.io/support-url
템플릿에 대한 지원을 받을 수 있는 URL을 지정합니다.
message
이 템플릿이 인스턴스화될 때 표시되는 지시 메시지를 지정합니다. 이 필드는 새로 생성된 리소스 사용 방법을 사용자에게 알려주어야 합니다. 생성된 인증 정보 및 기타 매개변수가 출력에 포함될 수 있도록 표시 전에 메시지에서 매개변수 대체가 수행됩니다. 사용자가 따라야 하는 다음 단계 문서에 대한 링크를 포함합니다.

3.1.7.2. 템플릿 레이블 작성

템플릿에서 생성된 모든 오브젝트에 레이블을 지정하려면 템플릿 정의에 라벨 섹션을 추가합니다. 사용자가 템플릿에서 생성된 리소스를 식별하고 관리할 수 있도록 매개변수화된 라벨을 사용합니다.

다음은 템플릿 오브젝트 레이블의 예입니다.

kind: "Template"
apiVersion: "v1"
...
labels:
  template: "cakephp-mysql-example"
  app: "${NAME}"

다음과 같습니다.

labels.template
이 템플릿에서 생성된 모든 오브젝트에 적용되는 레이블을 지정합니다.
labels.app
이 템플릿에서 생성된 모든 오브젝트에 적용되는 매개변수화된 레이블을 지정합니다. 매개변수 확장은 레이블 키와 값 둘 다에서 수행됩니다.

3.1.7.3. 템플릿 매개변수 작성

템플릿을 처리할 때 사용자 지정하려면 기본값 또는 생성된 값으로 매개변수를 정의하고 템플릿 필드에서 해당 매개변수를 참조합니다. 문자열 또는 JSON 대체 구문을 사용하여 사용자별 값을 생성된 오브젝트에 전달합니다.

매개 변수를 사용하면 템플릿을 인스턴스화할 때 값을 제공하거나 생성할 수 있습니다. 그러면 해당 값이 매개변수가 참조될 때마다 대체됩니다. 참조는 오브젝트 목록 필드의 어떤 필드에서든 정의할 수 있습니다. 임의의 암호를 생성하거나 템플릿을 사용자 정의하는 데 필요한 호스트 이름 또는 기타 사용자 특정 값을 제공할 수 있는 데 유용합니다. 매개변수는 다음 두 가지 방법으로 참조할 수 있습니다.

  • 템플릿에 있는 임의의 문자열 필드에 ${PARAMETER_NAME} 형식의 값을 배치하여 문자열 값으로 참조합니다.
  • 템플릿에서 임의의 필드 대신 ${{PARAMETER_NAME}} 형식의 값을 배치하여 JSON 또는 YAML 값으로 참조합니다.

${PARAMETER_NAME} 구문을 사용하는 경우 여러 매개변수 참조가 단일 필드에서 결합될 수 있으며 참조는 "http://${PARAMETER_1}${PARAMETER_2}" 같이 고정된 데이터에 내에 포함될 수 있습니다. 매개변수 값이 둘 다 대체되며 결과 값은 인용된 문자열이 됩니다.

${{PARAMETER_NAME}} 구문을 사용하는 경우 단일 매개변수 참조만 허용되며 선행 및 후행 문자는 허용되지 않습니다. 대체가 수행된 후 결과가 유효한 JSON 오브젝트인 경우 결과 값이 인용되지 않습니다. 결과가 유효한 JSON 값이 아닌 경우 결과 값이 인용되고 표준 문자열로 처리됩니다.

단일 매개변수는 템플릿 내에서 여러 번 참조될 수 있으며 단일 템플릿 내에서 두 대체 구문을 사용하여 참조될 수도 있습니다.

다른 값을 제공하지 않은 경우 사용되는 기본값을 제공할 수 있습니다.

다음은 명시적 값을 기본값으로 설정하는 예입니다.

parameters:
  - name: USERNAME
    description: "The user name for Joe"
    value: joe

매개변수 값은 매개변수 정의에 지정된 규칙을 기반으로 생성할 수도 있습니다.

parameters:
  - name: PASSWORD
    description: "The random user password"
    generate: expression
    from: "[a-zA-Z0-9]{12}"

이전 예에서 처리가 완료되면 모든 대문자 및 소문자 영문자와 숫자로 구성된 12자 길이의 임의의 암호가 생성됩니다.

사용 가능한 구문은 완전한 정규식 구문이 아닙니다. 하지만 \w, \d, \a, and \A 수정자를 사용할 수 있습니다.

  • [\w]{10} 은 10개의 영문자, 숫자 및 밑줄을 생성합니다. 이는 PCRE 표준을 따르며 [a-zA-Z0-9_]{10} 과 동일합니다.
  • [\D]{10} 은 10개의 숫자를 생성합니다. [0-9]{10} 과 동일합니다.
  • [\a]{10} 은 10개의 알파벳 문자를 생성합니다. [a-zA-Z]{10} 과 동일합니다.
  • [\a]{10} 은 10개의 구두점 또는 기호 문자를 생성합니다. 이는 [~!@#$%\^&*()\-_+={}\[\]\\|<,>.?/"';:`]{10}과 동일합니다.
참고

템플릿이 YAML 또는 JSON으로 작성되었는지에 따라 두 번째 백슬래시를 사용하여 백슬래시를 이스케이프해야 할 수 있습니다. 또한 수정자가 포함된 문자열 유형에 따라 달라집니다. 다음 예에서와 같습니다.

수정자가 포함된 YAML 템플릿 예

  parameters:
  - name: singlequoted_example
    generate: expression
    from: '[\A]{10}'
  - name: doublequoted_example
    generate: expression
    from: "[\\A]{10}"

수정자가 포함된 JSON 템플릿 예

{
    "parameters": [
       {
        "name": "json_example",
        "generate": "expression",
        "from": "[\\A]{10}"
       }
    ]
}

다음은 매개변수 정의 및 참조가 포함된 전체 템플릿의 예입니다.

kind: Template
apiVersion: template.openshift.io/v1
metadata:
  name: my-template
objects:
  - kind: BuildConfig
    apiVersion: build.openshift.io/v1
    metadata:
      name: cakephp-mysql-example
      annotations:
        description: Defines how to build the application
    spec:
      source:
        type: Git
        git:
          uri: "${SOURCE_REPOSITORY_URL}"
          ref: "${SOURCE_REPOSITORY_REF}"
        contextDir: "${CONTEXT_DIR}"
  - kind: DeploymentConfig
    apiVersion: apps.openshift.io/v1
    metadata:
      name: frontend
    spec:
      replicas: "${{REPLICA_COUNT}}"
parameters:
  - name: SOURCE_REPOSITORY_URL
    displayName: Source Repository URL
    description: The URL of the repository with your application source code
    value: https://github.com/sclorg/cakephp-ex.git
    required: true
  - name: GITHUB_WEBHOOK_SECRET
    description: A secret string used to configure the GitHub webhook
    generate: expression
    from: "[a-zA-Z0-9]{40}"
  - name: REPLICA_COUNT
    description: Number of replicas to run
    value: "2"
    required: true
message: "... The GitHub webhook secret is ${GITHUB_WEBHOOK_SECRET} ..."

다음과 같습니다.

spec. git.uri
값은 템플릿이 인스턴스화될 때 SOURCE_REPOSITORY_URL 매개변수 값으로 교체됩니다.
spec.replicas
템플릿을 처리할 때 인용되지 않은 REPLICA_COUNT 매개변수 값으로 교체할 값을 지정합니다.
parameters.name
매개변수 이름을 지정합니다. 이 값은 템플릿 내에서 매개변수를 참조하는 데 사용됩니다.
parameters.displayName
사용자에게 친숙한 매개변수 이름입니다. 이는 사용자에게 표시됩니다.
parameters.description
매개변수에 대한 설명을 지정합니다. 예상 값에 대한 제약 조건을 비롯하여 매개변수의 목적에 대한 자세한 정보를 제공합니다. 설명은 콘솔의 텍스트 표준을 따르는 완전한 문장을 사용해야 합니다. 표시 이름과 중복되지 않게 하십시오.
parameters.value
템플릿을 재정의할 때 사용자가 값을 재정의하지 않는 경우 사용되는 매개변수의 기본값을 지정합니다. 암호 등에 기본값을 사용하지 말고 생성된 매개변수를 시크릿과 조합하여 사용하십시오.
parameters.necessary
이 매개변수가 필수임을 나타냅니다. 즉, 빈 값으로 이 매개변수를 재정의할 수 없습니다. 매개변수가 기본값 또는 생성된 값을 제공하지 않으면 값을 제공해야 합니다.
parameters.generate
매개변수 값이 생성되도록 지정합니다.
parameters.from
생성기에 대한 입력을 지정합니다. 이 경우 생성기는 대문자 및 소문자를 포함하여 40자 길이의 영숫자 값을 생성합니다.
message
매개변수가 템플릿 메시지에 포함될 수 있습니다. 이 필드는 생성된 값에 대해 알려줍니다.

3.1.7.4. 템플릿 오브젝트 목록 작성

처리 시 템플릿이 생성되는 항목을 지정하려면 배포할 API 리소스가 있는 오브젝트 목록을 정의합니다. 매개변수 값은 생성 전에 각 오브젝트 정의로 대체됩니다.

다음은 오브젝트 목록의 예입니다.

kind: "Template"
apiVersion: "v1"
metadata:
  name: my-template
objects:
  - kind: "Service"
    apiVersion: "v1"
    metadata:
      name: "cakephp-mysql-example"
      annotations:
        description: "Exposes and load balances the application pods"
    spec:
      ports:
        - name: "web"
          port: 8080
          targetPort: 8080
      selector:
        name: "cakephp-mysql-example"

다음과 같습니다.

objects.kind
이 템플릿에서 생성된 서비스의 정의를 지정합니다.
참고

오브젝트 정의 메타데이터에 고정된 namespace 필드 값이 포함된 경우 템플릿을 인스턴스화하는 동안 이 필드가 정의에서 제거됩니다. 네임스페이스 필드에 매개변수 참조가 포함된 경우 일반 매개변수 대체가 수행되고 결과 네임스페이스에 오브젝트가 생성됩니다. 이를 위해서는 사용자에게 해당 네임스페이스에서 오브젝트를 생성할 수 있는 권한이 있어야 합니다.

3.1.7.5. 템플릿을 바인딩 가능으로 표시

최종 사용자가 템플릿에서 프로비저닝한 서비스에 바인딩하지 않도록 하려면 template.openshift.io/bindable: "false" 주석을 템플릿 오브젝트에 추가합니다. 기본적으로 Template Service Broker는 각 템플릿 서비스를 서비스 카탈로그에서 바인딩 가능한 것으로 공개합니다.

프로세스

  • 일반 사용자가 지정된 템플릿에서 template.openshift.io/bindable: "false" 주석을 바인딩하지 않도록 합니다.

3.1.7.6. 템플릿 오브젝트 필드 노출

사용자가 템플릿 서비스에 바인딩할 때 연결 세부 정보를 반환하려면 ConigMap, Secret, Service 또는 Route 오브젝트에 template.openshift.io/expose- 또는 template.openshift.io/base64-expose- 주석을 추가합니다. 바인딩 클라이언트는 필요한 자격 증명과 엔드 포인트를 직접 수신합니다.

접두사가 제거된 각 주석 키는 전달되어 bind 응답의 키가 됩니다.

각 주석 값은 Kubernetes JSONPath 표현식이며, 바인딩 시 이를 해석하여 bind 응답에서 값을 반환해야 하는 오브젝트 필드를 식별합니다.

참고

백슬래시로 이스케이프하지 않는 한 Kubernetes의 JSONPath 구현은 ., @ 및 기타 문자를 표현식의 위치와 관계없이 메타 문자로 해석합니다. 따라서 예를 들어 my.key라는 ConfigMap 데이터를 참조하려면 필요한 JSONPath 표현식은 {.data['my\.key']}입니다. JSONPath 표현식이 YAML로 작성되는 방법에 따라 추가 백슬래시가 필요할 수도 있습니다(예: "{.data['my\\.key']}").

다음은 노출되는 다양한 오브젝트 필드의 예입니다.

kind: Template
apiVersion: template.openshift.io/v1
metadata:
  name: my-template
objects:
- kind: ConfigMap
  apiVersion: v1
  metadata:
    name: my-template-config
    annotations:
      template.openshift.io/expose-username: "{.data['my\\.username']}"
  data:
    my.username: foo
- kind: Secret
  apiVersion: v1
  metadata:
    name: my-template-config-secret
    annotations:
      template.openshift.io/base64-expose-password: "{.data['password']}"
  stringData:
    password: <password>
- kind: Service
  apiVersion: v1
  metadata:
    name: my-template-service
    annotations:
      template.openshift.io/expose-service_ip_port: "{.spec.clusterIP}:{.spec.ports[?(.name==\"web\")].port}"
  spec:
    ports:
    - name: "web"
      port: 8080
- kind: Route
  apiVersion: route.openshift.io/v1
  metadata:
    name: my-template-route
    annotations:
      template.openshift.io/expose-uri: "http://{.spec.host}{.spec.path}"
  spec:
    path: mypath
참고

Bind 응답 키/값 쌍은 시스템의 다른 부분에서 환경 변수로 사용될 수 있습니다. 따라서 접두사가 제거된 각 주석 키는 유효한 환경 변수 이름이어야 합니다. 유효한 이름은 문자 A-Z, a-z 또는 _로 시작한 다음 0개 이상의 문자 A-Z, a-z, 0-9 또는 _로 시작합니다.

위의 부분적인 템플릿을 기반으로 하는 bind 작업에 대한 응답 예는 다음과 같습니다.

{
  "credentials": {
    "username": "foo",
    "password": "YmFy",
    "service_ip_port": "172.30.12.34:8080",
    "uri": "http://route-test.router.default.svc.cluster.local/mypath"
  }
}

프로세스

  • template.openshift.io/expose- 주석을 사용하여 필드 값을 문자열로 반환합니다. 이 방법에서는 임의의 바이너리 데이터를 처리하지 않습니다.
  • 바이너리 데이터를 반환하려면 template.openshift.io/base64-expose- 주석을 사용하여 데이터를 반환하기 전에 base64로 인코딩합니다.

3.1.7.7. 템플릿 준비 상태 대기

주요 리소스가 준비될 때까지 템플릿에서 리소스를 생성을 지연하려면 지원되는 오브젝트 종류에 template.alpha.openshift.io/wait-for-ready: "true" 주석을 추가합니다. 서비스 카탈로그, Template Service Broker 및 TemplateInstance API에서 주석이 달린 오브젝트가 보고될 때까지 기다립니다.

절차를 시작하기 전에 다음 고려 사항을 확인하십시오.

  • 메모리, CPU 및 스토리지 기본 크기를 설정하여 애플리케이션에 원활한 실행을 충분히 제공되도록 합니다.
  • latest 태그가 주요 버전 간에 사용되는 경우 이미지의 해당 태그를 참조하지 마십시오. 새 이미지를 해당 태그로 푸시하면 실행 중인 애플리케이션이 중단될 수도 있습니다.
  • 좋은 템플릿은 템플릿 배포 후 수정할 필요 없이 깔끔하게 빌드되고 배포됩니다.

프로세스

  • 템플릿 기능을 사용하려면 템플릿에서 Build,BuildConfig,Deployment,DeploymentConfig,Job 또는 StatefulSet 유형의 하나 이상의 오브젝트를 다음 주석으로 표시하십시오.

    "template.alpha.openshift.io/wait-for-ready": "true"

    주석이 표시된 모든 오브젝트가 준비되었다고 보고할 때까지 템플릿에서 리소스를 생성하는 작업이 완료되지 않습니다. 마찬가지로 주석이 있는 오브젝트 보고서 중 실패하는 보고서가 있거나 템플릿이 1시간이라는 고정된 제한 시간 내에 준비되지 않으면 템플릿에서 리소스를 생성하지 못합니다.

    템플릿에서 리소스를 생성할 때 각 오브젝트 종류의 준비 및 실패는 다음과 같이 정의됩니다.

    유형준비실패

    Build

    오브젝트가 완료 단계 보고

    오브젝트가 취소, 오류 또는 실패 단계 보고

    BuildConfig

    관련된 최신 빌드 오브젝트가 완료 단계 보고

    관련된 최신 빌드 오브젝트가 취소, 오류 또는 실패 단계 보고

    Deployment

    오브젝트는 사용 가능한 새 복제본 세트 및 배포를 보고합니다. 이 명령은 오브젝트에 정의된 준비 상태 프로브를 따릅니다.

    오브젝트가 진행 상태를 False로 보고

    DeploymentConfig

    오브젝트가 사용 가능한 새 복제 컨트롤러 및 배포를 보고합니다. 이 명령은 오브젝트에 정의된 준비 상태 프로브를 따릅니다.

    오브젝트가 진행 상태를 False로 보고

    작업

    오브젝트가 완료 보고

    오브젝트가 하나 이상의 실패가 발생했음을 보고

    StatefulSet

    오브젝트가 준비된 모든 복제본을 보고합니다. 이 명령은 오브젝트에 정의된 준비 상태 프로브를 따릅니다.

    해당 없음

    다음은 wait-for-ready 주석을 사용하는 템플릿 추출의 예입니다. 더 많은 예는 OpenShift Container Platform 퀵 스타트 템플릿에서 찾을 수 있습니다.

    kind: Template
    apiVersion: template.openshift.io/v1
    metadata:
      name: my-template
    objects:
    - kind: BuildConfig
      apiVersion: build.openshift.io/v1
      metadata:
        name: ...
        annotations:
          # wait-for-ready used on BuildConfig ensures that creating resources from the template
          # fails immediately if the build fails
          template.alpha.openshift.io/wait-for-ready: "true"
      spec:
        ...
    - kind: DeploymentConfig
      apiVersion: apps.openshift.io/v1
      metadata:
        name: ...
        annotations:
          template.alpha.openshift.io/wait-for-ready: "true"
      spec:
        ...
    - kind: Service
      apiVersion: v1
      metadata:
        name: ...
      spec:
        ...

3.1.7.8. 기존 오브젝트에서 템플릿 생성

프로젝트의 기존 오브젝트에서 템플릿을 생성하려면 해당 오브젝트를 내보내고 매개변수 및 기타 템플릿 사용자 지정을 추가합니다. 배포된 리소스를 재사용하면 사용자가 템플릿에서 일관되게 배포할 수 있는 작동 구성을 캡처할 수 있습니다.

프로세스

  • 다음 명령을 실행하여 프로젝트의 오브젝트를 내보냅니다.

    $ oc get -o yaml all > <yaml_filename>

    all을 사용하지 않고 특정 리소스 유형 또는 여러 리소스를 대체할 수도 있습니다. 더 많은 예를 보려면 oc get -h를 실행하십시오.

    oc get -o yaml all에 포함된 오브젝트 유형은 다음과 같습니다.

    • BuildConfig
    • Build
    • DeploymentConfig
    • ImageStream
    • Pod
    • ReplicationController
    • 경로
    • Service

      참고

      all 별칭을 사용하는 것은 다른 클러스터 및 버전마다 내용이 다를 수 있으므로 권장되지 않습니다. 대신 필요한 모든 리소스를 지정합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동