이미지 사용


OpenShift Container Platform 3.11

이미지 사용에 대한 OpenShift Container Platform 3.11 가이드

초록

이 주제를 사용하여 OpenShift Container Platform 3.11 사용자가 사용할 수 있는 다른 S2I(Source-to-Image), 데이터베이스 및 Docker 이미지를 확인합니다.

1장. 개요

이 주제를 사용하여 OpenShift Container Platform 사용자가 사용할 수 있는 다양한 S2I(Source-to-Image), 데이터베이스 및 기타 컨테이너 이미지를 알아봅니다.

Red Hat의 공식 컨테이너 이미지는 registry.redhat.io의 Red Hat Registry에 제공되어 있습니다. OpenShift Container Platform의 지원되는 S2I, 데이터베이스 및 Jenkins 이미지는 Red Hat Registry의 openshift3 리포지토리에 제공됩니다. 예를 들어 Atomic OpenShift Application Platform 이미지의 registry.redhat.io/openshift3/ose 입니다.

xPaaS 미들웨어 이미지는 Red Hat Registry의 해당 제품 리포지토리에 제공되지만 -openshift 접미사가 지정됩니다. 예를 들어 JBoss EAP 이미지의 registry.redhat.io/jboss-eap-6/eap64-openshift 입니다.

이 문서에서 다루는 모든 Red Hat 지원 이미지는 Red Hat Container Catalog 에 설명되어 있습니다. 각 이미지의 모든 버전에 대한 콘텐츠와 사용법 세부 정보를 찾아볼 수 있습니다. 관심 있는 이미지를 찾아보거나 검색하십시오.

중요

최신 버전의 컨테이너 이미지는 이전 버전의 OpenShift Container Platform과 호환되지 않습니다. 사용 중인 OpenShift Container Platform 버전에 따라 올바른 버전의 컨테이너 이미지를 확인하고 사용하십시오.

2장. S2I(Source-to-Image)

2.1. 개요

이 주제 그룹에는 OpenShift Container Platform 사용자가 사용할 수 있는 다양한 S2I(Source-to-Image) 지원 이미지에 대한 정보가 포함되어 있습니다.

2.2. Java

2.2.1. 개요

OpenShift Container Platform은 Java 애플리케이션을 빌드하기 위한 S2I 빌더 이미지를 제공합니다. 이 빌더 이미지는 애플리케이션 소스 또는 바이너리 아티팩트를 사용하고, 소스가 제공된 경우 Maven을 사용하여 소스를 빌드하고 필요한 종속성과 아티팩트를 어셈블하여 Java 애플리케이션이 포함된 새로운 즉시 실행 가능한 이미지를 생성합니다. 이 결과 이미지는 OpenShift Container Platform에서 실행하거나 Docker를 사용하여 직접 실행할 수 있습니다.

빌더 이미지는 기본 클래스를 통해 실행되는 Maven- 기반 Java 독립 실행형 프로젝트와 함께 사용하도록 설계되었습니다.

2.2.2. 버전

Java S2I 빌더 이미지의 현재 버전은 OpenJDK 1.8 및 11, Jolokia 1.6.2 및 Maven 3.6을 지원합니다.

2.2.3. 이미지

RHEL 7 및 RHEL 8 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

참고

registry.redhat.io 에는 인증이 필요합니다. registry.redhat.io 용으로 환경을 구성하는 방법에 대한 자세한 내용은 Red Hat Container Registry Authentication 을 참조하십시오.

RHEL 7 기반 이미지

$ docker pull registry.redhat.io/redhat-openjdk-18/openjdk18-openshift
$ docker pull registry.redhat.io/openjdk/openjdk-11-rhel7

RHEL 8 기반 이미지

$ docker pull registry.redhat.io/ubi8/openjdk-8
$ docker pull registry.redhat.io/ubi8/openjdk-11

OpenShift Container Platform에서 이러한 이미지를 사용하려면 Red Hat Registry에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그런 다음 OpenShift Container Platform 리소스에서 이미지 스트림 정의를 참조할 수 있습니다.

2.2.4. 빌드 프로세스

S2I는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.

  1. 빌더 이미지에서 컨테이너를 시작합니다.
  2. 애플리케이션 소스를 다운로드합니다.
  3. 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
  4. 빌더 이미지에서 assemble 스크립트를 실행합니다.
  5. 최종 이미지를 저장합니다.

빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.

2.2.5. 설정

기본적으로 Java S2I 빌더 이미지는 Maven을 사용하여 다음 목표 및 옵션으로 프로젝트를 빌드합니다.

mvn -e -Popenshift -DskipTests -Dcom.redhat.xpaas.repo.redhatga -Dfabric8.skip=true --batch-mode -Djava.net.preferIPv4Stack=true -s /tmp/artifacts/configuration/settings.xml -Dmaven.repo.local=/tmp/artifacts/m2  package

이러한 기본값을 기반으로 빌더 이미지는 프로젝트를 컴파일하고 테스트를 실행하지 않고 모든 전환 종속 항목을 출력 디렉터리에 복사합니다. 또한 프로젝트에 openshift 라는 프로필이 있는 경우 빌드에 대해 활성화됩니다.

다음 환경 변수를 지정하여 이러한 기본 목표 및 옵션을 재정의할 수 있습니다.

변수 이름설명

MAVEN_S2I_ARTIFACT_DIRS

DEPLOY_DIR 에 복사되는 빌드 출력을 스캔할 소스 디렉터리의 상대 경로입니다. 기본값은 target 입니다.

JAVA_MAIN_CLASS

Java 에 대한 인수로 사용할 기본 클래스 입니다. 이 환경 변수가 지정되면 JAVA_APP_DIR 의 모든 JAR 파일이 classpath 및 JAVA_LIB_DIR 에 추가됩니다.

MAVEN_ARGS

mvn 명령에 전달되는 인수입니다. 이 변수를 정의하면 -e -Popenshift -DskipTests -Dcom.redhat.xpaas.repo.redhatga 패키지 인 기본값이 대체됩니다.

MAVEN_ARGS_APPEND

추가 Maven 인수입니다.

이는 OpenJDK 컨테이너의 동작을 구성하는 데 사용할 수 있는 환경 변수를 선택합니다. 자세한 내용은 2.2.9절. “Java 환경 변수” 에서 참조하십시오.

2.2.6. Java 애플리케이션 빌드 및 배포

중요

먼저 OpenJDK 이미지 스트림을 설치해야 합니다. 표준 설치를 실행한 경우 이미지 스트림이 표시됩니다.

동일한 S2I 빌더 이미지를 사용하여 소스 또는 바이너리 아티팩트에서 Java 애플리케이션을 빌드할 수 있습니다.

2.2.7. 소스에서 빌드 및 배포

Java S2I 빌더 이미지는 소스 리포지토리에 대해 oc new-app 을 실행하여 소스에서 애플리케이션을 빌드하는 데 사용할 수 있습니다.

$ oc new-app registry.redhat.io/redhat-openjdk-18/openjdk18-openshift~https://github.com/jboss-openshift/openshift-quickstarts --context-dir=undertow-servlet

기본적으로 테스트는 실행되지 않습니다. 애플리케이션을 빌드하고 빌드의 일부로 테스트를 실행하려면 다음 명령에 표시된 대로 기본 MAVEN_ARGS 를 재정의합니다.

$ oc new-app registry.redhat.io/redhat-openjdk-18/openjdk18-openshift~<git_repo_URL> --context-dir=<context_dir> --build-env='MAVEN_ARGS=-e -Popenshift -Dcom.redhat.xpaas.repo.redhatga package'

Java 프로젝트가 여러 Maven 모듈로 구성된 경우 아티팩트 출력 디렉터리를 명시적으로 지정하는 것이 유용할 수 있습니다. Maven 프로젝트에서 아티팩트를 출력하는 디렉터리를 지정하면 S2I 빌드가 이를 가져올 수 있습니다.

빌드할 모듈을 지정하고 아티팩트 출력 디렉터리를 지정하려면 다음 명령을 사용합니다.

$ oc new-app registry.redhat.io/redhat-openjdk-18/openjdk18-openshift~<git_repo_URL> --context-dir=<context_dir> --build-env='MAVEN_S2I_ARTIFACT_DIRS=relative/path/to/artifacts/dir' --build-env='MAVEN_ARGS=install -pl <groupId>:<artifactId> -am'

2.2.8. Binary Artifacts에서 빌드 및 배포

Java S2I 빌더 이미지를 사용하여 제공하는 바이너리 아티팩트를 사용하여 애플리케이션을 빌드할 수 있습니다.

  1. 새 바이너리 빌드를 생성합니다.

    $ oc new-build --name=<application_name> registry.redhat.io/redhat-openjdk-18/openjdk18-openshift --binary=true
  2. 빌드를 시작하고 로컬 머신의 바이너리 아티팩트 경로를 지정합니다.

    $ oc start-build <application_name> --from-dir=/path/to/artifacts --follow
  3. 애플리케이션을 생성합니다.

    $ oc new-app <application_name>

2.2.9. Java 환경 변수

다음 표에서는 OpenJDK 컨테이너의 동작을 구성하는 데 사용되는 Java 환경 변수의 포괄적인 목록을 제공합니다.

표 2.1. 구성 환경 변수
변수 이름설명예시 값

AB_JOLOKIA_CONFIG

설정하는 경우 Jolokia 참조 매뉴얼 에 설명된 대로 Jolokia JVM 에이전트 속성으로 경로를 포함하여 이 파일을 사용합니다. 설정되지 않은 경우, /opt/jolokia/etc/jolokia.properties 는 설명서에 정의된 설정을 사용하여 생성됩니다. 그렇지 않으면 이 문서의 나머지 설정이 무시됩니다.

/opt/jolokia/custom.properties

AB_JOLOKIA_DISCOVERY_ENABLED

Jolokia discovery를 활성화합니다. 기본값은 false입니다.

true

AB_JOLOKIA_HOST

바인딩할 호스트 주소입니다. 기본값은 0.0.0.0 입니다.

127.0.0.1

AB_JOLOKIA_ID

사용할 에이전트 ID입니다. 기본값은 컨테이너 ID인 $HOSTNAME 입니다.

openjdk-app-1-xqlsj

AB_JOLOKIA_OFF

설정된 경우 Jolokia의 활성화를 비활성화합니다(예: 빈 값을 에코). 기본적으로 Jolokia는 활성화되어 있습니다.

true

AB_JOLOKIA_OPTS

에이전트 구성에 추가할 추가 옵션입니다. key=value,key=value,…​ 형식으로 지정해야 합니다.

backlog=20

AB_JOLOKIA_PASSWORD

기본 인증에 대한 암호입니다. 기본적으로 인증이 꺼집니다.

mypassword

AB_JOLOKIA_PORT

수신 대기할 포트입니다. 기본값은 8778 입니다.

5432

AB_JOLOKIA_USER

기본 인증에 사용되는 사용자입니다. 기본값은 jolokia 입니다.

MyUserName

AB_PROMETHEUS_ENABLE

Prometheus 에이전트 사용을 활성화합니다.

true

AB_PROMETHEUS_JMX_EXPORTER_PORT

Prometheus 10.3 Exporter에 사용할 포트입니다.

9799

CONTAINER_CORE_LIMIT

CFS Bandwidth Control 에 설명된 대로 계산된 코어 제한입니다.

2

CONTAINER_MAX_MEMORY

컨테이너에 지정된 메모리 제한입니다.

1024

GC_ADAPTIVE_SIZE_POLICY_WEIGHT

현재 GC 시간에 지정된 가중치와 이전 GC 시간 비교

90

GC_CONTAINER_OPTIONS

사용할 Java GC를 지정합니다. 이 변수의 값에는 -XX:+UseParallelOldGC 의 기본값을 재정의하는 데 필요한 GC를 지정하는 데 필요한 idrac 명령행 인터페이스 옵션이 포함되어야 합니다.

-XX:+UseG1GC

GC_MAX_HEAP_FREE_RATIO

축소를 방지하기 위해 GC 뒤의 최대 힙 백분율입니다.

40

GC_MAX_METASPACE_SIZE

최대 메타 공간 크기입니다.

100

GC_METASPACE_SIZE

초기 메타 공간 크기입니다.

20

GC_MIN_HEAP_FREE_RATIO

확장을 방지하기 위해 GC 후에 여유 힙의 최소 백분율입니다.

20

GC_TIME_RATIO

가비지 컬렉션 외부에서 소비된 시간(예: 애플리케이션 실행에 사용된 시간)을 가비지 수집에서 소비한 시간(예: 가비지 수집에서 소비한 시간)을 지정합니다.

4

HTTPS_PROXY

https 프록시의 위치입니다. 이는 http_proxyHTTP_PROXY 보다 우선하며 Maven 빌드 및 Java 런타임 모두에 사용됩니다.

myuser@127.0.0.1:8080

HTTP_PROXY

http 프록시의 위치입니다. 이는 Maven 빌드 및 Java 런타임 모두에 사용됩니다.

127.0.0.1:8080

JAVA_APP_DIR

애플리케이션이 상주하는 디렉터리입니다. 애플리케이션의 모든 경로는 이 디렉터리를 기준으로 합니다.

myapplication/`

JAVA_ARGS

Java 애플리케이션에 전달된 인수 입니다.

-

JAVA_CLASSPATH

사용할 classpath입니다. 지정하지 않으면 시작 스크립트는 JAVA_APP_DIR/classpath 파일을 확인하고 문자 그대로 해당 콘텐츠를 classpath로 사용합니다. 이 파일이 없으면 앱 디렉터리의 모든 JAR이 추가됩니다. (Class:JAVA_APP_DIR/*)입니다.

-

JAVA_DEBUG

설정되어 있으면 원격 디버깅이 설정됩니다. 기본적으로 비활성되어 있습니다.

true

JAVA_DEBUG_PORT

원격 디버깅에 사용되는 포트입니다. 기본값은 5005 입니다.

8787

JAVA_DIAGNOSTICS

문제가 발생할 때 표준 출력에 일부 진단 정보를 가져오도록 이 변수를 설정합니다. 기본적으로 비활성되어 있습니다.

true

JAVA_INITIAL_MEM_RATIO

JAVA_OPTS-Xms 옵션이 제공되지 않을 때 사용됩니다. 이는 최대 힙 메모리를 기반으로 기본 초기 힙 메모리를 계산하는 데 사용됩니다. 컨테이너에 메모리 제약 조건이 없는 컨테이너에서 사용하는 경우 이 옵션은 적용되지 않습니다. 메모리 제약 조건이 있는 경우 -Xms 는 여기에 설정된 -Xmx 메모리의 비율로 설정됩니다. 기본값은 25 이며, -Xmx 의 25%는 초기 힙 크기로 사용됩니다. 이 값을 0 으로 설정하여 이 메커니즘을 건너뛸 수 있습니다. 이 경우 -Xms 옵션이 추가되지 않습니다.

25

JAVA_LIB_DIR

Java JAR 파일을 포함하는 디렉토리 및 classpath 파일을 단일 줄 클래스 경로(colon separated)로 보유하거나 명령줄에 대한 JAR 파일(line-by-line)을 사용하여 classpath를 보유하고 있습니다. 설정하지 않는 경우 JAVA_LIB_DIRJAVA_APP_DIR 과 동일합니다.

-

JAVA_MAIN_CLASS

Java 에 대한 인수로 사용할 기본 클래스 입니다. 이 환경 변수가 지정되면 JAVA_APP_DIR 의 모든 JAR 파일이 classpath 및 JAVA_LIB_DIR 에 추가됩니다.

com.example.MainClass

JAVA_MAX_INITIAL_MEM

JAVA_OPTS-Xms 옵션이 제공되지 않을 때 사용됩니다. 초기 힙 메모리의 최대 값을 계산하는 데 사용됩니다. 컨테이너에 메모리 제약 조건이 없는 컨테이너에서 사용하는 경우 이 옵션은 적용되지 않습니다. 메모리 제약 조건이 있는 경우 -Xms 는 여기에 설정된 값으로 제한됩니다. 기본값은 4096 MB이며, 이는 계산된 -Xms 값이 4096MB보다 크지 않음을 의미합니다. 이 변수의 값은 MB로 표시됩니다.

4096

JAVA_MAX_MEM_RATIO

JAVA_OPTS-Xmx 옵션이 제공되지 않을 때 사용됩니다. 이는 컨테이너 제한에 따라 기본 최대 힙 메모리를 계산하는 데 사용됩니다. 컨테이너에 메모리 제약 조건이 없는 컨테이너에서 사용하는 경우 이 옵션은 적용되지 않습니다. 메모리 제약 조건이 있는 경우 -Xmx 는 여기에 설정된 컨테이너 사용 가능한 메모리의 비율로 설정됩니다. 기본값은 50 이며, 이는 사용 가능한 메모리의 50%가 상한 경계로 사용됩니다. 이 값을 0 으로 설정하여 이 메커니즘을 건너뛸 수 있습니다. 이 경우 -Xmx 옵션이 추가되지 않습니다.

-

JAVA_OPTS

Java 명령에 JVM 옵션이 전달됩니다.

-verbose:class

JAVA_OPTS_APPEND

JAVA_OPTS 의 생성된 옵션에 사용자 지정 Java 옵션이 추가됩니다.

-Dsome.property=foo

LOGGING_SCRIPT_DEBUG

스크립트 디버깅을 활성화하려면 true 로 설정합니다. SCRIPT_DEBUG 사용 중단

true

MAVEN_ARGS

Maven을 호출할 때 사용할 인수는 기본 패키지 hawt-app:build -DskipTests -e 를 대체합니다. 패키지 실행 단계에 아직 바인딩되지 않은 경우 hawt-app:build 목표를 실행해야 합니다. 그렇지 않으면 시작 스크립트가 작동하지 않습니다.

-e -Popenshift -DskipTests -Dcom.redhat.xpaas.repo.redhatga 패키지

MAVEN_ARGS_APPEND

추가 Maven 인수입니다.

-X -am -pl

MAVEN_CLEAR_REPO

설정된 경우 아티팩트가 빌드된 후 Maven 리포지토리가 제거됩니다. 생성된 애플리케이션 이미지를 작게 유지하는 데 유용하지만 증분 빌드는 방지할 수 있습니다. 이 변수는 S2I_ENABLE_INCREMENTAL_BUILDS 로 재정의됩니다. 기본값은 false입니다.

-

MAVEN_LOCAL_REPO

로컬 Maven 리포지토리로 사용할 디렉터리입니다.

/home/jboss/.m2/repository

MAVEN_MIRRORS

설정된 경우 다중 미러 지원이 활성화되고 기타 MAVEN_MIRROR_* 변수 접두사가 붙습니다. 예를 들어 DEV_ONE_MAVEN_MIRROR_URLQE_TWO_MAVEN_MIRROR_URL.

dev-one,qe-two

MAVEN_MIRROR_URL

아티팩트를 검색하는 데 사용되는 미러의 기본 URL입니다.

http://10.0.0.1:8080/repository/internal/

MAVEN_REPOS

설정된 경우 multi-repo 지원이 활성화되고 기타 MAVEN_REPO_* 변수가 접두사가 붙습니다. 예를 들어 DEV_ONE_MAVEN_REPO_URLQE_TWO_MAVEN_REPO_URL.

dev-one,qe-two

MAVEN_S2I_ARTIFACT_DIRS

DEPLOY_DIR 에 복사되는 빌드 출력을 스캔할 소스 디렉터리의 상대 경로입니다. 기본값은 target 입니다.

대상

MAVEN_S2I_GOALS

maven 빌드와 함께 실행할 수 있는 공백으로 구분된 대상 목록입니다. 예를 들어 mvn $MAVEN_S2I_GOALS. 기본값은 패키지 입니다.

패키지 설치

MAVEN_SETTINGS_XML

사용할 사용자 지정 Maven settings.xml 파일의 위치입니다.

/home/jboss/.m2/settings.xml

NO_PROXY

직접 액세스할 수 있는 쉼표로 구분된 호스트, IP 주소 또는 도메인 목록입니다. 이는 Maven 빌드 및 Java 런타임 모두에 사용됩니다.

foo.example.com,bar.example.com

S2I_ARTIFACTS_DIR

증분 빌드에 사용되는 save-artifacts 스크립트와 함께 유지되는 아티팩트의 위치 마운트입니다. 이는 최종 사용자가 재정의해서는 안 됩니다.

${S2I_DESTINATION_DIR}/artifacts}

S2I_DESTINATION_DIR

io.openshift.s2i.destination 라벨에 지정된 대로 S2I 마운트용 루트 디렉터리입니다. 이는 최종 사용자가 재정의해서는 안 됩니다.

/tmp

S2I_ENABLE_INCREMENTAL_BUILDS

향후 빌드에 사용할 수 있도록 소스 및 중간 빌드 파일을 제거하지 마십시오. 기본값은 true 입니다.

true

S2I_IMAGE_SOURCE_MOUNTS

이미지에 포함되어야 하는 소스 디렉토리에 있는 상대 경로의 쉼표로 구분된 목록입니다. 목록에는 find를 사용하여 확장된 와일드카드가 포함될 수 있습니다. 기본적으로 마운트된 디렉터리의 콘텐츠는 소스 폴더와 유사하게 처리됩니다. 여기서 S2I_SOURCE_CONFIGURATION_DIR,S2I_SOURCE_DATA_DIRS2I_SOURCE_DEPLOYMENTS_DIR 은 각각의 대상 디렉터리에 복사됩니다. 또는 install.sh 파일이 마운트 지점의 루트에 있는 경우 대신 실행됩니다. CUSTOM_INSTALL_DIRECTORIES 사용 중단

extras/*

S2I_SOURCE_CONFIGURATION_DIR

제품 구성 디렉토리에 복사할 애플리케이션 구성 파일이 포함된 디렉터리의 상대 경로는 S2I_TARGET_CONFIGURATION_DIR 을 참조하십시오. 기본값은 configuration 입니다.

configuration

S2I_SOURCE_DATA_DIR

제품 데이터 디렉토리에 복사할 애플리케이션 데이터 파일이 포함된 디렉터리의 상대 경로는 S2I_TARGET_DATA_DIR 을 참조하십시오. 기본값은 data 입니다.

data

S2I_SOURCE_DEPLOYMENTS_DIR

제품 배포 디렉토리에 복사할 바이너리 파일이 포함된 디렉터리의 상대 경로는 S2I_TARGET_DEPLOYMENTS_DIR 을 참조하십시오. 기본값은 deployment 입니다.

배포

S2I_SOURCE_DIR

빌드할 소스 코드 마운트 위치. 이는 최종 사용자가 재정의해서는 안 됩니다.

${S2I_DESTINATION_DIR}/src}

S2I_TARGET_CONFIGURATION_DIR

S2I_SOURCE_DIR/S2I_SOURCE_CONFIGURATION_DIR 에 있는 파일의 절대 경로가 복사됩니다.

/opt/eap/standalone/configuration

S2I_TARGET_DATA_DIR

S2I_SOURCE_DIR/S2I_SOURCE_DATA_DIR 에 있는 파일의 절대 경로가 복사됩니다.

/opt/eap/standalone/data

S2I_TARGET_DEPLOYMENTS_DIR

S2I_SOURCE_DIR/S2I_SOURCE_DEPLOYMENTS_DIR 에 있는 파일의 절대 경로가 복사됩니다. 또한 이 디렉터리는 빌드 출력이 복사되는 디렉터리입니다.

/deployments

http_proxy

http 프록시의 위치입니다. 이는 HTTP_PROXY 보다 우선하며 Maven 빌드 및 Java 런타임 모두에 사용됩니다.

http://127.0.0.1:8080

https_proxy

https 프록시의 위치입니다. 이는 HTTPS_PROXY,http_proxyHTTP_PROXY 보다 우선하며 Maven 빌드 및 Java 런타임 모두에 사용됩니다.

myuser:mypass@127.0.0.1:8080

no_proxy

직접 액세스할 수 있는 쉼표로 구분된 호스트, IP 주소 또는 도메인 목록입니다. 이는 NO_PROXY 보다 우선하며 Maven 빌드 및 Java 런타임 모두에 사용됩니다.

*.example.com

prefix_MAVEN_MIRROR_ID

지정된 미러에 사용할 ID입니다. 생략하면 고유한 ID가 생성됩니다.

internal-mirror

prefix_MAVEN_MIRROR_OF

이 항목으로 미러링된 저장소 ID입니다. 기본값은 external: 입니다.

-

prefix_MAVEN_MIRROR_URL

미러의 URL입니다.

http://10.0.0.1:8080/repository/internal

prefix_MAVEN_REPO_DIRECTORY_PERMISSIONS

Maven 리포지토리 디렉터리 권한.

775

prefix_MAVEN_REPO_FILE_PERMISSIONS

Maven 리포지토리 파일 권한.

664

prefix_MAVEN_REPO_HOST

완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 호스트는 서비스로 돌아갑니다.

repo.example.com

prefix_MAVEN_REPO_ID

Maven 리포지토리 ID입니다.

my-repo-id

prefix_MAVEN_REPO_LAYOUT

Maven 리포지토리 레이아웃.

default

prefix_MAVEN_REPO_NAME

Maven 리포지토리 이름입니다.

my-repo-name

prefix_MAVEN_REPO_PASSPHRASE

Maven 리포지토리 암호입니다.

maven1!

prefix_MAVEN_REPO_PASSWORD

Maven 리포지토리 암호입니다.

maven1!

prefix_MAVEN_REPO_PATH

완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 경로는 서비스로 전환됩니다.

/maven2/

prefix_MAVEN_REPO_PORT

완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 포트는 서비스로 돌아갑니다.

8080

prefix_MAVEN_REPO_PRIVATE_KEY

Maven 리포지토리 개인 키.

${user.home}/.ssh/id_dsa

prefix_MAVEN_REPO_PROTOCOL

완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 프로토콜은 서비스로 돌아갑니다.

http

prefix_MAVEN_REPO_RELEASES_CHECKSUM_POLICY

Maven 리포지토리는 체크섬 정책을 릴리스합니다.

warn

prefix_MAVEN_REPO_RELEASES_ENABLED

Maven 리포지토리가 활성화되어 있습니다.

true

prefix_MAVEN_REPO_RELEASES_UPDATE_POLICY

Maven 리포지토리가 업데이트 정책을 릴리스합니다.

always

prefix_MAVEN_REPO_SERVICE

prefix_MAVEN_REPO_URL 이 지정되지 않은 경우 조회할 Maven 리포지토리 서비스입니다.

buscentr-myapp

prefix_MAVEN_REPO_SNAPSHOTS_CHECKSUM_POLICY

Maven 리포지토리 스냅샷 체크섬 정책.

warn

prefix_MAVEN_REPO_SNAPSHOTS_ENABLED

Maven 리포지토리 스냅샷이 활성화됩니다.

true

prefix_MAVEN_REPO_SNAPSHOTS_UPDATE_POLICY

Maven 리포지토리 스냅샷 업데이트 정책.

always

prefix_MAVEN_REPO_URL

Maven 리포지토리가 완전히 정의된 URL입니다.

http://repo.example.com:8080/maven2/

prefix_MAVEN_REPO_USERNAME

Maven 리포지토리 사용자 이름.

mavenUser

표 2.2. 기본값을 사용하는 구성 환경 변수
변수 이름설명

AB_JOLOKIA_AUTH_OPENSHIFT

OpenShift TLS 통신을 위해 클라이언트 인증을 전환합니다. 이 매개 변수의 값은 제시된 클라이언트의 인증서에 포함되어야 하는 상대 고유 이름일 수 있습니다. 이 매개변수를 활성화하면 Jolokia가 https 통신 모드로 자동 전환됩니다. 기본 CA 인증서는 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt 로 설정됩니다.

true

AB_JOLOKIA_HTTPS

https를 사용하여 보안 통신을 전환합니다. 기본적으로 AB_JOLOKIA_OPTSserverCert 구성이 제공되지 않는 경우 자체 서명 서버 인증서가 생성됩니다.

true

AB_JOLOKIA_PASSWORD_RANDOM

임의의 AB_JOLOKIA_PASSWORD 가 생성되었는지 여부를 확인합니다. 임의의 암호를 생성하려면 true 로 설정합니다. 생성된 값은 /opt/jolokia/etc/jolokia.pw 에 작성됩니다.

true

AB_PROMETHEUS_JMX_EXPORTER_CONFIG

Prometheus 10.3 Exporter에 사용할 구성 경로입니다.

/opt/jboss/container/prometheus/etc/jmx-exporter-config.yaml

S2I_SOURCE_DEPLOYMENTS_FILTER

배포를 복사할 때 적용할 공백으로 구분된 필터 목록입니다. 기본값은 * 입니다.

*

2.2.10. 추가 리소스

2.3. .NET Core

2.3.1. .NET Core 사용의 이점

.NET Core 는 자동 메모리 관리 및 최신 프로그래밍 언어를 제공하는 범용 개발 플랫폼입니다..NET Core is a general purpose development platform that provides automatic memory management and modern programming languages. 사용자가 양질의 애플리케이션을 효율적으로 빌드할 수 있습니다. .NET Core는 Red Hat Enterprise Linux (RHEL 7) 및 인증된 컨테이너를 통해 OpenShift Container Platform에서 사용할 수 있습니다. .NET Core는 다음을 제공합니다.

  • 일부 구성 요소가 .NET을 사용하여 빌드되는 마이크로 서비스 기반 접근 방식을 따르는 기능이지만 Java를 사용하여 모두 Red Hat Enterprise Linux 및 OpenShift Container Platform에서 공통으로 지원되는 플랫폼에서 실행할 수 있습니다.
  • Windows에서 새로운 .NET Core 워크로드를 보다 쉽게 개발할 수 있는 용량으로, 고객은 Red Hat Enterprise Linux 또는 Windows Server를 배포하고 실행할 수 있습니다.
  • 기본 인프라는 Windows Server에만 의존하지 않고도 .NET 애플리케이션을 실행할 수 있는 이기종 데이터 센터입니다.
  • OpenShift Container Platform 내에서 .NET, Java, Ruby 및 Python과 같은 널리 사용되는 여러 개발 프레임워크에 액세스할 수 있습니다.

2.3.2. 지원되는 버전

.NET Core 라이프 사이클은 현재 지원되는 .NET Core 버전을 나열합니다.

2.3.3. 이미지

이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

표준 설치를 실행한 경우 dotnet 이미지 스트림이 표시됩니다. 지원되는 최신 버전을 포함하려면 .NET 이미지 스트림을 설치할 수 있습니다.

2.3.4. 빌드 프로세스

S2I는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.

  1. 빌더 이미지에서 컨테이너를 시작합니다.
  2. 애플리케이션 소스를 다운로드합니다.
  3. 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
  4. 빌더 이미지에서 assemble 스크립트를 실행합니다.
  5. 최종 이미지를 저장합니다.

빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.

2.3.5. 환경 변수

.NET Core 이미지는 .NET Core 애플리케이션의 빌드 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.

참고

S2I 빌드 구성 또는 .s2i/environment 파일에서 빌드 동작을 제어하는 환경 변수를 설정하여 빌드 단계에서 사용할 수 있도록 해야 합니다.

표 2.3. NET Core 환경 변수
변수 이름설명기본값

DOTNET_STARTUP_PROJECT

실행할 프로젝트를 선택합니다. 프로젝트 파일(예: csproj 또는 fsproj) 또는 단일 프로젝트 파일이 포함된 폴더여야 합니다.

.

DOTNET_ASSEMBLY_NAME

실행할 어셈블리를 선택합니다.Choose the assembly to run. 여기에는 . DL extension이 포함되어 서는 안 됩니다. 이 값을 csproj (PropertyGroup/AssemblyName)에 지정된 출력 어셈블리 이름으로 설정합니다.

csproj 파일의 이름입니다.

DOTNET_RESTORE_SOURCES

복원 작업 중에 사용되는 NuGet 패키지 소스의 공백으로 구분된 목록을 지정합니다.Specifies the space-separated list of zip package sources used during the restore operation. 이렇게 하면 NuGet.config 파일에 지정된 모든 소스가 재정의됩니다.

 

DOTNET_TOOLS

애플리케이션을 빌드하기 전에 설치할 .NET 도구 목록을 지정합니다. 특정 버전을 설치하려면 패키지 이름 끝에 @<version >을 추가합니다.

 

DOTNET_NPM_TOOLS

애플리케이션을 빌드하기 전에 설치할 NPM 패키지 목록을 지정합니다.

 

DOTNET_TEST_PROJECTS

테스트할 테스트 프로젝트 목록을 지정합니다. 이는 단일 프로젝트 파일이 포함된 프로젝트 파일 또는 폴더여야 합니다. dotnet 테스트는 각 항목에 대해 호출됩니다.

 

DOTNET_CONFIGURATION

디버그 또는 릴리스 모드에서 애플리케이션을 실행합니다.Runs the application in Debug or Release mode. 이 값은 Release 또는 Debug 여야 합니다.

릴리스 버전

DOTNET_VERBOSITY

dotnet 빌드 명령의 세부 정보 표시를 지정합니다.Specifies the verbosity of the dotnet build commands. 설정하는 경우 빌드 시작 시 환경 변수가 인쇄됩니다. 이 변수는 msbuild 상세 정보 표시 값 (q[uiet], m[inimal], n[ormal], d[etailed]diag[nostic]중 하나로 설정할 수 있습니다.

 

HTTP_PROXY, HTTPS_PROXY

애플리케이션을 빌드하고 실행할 때 사용되는 HTTP/HTTPS 프록시를 설정합니다.

 

NPM_MIRROR

사용자 정의 NPM 레지스트리 미러를 사용하여 빌드 프로세스 중 패키지를 다운로드합니다.

 

ASPNETCORE_URLS

이 변수는 이미지에서 노출하는 포트를 사용하도록 ASP.NET Core를 구성하도록 http://*:8080 으로 설정됩니다. 이 변경은 권장되지 않습니다.

http://*:8080

DOTNET_RM_SRC

true 로 설정하면 소스 코드가 이미지에 포함되지 않습니다.

 

DOTNET_SSL_DIRS

신뢰할 추가 SSL 인증서가 있는 폴더 및 파일 목록을 지정하는 데 사용됩니다. 인증서는 빌드 중 실행되는 애플리케이션 및 빌드 후 이미지에서 실행되는 모든 프로세스를 포함하여 빌드된 애플리케이션을 포함하여 신뢰할 수 있습니다. 항목은 소스 리포지토리(예: 인증서)의 / 또는 경로로 시작하는 절대 경로일 수 있습니다.

 

DOTNET_RESTORE_DISABLE_PARALLEL

true 로 설정하면 병렬로 여러 프로젝트 복원을 비활성화합니다. 이렇게 하면 CPU 제한이 낮은 빌드 컨테이너가 실행 중일 때 복원 시간 초과 오류가 줄어듭니다.

false

DOTNET_INCREMENTAL

true 로 설정하면 incremental build를 다시 사용할 수 있도록 TPM 패키지가 유지됩니다.

false

DOTNET_PACK

true 로 설정하면 게시된 애플리케이션이 포함된 /opt/app-root/app. tar.gz 에 tar.gz 파일을 만듭니다.

 

2.3.6. .NET Core 소스에서 애플리케이션 빠르게 배포

중요

.NET 이미지 스트림을 먼저 설치해야 합니다. 표준 설치를 실행한 경우 이미지 스트림이 표시됩니다.

샘플 리포지토리에 대해 oc new-app 을 실행하여 애플리케이션을 빌드하는 데 이미지를 사용할 수 있습니다.

$ oc new-app dotnet:3.1~https://github.com/redhat-developer/s2i-dotnetcore-ex#dotnetcore-3.1 --context-dir app

2.4. Node.js

2.4.1. 개요

OpenShift Container Platform은 Node.js 애플리케이션을 빌드하고 실행하기 위해 S2I 지원 Node.js 이미지를 제공합니다. Node.js S2I 빌더 이미지는 필요한 종속 항목으로 애플리케이션 소스를 어셈블하여 Node.js 애플리케이션이 포함된 새 이미지를 생성합니다. 이 결과 이미지는 OpenShift Container Platform 또는 컨테이너 런타임에서 실행할 수 있습니다.

2.4.2. 버전

현재 OpenShift Container Platform은 Node.js 0.10 버전,46 버전을 제공합니다.

2.4.3. 이미지

이러한 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/openshift3/nodejs-010-rhel7
$ docker pull registry.redhat.io/rhscl/nodejs-4-rhel7

CentOS 7 기반 이미지

이 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull openshift/nodejs-010-centos7

이러한 이미지를 사용하려면 해당 이미지 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 이미지 스트림 정의 예를 찾을 수 있습니다.

2.4.4. 빌드 프로세스

S2I는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.

  1. 빌더 이미지에서 컨테이너를 시작합니다.
  2. 애플리케이션 소스를 다운로드합니다.
  3. 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
  4. 빌더 이미지에서 assemble 스크립트를 실행합니다.
  5. 최종 이미지를 저장합니다.

빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.

2.4.5. 설정

Node.js 이미지는 Node.js 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.

이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 sourceStrategy 정의의 환경 섹션에 정의할 수 있습니다.

새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.

참고

빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.

표 2.4. 개발 모드 환경 변수
변수 이름설명

DEV_MODE

true 로 설정하면 hot deploy를 활성화하고 디버그 포트를 엽니다. 또한 이미지가 개발 모드에 있음을 툴로 표시합니다. 기본값은 false 입니다.

DEBUG_PORT

디버그 포트. DEV_MODE 가 true로 설정된 경우에만 유효합니다. 기본값은 5858입니다.

NPM_MIRROR

사용자 정의 NPM 레지스트리 미러 URL입니다. 모든 NPM 패키지는 빌드 프로세스 중에 미러 링크에서 다운로드됩니다.

2.4.6. 핫 디플로이팅

핫 디플로이먼트를 사용하면 새 S2I 빌드를 생성하지 않고도 애플리케이션을 신속하게 변경하고 배포할 수 있습니다. 애플리케이션 소스 코드에서 수행된 변경 사항을 즉시 선택하려면 DEV_MODE=true 환경 변수를 사용하여 빌드 이미지를 실행해야 합니다.

애플리케이션을 생성하거나 기존 오브젝트의 환경 변수를 업데이트할 때 새 환경 변수를 설정할 수 있습니다.

주의

개발 또는 디버깅 중에 DEV_MODE=true 환경 변수만 사용합니다. 프로덕션 환경에서 사용하는 것은 권장되지 않습니다.

실행 중인 Pod의 소스 코드를 변경하려면 원격 쉘을 컨테이너로 엽니다.

$ oc rsh <pod_id>

실행 중인 컨테이너에 들어가면 현재 디렉터리가 /opt/app-root/src 로 변경됩니다. 여기서 소스 코드가 있습니다.

2.5. Perl

2.5.1. 개요

OpenShift Container Platform은 Perl 애플리케이션을 빌드하고 실행하기 위해 S2I 지원 Perl 이미지를 제공합니다. Perl S2I 빌더 이미지는 필요한 종속성과 애플리케이션 소스를 어셈블하여 Perl 애플리케이션이 포함된 새 이미지를 생성합니다. 이 결과 이미지는 OpenShift Container Platform 또는 컨테이너 런타임에서 실행할 수 있습니다.

2.5.2. 버전

현재 OpenShift Container Platform은 5.16 버전,5.20 및 Perl의 5.24 버전을 지원합니다.

2.5.3. 이미지

이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/openshift3/perl-516-rhel7
$ docker pull registry.redhat.io/rhscl/perl-520-rhel7
$ docker pull registry.redhat.io/rhscl/perl-524-rhel7

CentOS 7 기반 이미지

Perl 5.16의 CentOS 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull openshift/perl-516-centos7

이러한 이미지를 사용하려면 이러한 이미지 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리 로 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그런 다음 OpenShift Container Platformt 리소스에서 ImageStream을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 이미지 스트림 정의 예를 찾을 수 있습니다.

2.5.4. 빌드 프로세스

S2I는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.

  1. 빌더 이미지에서 컨테이너를 시작합니다.
  2. 애플리케이션 소스를 다운로드합니다.
  3. 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
  4. 빌더 이미지에서 assemble 스크립트를 실행합니다.
  5. 최종 이미지를 저장합니다.

빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.

2.5.5. 설정

Perl 이미지는 Perl 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.

이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 sourceStrategy 정의의 환경 섹션에 정의할 수 있습니다.

새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.

참고

빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.

표 2.5. Perl 환경 변수
변수 이름설명

ENABLE_CPAN_TEST

true 로 설정하면 이 변수는 모든 cpan 모듈을 설치하고 테스트를 실행합니다. 기본적으로 모듈 테스트는 해제되어 있습니다.

CPAN_MIRROR

이 변수는 cpanminus가 종속 항목을 설치하는 데 사용하는 미러 URL을 지정합니다. 기본적으로 이 URL은 지정되지 않습니다.

PERL_APACHE2_RELOAD

수정된 Perl 모듈을 자동으로 다시 로드하려면 이 값을 true 로 설정합니다. 기본적으로 자동 다시 로드는 해제됩니다.By default, automatic reloading is turned off.

HTTPD_START_SERVERS

StartServers 지시문은 시작 시 생성된 하위 서버 프로세스 수를 설정합니다. 기본값은 8입니다.

HTTPD_MAX_REQUEST_WORKERS

Apache에서 처리할 동시 요청 수입니다. 기본값은 256이지만 메모리가 제한된 경우 자동으로 감소합니다.

2.5.6. 로그 액세스

액세스 로그는 표준 출력으로 스트리밍되므로 oc logs 명령을 사용하여 볼 수 있습니다. 오류 로그는 oc rsh 명령을 사용하여 컨테이너에 액세스할 수 있는 /tmp/error_log 파일에 저장됩니다.

2.5.7. 핫 디플로이팅

핫 디플로이먼트를 사용하면 새 S2I 빌드를 생성하지 않고도 애플리케이션을 신속하게 변경하고 배포할 수 있습니다. 이 이미지에서 핫 배포를 사용하려면 PERL_APACHE2_RELOAD 환경 변수를 true 로 설정해야 합니다. 예를 들어 oc new-app 명령을 참조하십시오. oc set env 명령을 사용하여 기존 오브젝트의 환경 변수를 업데이트할 수 있습니다.

주의

개발 또는 디버깅 중에만 이 옵션을 사용해야 합니다. 프로덕션 환경에서 이 옵션을 사용하도록 설정하지 않는 것이 좋습니다.

실행 중인 Pod의 소스 코드를 변경하려면 oc rsh 명령을 사용하여 컨테이너를 입력합니다.

$ oc rsh <pod_id>

실행 중인 컨테이너에 들어가면 현재 디렉터리가 /opt/app-root/src 로 설정됩니다. 여기서 소스 코드가 있습니다.

2.6. PHP

2.6.1. 개요

OpenShift Container Platform은 PHP 애플리케이션을 빌드하고 실행하기 위해 S2I 지원 PHP 이미지를 제공합니다. PHP S2I 빌더 이미지는 필요한 종속 항목과 함께 애플리케이션 소스를 어셈블하여 PHP 애플리케이션이 포함된 새 이미지를 생성합니다. 이 결과 이미지는 OpenShift Container Platform 또는 컨테이너 런타임에서 실행할 수 있습니다.

2.6.2. 버전

현재 OpenShift Container Platform은 PHP의 5.5 버전 5.5 ,5.67.0 을 제공합니다.

2.6.3. 이미지

이러한 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/openshift3/php-55-rhel7
$ docker pull registry.redhat.io/rhscl/php-56-rhel7
$ docker pull registry.redhat.io/rhscl/php-70-rhel7

CentOS 7 기반 이미지

PHP 5.5 및 5.6의 CentOS 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull openshift/php-55-centos7
$ docker pull openshift/php-56-centos7

이러한 이미지를 사용하려면 이러한 이미지 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리 로 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다.

제공된 모든 OpenShift Container Platform 이미지의 이미지 스트림 정의 예를 찾을 수 있습니다.

2.6.4. 빌드 프로세스

S2I는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.

  1. 빌더 이미지에서 컨테이너를 시작합니다.
  2. 애플리케이션 소스를 다운로드합니다.
  3. 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
  4. 빌더 이미지에서 assemble 스크립트를 실행합니다.
  5. 최종 이미지를 저장합니다.

빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.

2.6.5. 설정

PHP 이미지는 PHP 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.

이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 sourceStrategy 정의의 환경 섹션에 정의할 수 있습니다.

새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.

참고

빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.

다음 환경 변수는 php.ini 파일에서 동등한 속성 값을 설정합니다.

표 2.6. PHP 환경 변수
변수 이름설명기본값

ERROR_REPORTING

PHP에 오류, 경고 및 조치를 수행하려는 알림이 표시됩니다.

E_ALL & ~E_NOTICE

DISPLAY_ERRORS

PHP가 오류, 알림 및 경고를 출력하는지 여부를 제어합니다.

ON

DISPLAY_STARTUP_ERRORS

PHP의 시작 시퀀스 중에 발생하는 모든 디스플레이 오류가 표시 오류와 별도로 처리됩니다.

OFF

TRACK_ERRORS

마지막 오류/경고 메시지를 $php_errormsg (boolean)에 저장합니다.

OFF

HTML_ERRORS

오류와 관련된 문서에 오류를 연결합니다.

ON

INCLUDE_PATH

PHP 소스 파일의 경로입니다.

.:/opt/openshift/src:/opt/rh/php55/root/usr/share/pear

SESSION_PATH

세션 데이터 파일의 위치입니다.

/tmp/sessions

NETNAMESPACE

애플리케이션의 문서 루트를 정의하는 경로(예: /public).

/

다음 환경 변수는 opcache.ini 파일에서 동등한 속성 값을 설정합니다.

표 2.7. 추가 PHP 설정
변수 이름설명기본값

OPCACHE_MEMORY_CONSUMPTION

OPcache 공유 메모리 스토리지 크기

16M

OPCACHE_REVALIDATE_FREQ

스크립트 타임스탬프가 업데이트를 확인하는 빈도(초)입니다. 0 을 사용하면 모든 요청에서 OPcache 에서 업데이트를 확인합니다.

2

다음을 설정하여 PHP 구성을 로드하는 데 사용되는 전체 디렉터리를 재정의할 수도 있습니다.

표 2.8. 추가 PHP 설정
변수 이름설명

PHPRC

php.ini 파일의 경로를 설정합니다.

PHP_INI_SCAN_DIR

추가 .ini 구성 파일의 검사 경로

사용자 정의 컴포저 저장소 미러 URL을 사용하여 기본 'packagist.org' 대신 패키지를 다운로드할 수 있습니다.

표 2.9. 구성 요소 환경 변수
변수 이름설명

COMPOSER_MIRROR

사용자 지정 Composer 리포지토리 미러 URL을 사용하여 빌드 프로세스 중 필수 패키지를 다운로드하도록 이 변수를 설정합니다. 참고: 이것은 composer.json 에 나열된 패키지에만 영향을 미칩니다.

2.6.5.1. Apache 설정

애플리케이션의ResourceOverride가 소스 디렉터리 /opt/openshift/src 에 중첩된 경우 고유한 . dpdk 파일을 지정하여 기본 Apache 동작을 재정의하고 애플리케이션 요청을 처리하는 방법을 지정할 수 있습니다. .dpdk 파일은 애플리케이션 소스의 루트에 있어야 합니다.

2.6.6. 로그 액세스

액세스 로그는 표준 출력으로 스트리밍되므로 oc logs 명령을 사용하여 볼 수 있습니다. 오류 로그는 oc rsh 명령을 사용하여 컨테이너에 액세스할 수 있는 /tmp/error_log 파일에 저장됩니다.

2.6.7. 핫 디플로이팅

핫 디플로이먼트를 사용하면 새 S2I 빌드를 생성하지 않고도 애플리케이션을 신속하게 변경하고 배포할 수 있습니다. 애플리케이션 소스 코드에서 수행된 변경 사항을 즉시 선택하려면 OPCACHE_REVALIDATE_FREQ=0 환경 변수를 사용하여 빌드 이미지를 실행해야 합니다.

예를 들어 oc new-app 명령을 참조하십시오. oc env 명령을 사용하여 기존 오브젝트의 환경 변수를 업데이트할 수 있습니다.

주의

개발 또는 디버깅 중에만 이 옵션을 사용해야 합니다. 프로덕션 환경에서 이 옵션을 사용하도록 설정하지 않는 것이 좋습니다.

실행 중인 Pod의 소스 코드를 변경하려면 oc rsh 명령을 사용하여 컨테이너를 입력합니다.

$ oc rsh <pod_id>

실행 중인 컨테이너에 들어가면 현재 디렉터리가 /opt/app-root/src 로 설정됩니다. 여기서 소스 코드가 있습니다.

2.7. Python

2.7.1. 개요

OpenShift Container Platform은 Python 애플리케이션을 빌드하고 실행하기 위해 S2I 가 활성화된 Python 이미지를 제공합니다. Python S2I 빌더 이미지는 필요한 종속 항목과 함께 애플리케이션 소스를 어셈블하여 Python 애플리케이션이 포함된 새 이미지를 생성합니다. 이 결과 이미지는 OpenShift Container Platform 또는 컨테이너 런타임에서 실행할 수 있습니다.

2.7.2. 버전

현재 OpenShift Container Platform은 Python의 2.7,3.3,3.43.5 버전을 제공합니다.

2.7.3. 이미지

이러한 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/rhscl/python-27-rhel7
$ docker pull registry.redhat.io/openshift3/python-33-rhel7
$ docker pull registry.redhat.io/rhscl/python-34-rhel7
$ docker pull registry.redhat.io/rhscl/python-35-rhel7

CentOS 7 기반 이미지

이러한 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull centos/python-27-centos7
$ docker pull openshift/python-33-centos7
$ docker pull centos/python-34-centos7
$ docker pull centos/python-35-centos7

이러한 이미지를 사용하려면 이러한 이미지 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리 로 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 이미지 스트림 정의 예를 찾을 수 있습니다.

2.7.4. 빌드 프로세스

S2I는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.

  1. 빌더 이미지에서 컨테이너를 시작합니다.
  2. 애플리케이션 소스를 다운로드합니다.
  3. 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
  4. 빌더 이미지에서 assemble 스크립트를 실행합니다.
  5. 최종 이미지를 저장합니다.

빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.

2.7.5. 설정

Python 이미지는 Python 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.

이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 sourceStrategy 정의의 환경 섹션에 정의할 수 있습니다.

새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.

참고

빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.

표 2.10. Python 환경 변수
변수 이름설명

APP_FILE

이 변수는 애플리케이션 시작을 담당하는 Python 인터프리터에 전달된 파일 이름을 지정합니다. 이 변수는 기본적으로 app.py 로 설정됩니다.

APP_MODULE

이 변수는 NetNamespace 호출 가능을 지정합니다. 이 패턴은 $(MODULE_NAME):$(VAURBLE_NAME) 패턴을 따릅니다. 여기서 모듈 이름은 전체 점선 경로이고 변수 이름은 지정된 모듈 내에서 함수를 참조합니다. 애플리케이션을 설치하는 데 setup.py 를 사용하는 경우 모듈 이름을 해당 파일에서 읽을 수 있으며 변수 기본값은 application 입니다. 사용 가능한 setup-test-app 예제가 있습니다.

APP_CONFIG

이 변수는 gunicorn 구성이 있는 유효한 Python 파일의 경로를 나타냅니다.

DISABLE_COLLECTSTATIC

빌드 중 manage.py collectstatic 을 inhibit 값으로 설정합니다. Django 프로젝트에만 영향을 미칩니다.

DISABLE_MIGRATE

생성된 이미지가 실행될 때 비어 있지 않은 값으로 manage.py migrate 의 실행을 억제하도록 설정합니다. Django 프로젝트에만 영향을 미칩니다.

PIP_INDEX_URL

사용자 정의 인덱스 URL 또는 미러를 사용하여 빌드 프로세스 중에 필요한 패키지를 다운로드하려면 이 변수를 설정합니다. 이는 requirements.txt 파일에 나열된 패키지에만 영향을 미칩니다.

WEB_CONCURRENCY

이를 설정하여 작업자 수의 기본 설정을 변경합니다. 기본적으로 이 값은 사용 가능한 코어 수 4로 설정됩니다.

2.7.6. 핫 디플로이팅

핫 디플로이먼트를 사용하면 새 S2I 빌드를 생성하지 않고도 애플리케이션을 신속하게 변경하고 배포할 수 있습니다. Django를 사용하는 경우 핫 디플로이먼트는 즉시 작동합니다.

Gunicorn을 사용하는 동안 핫 배포를 활성화하려면 다시 로드 옵션을 true 로 설정하여 리포지토리에 Gunicorn 구성 파일이 있어야 합니다. APP_CONFIG 환경 변수를 사용하여 구성 파일을 지정합니다. 예를 들어 oc new-app 명령을 참조하십시오. oc set env 명령을 사용하여 기존 오브젝트의 환경 변수를 업데이트할 수 있습니다.

주의

개발 또는 디버깅 중에만 이 옵션을 사용해야 합니다. 프로덕션 환경에서 이 옵션을 사용하도록 설정하지 않는 것이 좋습니다.

실행 중인 Pod의 소스 코드를 변경하려면 oc rsh 명령을 사용하여 컨테이너를 입력합니다.

$ oc rsh <pod_id>

실행 중인 컨테이너에 들어가면 현재 디렉터리가 /opt/app-root/src 로 설정됩니다. 여기서 소스 코드가 있습니다.

2.8. Ruby

2.8.1. 개요

OpenShift Container Platform은 Ruby 애플리케이션을 빌드하고 실행하기 위해 S2I 가 활성화된 Ruby 이미지를 제공합니다. Ruby S2I 빌더 이미지는 Ruby 애플리케이션이 포함된 새 이미지를 생성하기 위해 필요한 종속 항목과 함께 애플리케이션 소스를 어셈블합니다. 이 결과 이미지는 OpenShift Container Platform 또는 컨테이너 런타임에서 실행할 수 있습니다.

2.8.2. 버전

현재 OpenShift Container Platform은 Ruby 버전 2.0,2.22.3 을 제공합니다.

2.8.3. 이미지

이러한 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat 레지스트리를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/openshift3/ruby-20-rhel7
$ docker pull registry.redhat.io/rhscl/ruby-22-rhel7
$ docker pull registry.redhat.io/rhscl/ruby-23-rhel7

CentOS 7 기반 이미지

이러한 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull openshift/ruby-20-centos7
$ docker pull openshift/ruby-22-centos7
$ docker pull centos/ruby-23-centos7

이러한 이미지를 사용하려면 이러한 이미지 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리 로 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 이미지 스트림 정의 예를 찾을 수 있습니다.

2.8.4. 빌드 프로세스

S2I는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.

  1. 빌더 이미지에서 컨테이너를 시작합니다.
  2. 애플리케이션 소스를 다운로드합니다.
  3. 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
  4. 빌더 이미지에서 assemble 스크립트를 실행합니다.
  5. 최종 이미지를 저장합니다.

빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.

2.8.5. 설정

Ruby 이미지는 Ruby 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.

이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 sourceStrategy 정의의 환경 섹션에 정의할 수 있습니다.

새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.

참고

빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.

표 2.11. Ruby 환경 변수
변수 이름설명

RACK_ENV

이 변수는 Ruby 애플리케이션이 배포되는 환경(예: 프로덕션,개발 또는 테스트 )을 지정합니다. 각 수준은 로깅 세부 정보 표시, 오류 페이지 및 ruby gem 설치 측면에서 다른 동작이 있습니다. 애플리케이션 자산은 RACK_ENV프로덕션 으로 설정된 경우에만 컴파일됩니다. 기본값은 production 입니다.

RAILS_ENV

이 변수는 Ruby on Rails 애플리케이션이 배포된 환경을 지정합니다(예: 프로덕션,개발 또는 테스트 ). 각 수준은 로깅 세부 정보 표시, 오류 페이지 및 ruby gem 설치 측면에서 다른 동작이 있습니다. 애플리케이션 자산은 RAILS_ENV프로덕션 으로 설정된 경우에만 컴파일됩니다. 이 변수는 기본적으로 ${RACK_ENV} 로 설정됩니다.

DISABLE_ASSET_COMPILATION

true 로 설정하면 이 변수는 자산 컴파일 프로세스를 비활성화합니다. 자산 컴파일은 애플리케이션이 프로덕션 환경에서 실행되는 경우에만 수행됩니다. 따라서 자산이 이미 컴파일된 경우 이 변수를 사용할 수 있습니다.

PUMA_MIN_THREADS, PUMA_MAX_THREADS

이 변수는 Puma 의 스레드 풀에서 사용할 수 있는 최소 및 최대 스레드 수를 나타냅니다.

PUMA_WORKERS

이 변수는 Puma의 클러스터형 모드에서 시작할 작업자 프로세스 수를 나타냅니다( Puma가 두 개 이상의 프로세스를 실행하는 경우). 명시적으로 설정되지 않은 경우 기본 동작은 PUMA_WORKERS 를 컨테이너에서 사용할 수 있는 메모리 및 호스트의 코어 수에 적합한 값으로 설정합니다.

RUBYGEM_MIRROR

사용자 정의 RubyGems 미러 URL을 사용하여 빌드 프로세스 중 필수 gem 패키지를 다운로드하려면 이 변수를 설정합니다. 참고: 이 환경 변수는 Ruby 2.2 이상 이미지에서만 사용할 수 있습니다.

2.8.6. 핫 디플로이팅

핫 디플로이먼트를 사용하면 새 S2I 빌드를 생성하지 않고도 애플리케이션을 신속하게 변경하고 배포할 수 있습니다. 이 이미지에서 핫 배포를 활성화하는 방법은 애플리케이션 유형에 따라 다릅니다.

Ruby on Rails Applications

Ruby on Rails 애플리케이션의 경우 실행 중인 pod에 전달된 RAILS_ENV=development 환경 변수를 사용하여 빌드된 Rails 애플리케이션을 실행합니다. 기존 배포 구성의 경우 oc set env명령을 사용할 수 있습니다.

$ oc set env dc/rails-app RAILS_ENV=development

기타 유형의 Ruby 애플리케이션(Sinatra, Padrino 등)

다른 유형의 Ruby 애플리케이션의 경우 실행 중인 컨테이너 내부에서 소스 코드를 변경할 때마다 서버를 다시 로드할 수 있는 gem을 사용하여 애플리케이션을 빌드해야 합니다. 해당 gems는 다음과 같습니다.

개발 모드에서 애플리케이션을 실행하려면 S2I 실행 스크립트 를 수정하여 선택한 gem에 의해 웹 서버가 시작되도록 소스 코드의 변경 사항을 확인해야 합니다.

S2I 버전의 스크립트 를 사용하여 애플리케이션 이미지를 빌드한 후 RACK_ENV=development 환경 변수를 사용하여 이미지를 실행합니다. 예를 들어 oc new-app 명령을 참조하십시오. oc set env 명령을 사용하여 기존 오브젝트의 환경 변수를 업데이트할 수 있습니다.

주의

개발 또는 디버깅 중에만 이 옵션을 사용해야 합니다. 프로덕션 환경에서 이 옵션을 사용하도록 설정하지 않는 것이 좋습니다.

실행 중인 Pod의 소스 코드를 변경하려면 oc rsh 명령을 사용하여 컨테이너를 입력합니다.

$ oc rsh <pod_id>

실행 중인 컨테이너에 들어가면 현재 디렉터리가 /opt/app-root/src 로 설정됩니다. 여기서 소스 코드가 있습니다.

2.9. S2I 이미지 사용자 정의

2.9.1. 개요

S2I 빌더 이미지에는 일반적으로 assemblerun 스크립트 가 포함되어 있지만 해당 스크립트의 기본 동작은 모든 사용자에게 적합하지 않을 수 있습니다. 이 주제에서는 기본 스크립트가 포함된 S2I 빌더의 동작을 사용자 정의할 수 있는 몇 가지 방법을 다룹니다.

2.9.2. 이미지에서 Scripts embedded 호출

일반적으로 빌더 이미지는 가장 일반적인 사용 사례를 포함하는 자체 버전의 S2I 스크립트를 제공합니다. 이러한 스크립트가 요구 사항을 충족하지 않으면 S2I는 .s2i/bin 디렉터리에 사용자 지정 항목을 추가하여 덮어쓰는 방법을 제공합니다. 그러나 이렇게 하면 표준 스크립트를 완전히 교체할 수 있습니다. 경우에 따라 이 방법이 허용되지만 다른 시나리오에서는 이미지에 제공된 스크립트의 논리를 유지하면서 스크립트 이전에(또는 이후) 몇 가지 명령을 실행하는 것을 선호할 수 있습니다. 이 경우 사용자 정의 논리를 실행하고 이미지의 기본 스크립트로 추가 작업을 위임하는 래퍼 스크립트를 생성할 수 있습니다.

빌더 이미지 내부의 스크립트 위치를 확인하려면 io.openshift.s2i.scripts-url 레이블의 값을 확인합니다. docker inspect 를 사용하십시오:

$ docker inspect --format='{{ index .Config.Labels "io.openshift.s2i.scripts-url" }}' openshift/wildfly-100-centos7
image:///usr/libexec/s2i

openshift/wildfly-100-centos7 빌더 이미지를 검사하고 스크립트가 /usr/libexec/s2i 디렉터리에 있음을 확인합니다.

이 지식을 사용하여 호출을 래핑하여 자체 스크립트를 모두 호출합니다.

예 2.1. .s2i/bin/assemble 스크립트

#!/bin/bash
echo "Before assembling"

/usr/libexec/s2i/assemble
rc=$?

if [ $rc -eq 0 ]; then
    echo "After successful assembling"
else
    echo "After failed assembling"
fi

exit $rc

이 예제에서는 메시지를 출력하고, 이미지에서 표준 assemble 스크립트를 실행하고 assemble 스크립트의 종료 코드에 따라 다른 메시지를 출력하는 사용자 정의 assemble 스크립트를 보여줍니다.

run 스크립트를 래핑할 때 exec 를 사용하여 신호가 올바르게 처리되는지 확인해야 합니다. 그러나 exec 를 사용하면 기본 이미지 실행 스크립트를 호출한 후 추가 명령을 실행할 수 없습니다.

예 2.2. .s2i/bin/run script

#!/bin/bash
echo "Before running application"
exec /usr/libexec/s2i/run

3장. 데이터베이스 이미지

3.1. 개요

이 주제 그룹에는 OpenShift Container Platform 사용자가 사용할 수 있는 다양한 데이터베이스 이미지에 대한 정보가 포함되어 있습니다.

참고

데이터베이스 이미지에 대한 클러스터링을 활성화하기 위한 구성은 예제로 제공되며 프로덕션용이 아닙니다.

3.2. MySQL

3.2.1. 개요

OpenShift Container Platform은 MySQL을 실행하는 데 필요한 컨테이너 이미지를 제공합니다. 이 이미지는 구성을 통해 제공된 사용자 이름, 암호 및 데이터베이스 이름 설정을 기반으로 데이터베이스 서비스를 제공할 수 있습니다.

3.2.2. 버전

현재 OpenShift Container Platform은 MySQL의 버전 5.65.7 버전을 제공합니다.

3.2.3. 이미지

이 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/rhscl/mysql-56-rhel7
$ docker pull registry.redhat.io/rhscl/mysql-57-rhel7

CentOS 7 기반 이미지

MySQL 5.6 및 5.7용 CentOS 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull centos/mysql-56-centos7
$ docker pull centos/mysql-57-centos7

이러한 이미지를 사용하려면 해당 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 ImageStream 정의 예를 찾을 수 있습니다.

3.2.4. 구성 및 사용

3.2.4.1. 데이터베이스 초기화

공유 볼륨을 처음 사용하면 데이터베이스 관리자 사용자 및 MySQL 루트 사용자와 함께 데이터베이스가 생성됩니다(tekton _ROOT_PASSWORD 환경 변수를 지정하는 경우). 그런 다음 MySQL 데몬이 시작됩니다. 볼륨을 다른 컨테이너에 다시 연결하는 경우 데이터베이스, 데이터베이스 사용자 및 관리자 사용자가 생성되지 않으며 MySQL 데몬이 시작됩니다.

다음 명령은 컨테이너에서 MySQL이 실행되는 새 데이터베이스 포드 를 생성합니다.

$ oc new-app \
    -e MYSQL_USER=<username> \
    -e MYSQL_PASSWORD=<password> \
    -e MYSQL_DATABASE=<database_name> \
    registry.redhat.io/rhscl/mysql-56-rhel7
3.2.4.2. 컨테이너에서 MySQL 명령 실행

OpenShift Container Platform은 소프트웨어 컬렉션 (SCL)을 사용하여 MySQL을 설치하고 시작합니다. 실행 중인 컨테이너 내부에서 MySQL 명령을 실행하려면( 디버깅용) bash를 사용하여 호출해야 합니다.

이렇게 하려면 먼저 Pod 이름을 확인합니다. 예를 들어 현재 프로젝트의 Pod 목록을 볼 수 있습니다.

$ oc get pods

그런 다음 Pod에 대한 원격 쉘 세션을 엽니다.

$ oc rsh <pod>

컨테이너를 입력하면 필요한 SCL이 자동으로 활성화됩니다.

이제 bash 쉘에서 mysql 명령을 실행하여 MySQL 대화형 세션을 시작하고 일반 MySQL 작업을 수행할 수 있습니다. 예를 들어 데이터베이스 사용자로 인증하려면 다음을 수행합니다.

bash-4.2$ mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h $HOSTNAME $MYSQL_DATABASE
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.37 MySQL Community Server (GPL)
...
mysql>

완료되면 exit 또는 exit를 입력하여 MySQL 세션을 종료합니다.

3.2.4.3. 환경 변수

MySQL 사용자 이름, 암호 및 데이터베이스 이름은 다음 환경 변수를 사용하여 구성해야 합니다.

표 3.1. MySQL 환경 변수
변수 이름설명

MYSQL_USER

애플리케이션에서 사용하기 위해 생성된 데이터베이스 사용자의 사용자 이름을 지정합니다.

MYSQL_PASSWORD

tekton _USER 의 암호입니다.

MYSQL_DATABASE

RuntimeClass _USER 에 전체 권한이 있는 데이터베이스의 이름입니다.

MYSQL_ROOT_PASSWORD

root 사용자의 선택적 암호입니다. 이 값을 설정하지 않으면 root 계정에 원격 로그인할 수 없습니다. 컨테이너 내에서의 로컬 연결은 항상 암호 없이 허용됩니다.

MYSQL_SERVICE_HOST

Kubernetes에서 자동으로 생성한 서비스 호스트 변수.

MYSQL_SERVICE_PORT

Kubernetes에서 자동으로 생성한 서비스 포트 변수.

주의

사용자 이름, 암호 및 데이터베이스 이름을 지정해야 합니다. 3개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 재시작합니다.

MySQL 설정은 다음 환경 변수로 구성할 수 있습니다.

표 3.2. 추가 MySQL 설정
변수 이름설명기본값

MYSQL_LOWER_CASE_TABLE_NAMES

테이블 이름을 저장하고 비교하는 방법을 설정합니다.

0

MYSQL_MAX_CONNECTIONS

허용되는 최대 클라이언트 연결 수입니다.

151

MYSQL_MAX_ALLOWED_PACKET

한 패킷의 최대 크기 또는 생성된/지정 문자열입니다.

200M

MYSQL_FT_MIN_WORD_LEN

FULLTEXT 인덱스에 포함할 단어의 최소 길이입니다.

4

MYSQL_FT_MAX_WORD_LEN

FULLTEXT 인덱스에 포함될 단어의 최대 길이입니다.

20

MYSQL_AIO

네이티브 AIO가 손상된 경우 innodb_use_native_aio 설정 값을 제어합니다.

1

MYSQL_TABLE_OPEN_CACHE

모든 스레드에 대한 열려 있는 테이블 수입니다.

400

MYSQL_KEY_BUFFER_SIZE

인덱스 블록에 사용되는 버퍼의 크기입니다.

32m (또는 사용 가능한 메모리의 10%)

MYSQL_SORT_BUFFER_SIZE

정렬에 사용되는 버퍼의 크기입니다.

256K

MYSQL_READ_BUFFER_SIZE

순차적 검사에 사용되는 버퍼의 크기입니다.

8m (또는 사용 가능한 메모리의 5%)

MYSQL_INNODB_BUFFER_POOL_SIZE

InnoDB가 테이블 및 인덱스 데이터를 캐시하는 버퍼 풀의 크기입니다.

32m (또는 사용 가능한 메모리의 50%)

MYSQL_INNODB_LOG_FILE_SIZE

로그 그룹에 있는 각 로그 파일의 크기입니다.

8m (또는 사용 가능한 메모리의 15 %)

MYSQL_INNODB_LOG_BUFFER_SIZE

InnoDB가 디스크의 로그 파일에 쓰는 데 사용하는 버퍼의 크기입니다.

8m (또는 사용 가능한 메모리의 15 %)

일부 메모리 관련 매개 변수에는 두 가지 기본값이 있습니다. 고정된 값은 컨테이너에 메모리 제한이 할당되지 않은 경우 사용됩니다. 다른 값은 사용 가능한 메모리를 기반으로 컨테이너 시작 중에 동적으로 계산됩니다.

3.2.4.4. 볼륨 마운트 지점

MySQL 이미지는 데이터베이스의 영구 스토리지를 활성화하기 위해 마운트된 볼륨을 사용하여 실행할 수 있습니다.

  • /var/lib/mysql/data - MySQL이 데이터베이스 파일을 저장하는 데이터 디렉토리입니다.
3.2.4.5. 암호 변경

암호는 이미지 구성의 일부이므로 데이터베이스 사용자(tekton_USER) 및 root 사용자의 암호를 변경하기 위해 지원되는 유일한 방법은 환경 변수tekton _PASSWORD 및tekton_ ROOT_PASSWORD 를 각각 변경하는 것입니다.

웹 콘솔에서 Pod 또는 배포 구성을 보거나 CLI로 환경 변수를 나열하여 현재 암호를 볼 수 있습니다.

$ oc set env pod <pod_name> --list

jenkinsfile _ROOT_PASSWORD 가 설정될 때마다 지정된 암호를 사용하여 root 사용자에 대한 원격 액세스를 활성화하고 설정되지 않은 경우 root 사용자에 대한 원격 액세스가 비활성화됩니다. 이는 항상 원격 액세스 권한이 있는 일반 사용자ECDHE_USER 에는 영향을 미치지 않습니다. 또한 localhost 에서 암호 없이 로그인할 수 있는 root 사용자의 로컬 액세스에도 영향을 미치지 않습니다.

SQL 문을 통해 데이터베이스 암호를 변경하거나 앞서 언급한 환경 변수를 제외한 다른 방식으로 데이터베이스 암호를 변경하면 변수에 저장된 값과 실제 암호가 일치하지 않습니다. 데이터베이스 컨테이너가 시작될 때마다 환경 변수에 저장된 값으로 암호를 재설정합니다.

이러한 암호를 변경하려면 oc set env 명령을 사용하여 관련 배포 구성에 대해 원하는 환경 변수를 하나 또는 둘 다 업데이트합니다. 여러 배포 구성에서 이러한 환경 변수를 활용하는 경우 예를 들어 템플릿에서 생성된 애플리케이션의 경우 암호가 모든 위치에서 동기화되도록 각 배포 구성에서 변수를 업데이트해야 합니다. 이 작업은 모두 동일한 명령에서 수행할 수 있습니다.

$ oc set env dc <dc_name> [<dc_name_2> ...] \
  MYSQL_PASSWORD=<new_password> \
  MYSQL_ROOT_PASSWORD=<new_root_password>
중요

애플리케이션에 따라 애플리케이션의 다른 부분에서 일치하도록 업데이트해야 하는 다른 환경 변수가 있을 수 있습니다. 예를 들어, 데이터베이스 사용자의 암호와 일치해야 하는 프런트 엔드 포드에 더 많은 일반적인 benefits _USER 변수가 있을 수 있습니다. 애플리케이션당 필요한 모든 환경 변수에 대해 암호가 동기화되었는지 확인합니다. 그러지 않으면 트리거 시 Pod가 재배포되지 않을 수 있습니다.

환경 변수를 업데이트하면 구성 변경 트리거 가 있는 경우 데이터베이스 서버의 재배포가 트리거됩니다. 그러지 않으면 암호 변경 사항을 적용하려면 새 배포를 수동으로 시작해야 합니다.

새 암호가 적용되었는지 확인하려면 먼저 실행 중인 MySQL 포드에 대한 원격 쉘 세션을 엽니다.

$ oc rsh <pod>

bash 쉘에서 데이터베이스 사용자의 새 암호를 확인합니다.

bash-4.2$ mysql -u $MYSQL_USER -p<new_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"

암호가 올바르게 변경된 경우 다음과 같은 테이블이 표시됩니다.

+------------+---------------------+
| database() | user()              |
+------------+---------------------+
| sampledb   | user0PG@172.17.42.1 |
+------------+---------------------+

root 사용자의 새 암호를 확인하려면 다음을 수행하십시오.

bash-4.2$ mysql -u root -p<new_root_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"

암호가 올바르게 변경된 경우 다음과 같은 테이블이 표시됩니다.

+------------+------------------+
| database() | user()           |
+------------+------------------+
| sampledb   | root@172.17.42.1 |
+------------+------------------+

3.2.5. 템플릿에서 데이터베이스 서비스 생성

OpenShift Container Platform에서는 새 데이터베이스 서비스를 쉽게 생성할 수 있는 템플릿을 제공합니다. 템플릿은 암호 값 자동 생성을 포함하여 사전 정의된 기본값을 사용하여 모든 필수 환경 변수(사용자, 암호, 데이터베이스 이름 등)를 정의하는 매개변수 필드를 제공합니다. 또한 배포 구성과 서비스를 모두 정의합니다.

MySQL 템플릿은 초기 클러스터 설정 중에 클러스터 관리자가 기본 openshift 프로젝트에 등록되어 있어야 합니다. 필요한 경우 자세한 내용은 기본 이미지 스트림 및 템플릿 로드 를 참조하십시오.

사용 가능한 템플릿은 다음 두 가지입니다.

  • MySQL-ephemeral 은 데이터베이스 콘텐츠에 임시 스토리지를 사용하기 때문에 개발 또는 테스트 목적으로만 사용됩니다. 즉, Pod가 다른 노드로 이동되거나 재배포되는 배포 구성으로 이동되는 등 데이터베이스 pod가 재시작되면 모든 데이터가 손실됩니다.
  • MySQL-persistent 에서는 데이터베이스 데이터에 영구 볼륨 저장소를 사용합니다. 즉, pod를 다시 시작한 후에도 데이터가 유지됩니다. 영구 볼륨을 사용하려면 OpenShift Container Platform 배포에 영구 볼륨 풀을 정의해야 합니다. 풀 설정에 대한 클러스터 관리자 지침은 NFS를 사용하는 영구 스토리지에 있습니다.

이러한 지침에 따라 템플릿을 인스턴스화할 수 있습니다.

서비스를 인스턴스화하면 사용자 이름, 암호 및 데이터베이스 이름 환경 변수를 데이터베이스에 액세스하려는 다른 구성 요소의 배포 구성에 복사할 수 있습니다. 그러면 해당 구성 요소가 정의된 서비스를 통해 데이터베이스에 액세스할 수 있습니다.

3.2.6. MySQL 복제 사용

참고

데이터베이스 이미지에 대한 클러스터링을 활성화하기 위한 구성은 예제로 제공되며 프로덕션용이 아닙니다.

Red Hat은 MySQL 마스터 슬레이브 복제(클러스터링)에 대한 개념 증명 템플릿을 제공합니다. GitHub에서 예제 템플릿 을 가져올 수 있습니다.

예제 템플릿을 현재 프로젝트의 템플릿 라이브러리에 업로드하려면 다음을 수행합니다.

$ oc create -f \
    https://raw.githubusercontent.com/sclorg/mysql-container/master/examples/replica/mysql_replica.json

다음 섹션에서는 예제 템플릿에 정의된 개체를 자세히 설명하고 마스터 슬레이브 복제를 구현하는 MySQL 서버 클러스터를 시작하기 위해 함께 작동하는 방법을 설명합니다. MySQL에 권장되는 복제 전략입니다.

3.2.6.1. MySQL 마스터의 배포 구성 생성

MySQL 복제를 설정하기 위해 배포 구성 은 예제 템플릿에 정의되어 복제 컨트롤러를 정의합니다. MySQL 마스터-슬레이브 복제의 경우 두 개의 배포 구성이 필요합니다. 하나의 배포 구성은 MySQL 마스터 서버 및 MySQL 슬레이브 서버를 정의합니다.

MySQL 서버가 마스터 역할을 하도록 지시하려면 배포 구성의 컨테이너 정의의 command 필드가 run-mysqld-master 로 설정되어야 합니다. 이 스크립트는 MySQL 이미지의 대체 진입점 역할을 하며 복제에서 마스터로 실행되도록 MySQL 서버를 구성합니다.

MySQL 복제에는 마스터와 슬레이브 간에 데이터를 릴레이하는 특수 사용자가 필요합니다. 이 목적으로 템플릿에 다음 환경 변수가 정의됩니다.

변수 이름설명기본값

MYSQL_MASTER_USER

복제 사용자의 사용자 이름

master

MYSQL_MASTER_PASSWORD

replication 사용자의 암호

생성됨

예 3.1. 예제 템플릿의 MySQL 마스터 배포 구성 오브젝트 정의

kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
  name: "mysql-master"
spec:
  strategy:
    type: "Recreate"
  triggers:
    - type: "ConfigChange"
  replicas: 1
  selector:
    name: "mysql-master"
  template:
    metadata:
      labels:
        name: "mysql-master"
    spec:
      volumes:
        - name: "mysql-master-data"
          persistentVolumeClaim:
            claimName: "mysql-master"
      containers:
        - name: "server"
          image: "openshift/mysql-56-centos7"
          command:
            - "run-mysqld-master"
          ports:
            - containerPort: 3306
              protocol: "TCP"
          env:
            - name: "MYSQL_MASTER_USER"
              value: "${MYSQL_MASTER_USER}"
            - name: "MYSQL_MASTER_PASSWORD"
              value: "${MYSQL_MASTER_PASSWORD}"
            - name: "MYSQL_USER"
              value: "${MYSQL_USER}"
            - name: "MYSQL_PASSWORD"
              value: "${MYSQL_PASSWORD}"
            - name: "MYSQL_DATABASE"
              value: "${MYSQL_DATABASE}"
            - name: "MYSQL_ROOT_PASSWORD"
              value: "${MYSQL_ROOT_PASSWORD}"
          volumeMounts:
            - name: "mysql-master-data"
              mountPath: "/var/lib/mysql/data"
          resources: {}
          terminationMessagePath: "/dev/termination-log"
          imagePullPolicy: "IfNotPresent"
          securityContext:
            capabilities: {}
            privileged: false
      restartPolicy: "Always"
      dnsPolicy: "ClusterFirst"

이 배포 구성에서 모든 데이터가 MySQL 마스터 서버에 대해 지속되도록 영구 볼륨을 요청했기 때문에 클러스터 관리자에게 스토리지를 클레임할 수 있는 영구 볼륨을 생성하도록 요청해야 합니다.

배포 구성이 생성되고 MySQL 마스터 서버를 사용하는 포드가 started되면 sysfs _DATABASE 에서 정의한 데이터베이스를 생성하고 이 데이터베이스를 슬레이브로 복제하도록 서버를 구성합니다.

제공된 예제에서는 MySQL 마스터 서버의 복제본을 하나만 정의합니다. 이로 인해 OpenShift Container Platform에서 서버 인스턴스가 하나만 시작됩니다. 다중 인스턴스(multi-master)는 지원되지 않으므로 이 복제 컨트롤러를 확장할 수 없습니다.

MySQL 마스터 에서 생성한 데이터베이스를 복제하기 위해 템플릿에 배포 구성이 정의됩니다. 이 배포 구성은 run-mysqld-slave 로 설정된 command 필드를 사용하여 MySQL 이미지를 시작하는 복제 컨트롤러를 생성합니다. 이 대체 진입점은 데이터베이스 초기화를 건너뛰고 예제 템플릿에도 정의되어 있는 mysql-master 서비스에 연결하도록 MySQL 서버를 구성합니다.

예 3.2. 예제 템플릿의 MySQL Slave 배포 구성 오브젝트 정의

kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
  name: "mysql-slave"
spec:
  strategy:
    type: "Recreate"
  triggers:
    - type: "ConfigChange"
  replicas: 1
  selector:
    name: "mysql-slave"
  template:
    metadata:
      labels:
        name: "mysql-slave"
    spec:
      containers:
        - name: "server"
          image: "openshift/mysql-56-centos7"
          command:
            - "run-mysqld-slave"
          ports:
            - containerPort: 3306
              protocol: "TCP"
          env:
            - name: "MYSQL_MASTER_USER"
              value: "${MYSQL_MASTER_USER}"
            - name: "MYSQL_MASTER_PASSWORD"
              value: "${MYSQL_MASTER_PASSWORD}"
            - name: "MYSQL_DATABASE"
              value: "${MYSQL_DATABASE}"
          resources: {}
          terminationMessagePath: "/dev/termination-log"
          imagePullPolicy: "IfNotPresent"
          securityContext:
            capabilities: {}
            privileged: false
      restartPolicy: "Always"
      dnsPolicy: "ClusterFirst"

이 예제 배포 구성은 초기 복제본 수가 1 로 설정된 복제 컨트롤러를 시작합니다. 이 복제 컨트롤러는 계정의 리소스 용량까지 두 방향 모두에서 확장 할 수 있습니다.

3.2.6.2. 헤드리스 서비스 생성

MySQL 슬레이브 복제 컨트롤러에서 생성한 포드는 복제를 등록하려면 MySQL 마스터 서버에 도달해야 합니다. 예제 템플릿은 이러한 목적으로 mysql-master 라는 헤드리스 서비스를 정의합니다. 이 서비스는 복제에만 사용되지 않지만 클라이언트는 MySQL 호스트로 쿼리를 mysql-master:3306 에 보낼 수도 있습니다.

헤드리스 서비스를 사용하려면 서비스 정의의 clusterIP 매개 변수가 None 으로 설정됩니다. 그러면 DNS 쿼리를 사용하여 이 서비스의 현재 끝점을 나타내는 Pod IP 주소 목록을 가져올 수 있습니다.

예 3.3. 예제 템플릿의 헤드리스 서비스 오브젝트 정의

kind: "Service"
apiVersion: "v1"
metadata:
  name: "mysql-master"
  labels:
    name: "mysql-master"
spec:
  ports:
    - protocol: "TCP"
      port: 3306
      targetPort: 3306
      nodePort: 0
  selector:
    name: "mysql-master"
  clusterIP: "None"
  type: "ClusterIP"
  sessionAffinity: "None"
status:
  loadBalancer: {}
3.2.6.3. MySQL Slaves 확장

클러스터 의 구성원 수를 늘리려면 다음을 수행합니다.

$ oc scale rc mysql-slave-1 --replicas=<number>

복제 컨트롤러에서 새 MySQL 슬레이브 포드를 생성하도록 지시합니다. 새 슬레이브가 생성되면 먼저 슬레이브 엔트리 포인트가 mysql-master 서비스에 연결을 시도하고 복제 세트에 자신을 등록합니다. 이 작업이 완료되면 MySQL 마스터 서버에서 복제된 데이터베이스에 슬레이브를 보냅니다.

축소하면 MySQL 슬레이브가 종료되고 슬레이브에 영구 스토리지가 정의되어 있지 않기 때문에 슬레이브의 모든 데이터가 손실됩니다. 그런 다음 MySQL 마스터 서버는 슬레이브에 더 이상 연결할 수 없음을 검색하고 복제에서 자동으로 해당 슬레이브를 제거합니다.

3.2.7. 문제 해결

이 섹션에서는 발생할 수 있는 몇 가지 문제에 대해 설명하고 가능한 해결 방법을 제공합니다.

3.2.7.1. Linux 네이티브 AIO 실패

증상

MySQL 컨테이너가 시작되지 않고 로그에 다음과 같은 내용이 표시됩니다.

151113  5:06:56 InnoDB: Using Linux native AIO
151113  5:06:56  InnoDB: Warning: io_setup() failed with EAGAIN. Will make 5 attempts before giving up.
InnoDB: Warning: io_setup() attempt 1 failed.
InnoDB: Warning: io_setup() attempt 2 failed.
Waiting for MySQL to start ...
InnoDB: Warning: io_setup() attempt 3 failed.
InnoDB: Warning: io_setup() attempt 4 failed.
Waiting for MySQL to start ...
InnoDB: Warning: io_setup() attempt 5 failed.
151113  5:06:59  InnoDB: Error: io_setup() failed with EAGAIN after 5 attempts.
InnoDB: You can disable Linux Native AIO by setting innodb_use_native_aio = 0 in my.cnf
151113  5:06:59 InnoDB: Fatal error: cannot initialize AIO sub-system
151113  5:06:59 [ERROR] Plugin 'InnoDB' init function returned error.
151113  5:06:59 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
151113  5:06:59 [ERROR] Unknown/unsupported storage engine: InnoDB
151113  5:06:59 [ERROR] Aborting

설명

MySQL의 스토리지 엔진은 리소스 제한으로 인해 커널의 AIO(Asynchronous I/O) 기능을 사용할 수 없었습니다.

해결

환경 변수tekton _AIO를 값 0 으로 설정하여 AIO 사용을 완전히 끕니다. 후속 배포에서는 MySQL 구성 변수 innodb_use_native_aio 가 값이 0 이 되도록 정렬됩니다.

또는 aio-max-nr 커널 리소스를 늘립니다. 다음 예제에서는 aio-max-nr 의 현재 값을 검사하고 두 번 실행합니다.

$ sysctl fs.aio-max-nr
fs.aio-max-nr = 1048576
# sysctl -w fs.aio-max-nr=2097152

노드별 확인이며 다음 노드를 재부팅할 때까지 지속됩니다.

3.3. PostgreSQL

3.3.1. 개요

OpenShift Container Platform에서는 PostgreSQL을 실행하기 위한 컨테이너 이미지를 제공합니다. 이 이미지는 구성을 통해 제공된 사용자 이름, 암호 및 데이터베이스 이름 설정을 기반으로 데이터베이스 서비스를 제공할 수 있습니다.

3.3.2. 버전

현재 OpenShift Container Platform에서는 PostgreSQL 9.49.5 버전을 지원합니다.

3.3.3. 이미지

이러한 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/rhscl/postgresql-94-rhel7
$ docker pull registry.redhat.io/rhscl/postgresql-95-rhel7

CentOS 7 기반 이미지

이러한 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull centos/postgresql-94-centos7
$ docker pull centos/postgresql-95-centos7

이러한 이미지를 사용하려면 해당 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 ImageStream 정의 예를 찾을 수 있습니다.

3.3.4. 구성 및 사용

3.3.4.1. 데이터베이스 초기화

공유 볼륨을 처음 사용하면 데이터베이스 관리자 및 PostgreSQL postgres 사용자와 함께 데이터베이스가 생성됩니다( POSTGRESQL_ADMIN_PASSWORD 환경 변수를 지정하는 경우). PostgreSQL 데몬이 시작됩니다. 볼륨을 다른 컨테이너에 다시 연결하는 경우 데이터베이스, 데이터베이스 사용자 및 관리자 사용자가 생성되지 않으며 PostgreSQL 데몬이 시작됩니다.

다음 명령은 컨테이너에서 PostgreSQL이 실행되는 새 데이터베이스 포드 를 생성합니다.

$ oc new-app \
    -e POSTGRESQL_USER=<username> \
    -e POSTGRESQL_PASSWORD=<password> \
    -e POSTGRESQL_DATABASE=<database_name> \
    registry.redhat.io/rhscl/postgresql-95-rhel7
3.3.4.2. 컨테이너에서 PostgreSQL 명령 실행

OpenShift Container Platform은 소프트웨어 컬렉션 (SCL)을 사용하여 PostgreSQL을 설치하고 시작합니다. 실행 중인 컨테이너 내부에서 PostgreSQL 명령을 실행하려면( 디버깅용) bash를 사용하여 호출해야 합니다.

이렇게 하려면 먼저 실행 중인 PostgreSQL 포드의 이름을 확인합니다. 예를 들어 현재 프로젝트의 Pod 목록을 볼 수 있습니다.

$ oc get pods

그런 다음 원격 쉘 세션을 원하는 Pod로 엽니다.

$ oc rsh <pod>

컨테이너를 입력하면 필요한 SCL이 자동으로 활성화됩니다.

이제 bash 쉘에서 psql 명령을 실행하여 PostgreSQL 대화형 세션을 시작하고 일반 PostgreSQL 작업을 수행할 수 있습니다. 예를 들어 데이터베이스 사용자로 인증하려면 다음을 수행합니다.

bash-4.2$ PGPASSWORD=$POSTGRESQL_PASSWORD psql -h postgresql $POSTGRESQL_DATABASE $POSTGRESQL_USER
psql (9.5.16)
Type "help" for help.

default=>

완료되면 \q 를 입력하여 PostgreSQL 세션을 종료합니다.

3.3.4.3. 환경 변수

PostgreSQL 사용자 이름, 암호 및 데이터베이스 이름은 다음 환경 변수를 사용하여 구성해야 합니다.

표 3.3. PostgreSQL 환경 변수
변수 이름설명

POSTGRESQL_USER

생성할 PostgreSQL 계정의 사용자 이름입니다. 이 사용자는 데이터베이스에 대한 모든 권한을 갖습니다.

POSTGRESQL_PASSWORD

사용자 계정의 암호입니다.

POSTGRESQL_DATABASE

데이터베이스 이름.

POSTGRESQL_ADMIN_PASSWORD

postgres 관리자 사용자의 선택적 암호입니다. 이 값을 설정하지 않으면 postgres 계정에 대한 원격 로그인이 불가능합니다. 컨테이너 내에서의 로컬 연결은 항상 암호 없이 허용됩니다.

주의

사용자 이름, 암호 및 데이터베이스 이름을 지정해야 합니다. 3개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 재시작합니다.

PostgreSQL 설정은 다음 환경 변수로 구성할 수 있습니다.

표 3.4. 추가 PostgreSQL 설정
변수 이름설명기본값

POSTGRESQL_MAX_CONNECTIONS

허용되는 최대 클라이언트 연결 수입니다.

100

POSTGRESQL_MAX_PREPARED_TRANSACTIONS

"prepared" 상태에 있을 수 있는 최대 트랜잭션 수입니다. 준비된 트랜잭션을 사용하는 경우 해당 값은 최소한 POSTGRESQL_MAX_CONNECTIONS 만큼 커야 합니다.

0

POSTGRESQL_SHARED_BUFFERS

데이터 캐싱을 위한 PostgreSQL 전용 메모리 양.

32M

POSTGRESQL_EFFECTIVE_CACHE_SIZE

운영 체제와 PostgreSQL 자체에서 디스크 캐싱에 사용할 수 있는 예상 메모리 양입니다.

128M

3.3.4.4. 볼륨 마운트 지점

PostgreSQL 이미지는 데이터베이스의 영구 스토리지를 활성화하기 위해 마운트된 볼륨을 사용하여 실행할 수 있습니다.

  • /var/lib/pgsql/data - PostgreSQL이 데이터베이스 파일을 저장하는 데이터베이스 클러스터 디렉터리입니다.
3.3.4.5. 암호 변경

암호는 이미지 구성의 일부이므로 데이터베이스 사용자(POSTGRESQL_USER) 및 postgres 관리자 사용자의 암호를 변경하는 데 지원되는 유일한 방법은 환경 변수 POSTGRESQL_PASSWORDPOSTGRESQL_ADMIN_PASSWORD 를 각각 변경하는 것입니다.

웹 콘솔에서 Pod 또는 배포 구성을 보거나 CLI로 환경 변수를 나열하여 현재 암호를 볼 수 있습니다.

$ oc set env pod <pod_name> --list

SQL 문을 통해 데이터베이스 암호를 변경하거나 앞서 언급한 환경 변수를 제외한 다른 방식으로 데이터베이스 암호를 변경하면 변수에 저장된 값과 실제 암호가 일치하지 않습니다. 데이터베이스 컨테이너가 시작될 때마다 환경 변수에 저장된 값으로 암호를 재설정합니다.

이러한 암호를 변경하려면 oc set env 명령을 사용하여 관련 배포 구성에 대해 원하는 환경 변수를 하나 또는 둘 다 업데이트합니다. 여러 배포 구성에서 이러한 환경 변수를 활용하는 경우 예를 들어 템플릿에서 생성된 애플리케이션의 경우 암호가 모든 위치에서 동기화되도록 각 배포 구성에서 변수를 업데이트해야 합니다. 이 작업은 모두 동일한 명령에서 수행할 수 있습니다.

$ oc set env dc <dc_name> [<dc_name_2> ...] \
  POSTGRESQL_PASSWORD=<new_password> \
  POSTGRESQL_ADMIN_PASSWORD=<new_admin_password>
중요

애플리케이션에 따라 애플리케이션의 다른 부분에서 일치하도록 업데이트해야 하는 다른 환경 변수가 있을 수 있습니다. 예를 들어, 데이터베이스 사용자의 암호와 일치해야 하는 프런트 엔드 포드에 더 많은 일반적인 benefits _USER 변수가 있을 수 있습니다. 애플리케이션당 필요한 모든 환경 변수에 대해 암호가 동기화되었는지 확인합니다. 그러지 않으면 트리거 시 Pod가 재배포되지 않을 수 있습니다.

환경 변수를 업데이트하면 구성 변경 트리거 가 있는 경우 데이터베이스 서버의 재배포가 트리거됩니다. 그러지 않으면 암호 변경 사항을 적용하려면 새 배포를 수동으로 시작해야 합니다.

새 암호가 적용되었는지 확인하려면 먼저 실행 중인 PostgreSQL 포드에 대한 원격 쉘 세션을 엽니다.

$ oc rsh <pod>

bash 쉘에서 데이터베이스 사용자의 새 암호를 확인합니다.

bash-4.2$ PGPASSWORD=<new_password> psql -h postgresql $POSTGRESQL_DATABASE $POSTGRESQL_USER -c "SELECT * FROM (SELECT current_database()) cdb CROSS JOIN (SELECT current_user) cu"

암호가 올바르게 변경된 경우 다음과 같은 테이블이 표시됩니다.

 current_database | current_user
------------------+--------------
 default          | django
(1 row)

bash 쉘에서 postgres 관리자의 새 암호를 확인합니다.

bash-4.2$ PGPASSWORD=<new_admin_password> psql -h postgresql $POSTGRESQL_DATABASE postgres -c "SELECT * FROM (SELECT current_database()) cdb CROSS JOIN (SELECT current_user) cu"

암호가 올바르게 변경된 경우 다음과 같은 테이블이 표시됩니다.

 current_database | current_user
------------------+--------------
 default          | postgres
(1 row)

3.3.5. 템플릿에서 데이터베이스 서비스 생성

OpenShift Container Platform에서는 새 데이터베이스 서비스를 쉽게 생성할 수 있는 템플릿을 제공합니다. 템플릿은 암호 값 자동 생성을 포함하여 사전 정의된 기본값을 사용하여 모든 필수 환경 변수(사용자, 암호, 데이터베이스 이름 등)를 정의하는 매개변수 필드를 제공합니다. 또한 배포 구성과 서비스를 모두 정의합니다.

PostgreSQL 템플릿은 초기 클러스터 설정 중에 클러스터 관리자가 기본 openshift 프로젝트에 등록되어 있어야 합니다. 필요한 경우 자세한 내용은 기본 이미지 스트림 및 템플릿 로드 를 참조하십시오.

사용 가능한 템플릿은 다음 두 가지입니다.

  • PostgreSQL-ephemeral 은 데이터베이스 콘텐츠에 임시 스토리지를 사용하기 때문에 개발 또는 테스트 목적으로만 사용됩니다. 즉, Pod가 다른 노드로 이동되거나 재배포되는 배포 구성으로 이동되는 등 데이터베이스 pod가 재시작되면 모든 데이터가 손실됩니다.
  • PostgreSQL-persistent 는 데이터베이스 데이터에 영구 볼륨 저장소를 사용합니다. 즉, 포드를 다시 시작한 후에도 데이터가 유지됩니다. 영구 볼륨을 사용하려면 OpenShift Container Platform 배포에 영구 볼륨 풀을 정의해야 합니다. 풀 설정에 대한 클러스터 관리자 지침은 NFS를 사용하는 영구 스토리지에 있습니다.

이러한 지침에 따라 템플릿을 인스턴스화할 수 있습니다.

서비스를 인스턴스화하면 사용자 이름, 암호 및 데이터베이스 이름 환경 변수를 데이터베이스에 액세스하려는 다른 구성 요소의 배포 구성에 복사할 수 있습니다. 그러면 해당 구성 요소가 정의된 서비스를 통해 데이터베이스에 액세스할 수 있습니다.

3.4. MongoDB

3.4.1. 개요

OpenShift Container Platform은 MongoDB를 실행하기 위한 컨테이너 이미지를 제공합니다. 이 이미지는 구성을 통해 제공된 사용자 이름, 암호 및 데이터베이스 이름 설정을 기반으로 데이터베이스 서비스를 제공할 수 있습니다.

3.4.2. 버전

현재 OpenShift Container Platform은 MongoDB 2.6,3.23.4 버전을 제공합니다.

3.4.3. 이미지

이러한 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/rhscl/mongodb-26-rhel7
$ docker pull registry.redhat.io/rhscl/mongodb-32-rhel7
$ docker pull registry.redhat.io/rhscl/mongodb-34-rhel7

CentOS 7 기반 이미지

이러한 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull centos/mongodb-26-centos7
$ docker pull centos/mongodb-32-centos7
$ docker pull centos/mongodb-34-centos7

이러한 이미지를 사용하려면 해당 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 ImageStream 정의 예를 찾을 수 있습니다.

3.4.4. 구성 및 사용

3.4.4.1. 데이터베이스 초기화

임시 볼륨 또는 영구 볼륨을 사용하여 MongoDB를 구성할 수 있습니다. 처음 볼륨을 사용하면 데이터베이스 관리자와 함께 데이터베이스가 생성됩니다. 그런 다음 MongoDB 데몬이 시작됩니다. 볼륨을 다른 컨테이너에 다시 연결하는 경우 데이터베이스, 데이터베이스 사용자 및 관리자 사용자가 생성되지 않고 MongoDB 데몬이 시작됩니다.

다음 명령은 임시 볼륨이 있는 컨테이너에서 MongoDB가 실행되고 있는 새 데이터베이스 포드 를 생성합니다.

$ oc new-app \
    -e MONGODB_USER=<username> \
    -e MONGODB_PASSWORD=<password> \
    -e MONGODB_DATABASE=<database_name> \
    -e MONGODB_ADMIN_PASSWORD=<admin_password> \
    registry.redhat.io/rhscl/mongodb-26-rhel7
3.4.4.2. 컨테이너에서 MongoDB 명령 실행

OpenShift Container Platform은 소프트웨어 컬렉션 (SCL)을 사용하여 MongoDB를 설치하고 시작합니다. 실행 중인 컨테이너 내부에서 MongoDB 명령을 실행하려면( 디버깅용) bash를 사용하여 호출해야 합니다.

이렇게 하려면 먼저 실행 중인 MongoDB 포드의 이름을 확인합니다. 예를 들어 현재 프로젝트의 Pod 목록을 볼 수 있습니다.

$ oc get pods

그런 다음 원격 쉘 세션을 원하는 Pod로 엽니다.

$ oc rsh <pod>

컨테이너를 입력하면 필요한 SCL이 자동으로 활성화됩니다.

이제 bash 쉘에서 mongo 명령을 실행하여 MongoDB 대화형 세션을 시작하고 일반 MongoDB 작업을 수행할 수 있습니다. 예를 들어 sampledb 데이터베이스로 전환하고 데이터베이스 사용자로 인증하려면 다음을 수행합니다.

bash-4.2$ mongo -u $MONGODB_USER -p $MONGODB_PASSWORD $MONGODB_DATABASE
MongoDB shell version: 2.6.9
connecting to: sampledb
>

완료되면 CTRL+D 를 눌러 MongoDB 세션을 종료합니다.

3.4.4.3. 환경 변수

MongoDB 사용자 이름, 암호, 데이터베이스 이름 및 관리자 암호는 다음 환경 변수를 사용하여 구성해야 합니다.

표 3.5. MongoDB 환경 변수
변수 이름설명

MONGODB_USER

생성할 MongoDB 계정의 사용자 이름입니다.

MONGODB_PASSWORD

사용자 계정의 암호입니다.

MONGODB_DATABASE

데이터베이스 이름.

MONGODB_ADMIN_PASSWORD

admin 사용자의 암호입니다.

주의

사용자 이름, 암호, 데이터베이스 이름 및 관리자 암호를 지정해야 합니다. 4개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 다시 시작하려고 합니다.

참고

관리자 사용자 이름은 admin 으로 설정되며 MONGODB_ADMIN_PASSWORD 환경 변수를 설정하여 암호를 지정해야 합니다. 이 프로세스는 데이터베이스 초기화 시 수행됩니다.

MongoDB 설정은 다음 환경 변수로 구성할 수 있습니다.

표 3.6. 추가 MongoDB 설정
변수 이름설명기본값

MONGODB_NOPREALLOC

데이터 파일 사전 할당을 비활성화합니다.

true

MONGODB_SMALLFILES

더 작은 기본 데이터 파일 크기를 사용하도록 MongoDB를 설정합니다.

true

MONGODB_QUIET

출력 양을 제한하려는 자동 모드에서 MongoDB를 실행합니다.

true

참고

텍스트 검색은 MongoDB 버전 2.6 이상에서 기본적으로 활성화되므로 구성 가능한 매개 변수가 없습니다.

3.4.4.4. 볼륨 마운트 지점

데이터베이스의 영구 스토리지를 활성화하기 위해 마운트된 볼륨을 사용하여 MongoDB 이미지를 실행할 수 있습니다.

  • /var/lib/mongodb/data - MongoDB가 데이터베이스 파일을 저장하는 데이터베이스 디렉터리입니다.
3.4.4.5. 암호 변경

암호는 이미지 구성의 일부이므로 데이터베이스 사용자(MONGODB_USER)의 암호를 변경하기 위해 지원되는 유일한 방법 및 admin 사용자는 환경 변수 MONGODB_PASSWORDMONGODB_ADMIN_PASSWORD 를 각각 변경하는 것입니다.

웹 콘솔에서 Pod 또는 배포 구성을 보거나 CLI로 환경 변수를 나열하여 현재 암호를 볼 수 있습니다.

$ oc set env pod <pod_name> --list

MongoDB에서 직접 데이터베이스 암호를 변경하면 변수에 저장된 값과 실제 암호가 일치하지 않습니다. 데이터베이스 컨테이너가 시작될 때마다 환경 변수에 저장된 값으로 암호를 재설정합니다.

이러한 암호를 변경하려면 oc set env 명령을 사용하여 관련 배포 구성에 대해 원하는 환경 변수를 하나 또는 둘 다 업데이트합니다. 여러 배포 구성에서 이러한 환경 변수를 활용하는 경우 예를 들어 템플릿에서 생성된 애플리케이션의 경우 암호가 모든 위치에서 동기화되도록 각 배포 구성에서 변수를 업데이트해야 합니다. 이 작업은 모두 동일한 명령에서 수행할 수 있습니다.

$ oc set env dc <dc_name> [<dc_name_2> ...] \
  MONGODB_PASSWORD=<new_password> \
  MONGODB_ADMIN_PASSWORD=<new_admin_password>
중요

애플리케이션에 따라 애플리케이션의 다른 부분에서 일치하도록 업데이트해야 하는 다른 환경 변수가 있을 수 있습니다. 예를 들어, 데이터베이스 사용자의 암호와 일치해야 하는 프런트 엔드 포드에 더 많은 일반적인 benefits _USER 변수가 있을 수 있습니다. 애플리케이션당 필요한 모든 환경 변수에 대해 암호가 동기화되었는지 확인합니다. 그러지 않으면 트리거 시 Pod가 재배포되지 않을 수 있습니다.

환경 변수를 업데이트하면 구성 변경 트리거 가 있는 경우 데이터베이스 서버의 재배포가 트리거됩니다. 그러지 않으면 암호 변경 사항을 적용하려면 새 배포를 수동으로 시작해야 합니다.

새 암호가 적용되었는지 확인하려면 먼저 실행 중인 MongoDB 포드에 원격 쉘 세션을 엽니다.

$ oc rsh <pod>

bash 쉘에서 데이터베이스 사용자의 새 암호를 확인합니다.

bash-4.2$ mongo -u $MONGODB_USER -p <new_password> $MONGODB_DATABASE --eval "db.version()"

암호가 올바르게 변경된 경우 다음과 같은 출력이 표시됩니다.

MongoDB shell version: 2.6.9
connecting to: sampledb
2.6.9

admin 사용자의 새 암호를 확인하려면 다음을 수행하십시오.

bash-4.2$ mongo -u admin -p <new_admin_password> admin --eval "db.version()"

암호가 올바르게 변경된 경우 다음과 같은 출력이 표시됩니다.

MongoDB shell version: 2.6.9
connecting to: admin
2.6.9

3.4.5. 템플릿에서 데이터베이스 서비스 생성

OpenShift Container Platform에서는 새 데이터베이스 서비스를 쉽게 생성할 수 있는 템플릿을 제공합니다. 템플릿은 암호 값 자동 생성을 포함하여 사전 정의된 기본값을 사용하여 모든 필수 환경 변수(사용자, 암호, 데이터베이스 이름 등)를 정의하는 매개변수 필드를 제공합니다. 또한 배포 구성과 서비스를 모두 정의합니다.

MongoDB 템플릿은 초기 클러스터 설정 중에 클러스터 관리자가 기본 openshift 프로젝트에 등록되어 있어야 합니다. 필요한 경우 자세한 내용은 기본 이미지 스트림 및 템플릿 로드 를 참조하십시오.

사용 가능한 템플릿은 다음 두 가지입니다.

  • MongoDB-ephemeral 은 데이터베이스 콘텐츠에 임시 스토리지를 사용하기 때문에 개발/테스트 목적으로만 사용됩니다. 즉, Pod가 다른 노드로 이동되거나 재배포되는 배포 구성으로 이동되는 등 데이터베이스 pod가 재시작되면 모든 데이터가 손실됩니다.
  • MongoDB-persistent 는 데이터베이스 데이터에 영구 볼륨 저장소를 사용합니다. 즉, Pod를 다시 시작한 후에도 데이터가 유지됩니다. 영구 볼륨을 사용하려면 OpenShift Container Platform 배포에 영구 볼륨 풀을 정의해야 합니다. 풀 설정에 대한 클러스터 관리자 지침은 NFS를 사용하는 영구 스토리지에 있습니다.

이러한 지침에 따라 템플릿을 인스턴스화할 수 있습니다.

서비스를 인스턴스화하면 사용자 이름, 암호 및 데이터베이스 이름 환경 변수를 데이터베이스에 액세스하려는 다른 구성 요소의 배포 구성에 복사할 수 있습니다. 그러면 해당 구성 요소가 정의된 서비스를 통해 데이터베이스에 액세스할 수 있습니다.

3.4.6. MongoDB 복제

참고

데이터베이스 이미지에 대한 클러스터링을 활성화하기 위한 구성은 예제로 제공되며 프로덕션용이 아닙니다.

Red Hat은 StatefulSet를 사용하여 MongoDB 복제(클러스터링)에 대한 개념 증명 템플릿 을 제공합니다. GitHub에서 예제 템플릿 을 가져올 수 있습니다.

예를 들어 현재 프로젝트의 템플릿 라이브러리에 예제 템플릿을 업로드하려면 다음을 수행합니다.

$ oc create -f \
    https://raw.githubusercontent.com/sclorg/mongodb-container/master/examples/petset/mongodb-petset-persistent.yaml
중요

예제 템플릿은 영구 스토리지를 사용합니다. 이 템플릿을 사용하려면 클러스터에서 영구 볼륨을 사용할 수 있어야 합니다.

OpenShift Container Platform에서 비정상 Pod(containers)를 자동으로 재시작하면 이러한 멤버 중 하나 이상이 충돌하거나 실패하는 경우 복제본 세트 멤버를 재시작합니다.

복제본 세트 멤버가 다운되거나 다시 시작되는 동안 다음 시나리오 중 하나일 수 있습니다.

  1. basic member가 다운된 경우:

    이 경우 나머지 두 멤버가 새 primary를 선택합니다. 지금까지 읽기는 영향을 받지 않지만 쓰기가 실패합니다. 성공적인 선택을 마친 후 일반적으로 쓰기 및 읽기 프로세스가 수행됩니다.

  2. SECONDARY 멤버 중 한 명은 다음과 같습니다.

    읽기 및 쓰기는 영향을 받지 않습니다. oplogSize 구성 및 쓰기 비율에 따라 세 번째 멤버는 복제본 세트를 다시 참여하지 못하여 데이터베이스 복사본을 다시 동기화해야 할 수 있습니다.

  3. 두 멤버가 모두 다운되었습니다.

    3개 멤버의 복제본 세트 멤버가 다른 멤버에 도달할 수 없는 경우 nfsnobody 역할이 있으면 해당 멤버가 됩니다. 이 경우 reads는SECONDARY 멤버에 의해 제공될 수 있으며 쓰기가 실패할 수 있습니다. 하나 이상의 멤버가 백업되는 즉시 선택 작업에서 새 VDDK 멤버를 선택하고 정상적으로 읽고 쓰기 프로세스를 수행합니다.

  4. 모든 멤버가 다운됨:

    이 경우 읽기 및 쓰기가 모두 실패합니다. 두 개 이상의 멤버가 백업되면, 선택에서 프로세스를 정상적으로 읽고 쓰는 후ary 및SECONDARY 멤버를 갖도록 복제본 세트를 다시 설정합니다.

이는 MongoDB에 권장되는 복제 전략입니다.

참고

프로덕션 환경의 경우 가능한 한 멤버를 분리해야 합니다. 하나 이상의 노드 선택 기능을 사용하여 StatefulSet Pod를 다른 노드에 예약하고 독립적인 볼륨에서 지원하는 스토리지를 제공하는 것이 좋습니다.

3.4.6.1. 제한 사항
  • MongoDB 3.2만 지원됩니다.
  • 축소하는 경우 복제본 세트 구성을 수동으로 업데이트해야 합니다.
  • 사용자 및 관리자 암호를 변경하는 작업은 수동 프로세스입니다. 필요한 것은 다음과 같습니다.

    • StatefulSet 구성에서 환경 변수 값 업데이트
    • 데이터베이스의 암호 변경 및
    • 다른 모든 Pod를 재시작합니다.
3.4.6.2. 예제 템플릿 사용

이미 세 개의 영구 볼륨이 있거나 영구 볼륨 프로비저닝을 구성했다고 가정합니다.

  1. MongoDB 클러스터를 생성하려는 새 거부를 생성합니다.

    $ oc new-project mongodb-cluster-example
  2. 예제 템플릿을 사용하여 새 애플리케이션을 생성합니다.

    $ oc new-app https://raw.githubusercontent.com/sclorg/mongodb-container/master/examples/petset/mongodb-petset-persistent.yaml

    이 명령은 세 개의 복제본 세트 멤버가 있는 MongoDB 클러스터를 생성했습니다.

  3. 새 MongoDB Pod의 상태를 확인합니다.

    $ oc get pods
    NAME        READY     STATUS    RESTARTS   AGE
    mongodb-0   1/1       Running   0          50s
    mongodb-1   1/1       Running   0          50s
    mongodb-2   1/1       Running   0          49s

예제 템플릿에서 클러스터를 생성한 후 세 개의 멤버가 있는 복제본 세트가 있습니다. Pod가 실행되면 다음과 같은 Pod에서 다양한 작업을 수행할 수 있습니다.

  • Pod 중 하나에 대한 로그 확인:

    $ oc logs mongodb-0
  • Pod에 로그인합니다.

    $ oc rsh mongodb-0
    sh-4.2$
  • MongoDB 인스턴스에 로그인합니다.

    sh-4.2$ mongo $MONGODB_DATABASE -u $MONGODB_USER -p$MONGODB_PASSWORD
    MongoDB shell version: 3.2.6
    connecting to: sampledb
    rs0:PRIMARY>
3.4.6.3. 확장

MongoDB는 복제본 세트의 홀수의 멤버를 권장합니다. 사용 가능한 영구 볼륨이 충분하거나 동적 스토리지 프로비저너가 있는 경우 oc scale 명령을 사용하여 확장합니다.

$ oc scale --replicas=5 statefulsets/mongodb

$ oc get pods
NAME        READY     STATUS    RESTARTS   AGE
mongodb-0   1/1       Running   0          9m
mongodb-1   1/1       Running   0          8m
mongodb-2   1/1       Running   0          8m
mongodb-3   1/1       Running   0          1m
mongodb-4   1/1       Running   0          57s

이렇게 하면 복제본 세트에 연결하고 해당 구성을 업데이트하는 새 포드가 생성됩니다.

참고

데이터베이스 크기가 oplogSize 구성보다 크면 기존 데이터베이스를 확장하려면 수동 개입이 필요합니다. 이러한 경우 새 멤버의 수동 초기 동기화가 필요합니다. 자세한 내용은 Oplog 및 MongoDB 복제 문서의 크기 확인을 참조하십시오.

3.4.6.4. 축소

복제본 세트를 축소하려면 5개의 멤버 또는 3개의 멤버에서 하나의 멤버로만 이동할 수 있습니다.

사전 조건이 충족된 경우 수동 개입 없이 확장(스토리지 가용성, 기존 데이터베이스 및 oplogSize) 축소에 항상 수동 개입이 필요할 수 있습니다.

축소하려면 다음을 수행합니다.

  1. oc scale 명령을 사용하여 새 복제본 수를 설정합니다.

    $ oc scale --replicas=3 statefulsets/mongodb

    새 복제본 수가 여전히 이전 수의 대부분을 구성하는 경우 삭제 된 Pod 중 하나가 VDDK 멤버 역할이 있는 경우 복제본 세트는 새 VDDK를 선택할 수 있습니다. 예를 들어 멤버 5개에서 3개의 멤버로 축소하는 경우.

    또는 더 낮은 수로 축소하면 replica set을 temporarily rendereds the replica set to have onlySECONDARY members and be read-only mode. 예를 들어 5개의 멤버에서 하나의 멤버로만 축소하는 경우.

  2. 더 이상 존재하지 않는 멤버를 제거하도록 복제본 세트 구성을 업데이트합니다.

    향후 이러한 구현에서는 (하위 API를 통해 노출되는 복제본 수)를 검사하고 다른 이유로 Pod가 다시 시작되지 않는지 확인하는 PreStop pod 후크를 설정할 수 있습니다.

  3. 해제된 Pod에서 사용하는 볼륨을 삭제합니다.

3.5. MariaDB

3.5.1. 개요

OpenShift Container Platform은 MariaDB를 실행하기 위한 컨테이너 이미지를 제공합니다. 이 이미지는 구성 파일에 제공된 사용자 이름, 암호 및 데이터베이스 이름 설정을 기반으로 데이터베이스 서비스를 제공할 수 있습니다.

3.5.2. 버전

현재 OpenShift Container Platform은 MariaDB 10.010.1 버전을 제공합니다.

3.5.3. 이미지

이러한 이미지는 필요에 따라 두 가지 플레이버로 제공됩니다.

  • RHEL 7
  • CentOS 7

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/rhscl/mariadb-100-rhel7
$ docker pull registry.redhat.io/rhscl/mariadb-101-rhel7

CentOS 7 기반 이미지

이러한 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull openshift/mariadb-100-centos7
$ docker pull centos/mariadb-101-centos7

이러한 이미지를 사용하려면 해당 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 ImageStream 정의 예를 찾을 수 있습니다.

3.5.4. 구성 및 사용

3.5.4.1. 데이터베이스 초기화

공유 볼륨을 처음 사용하면 데이터베이스 관리자 사용자 및 MariaDB 루트 사용자와 함께 데이터베이스가 생성됩니다(tekton _ROOT_PASSWORD 환경 변수를 지정하는 경우). 그런 다음 MariaDB 데몬이 시작됩니다. 볼륨을 다른 컨테이너에 다시 연결하는 경우 데이터베이스, 데이터베이스 사용자 및 관리자 사용자가 생성되지 않고 MariaDB 데몬이 시작됩니다.

다음 명령은 컨테이너에서 MariaDB가 실행되는 새 데이터베이스 포드 를 생성합니다.

$ oc new-app \
    -e MYSQL_USER=<username> \
    -e MYSQL_PASSWORD=<password> \
    -e MYSQL_DATABASE=<database_name> \
    registry.redhat.io/rhscl/mariadb-101-rhel7
3.5.4.2. 컨테이너에서 MariaDB 명령 실행

OpenShift Container Platform은 소프트웨어 컬렉션 (SCL)을 사용하여 MariaDB를 설치하고 시작합니다. 실행 중인 컨테이너 내부에서 MariaDB 명령을 실행하려면( 디버깅용) bash를 사용하여 호출해야 합니다.

이렇게 하려면 먼저 실행 중인 MariaDB 포드의 이름을 확인합니다. 예를 들어 현재 프로젝트의 Pod 목록을 볼 수 있습니다.

$ oc get pods

그런 다음 Pod에 대한 원격 쉘 세션을 엽니다.

$ oc rsh <pod>

컨테이너를 입력하면 필요한 SCL이 자동으로 활성화됩니다.

이제 bash 쉘에서 mysql 명령을 실행하여 MariaDB 대화형 세션을 시작하고 일반 MariaDB 작업을 수행할 수 있습니다. 예를 들어 데이터베이스 사용자로 인증하려면 다음을 수행합니다.

bash-4.2$ mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h $HOSTNAME $MYSQL_DATABASE
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.37 MySQL Community Server (GPL)
...
mysql>

완료되면 exit 또는 exit를 입력하여 MySQL 세션을 종료합니다.

3.5.4.3. 환경 변수

MariaDB 사용자 이름, 암호 및 데이터베이스 이름은 다음 환경 변수를 사용하여 구성해야 합니다.

표 3.7. MariaDB 환경 변수
변수 이름설명

MYSQL_USER

생성할 MySQL 계정의 사용자 이름입니다.

MYSQL_PASSWORD

사용자 계정의 암호입니다.

MYSQL_DATABASE

데이터베이스 이름.

MYSQL_ROOT_PASSWORD

root 사용자의 암호(선택 사항).

주의

사용자 이름, 암호 및 데이터베이스 이름을 지정해야 합니다. 3개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 재시작합니다.

MariaDB 설정은 다음 환경 변수로 구성할 수 있습니다.

표 3.8. 추가 MariaDB 설정
변수 이름설명기본값

MYSQL_LOWER_CASE_TABLE_NAMES

테이블 이름을 저장하고 비교하는 방법을 설정합니다.

0

MYSQL_MAX_CONNECTIONS

허용되는 최대 클라이언트 연결 수입니다.

151

MYSQL_MAX_ALLOWED_PACKET

한 패킷의 최대 크기 또는 생성된/지정 문자열입니다.

200M

MYSQL_FT_MIN_WORD_LEN

FULLTEXT 인덱스에 포함할 단어의 최소 길이입니다.

4

MYSQL_FT_MAX_WORD_LEN

FULLTEXT 인덱스에 포함될 단어의 최대 길이입니다.

20

MYSQL_AIO

네이티브 AIO가 손상된 경우 innodb_use_native_aio 설정 값을 제어합니다.

1

MYSQL_TABLE_OPEN_CACHE

모든 스레드에 대한 열려 있는 테이블 수입니다.

400

MYSQL_KEY_BUFFER_SIZE

인덱스 블록에 사용되는 버퍼의 크기입니다.

32m (또는 사용 가능한 메모리의 10%)

MYSQL_SORT_BUFFER_SIZE

정렬에 사용되는 버퍼의 크기입니다.

256K

MYSQL_READ_BUFFER_SIZE

순차적 검사에 사용되는 버퍼의 크기입니다.

8m (또는 사용 가능한 메모리의 5%)

MYSQL_INNODB_BUFFER_POOL_SIZE

InnoDB가 테이블 및 인덱스 데이터를 캐시하는 버퍼 풀의 크기입니다.

32m (또는 사용 가능한 메모리의 50%)

MYSQL_INNODB_LOG_FILE_SIZE

로그 그룹에 있는 각 로그 파일의 크기입니다.

8m (또는 사용 가능한 메모리의 15 %)

MYSQL_INNODB_LOG_BUFFER_SIZE

InnoDB가 디스크의 로그 파일에 쓰는 데 사용하는 버퍼의 크기입니다.

8m (또는 사용 가능한 메모리의 15 %)

MYSQL_DEFAULTS_FILE

대체 구성 파일을 가리킵니다.

/etc/my.cnf

MYSQL_BINLOG_FORMAT

binlog 형식을 설정하며 지원되는 값은 rowstatement 입니다.

statement

3.5.4.4. 볼륨 마운트 지점

MariaDB 이미지는 데이터베이스의 영구 스토리지를 활성화하기 위해 마운트된 볼륨을 사용하여 실행할 수 있습니다.

  • /var/lib/mysql/data - MySQL 데이터 디렉터리는 MariaDB에서 데이터베이스 파일을 저장합니다.
참고

호스트의 디렉터리를 컨테이너에 마운트할 때 마운트된 디렉터리에 적절한 권한이 있는지 확인합니다. 또한 디렉터리의 소유자와 그룹이 컨테이너 내부에서 실행 중인 사용자 이름과 일치하는지 확인합니다.

3.5.4.5. 암호 변경

암호는 이미지 구성의 일부이므로 데이터베이스 사용자(tekton_USER) 및 admin 사용자의 암호를 변경하는 데 지원되는 유일한 방법은 환경 변수tekton _PASSWORD 및tekton_ ROOT_PASSWORD 를 각각 변경하는 것입니다.

웹 콘솔에서 Pod 또는 배포 구성을 보거나 CLI로 환경 변수를 나열하여 현재 암호를 볼 수 있습니다.

$ oc set env pod <pod_name> --list

SQL 문을 통해 데이터베이스 암호를 변경하거나 앞서 언급한 환경 변수를 제외한 다른 방식으로 데이터베이스 암호를 변경하면 변수에 저장된 값과 실제 암호가 일치하지 않습니다. 데이터베이스 컨테이너가 시작될 때마다 환경 변수에 저장된 값으로 암호를 재설정합니다.

이러한 암호를 변경하려면 oc set env 명령을 사용하여 관련 배포 구성에 대해 원하는 환경 변수를 하나 또는 둘 다 업데이트합니다. 여러 배포 구성에서 이러한 환경 변수를 활용하는 경우 예를 들어 템플릿에서 생성된 애플리케이션의 경우 암호가 모든 위치에서 동기화되도록 각 배포 구성에서 변수를 업데이트해야 합니다. 이 작업은 모두 동일한 명령에서 수행할 수 있습니다.

$ oc set env dc <dc_name> [<dc_name_2> ...] \
  MYSQL_PASSWORD=<new_password> \
  MYSQL_ROOT_PASSWORD=<new_root_password>
중요

애플리케이션에 따라 애플리케이션의 다른 부분에서 일치하도록 업데이트해야 하는 다른 환경 변수가 있을 수 있습니다. 예를 들어, 데이터베이스 사용자의 암호와 일치해야 하는 프런트 엔드 포드에 더 많은 일반적인 benefits _USER 변수가 있을 수 있습니다. 애플리케이션당 필요한 모든 환경 변수에 대해 암호가 동기화되었는지 확인합니다. 그러지 않으면 트리거 시 Pod가 재배포되지 않을 수 있습니다.

환경 변수를 업데이트하면 구성 변경 트리거 가 있는 경우 데이터베이스 서버의 재배포가 트리거됩니다. 그러지 않으면 암호 변경 사항을 적용하려면 새 배포를 수동으로 시작해야 합니다.

새 암호가 적용되었는지 확인하려면 먼저 실행 중인 MariaDB 포드에 원격 쉘 세션을 엽니다.

$ oc rsh <pod>

bash 쉘에서 데이터베이스 사용자의 새 암호를 확인합니다.

bash-4.2$ mysql -u $MYSQL_USER -p<new_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"

암호가 올바르게 변경된 경우 다음과 같은 테이블이 표시됩니다.

+------------+---------------------+
| database() | user()              |
+------------+---------------------+
| sampledb   | user0PG@172.17.42.1 |
+------------+---------------------+

root 사용자의 새 암호를 확인하려면 다음을 수행하십시오.

bash-4.2$ mysql -u root -p<new_root_password> -h $HOSTNAME $MYSQL_DATABASE -te "SELECT * FROM (SELECT database()) db CROSS JOIN (SELECT user()) u"

암호가 올바르게 변경된 경우 다음과 같은 테이블이 표시됩니다.

+------------+------------------+
| database() | user()           |
+------------+------------------+
| sampledb   | root@172.17.42.1 |
+------------+------------------+

3.5.5. 템플릿에서 데이터베이스 서비스 생성

OpenShift Container Platform에서는 새 데이터베이스 서비스를 쉽게 생성할 수 있는 템플릿을 제공합니다. 템플릿은 암호 값 자동 생성을 포함하여 사전 정의된 기본값을 사용하여 모든 필수 환경 변수(사용자, 암호, 데이터베이스 이름 등)를 정의하는 매개변수 필드를 제공합니다. 또한 배포 구성과 서비스를 모두 정의합니다.

MariaDB 템플릿은 초기 클러스터 설정 중에 클러스터 관리자가 기본 openshift 프로젝트에 등록되어 있어야 합니다. 필요한 경우 자세한 내용은 기본 이미지 스트림 및 템플릿 로드 를 참조하십시오.

사용 가능한 템플릿은 다음 두 가지입니다.

  • MariaDB-ephemeral 은 데이터베이스 콘텐츠에 임시 스토리지를 사용하기 때문에 개발 또는 테스트 목적으로만 사용됩니다. 즉, Pod가 다른 노드로 이동되거나 재배포되는 배포 구성으로 이동되는 등 데이터베이스 pod가 재시작되면 모든 데이터가 손실됩니다.
  • MariaDB-persistent 는 데이터베이스 데이터에 영구 볼륨 저장소를 사용합니다. 즉, Pod를 다시 시작한 후에도 데이터가 유지됩니다. 영구 볼륨을 사용하려면 OpenShift Container Platform 배포에 영구 볼륨 풀을 정의해야 합니다. 풀 설정에 대한 클러스터 관리자 지침은 NFS를 사용하는 영구 스토리지에 있습니다.

이러한 지침에 따라 템플릿을 인스턴스화할 수 있습니다.

서비스를 인스턴스화하면 사용자 이름, 암호 및 데이터베이스 이름 환경 변수를 데이터베이스에 액세스하려는 다른 구성 요소의 배포 구성에 복사할 수 있습니다. 그러면 해당 구성 요소가 정의된 서비스를 통해 데이터베이스에 액세스할 수 있습니다.

3.5.6. 문제 해결

이 섹션에서는 발생할 수 있는 몇 가지 문제에 대해 설명하고 가능한 해결 방법을 제공합니다.

3.5.6.1. Linux 네이티브 AIO 실패

증상

MySQL 컨테이너가 시작되지 않고 로그에 다음과 같은 내용이 표시됩니다.

151113  5:06:56 InnoDB: Using Linux native AIO
151113  5:06:56  InnoDB: Warning: io_setup() failed with EAGAIN. Will make 5 attempts before giving up.
InnoDB: Warning: io_setup() attempt 1 failed.
InnoDB: Warning: io_setup() attempt 2 failed.
Waiting for MySQL to start ...
InnoDB: Warning: io_setup() attempt 3 failed.
InnoDB: Warning: io_setup() attempt 4 failed.
Waiting for MySQL to start ...
InnoDB: Warning: io_setup() attempt 5 failed.
151113  5:06:59  InnoDB: Error: io_setup() failed with EAGAIN after 5 attempts.
InnoDB: You can disable Linux Native AIO by setting innodb_use_native_aio = 0 in my.cnf
151113  5:06:59 InnoDB: Fatal error: cannot initialize AIO sub-system
151113  5:06:59 [ERROR] Plugin 'InnoDB' init function returned error.
151113  5:06:59 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
151113  5:06:59 [ERROR] Unknown/unsupported storage engine: InnoDB
151113  5:06:59 [ERROR] Aborting

설명

MariaDB의 스토리지 엔진은 리소스 제한으로 인해 커널의 AIO(Asynchronous I/O) 기능을 사용할 수 없었습니다.

해결

값이 0 으로 환경 변수tekton _AIO를 설정하여 AIO 사용을 완전히 끕니다. 후속 배포에서는 MySQL 구성 변수 innodb_use_native_aio 가 값이 0 이 되도록 정렬됩니다.

또는 aio-max-nr 커널 리소스를 늘립니다. 다음 예제에서는 aio-max-nr 의 현재 값을 검사하고 두 번 실행합니다.

$ sysctl fs.aio-max-nr
fs.aio-max-nr = 1048576
# sysctl -w fs.aio-max-nr=2097152

노드별 확인이며 다음 노드를 재부팅할 때까지 지속됩니다.

4장. 기타 이미지

4.1. 개요

이 주제 그룹에는 OpenShift Container Platform 사용자가 사용할 수 있는 다른 컨테이너 이미지에 대한 정보가 포함되어 있습니다.

4.2. Jenkins

4.2.1. 개요

OpenShift Container Platform은 실행 중인 Jenkins에 대한 컨테이너 이미지를 제공합니다. 이 이미지는 Jenkins 서버 인스턴스를 제공하며, 지속적인 테스트, 통합 및 제공을 위한 기본 흐름을 설정하는 데 사용할 수 있습니다.

이 이미지에는 OpenShift Container Platform에 정의된 BuildConfig 의 새 빌드를 트리거하는 샘플 Jenkins 작업도 포함되어 있으며, 해당 빌드의 출력을 테스트한 다음 성공적으로 빌드에서 프로덕션할 준비가 되었음을 나타내기 위해 출력을 다시 태그합니다. 자세한 내용은 README 를 참조하십시오.

OpenShift Container Platform은 Jenkins의 LTS 릴리스를 따릅니다. OpenShift Container Platform에서는 Jenkins 2.x가 포함된 이미지를 제공합니다. Jenkins 1.x가 포함된 별도의 이미지는 이전에 사용할 수 있었지만 더 이상 유지 관리되지 않습니다.

4.2.2. 이미지

OpenShift Container Platform Jenkins 이미지는 다음 두 가지 플레이버로 제공됩니다.

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/openshift3/jenkins-2-rhel7

CentOS 7 기반 이미지

이 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull openshift/jenkins-2-centos7

이러한 이미지를 사용하려면 해당 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다. 컨테이너 이미지 레지스트리 또는 외부 위치에서 이미지를 가리키는 이미지 스트림을 생성할 수도 있습니다. 그러면 OpenShift Container Platform 리소스에서 이미지 스트림을 참조할 수 있습니다. 제공된 모든 OpenShift Container Platform 이미지의 ImageStream 정의 예를 찾을 수 있습니다.

4.2.3. 구성 및 사용자 정의

4.2.3.1. 인증

Jenkins 인증은 다음 두 가지 방법으로 관리할 수 있습니다.

  • OpenShift 로그인 플러그인에서 제공하는 OpenShift Container Platform OAuth 인증
  • Jenkins에서 제공하는 표준 인증
4.2.3.1.1. OpenShift Container Platform OAuth 인증

OAuth 인증 은 Jenkins UI에서 글로벌 보안 구성 패널을 구성하거나 Jenkins 배포 구성의 OPENSHIFT_ENABLE_OAUTH 환경 변수를 false 이외의 값으로 설정하여 활성화됩니다. 이렇게 하면 Pod 데이터에서 구성 정보를 검색하거나 OpenShift Container Platform API 서버와 상호 작용하는 OpenShift 로그인 플러그인이 활성화됩니다.

유효한 인증 정보는 OpenShift Container Platform ID 공급자가 제어합니다. 예를 들어 Allow All 이 기본 ID 공급자인 경우 사용자 이름과 암호 모두에 비어 있지 않은 문자열을 제공할 수 있습니다.

Jenkins는 브라우저 액세스 및 브라우저 이외의 액세스를 모두 지원합니다.

유효한 사용자는 로그인 시 Jenkins 권한 부여 매트릭스에 자동으로 추가되며 OpenShift Container Platform Roles 에 따라 사용자가 보유할 특정 Jenkins 권한이 지정됩니다.

admin 역할의 사용자에게는 기존 Jenkins 관리자 권한이 있습니다. edit 또는 view 역할의 사용자는 점진적으로 더 적은 권한을 갖습니다. Jenkins 권한 매핑에 대한 OpenShift 역할에 대한 자세한 내용은 Jenkins 이미지 소스 리포지토리 README 를 참조하십시오.

참고

OpenShift Container Platform 클러스터 관리자가 OpenShift Container Platform ID 공급자에서 해당 사용자를 명시적으로 정의하고 사용자에게 admin 역할을 할당하지 않는 한 OpenShift Container Platform Jenkins 이미지에서 관리 권한으로 미리 채워진 admin 사용자에게는 OpenShift Container Platform OAuth가 사용되는 경우 해당 권한이 부여되지 않습니다.

Jenkins의 사용자 권한은 사용자가 처음 설정된 후 변경할 수 있습니다. OpenShift 로그인 플러그인은 OpenShift Container Platform API 서버에서 권한을 폴링하고 Jenkins에 저장된 각 사용자의 권한을 OpenShift Container Platform에서 검색된 권한으로 업데이트합니다. Jenkins UI를 사용하여 Jenkins 사용자에 대한 권한을 업데이트하는 경우 다음번 플러그인이 OpenShift Container Platform을 폴링할 때 권한 변경 사항을 덮어씁니다.

OPENSHIFT_PERMISSIONS_POLL_INTERVAL 환경 변수를 사용하여 폴링 발생 빈도를 제어할 수 있습니다. 기본 폴링 간격은 5분입니다.

OAuth 인증을 사용하여 새 Jenkins 서비스를 생성하는 가장 쉬운 방법은 아래에 설명된 대로 템플릿을 사용하는 것입니다.

4.2.3.1.2. Jenkins 표준 인증

템플릿을 사용하지 않고 이미지를 직접 실행하는 경우 기본적으로 Jenkins 인증이 사용됩니다.

Jenkins가 처음 시작되면 관리자 및 암호와 함께 구성이 생성됩니다. 기본 사용자 인증 정보는 adminpassword 입니다. 표준 Jenkins 인증을 사용하는 경우에만 JENKINS_PASSWORD 환경 변수를 설정하여 기본 암호를 구성합니다.

표준 Jenkins 인증을 사용하여 새 Jenkins 애플리케이션을 생성하려면 다음을 수행합니다.

$ oc new-app -e \
    JENKINS_PASSWORD=<password> \
    openshift/jenkins-2-centos7
4.2.3.2. 환경 변수

Jenkins 서버는 다음 환경 변수로 구성할 수 있습니다.

  • OPENSHIFT_ENABLE_OAUTH (기본값: false)

    Jenkins에 로그인할 때 OpenShift 로그인 플러그인이 인증을 관리하는지 여부를 결정합니다. 활성화하려면 true로 설정합니다.

  • JENKINS_PASSWORD (기본값: 암호)

    표준 Jenkins 인증을 사용하는 경우 admin 사용자의 암호입니다. OPENSHIFT_ENABLE_OAUTHtrue로 설정된 경우 해당되지 않습니다.

  • OPENSHIFT_JENKINS_JVM_ARCH

    Jenkins를 호스팅하는 데 사용되는 JVM을 재정의하려면 x86_64 또는 i386 로 설정합니다. 메모리 효율성을 위해 기본적으로 Jenkins 이미지는 2GiB의 메모리 제한이 있는 컨테이너에서 실행되는 경우 32비트 JVM을 동적으로 사용합니다.

  • JAVA_MAX_HEAP_PARAM
    CONTAINER_HEAP_PERCENT (기본값: 0.5, 또는 50%)
    JENKINS_MAX_HEAP_UPPER_BOUND_MB

    이 값은 Jenkins JVM의 최대 힙 크기를 제어합니다. JAVA_MAX_HEAP_PARAM 이 설정된 경우(예: -Xmx512m) 값이 우선합니다. 그렇지 않으면 최대 힙 크기는 컨테이너 메모리 제한의 CONTAINER_HEAP_PERCENT%(예: 0.5, 또는 50%)로 동적으로 계산되며, 선택적으로 JENKINS_MAX_HEAP_UPPER_BOUND_MB MiB(예: 512)에서 제한됩니다.

    기본적으로 Jenkins JVM의 최대 힙 크기는 제한 없이 컨테이너 메모리 제한의 50%로 설정됩니다.

  • JAVA_INITIAL_HEAP_PARAM
    CONTAINER_INITIAL_PERCENT

    이 값은 Jenkins JVM의 초기 힙 크기를 제어합니다. JAVA_INITIAL_HEAP_PARAM 이 설정된 경우(예: -Xms32m) 값이 우선합니다. 그렇지 않으면 초기 힙 크기는 동적으로 계산된 최대 힙 크기의 CONTAINER_INITIAL_PERCENT%(예: 0.1, 또는 10%)로 동적으로 계산될 수 있습니다.

    기본적으로 초기 힙 크기 조정은 JVM에 남아 있습니다.

  • CONTAINER_CORE_LIMIT

    설정되는 경우 내부 JVM 스레드 수를 조정하는 데 사용되는 정수 코어 수를 지정합니다. 설정 예: 2.

  • JAVA_TOOL_OPTIONS (기본값: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true)

    이 컨테이너에서 실행되는 모든 JVM에서 수행할 옵션을 지정합니다. 이 값을 덮어쓰는 것은 권장되지 않습니다.

  • JAVA_GC_OPTS (기본값: -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90))

    Jenkins JVM 가비지 컬렉션 매개변수를 지정합니다. 이 값을 덮어쓰는 것은 권장되지 않습니다.

  • JENKINS_JAVA_OVERRIDES

    Jenkins JVM에 대한 추가 옵션을 지정합니다. 이러한 옵션은 위의 Java 옵션을 포함하여 다른 모든 옵션에 추가되며 필요한 경우 옵션을 재정의하는 데 사용될 수 있습니다. 각각의 추가 옵션을 공백으로 구분합니다. 옵션에 공백 문자가 포함되어 있으면 백슬래시로 이스케이프합니다. 설정 예: -Dfoo -Dbar; -Dfoo=first\ value -Dbar=second\ value

  • JENKINS_OPTS

    Jenkins에 대한 인수를 지정합니다.

  • INSTALL_PLUGINS

    컨테이너가 처음 실행될 때 또는 OVERRIDE_PV_PLUGINS_WITH_IMAGE_PLUGINStrue 로 설정된 경우 설치할 추가 Jenkins 플러그인을 지정합니다. 플러그인은 쉼표로 구분된 이름:버전 쌍 목록으로 지정됩니다. 설정 예: git:3.7.0,subversion:2.10.2

  • OPENSHIFT_PERMISSIONS_POLL_INTERVAL (기본값: 300000 - 5분)

    Jenkins에서 정의된 각 사용자와 연결된 권한에 대해 OpenShift Container Platform을 폴링하는 빈도를 밀리초 단위로 지정합니다.

  • OVERRIDE_PV_CONFIG_WITH_IMAGE_CONFIG (기본값: false)

    Jenkins 구성 디렉토리에 대해 OpenShift Container Platform 영구 볼륨을 사용하여 이 이미지를 실행하는 경우 영구 볼륨 클레임 생성에 의해 영구 볼륨이 할당되므로 이미지에서 영구 볼륨으로 구성 전송만 수행합니다. 이 이미지를 확장하고 초기 시작 후 사용자 정의 이미지의 구성을 업데이트하는 사용자 정의 이미지를 생성하는 경우 이 환경 변수를 true 로 설정하지 않으면 기본적으로 복사되지 않습니다.

  • OVERRIDE_PV_PLUGINS_WITH_IMAGE_PLUGINS (default: false)

    Jenkins 구성 디렉토리에 대해 OpenShift Container Platform 영구 볼륨을 사용하여 이 이미지를 실행하는 경우 영구 볼륨 클레임 생성에 의해 영구 볼륨이 할당되므로 이미지에서 영구 볼륨으로 플러그인 전송을 수행하면 이미지의 첫 번째 시작만 수행됩니다. 이 이미지를 확장하고 초기 시작 후 사용자 정의 이미지의 플러그인을 업데이트하는 사용자 정의 이미지를 생성하는 경우 이 환경 변수를 true 로 설정하지 않으면 기본적으로 복사되지 않습니다.

  • ENABLE_FATAL_ERROR_LOG_FILE (기본값: false)

    Jenkins 구성 디렉토리에 대해 OpenShift Container Platform 영구 클레임으로 이 이미지를 실행하는 경우 이 환경 변수를 사용하면 치명적 오류가 발생할 때 치명적 오류 로그 파일을 유지할 수 있습니다. 치명적 오류 파일은 /var/lib/jenkins/logs에 저장됩니다.

  • NODEJS_SLAVE_IMAGE

    이 값을 설정하면 기본 NodeJS 에이전트 Pod 구성에 사용되는 이미지가 재정의됩니다. 기본 NodeJS 에이전트 pod는 Jenkins 이미지의 CentOS 또는 RHEL 버전을 실행할지 여부에 따라 docker .io/openshift.io/openshift3/jenkins-agent-agent-nodejs-8-rhel7 을 사용합니다. 이 변수는 Jenkins를 처음 시작하기 전에 설정되어야 효과를 발휘합니다.

  • MAVEN_SLAVE_IMAGE

    이 값을 설정하면 기본 maven 에이전트 pod 구성에 사용되는 이미지가 재정의됩니다. 기본 maven 에이전트 pod는 docker.io/openshift/jenkins-agent-35-centos7 또는 registry.redhat.io/openshift3/openshift3/jenkins- agent-maven-35-rhel7 을 사용하고 있으며, Jenkins 이미지의 CentOS 또는 RHEL 버전을 실행 중인지에 따라 docker.io/openshift3/jenkins-agent-35-rhel7을 사용합니다. 이 변수는 Jenkins를 처음 시작하기 전에 설정되어야 효과를 발휘합니다.

  • JENKINS_UC_INSECURE

    Jenkins Update Center 리포지토리에서 유효하지 않은 SSL 인증서를 사용하는 경우 Jenkins 플러그인 다운로드가 허용되는지 여부를 결정합니다. 알 수 없는 CA가 있는 자체 서명된 인증서를 사용하거나 enteprise 프록시가 man-in-the-middle 가로채기를 수행하는 경우 이러한 경우가 있습니다. 이 변수는 플러그인 다운로드에 적용되며, Jenkins 이미지 빌드 중에 또는 Jenkins 이미지의 확장 기능이 빌드된 경우 발생할 수 있습니다. Jenkins 이미지를 실행하고 plugins.txt가 있는 S2I 또는 INSTALL_PLUGINS 환경 변수를 포함하여 추가 플러그인을 다운로드하는 옵션 중 하나를 사용합니다. 이 변수를 활성화하려면 true로 설정합니다.

4.2.3.3. 프로젝트 간 액세스

동일한 프로젝트에서 배포가 아닌 다른 위치에서 Jenkins를 실행하려는 경우 Jenkins에 액세스 토큰을 제공하여 프로젝트에 액세스해야 합니다.

  1. Jenkins가 액세스해야 하는 프로젝트에 액세스할 수 있는 적절한 권한이 있는 서비스 계정의 시크릿을 식별합니다.

    $ oc describe serviceaccount jenkins
    Name:       default
    Labels:     <none>
    Secrets:    {  jenkins-token-uyswp    }
                {  jenkins-dockercfg-xcr3d    }
    Tokens:     jenkins-token-izv1u
                jenkins-token-uyswp

    이 경우 시크릿의 이름은 jenkins-token-uyswp입니다.

  2. 시크릿에서 토큰을 검색합니다.

    $ oc describe secret <secret name from above> # for example, jenkins-token-uyswp
    Name:       jenkins-token-uyswp
    Labels:     <none>
    Annotations:    kubernetes.io/service-account.name=jenkins,kubernetes.io/service-account.uid=32f5b661-2a8f-11e5-9528-3c970e3bf0b7
    Type:   kubernetes.io/service-account-token
    Data
    ====
    ca.crt: 1066 bytes
    token:  eyJhbGc..<content cut>....wRA

토큰 필드에는 Jenkins가 프로젝트에 액세스하는 데 필요한 토큰 값이 포함되어 있습니다.

4.2.3.4. 볼륨 마운트 지점

구성을 위한 영구 스토리지가 활성화되도록 마운트된 볼륨을 사용하여 Jenkins 이미지를 실행할 수 있습니다.

  • /var/lib/jenkins - Jenkins가 작업 정의를 포함한 구성 파일을 저장하는 데이터 디렉토리입니다.
4.2.3.5. S2I(Source-to-Image)를 통해 Jenkins 이미지 사용자 정의

공식 OpenShift Container Platform Jenkins 이미지를 사용자 정의하려면 다음 두 가지 옵션이 있습니다.

  • Docker 계층 지정 사용.
  • 이 이미지를 여기에 설명된 S2I(Source-to-Image) 빌더로 사용합니다.

S2I 를 사용하여 사용자 정의 Jenkins 작업 정의, 추가 플러그인 또는 제공된 config.xml 파일을 자체 사용자 정의 구성으로 교체할 수 있습니다.

Jenkins 이미지에 수정 사항을 포함하려면 다음 디렉터리 구조를 사용하는 Git 리포지토리가 있어야 합니다.

plugins
이 디렉토리에는 Jenkins로 복사하려는 바이너리 Jenkins 플러그인이 있습니다.
plugins.txt
이 파일에는 설치하려는 플러그인이 나열됩니다.
pluginId:pluginVersion
configuration/jobs
이 디렉토리에는 Jenkins 작업 정의가 있습니다.
configuration/config.xml
이 파일에는 사용자 정의 Jenkins 구성이 있습니다.

configuration/ 디렉토리의 내용은 /var/lib/jenkins/ 디렉토리에 복사되므로 credentials.xml 와 같은 추가 파일을 포함할 수도 있습니다.

다음은 OpenShift Container Platform의 Jenkins 이미지를 사용자 지정하는 빌드 구성의 예입니다.

apiVersion: v1
kind: BuildConfig
metadata:
  name: custom-jenkins-build
spec:
  source:                       1
    git:
      uri: https://github.com/custom/repository
    type: Git
  strategy:                     2
    sourceStrategy:
      from:
        kind: ImageStreamTag
        name: jenkins:latest
        namespace: openshift
    type: Source
  output:                       3
    to:
      kind: ImageStreamTag
      name: custom-jenkins:latest
1
source 필드는 위에서 설명한 레이아웃으로 소스 Git 리포지토리를 정의합니다.
2
strategy 필드는 빌드의 소스 이미지로 사용할 원본 Jenkins 이미지를 정의합니다.
3
output 필드는 공식 Jenkins 이미지 대신 배포 구성에 사용할 수 있는 사용자 정의 Jenkins 이미지를 정의합니다.
4.2.3.6. Jenkins Kubernetes 플러그인 구성

OpenShift Container Platform Jenkins 이미지에는 Kubernetes 및 OpenShift Container Platform을 사용하여 여러 컨테이너 호스트에서 Jenkins 에이전트를 동적으로 프로비저닝할 수 있는 사전 설치된 Kubernetes 플러그인이 포함되어 있습니다.

Kubernetes 플러그인을 사용하도록 OpenShift Container Platform은 Jenkins 에이전트로 사용하기에 적합한 5개의 이미지( 기본, Maven, Node.js )를 제공합니다. 자세한 내용은 Jenkins 에이전트 를 참조하십시오.

참고

jenkins-slave-maven-* 및 jenkins-slave-nodejs-* 이미지는 v3.10 릴리스 주기 동안 더 이상 사용되지 않는 것으로 표시됩니다. 사용자가 애플리케이션을 최신 jenkins-agent-maven-* 및 jenkins-agent-nodejs-* 이미지로 마이그레이션할 수 있도록 이미지가 중간에 계속 존재합니다.

Maven 및 Node.js 에이전트 이미지 둘 다 OpenShift Container Platform Jenkins 이미지의 쿠버네티스 플러그인 구성에서 쿠버네티스 포드 템플릿 이미지로 자동 구성됩니다. 해당 구성에는 "이 프로젝트를 실행할 수 있는" 설정에 따라 모든 Jenkins 작업에 적용할 수 있는 각 이미지의 레이블이 포함됩니다. 레이블이 적용되면 해당 에이전트 이미지를 실행하는 OpenShift Container Platform Pod에서 지정된 작업 실행이 수행됩니다.

Jenkins 이미지는 Kubernetes 플러그인의 추가 에이전트 이미지 자동 검색 및 자동 구성 기능도 제공합니다. OpenShift 동기화 플러그인 을 사용하면 Jenkins 시작 시 Jenkins 이미지가 실행 중인 프로젝트 또는 플러그인 구성에 구체적으로 나열된 프로젝트에서 다음을 검색합니다.

  • role 레이블이 jenkins-slave 로 설정된 이미지 스트림
  • role 주석이 jenkins-slave 로 설정된 이미지 스트림 태그
  • role 레이블이 jenkins-slave로 설정된 ConfigMap

적절한 레이블이 있는 이미지 스트림 또는 적절한 주석이 있는 이미지 스트림 태그를 찾으면 해당 Kubernetes 플러그인 구성이 생성되므로 이미지 스트림에서 제공하는 컨테이너 이미지를 실행하는 포드에서 Jenkins 작업을 실행하도록 할당할 수 있습니다.

이미지 스트림 또는 이미지 스트림 태그의 이름 및 이미지 참조는 Kubernetes 플러그인 pod 템플릿의 이름 및 이미지 필드에 매핑됩니다. slave-label 키로 이미지 스트림 또는 이미지 스트림 태그 오브젝트에 주석을 설정하여 Kubernetes 플러그인 pod 템플릿의 레이블 필드를 제어할 수 있습니다. 그러지 않으면 이름이 레이블로 사용됩니다.

적절한 레이블이 있는 ConfigMap을 찾으면 ConfigMap의 키-값 데이터 페이로드에 있는 값에 Jenkins 및 Kubernetes 플러그인 pod 템플릿의 구성 형식과 일치하는 XML이 포함되어 있다고 가정합니다. 이미지 스트림 또는 이미지 스트림 태그 대신 ConfigMap을 사용할 때 유의해야 할 중요한 차이점은 Kubernetes 플러그인 pod 템플릿의 모든 다양한 필드를 제어할 수 있다는 것입니다.

다음은 예제 ConfigMap입니다.

kind: ConfigMap
apiVersion: v1
metadata:
  name: jenkins-agent
  labels:
    role: jenkins-slave
data:
  template1: |-
    <org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
      <inheritFrom></inheritFrom>
      <name>template1</name>
      <instanceCap>2147483647</instanceCap>
      <idleMinutes>0</idleMinutes>
      <label>template1</label>
      <serviceAccount>jenkins</serviceAccount>
      <nodeSelector></nodeSelector>
      <volumes/>
      <containers>
        <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
          <name>jnlp</name>
          <image>openshift/jenkins-agent-maven-35-centos7:v3.10</image>
          <privileged>false</privileged>
          <alwaysPullImage>true</alwaysPullImage>
          <workingDir>/tmp</workingDir>
          <command></command>
          <args>${computer.jnlpmac} ${computer.name}</args>
          <ttyEnabled>false</ttyEnabled>
          <resourceRequestCpu></resourceRequestCpu>
          <resourceRequestMemory></resourceRequestMemory>
          <resourceLimitCpu></resourceLimitCpu>
          <resourceLimitMemory></resourceLimitMemory>
          <envVars/>
        </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
      </containers>
      <envVars/>
      <annotations/>
      <imagePullSecrets/>
      <nodeProperties/>
    </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>

시작된 후 OpenShift 동기화 플러그인 은 OpenShift Container Platform의 API 서버를 모니터링하여 ImageStreams,ImageStreamTags, ConfigMaps 에 대한 업데이트를 확인하고 Kubernetes 플러그인의 구성을 조정합니다.

특히 다음 규칙이 적용됩니다.

  • ConfigMap,ImageStream 또는 ImageStreamTag 에서 레이블 또는 주석을 제거하면 Kubernetes 플러그인 구성에서 기존 PodTemplate 이 삭제됩니다.
  • 마찬가지로 이러한 오브젝트가 제거되면 Kubernetes 플러그인에서 해당 구성이 제거됩니다.
  • 반대로 적절히 레이블 또는 주석이 달린 ConfigMap,ImageStream 또는 ImageStreamTag 오브젝트를 생성하거나 초기 생성 후 레이블을 추가하면 쿠버네티스 플러그인 구성에 PodTemplate 이 생성됩니다.
  • ConfigMap 양식을 통한 PodTemplate 의 경우 PodTemplateConfigMap 데이터에 대한 변경 사항이 Kubernetes 플러그인 구성의 PodTemplate 설정에 적용되며 ConfigMap 변경 간에 Jenkins UI를 통해 변경한 PodTemplate 변경 사항이 재정의됩니다.

컨테이너 이미지를 Jenkins 에이전트로 사용하려면 이미지가 슬레이브 에이전트를 진입점으로 실행해야 합니다. 이 작업에 대한 자세한 내용은 공식 Jenkins 문서를 참조하십시오.

4.2.3.6.1. 권한 고려 사항

이전 ConfigMap 예에서 Pod 템플릿 XML의 < serviceAccount > 요소는 결과 Pod에 사용되는 OpenShift Container Platform 서비스 계정입니다. 서비스 계정과 연결된 권한을 사용하여 Pod에 마운트된 서비스 계정 인증 정보는 포드에서 허용되는 OpenShift Container Platform 마스터 작업을 제어합니다.

다음은 OpenShift Container Platform Jenkins 이미지에서 실행되는 Kubernetes 플러그인에서 시작되는 Pod에 사용되는 서비스 계정을 고려합니다.

  • OpenShift Container Platform에서 제공하는 Jenkins에 대한 템플릿 예를 사용하는 경우 Jenkins가 실행되는 프로젝트에 대해 jenkins 서비스 계정이 edit 역할로 정의되고 마스터 Jenkins 포드에 해당 서비스 계정이 마운트됩니다.
  • Jenkins 구성에 삽입된 두 개의 기본 Maven 및 NodeJS 포드 템플릿도 마스터와 동일한 서비스 계정을 사용하도록 설정됩니다.
  • 필요한 레이블 또는 주석이 있는 이미지 스트림 또는 이미지 스트림 태그의 결과로 OpenShift 동기화 플러그인에서 자동으로 검색하면 해당 서비스 계정이 마스터의 서비스 계정으로 설정됩니다.
  • Jenkins 및 쿠버네티스 플러그인에 포드 템플릿 정의를 제공할 수 있는 그 밖의 방법에서는 사용할 서비스 계정을 명시적으로 지정해야 합니다.
  • 다른 방법으로는 Jenkins 콘솔을 사용하거나 쿠버네티스 플러그인에서 제공하는 podTemplate 파이프라인 DSL을 포함하거나 포드 템플릿의 XML 구성 데이터가 있는 ConfigMap에 레이블을 지정하는 방법이 있습니다.
  • 서비스 계정의 값을 지정하지 않으면 default 서비스 계정이 사용됩니다.
  • 사용 중인 모든 서비스 계정이 OpenShift Container Platform 내에 정의된 필요한 권한, 역할 등을 가지고 포드 내에서 조작할 수 있는 모든 프로젝트를 조작해야 합니다.

4.2.4. 사용법

4.2.4.1. 템플릿에서 Jenkins 서비스 생성

템플릿 은 모든 환경 변수(암호)를 사전 정의된 기본값으로 정의하는 매개변수 필드를 제공합니다. OpenShift Container Platform은 새로운 Jenkins 서비스 생성을 용이하게 해주는 템플릿을 제공합니다. Jenkins 템플릿은 초기 클러스터 설정 중에 클러스터 관리자가 기본 openshift 프로젝트에 등록되어 있어야 합니다. 필요한 경우 자세한 내용은 기본 이미지 스트림 및 템플릿 로드 를 참조하십시오.

배포 구성서비스.

참고

Pod가 다른 노드로 이동되거나 배포 구성 업데이트에 따라 재배포가 트리거되는 경우 Pod를 재시작할 수 있습니다.

  • jenkins-persistent 에서는 영구 볼륨 저장소를 사용합니다. pod를 다시 시작해도 데이터가 유지됩니다.

Jenkins를 사용하려면 템플릿을 인스턴스화 해야 합니다.

4.2.4.2. Jenkins 쿠버네티스 플러그인 사용

새 Jenkins 서비스 생성

아래 샘플에서 openshift-jee-sample BuildConfig로 인해 Jenkins maven 에이전트 포드가 동적으로 프로비저닝됩니다. 포드는 일부 Java 소스를 복제하고 WAR 파일을 빌드한 다음 두 번째 BuildConfig(openshift-jee-sample-docker)가 실행되어 새로 생성된 WAR 파일을 컨테이너 이미지로 계층화합니다.

비슷한 목표를 달성하는 풀 샘플은 여기에서 확인할 수 있습니다.

예 4.1. Jenkins Kubernetes 플러그인을 사용하는 BuildConfig의 예

kind: List
apiVersion: v1
items:
- kind: ImageStream
  apiVersion: v1
  metadata:
    name: openshift-jee-sample
- kind: BuildConfig
  apiVersion: v1
  metadata:
    name: openshift-jee-sample-docker
  spec:
    strategy:
      type: Docker
    source:
      type: Docker
      dockerfile: |-
        FROM openshift/wildfly-101-centos7:latest
        COPY ROOT.war /wildfly/standalone/deployments/ROOT.war
        CMD $STI_SCRIPTS_PATH/run
      binary:
        asFile: ROOT.war
    output:
      to:
        kind: ImageStreamTag
        name: openshift-jee-sample:latest
- kind: BuildConfig
  apiVersion: v1
  metadata:
    name: openshift-jee-sample
  spec:
    strategy:
      type: JenkinsPipeline
      jenkinsPipelineStrategy:
        jenkinsfile: |-
          node("maven") {
            sh "git clone https://github.com/openshift/openshift-jee-sample.git ."
            sh "mvn -B -Popenshift package"
            sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war"
          }
    triggers:
    - type: ConfigChange

동적으로 생성된 Jenkins 에이전트 포드의 사양을 재정의할 수도 있습니다. 다음은 컨테이너 메모리를 재정의하고 환경 변수를 지정하는 위 예제를 수정하는 것입니다.

예 4.2. Jenkins Kubernetes 플러그인을 사용하여 메모리 제한 및 환경 변수를 지정하는 BuildConfig의 예

kind: BuildConfig
apiVersion: v1
metadata:
  name: openshift-jee-sample
spec:
  strategy:
    type: JenkinsPipeline
    jenkinsPipelineStrategy:
      jenkinsfile: |-
        podTemplate(label: "mypod", 1
                    cloud: "openshift", 2
                    inheritFrom: "maven", 3
                    containers: [
            containerTemplate(name: "jnlp", 4
                              image: "openshift/jenkins-agent-maven-35-centos7:v3.10", 5
                              resourceRequestMemory: "512Mi", 6
                              resourceLimitMemory: "512Mi", 7
                              envVars: [
              envVar(key: "CONTAINER_HEAP_PERCENT", value: "0.25") 8
            ])
          ]) {
          node("mypod") { 9
            sh "git clone https://github.com/openshift/openshift-jee-sample.git ."
            sh "mvn -B -Popenshift package"
            sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war"
          }
        }
  triggers:
  - type: ConfigChange
1
"mypod"라는 새 Pod 템플릿이fly에서 정의됩니다. 새 Pod 템플릿 이름이 아래의 노드 스탠자에서 참조됩니다.
2
"cloud" 값을 "openshift"로 설정해야 합니다.
3
새 포드 템플릿은 기존 포드 템플릿의 구성을 상속할 수 있습니다. 이 경우 OpenShift Container Platform에 의해 미리 정의된 "maven" 포드 템플릿을 상속합니다.
4
기존 컨테이너에서 값을 재정의하므로 이름으로 지정해야 합니다. OpenShift Container Platform과 함께 제공되는 모든 Jenkins 에이전트 이미지는 컨테이너 이름 "jnlp"를 사용합니다.
5
컨테이너 이미지를 다시 지정해야 합니다. 이것은 확인된 문제입니다.
6
512Mi의 메모리 요청이 지정됩니다.
7
512Mi의 메모리 제한이 지정됩니다.
8
값이 "0.25"인 환경 변수 CONTAINER_HEAP_PERCENT가 지정되었습니다.
9
노드 스탠자는 위에 새로 정의된 Pod 템플릿의 이름을 참조합니다.

기본적으로 Pod는 빌드가 완료되면 삭제됩니다. 이 동작은 플러그인을 통해 또는 pipeline Jenkinsfile 내에서 수정할 수 있습니다. 자세한 내용은 에이전트 Pod 보존을 참조하십시오.

Kubernetes 플러그인 구성에 대한 자세한 내용은 Kubernetes 플러그인 설명서를 참조하십시오.

4.2.4.3. 메모리 요구 사항

제공된 Jenkins Ephemeral 또는 Jenkins Persistent 템플릿에서 배포하는 경우 기본 메모리 제한은 512MiB입니다.

Jenkins 에서 사용하는 JVM 튜닝에 대한 배경 정보는 OpenShift Container Platform에서 OpenJDK 를 참조하십시오.

메모리 효율성을 위해 기본적으로 Jenkins 이미지는 2GiB의 메모리 제한이 있는 컨테이너에서 실행되는 경우 32비트 JVM을 동적으로 사용합니다. 이 동작은 OPENSHIFT_JENKINS_JVM_ARCH 환경 변수로 재정의할 수 있습니다.

기본적으로 Jenkins JVM은 힙에 대해 컨테이너 메모리 제한의 50%를 사용합니다. 이 값은 CONTAINER_HEAP_PERCENT 환경 변수를 통해 수정할 수 있습니다. 상한값으로 제한하거나 완전히 재정의할 수도 있습니다. 자세한 내용은 환경 변수 를 참조하십시오.

파이프라인에서 로컬로 실행되는 쉘 스크립트 또는 oc 명령과 같이 Jenkins 컨테이너에서 실행되는 다른 모든 프로세스는 기본적으로 OOM 종료를 생성하지 않고 나머지 256MiB 메모리를 사용할 수 없다는 점을 고려하십시오. 따라서 가능한 경우 파이프라인은 에이전트 컨테이너에서 외부 명령을 실행하는 것이 좋습니다.

Jenkins 쿠버네티스 플러그인에 의해 생성된 에이전트 컨테이너에서 메모리 요청 및 제한 값을 지정하는 것이 좋습니다. admin은 Jenkins 구성을 통해 에이전트별 이미지에 기본값을 설정할 수 있습니다. 메모리 요청 및 제한은 위에 설명된 대로 컨테이너별로 덮어쓸 수도 있습니다.

Jenkins Ephemeral 또는 Jenkins Persistent 템플릿을 인스턴스화할 때 MEMORY_LIMIT paramenter를 재정의하여 Jenkins에서 사용할 수 있는 메모리 양을 늘릴 수 있습니다.

4.2.5. Jenkins 플러그인

Jenkins를 OpenShift Container Platform과 통합하기 위해 다음 플러그인이 제공됩니다. 기본적으로 Jenkins 이미지에서 사용할 수 있습니다.

4.2.5.1. OpenShift Container Platform 클라이언트 플러그인

OpenShift Container Platform 클라이언트 플러그인은 OpenShift Container Platform과의 다양한 상호 작용을 위해 읽기 쉽고 간결하고 포괄적이며 유창한 Jenkins Pipeline 구문을 제공하는 것을 목표로 합니다. 플러그인은 스크립트를 실행하는 노드에서 사용할 수 있어야 하는 oc 바이너리를 활용합니다.

이 플러그인은 완전히 지원되며 Jenkins 이미지에 포함되어 있습니다. 다음을 제공합니다.

  • Jenkins Pipelines에서 사용할 Fluent 스타일 구문입니다.
  • oc 에서 사용 가능한 모든 옵션에 대해 및 노출을 사용합니다.
  • Jenkins 인증 정보 및 클러스터와 통합
  • 클래식 Jenkins Freestyle 작업에 대한 지속적인 지원

자세한 내용은 OpenShift Pipeline Builds 튜토리얼플러그인의 README 를 참조하십시오.

4.2.5.2. OpenShift Container Platform Pipeline 플러그인

OpenShift Container Platform Pipeline 플러그인은 OpenShift Container Platform 클라이언트 플러그인보다 적은 기능을 제공하는 Jenkins와 OpenShift Container Platform 간의 이전 통합입니다. 더 이상 사용되지 않지만 OpenShift Container Platform 버전에서 v3.11까지 계속 작동합니다. Jenkins 파이프라인에서 직접 oc 바이너리를 사용하거나 OpenShift Container Platform 클라이언트 플러그인 을 사용합니다.

자세한 내용은 플러그인의 README 를 참조하십시오.

4.2.5.3. OpenShift Container Platform 동기화 플러그인

Jenkins와 OpenShift Container Platform 간의 통합을 위한 OpenShift Container Platform Pipeline 빌드 전략을 지원하기 위해 OpenShift Sync Plug-in 은 OpenShift Container Platform의 API 서버를 모니터링하여 Pipeline 전략을 사용하는 BuildConfig빌드 업데이트를 모니터링하고 Jenkins Pipeline 프로젝트를 생성합니다( BuildConfig 가 생성되면) 결과 프로젝트에서 작업을 시작합니다( 빌드 가 시작될 때).

Jenkins 쿠버네티스 플러그인 구성에서 설명한 대로 이 플러그인은 OpenShift Container Platform에 정의된 ImageStream,ImageStreamTag 또는 ConfigMap 오브젝트를 기반으로 Kubernetes 플러그인에 대한 PodTemplate 구성을 생성할 수 있습니다.

이 플러그인은 이제 credentials .sync.jenkins.openshift.io의 레이블 키로 Secret 오브젝트를 사용할 수 있으며 Jenkins 인증 정보 내에 기본 글로벌 도메인에 배치된 Jenkins 인증 정보를 구성합니다. 인증 정보 ID는 Secret 이 정의된 네임스페이스, 하이픈(-), 그 뒤에 Secret 의 이름으로 구성됩니다.

PodTemplate s 의 ConfigMap 처리와 유사하게 OpenShift Container Platform에 정의된 Secret 오브젝트는 마스터 구성으로 간주됩니다. OpenShift Container Platform에서 오브젝트에 대한 후속 업데이트는 Jenkins 자격 증명에 적용됩니다(중간에서 수행한 인증 정보에 대한 변경 사항 적용).

credential.sync.jenkins.openshift.io 속성, 해당 속성을 true 이외의 값으로 설정하거나 OpenShift Container Platform에서 시크릿 을 삭제하면 Jenkins에서 관련 인증 정보가 삭제됩니다.

시크릿 유형은 다음과 같이 jenkins 자격 증명 유형에 매핑됩니다.

  • Opaque type Secret 오브젝트를 사용하면 플러그인이 데이터 섹션에서 사용자 이름과 암호를 찾고 Jenkins UsernamePasswordCredentials 자격 증명을 구성합니다. OpenShift Container Platform에서 암호 필드는 실제 암호 또는 사용자의 고유 토큰일 수 있습니다. 이러한 항목이 없으면 ssh-privatekey 필드를 검색하고 Jenkins BasicSSHUserPrivateKey 자격 증명을 만듭니다.
  • kubernetes.io/basic-auth 유형 'Secret'으로 플러그인은 Jenkins UsernamePasswordCredentials 인증 정보를 생성합니다.
  • kubernetes.io/ssh-auth 유형 Secret 오브젝트를 사용하면 플러그인은 Jenkins BasicSSHUserPrivateKey 자격 증명을 생성합니다.
4.2.5.4. Kubernetes 플러그인

Kubernetes 플러그인은 클러스터에서 Jenkins 에이전트를 포드로 실행하는 데 사용됩니다. Kubernetes 플러그인의 자동 구성은 Jenkins Kubernetes 플러그인 사용에서 설명합니다.

4.3. Jenkins 에이전트

4.3.1. 개요

OpenShift Container Platform은 Jenkins 에이전트로 사용하기에 적합한 세 가지 이미지( 기본, MavenNode.js )를 제공합니다.

첫 번째는 Jenkins 에이전트를 위한 기본 이미지입니다.

  • 필요한 툴(headless Java, Jenkins JNLP 클라이언트)과 유용한 툴( git, tar, zip, nss 등)을 모두 가져옵니다.
  • JNLP 에이전트를 진입점으로 설정합니다.
  • Jenkins 작업 내에서 명령줄 작업을 호출하는 데 필요한 oc 클라이언트 도구가 포함되어 있습니다.
  • CentOS 및 RHEL 이미지 모두에 Dockerfile을 제공합니다.

기본 이미지를 확장하는 이미지도 두 개 더 제공합니다.

Maven 및 Node.js Jenkins 에이전트 이미지는 새 에이전트 이미지를 빌드할 때 참조할 수 있는 CentOS 및 RHEL에 대해 Dockerfile을 제공합니다. contribcontrib/bin 하위 디렉토리에도 유의하십시오. 이러한 이미지를 사용하면 이미지에 대한 구성 파일과 실행 가능한 스크립트를 삽입할 수 있습니다.

중요

사용 중인 OpenShift Container Platform 버전에 적합한 에이전트 이미지 버전을 사용하고 확장하십시오. 에이전트 이미지에 포함된 oc 클라이언트 버전이 OpenShift Container Platform 버전과 호환되지 않으면 예기치 않은 동작이 발생할 수 있습니다. 자세한 내용은 버전 관리 정책을 참조하십시오.

4.3.2. 이미지

OpenShift Container Platform Jenkins 에이전트 이미지는 다음 두 가지 플레이버로 제공됩니다.

RHEL 7 기반 이미지

RHEL 7 이미지는 Red Hat Registry를 통해 사용할 수 있습니다.

$ docker pull registry.redhat.io/openshift3/jenkins-slave-base-rhel7
$ docker pull registry.redhat.io/openshift3/jenkins-slave-maven-rhel7
$ docker pull registry.redhat.io/openshift3/jenkins-slave-nodejs-rhel7
$ docker pull registry.redhat.io/openshift3/jenkins-agent-maven-35-rhel7
$ docker pull registry.redhat.io/openshift3/jenkins-agent-nodejs-10-rhel7
$ docker pull registry.redhat.io/openshift3/jenkins-agent-nodejs-12-rhel7

CentOS 7 기반 이미지

이러한 이미지는 Docker Hub에서 사용할 수 있습니다.

$ docker pull openshift/jenkins-slave-base-centos7
$ docker pull openshift/jenkins-slave-maven-centos7
$ docker pull openshift/jenkins-slave-nodejs-centos7
$ docker pull openshift/jenkins-agent-maven-35-centos7
$ docker pull openshift/jenkins-agent-nodejs-10-centos7
$ docker pull openshift/jenkins-agent-nodejs-12-centos7

이러한 이미지를 사용하려면 해당 레지스트리에서 직접 이미지에 액세스하거나 OpenShift Container Platform 컨테이너 이미지 레지스트리로 이미지를 푸시할 수 있습니다.

4.3.3. 구성 및 사용자 정의

4.3.3.1. 환경 변수

각 Jenkins 에이전트 컨테이너는 다음 환경 변수를 사용하여 구성할 수 있습니다.

  • OPENSHIFT_JENKINS_JVM_ARCH

    Jenkins 에이전트를 호스팅하는 데 사용되는 JVM을 재정의하려면 x86_64 또는 i386 로 설정합니다. 메모리 효율성을 위해 기본적으로 Jenkins 에이전트 이미지는 2GiB 미만의 메모리 제한이 있는 컨테이너에서 실행되는 경우 32비트 JVM을 동적으로 사용합니다.

  • JAVA_MAX_HEAP_PARAM
    CONTAINER_HEAP_PERCENT (기본값: 0.1, 즉 10%)
    JNLP_MAX_HEAP_UPPER_BOUND_MB

    이 값은 Jenkins 에이전트 JVM의 최대 힙 크기를 제어합니다. JAVA_MAX_HEAP_PARAM 이 설정된 경우(예: -Xmx512m) 값이 우선합니다. 그렇지 않으면 최대 힙 크기는 컨테이너 메모리 제한의 CONTAINER_HEAP_PERCENT%(예: 0.5, 즉 50%)로 동적으로 계산되며, 선택적으로 JNLP_MAX_HEAP_UPPER_BOUND_MB MiB(예: 512)에서 제한됩니다.

    기본적으로 Jenkins 에이전트 JVM의 최대 힙 크기는 제한 없이 컨테이너 메모리 제한의 50%로 설정됩니다.

  • JAVA_INITIAL_HEAP_PARAM
    CONTAINER_INITIAL_PERCENT

    이 값은 Jenkins 에이전트 JVM의 초기 힙 크기를 제어합니다. JAVA_INITIAL_HEAP_PARAM 이 설정된 경우(예: -Xms32m) 값이 우선합니다. 그렇지 않으면 초기 힙 크기는 동적으로 계산된 최대 힙 크기의 CONTAINER_INITIAL_PERCENT%(예: 0.1, i.e. 10%)로 동적으로 계산될 수 있습니다.

    기본적으로 초기 힙 크기 조정은 JVM에 남아 있습니다.

  • CONTAINER_CORE_LIMIT

    설정되는 경우 내부 JVM 스레드 수를 조정하는 데 사용되는 정수 코어 수를 지정합니다. 설정 예: 2.

  • JAVA_TOOL_OPTIONS (기본값: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true)

    이 컨테이너에서 실행되는 모든 JVM에서 수행할 옵션을 지정합니다. 이 값을 덮어쓰는 것은 권장되지 않습니다.

  • JAVA_GC_OPTS (기본값: -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90))

    Jenkins 에이전트 JVM 가비지 컬렉션 매개변수를 지정합니다. 이 값을 덮어쓰는 것은 권장되지 않습니다.

  • JNLP_JAVA_OVERRIDES

    Jenkins 에이전트 JVM에 대한 추가 옵션을 지정합니다. 이러한 옵션은 위의 Java 옵션을 포함하여 다른 모든 옵션에 추가되며 필요한 경우 옵션을 재정의하는 데 사용될 수 있습니다. 각각의 추가 옵션을 공백으로 구분합니다. 옵션에 공백 문자가 포함되어 있으면 백슬래시로 이스케이프합니다. 설정 예: -Dfoo -Dbar; -Dfoo=first\ value -Dbar=second\ value

4.3.4. 사용법

4.3.4.1. 메모리 요구 사항

JVM은 모든 Jenkins 에이전트에서 Jenkins JNLP 에이전트를 호스팅하고 Java 애플리케이션(예: javac, Maven 또는 Gradle)을 실행하는 데 사용됩니다. Jenkins 에이전트에서 사용하는 JVM 튜닝 에 대한 배경 정보는 OpenShift Container Platform에서 OpenJDK 를 참조하십시오.

메모리 효율성을 위해 기본적으로 Jenkins 이미지는 2GiB의 메모리 제한이 있는 컨테이너에서 실행되는 경우 32비트 JVM을 동적으로 사용합니다. 이 동작은 OPENSHIFT_JENKINS_JVM_ARCH 환경 변수로 재정의할 수 있습니다. JVM 선택은 기본적으로 Jenkins JNLP 에이전트와 에이전트 컨테이너 내의 다른 모든 Java 프로세스에 적용됩니다.

기본적으로 Jenkins JNLP 에이전트 JVM은 힙에 대해 컨테이너 메모리 제한의 50%를 사용합니다. 이 값은 CONTAINER_HEAP_PERCENT 환경 변수를 통해 수정할 수 있습니다. 상한값으로 제한하거나 완전히 재정의할 수도 있습니다. 자세한 내용은 환경 변수 를 참조하십시오.

기본적으로 Jenkins 에이전트 컨테이너에서 실행되는 기타 모든 프로세스(예: 파이프라인에서 실행되는 쉘 스크립트 또는 oc 명령은 OOM 종료를 프록시하지 않고 남은 50%의 메모리 제한을 초과할 수 없음을 고려할 수 있습니다.

기본적으로 Jenkins 에이전트 컨테이너에서 실행되는 각 JVM 프로세스는 힙에 대해 컨테이너 메모리 제한의 최대 25%를 사용합니다. 많은 빌드 워크로드에 대해 이 값을 조정해야 할 수도 있습니다. 자세한 내용은 OpenShift Container Platform에서 OpenJDK 를 참조하십시오.

Jenkins 에이전트 컨테이너의 메모리 요청 및 제한에 대한 정보는 Jenkins 문서 를 참조하십시오.

4.3.4.1.1. gradle 빌드

OpenShift의 Jenkins 에이전트에서 Gradle 빌드를 호스트하면 Jenkins JNLP 에이전트 및 Gradle JVM 외에도 이러한 에이전트가 지정된 경우 테스트를 실행하는 세 번째 JVM이 생성되기 때문에 최소한 추가적인 문제가 발생하지 않습니다.

OpenShift에서 JVM 튜닝에 대한 배경 정보는 OpenShift Container Platform에서 OpenJDK 를 참조하십시오.

다음 설정은 OpenShift의 메모리가 제한된 Jenkins 에이전트에서 Gradle 빌드를 실행하기 위한 시작점으로 제안됩니다. 필요에 따라 설정을 완화할 수 있습니다.

  • org.gradle.daemon=false 를 gradle.properties 파일에 추가하여 수명이 긴 gradle 데몬을 비활성화했는지 확인합니다.
  • org.gradle.parallel=true 가 gradle.properties 파일에 설정되지 않았으며 --parallel 이 명령줄 인수로 설정되지 않았음을 확인하여 병렬 빌드 실행을 비활성화합니다.
  • Java 컴파일이 프로세스 외부에서 실행되지 않도록 build.gradle 파일에서 java { options.fork = false } 를 설정합니다.
  • build.gradle 파일에 test { maxParallelForks = 1 } 가 설정되어 있는지 확인하여 여러 추가 테스트 프로세스를 비활성화합니다.
  • GRADLE_OPTS, JAVA_OPTS 또는 JAVA_TOOL_OPTIONS 환경 변수가 있는 OpenShift Container Platform의 OpenJDK 설정에 따라 gradle JVM 메모리 매개변수를 재정의합니다.
  • maxHeapSize 및 jvmArgs 설정을 build.gradle에서 또는 -Dorg.gradle.jvmargs 명령줄 인수를 통해 Gradle 테스트 JVM에 대한 최대 힙 크기 및 JVM 인수를 설정합니다.

4.3.5. 에이전트 Pod 보존

Jenkins 에이전트 포드( 슬레이브 포드라고도 함)는 빌드가 완료되거나 중단된 후 기본적으로 삭제됩니다. 쿠버네티스 플러그인 포드 보존 설정을 통해 이 동작을 변경할 수 있습니다. 포드 보존은 각 포드 템플릿에 대한 재정의를 통해 모든 Jenkins 빌드에 대해 설정할 수 있습니다. 지원되는 동작은 다음과 같습니다.

  • Always 는 빌드 결과에 관계없이 빌드 Pod를 유지합니다.
  • Default 는 플러그인 값을 사용합니다(Pod 템플릿만 해당).
  • Never 는 Pod를 항상 삭제합니다.
  • On Failure 는 빌드 중 실패하면 pod를 유지합니다.

pod 보존은 Pipeline Jenkinsfile에서 재정의할 수 있습니다.

podTemplate(label: "mypod",
  cloud: "openshift",
  inheritFrom: "maven",
  podRetention: onFailure(), 1
  containers: [
    ...
  ]) {
  node("mypod") {
    ...
  }
}
1
podRetention에 대해 허용되는 값은 never(), onFailure(), always()default()입니다.
주의

보존된 Pod는 리소스 할당량에 대해 계속 실행하고 계산할 수 있습니다.

4.4. 기타 컨테이너 이미지

 

Red Hat Container Catalog 에서 찾을 수 없는 컨테이너 이미지를 사용하려는 경우 OpenShift Container Platform 인스턴스에서 다른 임의의 컨테이너 이미지를 사용할 수 있습니다(예: Docker Hub 에 있는 이미지).

임의로 할당된 사용자 ID를 사용하여 실행 중인 컨테이너에 대한 OpenShift Container Platform별 지침은 이미지 생성 가이드의 지원 관련 사용자 ID 를 참조하십시오.

중요

지원 관련 자세한 내용은 OpenShift Container Platform 지원 정책에 정의된 제품 지원 적용 범위를 참조하십시오.

시스템 및 환경 요구 사항의 보안 경고도 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.