이미지 사용
이미지 사용에 대한 OpenShift Container Platform 3.11 가이드
초록
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는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.
- 빌더 이미지에서 컨테이너를 시작합니다.
- 애플리케이션 소스를 다운로드합니다.
- 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
- 빌더 이미지에서 assemble 스크립트를 실행합니다.
- 최종 이미지를 저장합니다.
빌드 프로세스에 대한 자세한 개요는 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
라는 프로필이 있는 경우 빌드에 대해 활성화됩니다.
다음 환경 변수를 지정하여 이러한 기본 목표 및 옵션을 재정의할 수 있습니다.
변수 이름 | 설명 |
---|---|
|
|
|
Java 에 대한 인수로 사용할 기본 클래스 |
|
|
| 추가 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 빌더 이미지를 사용하여 제공하는 바이너리 아티팩트를 사용하여 애플리케이션을 빌드할 수 있습니다.
새 바이너리 빌드를 생성합니다.
$ oc new-build --name=<application_name> registry.redhat.io/redhat-openjdk-18/openjdk18-openshift --binary=true
빌드를 시작하고 로컬 머신의 바이너리 아티팩트 경로를 지정합니다.
$ oc start-build <application_name> --from-dir=/path/to/artifacts --follow
애플리케이션을 생성합니다.
$ oc new-app <application_name>
2.2.9. Java 환경 변수
다음 표에서는 OpenJDK 컨테이너의 동작을 구성하는 데 사용되는 Java 환경 변수의 포괄적인 목록을 제공합니다.
변수 이름 | 설명 | 예시 값 |
---|---|---|
|
설정하는 경우 Jolokia 참조 매뉴얼 에 설명된 대로 Jolokia JVM 에이전트 속성으로 경로를 포함하여 이 파일을 사용합니다. 설정되지 않은 경우, |
|
|
Jolokia discovery를 활성화합니다. 기본값은 |
|
|
바인딩할 호스트 주소입니다. 기본값은 |
|
|
사용할 에이전트 ID입니다. 기본값은 컨테이너 ID인 |
|
| 설정된 경우 Jolokia의 활성화를 비활성화합니다(예: 빈 값을 에코). 기본적으로 Jolokia는 활성화되어 있습니다. |
|
|
에이전트 구성에 추가할 추가 옵션입니다. |
|
| 기본 인증에 대한 암호입니다. 기본적으로 인증이 꺼집니다. |
|
|
수신 대기할 포트입니다. 기본값은 |
|
|
기본 인증에 사용되는 사용자입니다. 기본값은 |
|
| Prometheus 에이전트 사용을 활성화합니다. |
|
| Prometheus 10.3 Exporter에 사용할 포트입니다. |
|
| CFS Bandwidth Control 에 설명된 대로 계산된 코어 제한입니다. |
|
| 컨테이너에 지정된 메모리 제한입니다. |
|
| 현재 GC 시간에 지정된 가중치와 이전 GC 시간 비교 |
|
|
사용할 Java GC를 지정합니다. 이 변수의 값에는 |
|
| 축소를 방지하기 위해 GC 뒤의 최대 힙 백분율입니다. |
|
| 최대 메타 공간 크기입니다. |
|
| 초기 메타 공간 크기입니다. |
|
| 확장을 방지하기 위해 GC 후에 여유 힙의 최소 백분율입니다. |
|
| 가비지 컬렉션 외부에서 소비된 시간(예: 애플리케이션 실행에 사용된 시간)을 가비지 수집에서 소비한 시간(예: 가비지 수집에서 소비한 시간)을 지정합니다. |
|
|
https 프록시의 위치입니다. 이는 |
|
| http 프록시의 위치입니다. 이는 Maven 빌드 및 Java 런타임 모두에 사용됩니다. |
|
| 애플리케이션이 상주하는 디렉터리입니다. 애플리케이션의 모든 경로는 이 디렉터리를 기준으로 합니다. |
|
|
Java 애플리케이션에 전달된 | - |
|
사용할 classpath입니다. 지정하지 않으면 시작 스크립트는 | - |
| 설정되어 있으면 원격 디버깅이 설정됩니다. 기본적으로 비활성되어 있습니다. |
|
|
원격 디버깅에 사용되는 포트입니다. 기본값은 |
|
| 문제가 발생할 때 표준 출력에 일부 진단 정보를 가져오도록 이 변수를 설정합니다. 기본적으로 비활성되어 있습니다. |
|
|
|
|
|
Java JAR 파일을 포함하는 디렉토리 및 | - |
|
Java 에 대한 인수로 사용할 기본 클래스 |
|
|
|
|
|
| - |
|
Java 명령에 JVM |
|
|
|
|
|
스크립트 디버깅을 활성화하려면 |
|
|
Maven을 호출할 때 사용할 인수는 기본 |
|
| 추가 Maven 인수입니다. |
|
|
설정된 경우 아티팩트가 빌드된 후 Maven 리포지토리가 제거됩니다. 생성된 애플리케이션 이미지를 작게 유지하는 데 유용하지만 증분 빌드는 방지할 수 있습니다. 이 변수는 | - |
| 로컬 Maven 리포지토리로 사용할 디렉터리입니다. |
|
|
설정된 경우 다중 미러 지원이 활성화되고 기타 |
|
| 아티팩트를 검색하는 데 사용되는 미러의 기본 URL입니다. |
|
|
설정된 경우 multi-repo 지원이 활성화되고 기타 |
|
|
|
|
|
maven 빌드와 함께 실행할 수 있는 공백으로 구분된 대상 목록입니다. 예를 들어 |
|
| 사용할 사용자 지정 Maven settings.xml 파일의 위치입니다. |
|
| 직접 액세스할 수 있는 쉼표로 구분된 호스트, IP 주소 또는 도메인 목록입니다. 이는 Maven 빌드 및 Java 런타임 모두에 사용됩니다. |
|
|
증분 빌드에 사용되는 |
|
|
|
|
|
향후 빌드에 사용할 수 있도록 소스 및 중간 빌드 파일을 제거하지 마십시오. 기본값은 |
|
|
이미지에 포함되어야 하는 소스 디렉토리에 있는 상대 경로의 쉼표로 구분된 목록입니다. 목록에는 find를 사용하여 확장된 와일드카드가 포함될 수 있습니다. 기본적으로 마운트된 디렉터리의 콘텐츠는 소스 폴더와 유사하게 처리됩니다. 여기서 |
|
|
제품 구성 디렉토리에 복사할 애플리케이션 구성 파일이 포함된 디렉터리의 상대 경로는 |
|
|
제품 데이터 디렉토리에 복사할 애플리케이션 데이터 파일이 포함된 디렉터리의 상대 경로는 |
|
|
제품 배포 디렉토리에 복사할 바이너리 파일이 포함된 디렉터리의 상대 경로는 |
|
| 빌드할 소스 코드 마운트 위치. 이는 최종 사용자가 재정의해서는 안 됩니다. |
|
|
|
|
|
|
|
|
|
|
|
http 프록시의 위치입니다. 이는 |
|
|
https 프록시의 위치입니다. 이는 |
|
|
직접 액세스할 수 있는 쉼표로 구분된 호스트, IP 주소 또는 도메인 목록입니다. 이는 |
|
| 지정된 미러에 사용할 ID입니다. 생략하면 고유한 ID가 생성됩니다. |
|
|
이 항목으로 미러링된 저장소 ID입니다. 기본값은 | - |
| 미러의 URL입니다. |
|
| Maven 리포지토리 디렉터리 권한. |
|
| Maven 리포지토리 파일 권한. |
|
| 완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 호스트는 서비스로 돌아갑니다. |
|
| Maven 리포지토리 ID입니다. |
|
| Maven 리포지토리 레이아웃. |
|
| Maven 리포지토리 이름입니다. |
|
| Maven 리포지토리 암호입니다. |
|
| Maven 리포지토리 암호입니다. |
|
| 완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 경로는 서비스로 전환됩니다. |
|
| 완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 포트는 서비스로 돌아갑니다. |
|
| Maven 리포지토리 개인 키. |
|
| 완전히 정의된 URL을 사용하지 않는 경우 Maven 리포지토리 프로토콜은 서비스로 돌아갑니다. |
|
| Maven 리포지토리는 체크섬 정책을 릴리스합니다. |
|
| Maven 리포지토리가 활성화되어 있습니다. |
|
| Maven 리포지토리가 업데이트 정책을 릴리스합니다. |
|
|
|
|
| Maven 리포지토리 스냅샷 체크섬 정책. |
|
| Maven 리포지토리 스냅샷이 활성화됩니다. |
|
| Maven 리포지토리 스냅샷 업데이트 정책. |
|
| Maven 리포지토리가 완전히 정의된 URL입니다. |
|
| Maven 리포지토리 사용자 이름. |
|
변수 이름 | 설명 | 값 |
---|---|---|
|
OpenShift TLS 통신을 위해 클라이언트 인증을 전환합니다. 이 매개 변수의 값은 제시된 클라이언트의 인증서에 포함되어야 하는 상대 고유 이름일 수 있습니다. 이 매개변수를 활성화하면 Jolokia가 https 통신 모드로 자동 전환됩니다. 기본 CA 인증서는 |
|
|
https를 사용하여 보안 통신을 전환합니다. 기본적으로 |
|
|
임의의 |
|
| Prometheus 10.3 Exporter에 사용할 구성 경로입니다. |
|
|
배포를 복사할 때 적용할 공백으로 구분된 필터 목록입니다. 기본값은 |
|
2.2.10. 추가 리소스
- Red Hat JBoss Middleware 설명서에서 추가 정보 및 예제를 확인하십시오.
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는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.
- 빌더 이미지에서 컨테이너를 시작합니다.
- 애플리케이션 소스를 다운로드합니다.
- 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
- 빌더 이미지에서 assemble 스크립트를 실행합니다.
- 최종 이미지를 저장합니다.
빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.
2.3.5. 환경 변수
.NET Core 이미지는 .NET Core 애플리케이션의 빌드 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.
S2I 빌드 구성 또는 .s2i/environment 파일에서 빌드 동작을 제어하는 환경 변수를 설정하여 빌드 단계에서 사용할 수 있도록 해야 합니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| 실행할 프로젝트를 선택합니다. 프로젝트 파일(예: csproj 또는 fsproj) 또는 단일 프로젝트 파일이 포함된 폴더여야 합니다. |
|
|
실행할 어셈블리를 선택합니다.Choose the assembly to run. 여기에는 | csproj 파일의 이름입니다. |
| 복원 작업 중에 사용되는 NuGet 패키지 소스의 공백으로 구분된 목록을 지정합니다.Specifies the space-separated list of zip package sources used during the restore operation. 이렇게 하면 NuGet.config 파일에 지정된 모든 소스가 재정의됩니다. | |
|
애플리케이션을 빌드하기 전에 설치할 .NET 도구 목록을 지정합니다. 특정 버전을 설치하려면 패키지 이름 끝에 | |
| 애플리케이션을 빌드하기 전에 설치할 NPM 패키지 목록을 지정합니다. | |
|
테스트할 테스트 프로젝트 목록을 지정합니다. 이는 단일 프로젝트 파일이 포함된 프로젝트 파일 또는 폴더여야 합니다. | |
|
디버그 또는 릴리스 모드에서 애플리케이션을 실행합니다.Runs the application in |
|
|
dotnet 빌드 명령의 세부 정보 표시를 지정합니다.Specifies the verbosity of the dotnet build commands. 설정하는 경우 빌드 시작 시 환경 변수가 인쇄됩니다. 이 변수는 msbuild 상세 정보 표시 값 ( | |
| 애플리케이션을 빌드하고 실행할 때 사용되는 HTTP/HTTPS 프록시를 설정합니다. | |
| 사용자 정의 NPM 레지스트리 미러를 사용하여 빌드 프로세스 중 패키지를 다운로드합니다. | |
|
이 변수는 이미지에서 노출하는 포트를 사용하도록 ASP.NET Core를 구성하도록 |
|
|
| |
|
신뢰할 추가 SSL 인증서가 있는 폴더 및 파일 목록을 지정하는 데 사용됩니다. 인증서는 빌드 중 실행되는 애플리케이션 및 빌드 후 이미지에서 실행되는 모든 프로세스를 포함하여 빌드된 애플리케이션을 포함하여 신뢰할 수 있습니다. 항목은 소스 리포지토리(예: 인증서)의 | |
|
|
|
|
|
|
|
|
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 버전,4 및 6 버전을 제공합니다.
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는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.
- 빌더 이미지에서 컨테이너를 시작합니다.
- 애플리케이션 소스를 다운로드합니다.
- 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
- 빌더 이미지에서 assemble 스크립트를 실행합니다.
- 최종 이미지를 저장합니다.
빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.
2.4.5. 설정
Node.js 이미지는 Node.js 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.
이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 의 sourceStrategy
정의의 환경 섹션에 정의할 수 있습니다.
새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.
빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.
변수 이름 | 설명 |
---|---|
|
|
|
디버그 포트. |
| 사용자 정의 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는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.
- 빌더 이미지에서 컨테이너를 시작합니다.
- 애플리케이션 소스를 다운로드합니다.
- 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
- 빌더 이미지에서 assemble 스크립트를 실행합니다.
- 최종 이미지를 저장합니다.
빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.
2.5.5. 설정
Perl 이미지는 Perl 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.
이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 의 sourceStrategy
정의의 환경 섹션에 정의할 수 있습니다.
새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.
빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.
변수 이름 | 설명 |
---|---|
|
|
| 이 변수는 cpanminus가 종속 항목을 설치하는 데 사용하는 미러 URL을 지정합니다. 기본적으로 이 URL은 지정되지 않습니다. |
|
수정된 Perl 모듈을 자동으로 다시 로드하려면 이 값을 |
| StartServers 지시문은 시작 시 생성된 하위 서버 프로세스 수를 설정합니다. 기본값은 8입니다. |
| 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.6 및 7.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는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.
- 빌더 이미지에서 컨테이너를 시작합니다.
- 애플리케이션 소스를 다운로드합니다.
- 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
- 빌더 이미지에서 assemble 스크립트를 실행합니다.
- 최종 이미지를 저장합니다.
빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.
2.6.5. 설정
PHP 이미지는 PHP 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.
이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 의 sourceStrategy
정의의 환경 섹션에 정의할 수 있습니다.
새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.
빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.
다음 환경 변수는 php.ini 파일에서 동등한 속성 값을 설정합니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| PHP에 오류, 경고 및 조치를 수행하려는 알림이 표시됩니다. | E_ALL & ~E_NOTICE |
| PHP가 오류, 알림 및 경고를 출력하는지 여부를 제어합니다. | ON |
| PHP의 시작 시퀀스 중에 발생하는 모든 디스플레이 오류가 표시 오류와 별도로 처리됩니다. | OFF |
|
마지막 오류/경고 메시지를 | OFF |
| 오류와 관련된 문서에 오류를 연결합니다. | ON |
| PHP 소스 파일의 경로입니다. | .:/opt/openshift/src:/opt/rh/php55/root/usr/share/pear |
| 세션 데이터 파일의 위치입니다. | /tmp/sessions |
| 애플리케이션의 문서 루트를 정의하는 경로(예: /public). | / |
다음 환경 변수는 opcache.ini 파일에서 동등한 속성 값을 설정합니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| OPcache 공유 메모리 스토리지 크기 | 16M |
| 스크립트 타임스탬프가 업데이트를 확인하는 빈도(초)입니다. 0 을 사용하면 모든 요청에서 OPcache 에서 업데이트를 확인합니다. | 2 |
다음을 설정하여 PHP 구성을 로드하는 데 사용되는 전체 디렉터리를 재정의할 수도 있습니다.
변수 이름 | 설명 |
---|---|
| php.ini 파일의 경로를 설정합니다. |
| 추가 .ini 구성 파일의 검사 경로 |
사용자 정의 컴포저 저장소 미러 URL을 사용하여 기본 'packagist.org' 대신 패키지를 다운로드할 수 있습니다.
변수 이름 | 설명 |
---|---|
| 사용자 지정 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.4 및 3.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는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.
- 빌더 이미지에서 컨테이너를 시작합니다.
- 애플리케이션 소스를 다운로드합니다.
- 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
- 빌더 이미지에서 assemble 스크립트를 실행합니다.
- 최종 이미지를 저장합니다.
빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.
2.7.5. 설정
Python 이미지는 Python 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.
이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 의 sourceStrategy
정의의 환경 섹션에 정의할 수 있습니다.
새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.
빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.
변수 이름 | 설명 |
---|---|
| 이 변수는 애플리케이션 시작을 담당하는 Python 인터프리터에 전달된 파일 이름을 지정합니다. 이 변수는 기본적으로 app.py 로 설정됩니다. |
|
이 변수는 NetNamespace 호출 가능을 지정합니다. 이 패턴은 |
| 이 변수는 gunicorn 구성이 있는 유효한 Python 파일의 경로를 나타냅니다. |
|
빌드 중 |
|
생성된 이미지가 실행될 때 비어 있지 않은 값으로 |
| 사용자 정의 인덱스 URL 또는 미러를 사용하여 빌드 프로세스 중에 필요한 패키지를 다운로드하려면 이 변수를 설정합니다. 이는 requirements.txt 파일에 나열된 패키지에만 영향을 미칩니다. |
| 이를 설정하여 작업자 수의 기본 설정을 변경합니다. 기본적으로 이 값은 사용 가능한 코어 수 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.2 및 2.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는 컨테이너에 소스 코드를 삽입하고 컨테이너에서 실행할 소스 코드를 준비하도록 하여 즉시 실행할 이미지를 생성합니다. 다음과 같은 단계를 수행합니다.
- 빌더 이미지에서 컨테이너를 시작합니다.
- 애플리케이션 소스를 다운로드합니다.
- 스크립트 및 애플리케이션 소스를 빌더 이미지 컨테이너로 스트리밍합니다.
- 빌더 이미지에서 assemble 스크립트를 실행합니다.
- 최종 이미지를 저장합니다.
빌드 프로세스에 대한 자세한 개요는 S2I 빌드 프로세스를 참조하십시오.
2.8.5. 설정
Ruby 이미지는 Ruby 런타임의 구성 및 동작을 제어하도록 설정할 수 있는 여러 환경 변수를 지원합니다.
이러한 환경 변수를 이미지의 일부로 설정하려면 소스 코드 리포지토리 내에 .s2i/environment 파일에 배치하거나 빌드 구성 의 sourceStrategy
정의의 환경 섹션에 정의할 수 있습니다.
새 애플리케이션을 생성할 때 기존 이미지와 함께 사용할 환경 변수를 설정하거나 배포 구성과 같은 기존 오브젝트에 대한 환경 변수를 업데이트할 수도 있습니다.
빌드 동작을 제어하는 환경 변수는 빌드 단계에서 사용할 수 있도록 s2i 빌드 구성 또는 .s2i/environment 파일의 일부로 설정해야 합니다.
변수 이름 | 설명 |
---|---|
|
이 변수는 Ruby 애플리케이션이 배포되는 환경(예: |
|
이 변수는 Ruby on Rails 애플리케이션이 배포된 환경을 지정합니다(예: |
|
|
| 이 변수는 Puma 의 스레드 풀에서 사용할 수 있는 최소 및 최대 스레드 수를 나타냅니다. |
|
이 변수는 Puma의 클러스터형 모드에서 시작할 작업자 프로세스 수를 나타냅니다( Puma가 두 개 이상의 프로세스를 실행하는 경우). 명시적으로 설정되지 않은 경우 기본 동작은 |
| 사용자 정의 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 빌더 이미지에는 일반적으로 assemble 및 run 스크립트 가 포함되어 있지만 해당 스크립트의 기본 동작은 모든 사용자에게 적합하지 않을 수 있습니다. 이 주제에서는 기본 스크립트가 포함된 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.6 및 5.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 사용자 이름, 암호 및 데이터베이스 이름은 다음 환경 변수를 사용하여 구성해야 합니다.
변수 이름 | 설명 |
---|---|
| 애플리케이션에서 사용하기 위해 생성된 데이터베이스 사용자의 사용자 이름을 지정합니다. |
|
tekton |
|
RuntimeClass |
| root 사용자의 선택적 암호입니다. 이 값을 설정하지 않으면 root 계정에 원격 로그인할 수 없습니다. 컨테이너 내에서의 로컬 연결은 항상 암호 없이 허용됩니다. |
| Kubernetes에서 자동으로 생성한 서비스 호스트 변수. |
| Kubernetes에서 자동으로 생성한 서비스 포트 변수. |
사용자 이름, 암호 및 데이터베이스 이름을 지정해야 합니다. 3개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 재시작합니다.
MySQL 설정은 다음 환경 변수로 구성할 수 있습니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| 테이블 이름을 저장하고 비교하는 방법을 설정합니다. | 0 |
| 허용되는 최대 클라이언트 연결 수입니다. | 151 |
| 한 패킷의 최대 크기 또는 생성된/지정 문자열입니다. | 200M |
| FULLTEXT 인덱스에 포함할 단어의 최소 길이입니다. | 4 |
| FULLTEXT 인덱스에 포함될 단어의 최대 길이입니다. | 20 |
| 네이티브 AIO가 손상된 경우 innodb_use_native_aio 설정 값을 제어합니다. | 1 |
| 모든 스레드에 대한 열려 있는 테이블 수입니다. | 400 |
| 인덱스 블록에 사용되는 버퍼의 크기입니다. | 32m (또는 사용 가능한 메모리의 10%) |
| 정렬에 사용되는 버퍼의 크기입니다. | 256K |
| 순차적 검사에 사용되는 버퍼의 크기입니다. | 8m (또는 사용 가능한 메모리의 5%) |
| InnoDB가 테이블 및 인덱스 데이터를 캐시하는 버퍼 풀의 크기입니다. | 32m (또는 사용 가능한 메모리의 50%) |
| 로그 그룹에 있는 각 로그 파일의 크기입니다. | 8m (또는 사용 가능한 메모리의 15 %) |
| 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 복제에는 마스터와 슬레이브 간에 데이터를 릴레이하는 특수 사용자가 필요합니다. 이 목적으로 템플릿에 다음 환경 변수가 정의됩니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| 복제 사용자의 사용자 이름 | master |
| 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를 값
사용을 완전히 끕니다. 후속 배포에서는 MySQL 구성 변수 0
으로 설정하여 AIOinnodb_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.4 및 9.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 사용자 이름, 암호 및 데이터베이스 이름은 다음 환경 변수를 사용하여 구성해야 합니다.
변수 이름 | 설명 |
---|---|
| 생성할 PostgreSQL 계정의 사용자 이름입니다. 이 사용자는 데이터베이스에 대한 모든 권한을 갖습니다. |
| 사용자 계정의 암호입니다. |
| 데이터베이스 이름. |
| postgres 관리자 사용자의 선택적 암호입니다. 이 값을 설정하지 않으면 postgres 계정에 대한 원격 로그인이 불가능합니다. 컨테이너 내에서의 로컬 연결은 항상 암호 없이 허용됩니다. |
사용자 이름, 암호 및 데이터베이스 이름을 지정해야 합니다. 3개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 재시작합니다.
PostgreSQL 설정은 다음 환경 변수로 구성할 수 있습니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| 허용되는 최대 클라이언트 연결 수입니다. | 100 |
|
"prepared" 상태에 있을 수 있는 최대 트랜잭션 수입니다. 준비된 트랜잭션을 사용하는 경우 해당 값은 최소한 | 0 |
| 데이터 캐싱을 위한 PostgreSQL 전용 메모리 양. | 32M |
| 운영 체제와 PostgreSQL 자체에서 디스크 캐싱에 사용할 수 있는 예상 메모리 양입니다. | 128M |
3.3.4.4. 볼륨 마운트 지점
PostgreSQL 이미지는 데이터베이스의 영구 스토리지를 활성화하기 위해 마운트된 볼륨을 사용하여 실행할 수 있습니다.
- /var/lib/pgsql/data - PostgreSQL이 데이터베이스 파일을 저장하는 데이터베이스 클러스터 디렉터리입니다.
3.3.4.5. 암호 변경
암호는 이미지 구성의 일부이므로 데이터베이스 사용자(POSTGRESQL_USER
) 및 postgres 관리자 사용자의 암호를 변경하는 데 지원되는 유일한 방법은 환경 변수 POSTGRESQL_PASSWORD
및 POSTGRESQL_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.2 및 3.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 사용자 이름, 암호, 데이터베이스 이름 및 관리자 암호는 다음 환경 변수를 사용하여 구성해야 합니다.
변수 이름 | 설명 |
---|---|
| 생성할 MongoDB 계정의 사용자 이름입니다. |
| 사용자 계정의 암호입니다. |
| 데이터베이스 이름. |
| admin 사용자의 암호입니다. |
사용자 이름, 암호, 데이터베이스 이름 및 관리자 암호를 지정해야 합니다. 4개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 다시 시작하려고 합니다.
관리자 사용자 이름은 admin 으로 설정되며 MONGODB_ADMIN_PASSWORD
환경 변수를 설정하여 암호를 지정해야 합니다. 이 프로세스는 데이터베이스 초기화 시 수행됩니다.
MongoDB 설정은 다음 환경 변수로 구성할 수 있습니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| 데이터 파일 사전 할당을 비활성화합니다. |
|
| 더 작은 기본 데이터 파일 크기를 사용하도록 MongoDB를 설정합니다. |
|
| 출력 양을 제한하려는 자동 모드에서 MongoDB를 실행합니다. |
|
텍스트 검색은 MongoDB 버전 2.6 이상에서 기본적으로 활성화되므로 구성 가능한 매개 변수가 없습니다.
3.4.4.4. 볼륨 마운트 지점
데이터베이스의 영구 스토리지를 활성화하기 위해 마운트된 볼륨을 사용하여 MongoDB 이미지를 실행할 수 있습니다.
- /var/lib/mongodb/data - MongoDB가 데이터베이스 파일을 저장하는 데이터베이스 디렉터리입니다.
3.4.4.5. 암호 변경
암호는 이미지 구성의 일부이므로 데이터베이스 사용자(MONGODB_USER
)의 암호를 변경하기 위해 지원되는 유일한 방법 및 admin 사용자는 환경 변수 MONGODB_PASSWORD
및 MONGODB_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)를 자동으로 재시작하면 이러한 멤버 중 하나 이상이 충돌하거나 실패하는 경우 복제본 세트 멤버를 재시작합니다.
복제본 세트 멤버가 다운되거나 다시 시작되는 동안 다음 시나리오 중 하나일 수 있습니다.
basic member가 다운된 경우:
이 경우 나머지 두 멤버가 새 primary를 선택합니다. 지금까지 읽기는 영향을 받지 않지만 쓰기가 실패합니다. 성공적인 선택을 마친 후 일반적으로 쓰기 및 읽기 프로세스가 수행됩니다.
SECONDARY 멤버 중 한 명은 다음과 같습니다.
읽기 및 쓰기는 영향을 받지 않습니다.
oplogSize
구성 및 쓰기 비율에 따라 세 번째 멤버는 복제본 세트를 다시 참여하지 못하여 데이터베이스 복사본을 다시 동기화해야 할 수 있습니다.두 멤버가 모두 다운되었습니다.
3개 멤버의 복제본 세트 멤버가 다른 멤버에 도달할 수 없는 경우 nfsnobody 역할이 있으면 해당 멤버가 됩니다. 이 경우 reads는SECONDARY 멤버에 의해 제공될 수 있으며 쓰기가 실패할 수 있습니다. 하나 이상의 멤버가 백업되는 즉시 선택 작업에서 새 VDDK 멤버를 선택하고 정상적으로 읽고 쓰기 프로세스를 수행합니다.
모든 멤버가 다운됨:
이 경우 읽기 및 쓰기가 모두 실패합니다. 두 개 이상의 멤버가 백업되면, 선택에서 프로세스를 정상적으로 읽고 쓰는 후ary 및SECONDARY 멤버를 갖도록 복제본 세트를 다시 설정합니다.
이는 MongoDB에 권장되는 복제 전략입니다.
프로덕션 환경의 경우 가능한 한 멤버를 분리해야 합니다. 하나 이상의 노드 선택 기능을 사용하여 StatefulSet Pod를 다른 노드에 예약하고 독립적인 볼륨에서 지원하는 스토리지를 제공하는 것이 좋습니다.
3.4.6.1. 제한 사항
- MongoDB 3.2만 지원됩니다.
- 축소하는 경우 복제본 세트 구성을 수동으로 업데이트해야 합니다.
사용자 및 관리자 암호를 변경하는 작업은 수동 프로세스입니다. 필요한 것은 다음과 같습니다.
- StatefulSet 구성에서 환경 변수 값 업데이트
- 데이터베이스의 암호 변경 및
- 다른 모든 Pod를 재시작합니다.
3.4.6.2. 예제 템플릿 사용
이미 세 개의 영구 볼륨이 있거나 영구 볼륨 프로비저닝을 구성했다고 가정합니다.
MongoDB 클러스터를 생성하려는 새 거부를 생성합니다.
$ oc new-project mongodb-cluster-example
예제 템플릿을 사용하여 새 애플리케이션을 생성합니다.
$ oc new-app https://raw.githubusercontent.com/sclorg/mongodb-container/master/examples/petset/mongodb-petset-persistent.yaml
이 명령은 세 개의 복제본 세트 멤버가 있는 MongoDB 클러스터를 생성했습니다.
새 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
) 축소에 항상 수동 개입이 필요할 수 있습니다.
축소하려면 다음을 수행합니다.
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개의 멤버에서 하나의 멤버로만 축소하는 경우.
더 이상 존재하지 않는 멤버를 제거하도록 복제본 세트 구성을 업데이트합니다.
향후 이러한 구현에서는 (하위 API를 통해 노출되는 복제본 수)를 검사하고 다른 이유로 Pod가 다시 시작되지 않는지 확인하는
PreStop
pod 후크를 설정할 수 있습니다.- 해제된 Pod에서 사용하는 볼륨을 삭제합니다.
3.5. MariaDB
3.5.1. 개요
OpenShift Container Platform은 MariaDB를 실행하기 위한 컨테이너 이미지를 제공합니다. 이 이미지는 구성 파일에 제공된 사용자 이름, 암호 및 데이터베이스 이름 설정을 기반으로 데이터베이스 서비스를 제공할 수 있습니다.
3.5.2. 버전
현재 OpenShift Container Platform은 MariaDB 10.0 및 10.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 사용자 이름, 암호 및 데이터베이스 이름은 다음 환경 변수를 사용하여 구성해야 합니다.
변수 이름 | 설명 |
---|---|
| 생성할 MySQL 계정의 사용자 이름입니다. |
| 사용자 계정의 암호입니다. |
| 데이터베이스 이름. |
| root 사용자의 암호(선택 사항). |
사용자 이름, 암호 및 데이터베이스 이름을 지정해야 합니다. 3개를 모두 지정하지 않으면 Pod가 시작되지 않고 OpenShift Container Platform에서 지속적으로 재시작합니다.
MariaDB 설정은 다음 환경 변수로 구성할 수 있습니다.
변수 이름 | 설명 | 기본값 |
---|---|---|
| 테이블 이름을 저장하고 비교하는 방법을 설정합니다. | 0 |
| 허용되는 최대 클라이언트 연결 수입니다. | 151 |
| 한 패킷의 최대 크기 또는 생성된/지정 문자열입니다. | 200M |
| FULLTEXT 인덱스에 포함할 단어의 최소 길이입니다. | 4 |
| FULLTEXT 인덱스에 포함될 단어의 최대 길이입니다. | 20 |
| 네이티브 AIO가 손상된 경우 innodb_use_native_aio 설정 값을 제어합니다. | 1 |
| 모든 스레드에 대한 열려 있는 테이블 수입니다. | 400 |
| 인덱스 블록에 사용되는 버퍼의 크기입니다. | 32m (또는 사용 가능한 메모리의 10%) |
| 정렬에 사용되는 버퍼의 크기입니다. | 256K |
| 순차적 검사에 사용되는 버퍼의 크기입니다. | 8m (또는 사용 가능한 메모리의 5%) |
| InnoDB가 테이블 및 인덱스 데이터를 캐시하는 버퍼 풀의 크기입니다. | 32m (또는 사용 가능한 메모리의 50%) |
| 로그 그룹에 있는 각 로그 파일의 크기입니다. | 8m (또는 사용 가능한 메모리의 15 %) |
| InnoDB가 디스크의 로그 파일에 쓰는 데 사용하는 버퍼의 크기입니다. | 8m (또는 사용 가능한 메모리의 15 %) |
| 대체 구성 파일을 가리킵니다. | /etc/my.cnf |
|
binlog 형식을 설정하며 지원되는 값은 | 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가 처음 시작되면 관리자 및 암호와 함께 구성이 생성됩니다. 기본 사용자 인증 정보는 admin
및 password
입니다. 표준 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_OAUTH
가true
로 설정된 경우 해당되지 않습니다.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_PLUGINS
가true
로 설정된 경우 설치할 추가 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
을 사용합니다. 이 변수는 Jenkins를 처음 시작하기 전에 설정되어야 효과를 발휘합니다..io/openshift
.io/openshift3/jenkins-agent-agent-nodejs-8-rhel7MAVEN_SLAVE_IMAGE
이 값을 설정하면 기본 maven 에이전트 pod 구성에 사용되는 이미지가 재정의됩니다. 기본 maven 에이전트 pod는
docker.io/openshift/jenkins-agent-35-centos7 또는
을 사용하고 있으며, Jenkins 이미지의 CentOS 또는 RHEL 버전을 실행 중인지에 따라 docker.io/openshift3/jenkins-agent-35-rhel7을 사용합니다. 이 변수는 Jenkins를 처음 시작하기 전에 설정되어야 효과를 발휘합니다.registry.redhat.io/openshift3/openshift3/jenkins-
agent-maven-35-rhel7JENKINS_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에 액세스 토큰을 제공하여 프로젝트에 액세스해야 합니다.
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
입니다.시크릿에서 토큰을 검색합니다.
$ 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
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
의 경우PodTemplate
의ConfigMap
데이터에 대한 변경 사항이 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의 레이블 키로
내에 기본 글로벌 도메인에 배치된 Jenkins 인증 정보를 구성합니다. Secret
오브젝트를 사용할 수 있으며 Jenkins 인증 정보 인증 정보 ID는
Secret
이 정의된 네임스페이스, 하이픈(-
), 그 뒤에 Secret
의 이름으로 구성됩니다.
PodTemplate
처리와 유사하게 OpenShift Container Platform에 정의된 s
의 ConfigMapSecret
오브젝트는 마스터 구성으로 간주됩니다. 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 에이전트로 사용하기에 적합한 세 가지 이미지( 기본, Maven 및 Node.js )를 제공합니다.
첫 번째는 Jenkins 에이전트를 위한 기본 이미지입니다.
- 필요한 툴(headless Java, Jenkins JNLP 클라이언트)과 유용한 툴( git, tar, zip, nss 등)을 모두 가져옵니다.
- JNLP 에이전트를 진입점으로 설정합니다.
-
Jenkins 작업 내에서 명령줄 작업을 호출하는 데 필요한
oc
클라이언트 도구가 포함되어 있습니다. - CentOS 및 RHEL 이미지 모두에 Dockerfile을 제공합니다.
기본 이미지를 확장하는 이미지도 두 개 더 제공합니다.
Maven 및 Node.js Jenkins 에이전트 이미지는 새 에이전트 이미지를 빌드할 때 참조할 수 있는 CentOS 및 RHEL에 대해 Dockerfile을 제공합니다. contrib
및 contrib/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 지원 정책에 정의된 제품 지원 적용 범위를 참조하십시오.
시스템 및 환경 요구 사항의 보안 경고도 참조하십시오.