9.3. OpenShift Container Platform을 사용하여 Red Hat Quay 빌더 환경 생성
이 섹션의 절차에서는 OpenShift Container Platform을 사용하여 Red Hat Quay 가상 빌더 환경을 생성하는 방법을 설명합니다.
9.3.1. OpenShift Container Platform TLS 구성 요소 링크 복사링크가 클립보드에 복사되었습니다!
tls 구성 요소를 사용하면 TLS 구성을 제어할 수 있습니다.
Operator에서 TLS 구성 요소를 관리하는 경우 Red Hat Quay 3.8은 빌더를 지원하지 않습니다.
tls 를 관리되지 않는 ssl.cert 및 ssl.key 파일을 제공합니다. 이 경우 클러스터가 빌더를 지원하도록 하려면 인증서의 SAN 목록에 Quay 경로와 빌더 경로 이름을 모두 추가하거나 와일드카드를 사용해야 합니다.
빌더 경로를 추가하려면 다음 형식을 사용합니다.
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
9.3.2. Red Hat Quay 빌더에 OpenShift Container Platform 사용 링크 복사링크가 클립보드에 복사되었습니다!
빌더에는 SSL/TLS 인증서가 필요합니다. SSL/TLS 인증서에 대한 자세한 내용은 Red Hat Quay 컨테이너에 TLS 인증서 추가를 참조하십시오.
AWS(Amazon Web Service) S3 스토리지를 사용하는 경우 빌더를 실행하기 전에 AWS 콘솔에서 스토리지 버킷을 수정해야 합니다. 필수 매개변수는 다음 섹션의 "AWS S3 스토리지 버킷 수정"을 참조하십시오.
9.3.2.1. 가상 빌더를 위한 OpenShift Container Platform 준비 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 Red Hat Quay 가상 빌더에 OpenShift Container Platform을 준비합니다.
- 이 절차에서는 클러스터가 이미 프로비저닝되어 Quay Operator가 실행되고 있다고 가정합니다.
- 다음 절차에서는 OpenShift Container Platform에서 가상 네임스페이스를 설정하는 데 사용됩니다.
절차
- 클러스터 관리자 계정을 사용하여 Red Hat Quay 클러스터에 로그인합니다.
다음 명령을 실행하여 가상 빌더가 실행될 새 프로젝트를 생성합니다(예:
virtual-builders).$ oc new-project virtual-builders다음 명령을 입력하여 빌드를 실행하는 데 사용할 프로젝트에
ServiceAccount를 생성합니다.$ oc create sa -n virtual-builders quay-builder빌드를 실행할 수 있도록 편집 권한이 생성된 서비스 계정을 제공합니다.
$ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder다음 명령을 입력하여 Quay 빌더
anyuid scc권한을 부여합니다.$ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder참고이 작업을 수행하려면 클러스터 관리자 권한이 필요합니다. 이는 권한이 없거나 rootless 빌드가 작동하려면 빌더를 Podman 사용자로 실행해야 하므로 필요합니다.
Quay 빌더 서비스 계정의 토큰을 가져옵니다.
OpenShift Container Platform 4.10 또는 이전 버전을 사용하는 경우 다음 명령을 입력합니다.
oc sa get-token -n virtual-builders quay-builderOpenShift Container Platform 4.11 이상을 사용하는 경우 다음 명령을 입력합니다.
$ oc create token quay-builder -n virtual-builders출력 예
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
다음 명령을 입력하여 빌더 경로를 결정합니다.
$ oc get route -n quay-enterprise출력 예
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...다음 명령을 입력하여 .crt 확장을 사용하여 자체 서명된 SSL/TlS 인증서를 생성합니다.
$ oc extract cm/kube-root-ca.crt -n openshift-apiserver출력 예
ca.crt다음 명령을 입력하여
ca.crt파일의 이름을extra_ca_cert_build_cluster.crt로 변경합니다.$ mv ca.crt extra_ca_cert_build_cluster.crt콘솔에서 구성 번들의 시크릿을 찾고 작업
시크릿 편집 을 선택하고 적절한 빌더 구성을 추가합니다. FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - <superusername> FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_BUILD_SUPPORT: True BUILDMAN_HOSTNAME: <sample_build_route>1 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 36002 ORCHESTRATOR: REDIS_HOST: <sample_redis_hostname>3 REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetesPodman NAME: openshift BUILDER_NAMESPACE: <sample_builder_namespace>4 SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 BUILDER_CONTAINER_IMAGE: <sample_builder_container_image>5 # Kubernetes resource options K8S_API_SERVER: <sample_k8s_api_server>6 K8S_API_TLS_CA: <sample_crt_file>7 VOLUME_SIZE: 8G KUBERNETES_DISTRIBUTION: openshift CONTAINER_MEMORY_LIMITS: 300m8 CONTAINER_CPU_LIMITS: 1G9 CONTAINER_MEMORY_REQUEST: 300m10 CONTAINER_CPU_REQUEST: 1G11 NODE_SELECTOR_LABEL_KEY: "" NODE_SELECTOR_LABEL_VALUE: "" SERVICE_ACCOUNT_NAME: <sample_service_account_name> SERVICE_ACCOUNT_TOKEN: <sample_account_token>12 - 1
- 빌드 경로는
oc get route -n을 OpenShift Operator의 네임스페이스 이름으로 실행하여 가져옵니다. 포트는 경로 마지막에 제공되어야 하며[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443이라는 형식을 사용해야 합니다. - 2
JOB_REGISTRATION_TIMEOUT매개변수가 너무 낮으면 다음과 같은 오류가 발생할 수 있습니다:failed to register job to build manager:ECDHE error: code = Unauthenticated desc = Invalid build token: signature has expired. 이 매개 변수는 최소 CloudEvent로 설정되는 것이 좋습니다.- 3
- Redis 호스트에 암호 또는 SSL/TLS 인증서가 있는 경우 적절하게 업데이트해야 합니다.
- 4
- 가상 빌더 네임스페이스의 이름과 일치하도록 설정합니다(예:
virtual-builders). - 5
- 초기 액세스의 경우
BUILDER_CONTAINER_IMAGE는 현재quay.io/projectquay/quay-builder:3.7.0-rc.2입니다. 초기 액세스 기간 동안 변경될 수 있습니다. 이 경우 고객에게 경고를 발행합니다. - 6
K8S_API_SERVER는oc cluster-info를 실행하여 가져옵니다.- 7
- 사용자 정의 CA 인증서를 수동으로 생성하고 추가해야 합니다(예:
K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt). - 8
- 지정되지 않은 경우 기본값은
5120Mi입니다. - 9
- 가상 빌드의 경우 클러스터에 리소스가 충분한지 확인해야 합니다. 지정되지 않은 경우 기본값은
1000m입니다. - 10
- 지정되지 않은 경우 기본값은
3968Mi입니다. - 11
- 지정되지 않은 경우 기본값은
500m입니다. - 12
oc create sa를 실행할 때 가져옵니다.
샘플 구성
FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_BUILD_SUPPORT: True BUILDMAN_HOSTNAME: example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org:443 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 3600 ORCHESTRATOR: REDIS_HOST: example-registry-quay-redis REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetesPodman NAME: openshift BUILDER_NAMESPACE: virtual-builders SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 BUILDER_CONTAINER_IMAGE: quay.io/projectquay/quay-builder:3.7.0-rc.2 # Kubernetes resource options K8S_API_SERVER: api.docs.quayteam.org:6443 K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt VOLUME_SIZE: 8G KUBERNETES_DISTRIBUTION: openshift CONTAINER_MEMORY_LIMITS: 1G CONTAINER_CPU_LIMITS: 1080m CONTAINER_MEMORY_REQUEST: 1G CONTAINER_CPU_REQUEST: 580m NODE_SELECTOR_LABEL_KEY: "" NODE_SELECTOR_LABEL_VALUE: "" SERVICE_ACCOUNT_NAME: quay-builder SERVICE_ACCOUNT_TOKEN: "eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ"
9.3.2.2. 수동으로 SSL/TLS 인증서 추가 링크 복사링크가 클립보드에 복사되었습니다!
구성 도구의 알려진 문제로 인해 빌더를 올바르게 실행하려면 사용자 정의 SSL/TLS 인증서를 수동으로 추가해야 합니다. 사용자 정의 SSL/TLS 인증서를 수동으로 추가하려면 다음 절차를 사용하십시오.
SSL/TLS 인증서를 생성하는 방법에 대한 자세한 내용은 Red Hat Quay 컨테이너에 TLS 인증서 추가를 참조하십시오.
9.3.2.2.1. 인증서 생성 및 서명 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 SSL/TLS 인증서를 생성하고 서명하십시오.
절차
인증 기관을 생성하고 인증서에 서명합니다. 자세한 내용은 인증 기관 생성 및 인증서에 서명을 참조하십시오.
openssl.cnf
[req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = example-registry-quay-quay-enterprise.apps.docs.quayteam.org1 DNS.2 = example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org2 샘플 명령
$ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem $ openssl genrsa -out ssl.key 2048 $ openssl req -new -key ssl.key -out ssl.csr $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
9.3.2.2.2. TLS를 관리되지 않음으로 설정 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 gren :tls 를 Unmanaged로 설정합니다.
절차
Red Hat Quay Registry YAML에서
kind: tls를managed: false로 설정합니다.- kind: tls managed: false이벤트 페이지에서 적절한
config.yaml파일을 설정할 때까지 변경이 차단됩니다. 예를 들면 다음과 같습니다.- lastTransitionTime: '2022-03-28T12:56:49Z' lastUpdateTime: '2022-03-28T12:56:49Z' message: >- required component `tls` marked as unmanaged, but `configBundleSecret` is missing necessary fields reason: ConfigInvalid status: 'True'
9.3.2.2.3. 임시 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 CA 인증서에 대한 임시 보안을 생성합니다.
절차
CA 인증서의 기본 네임스페이스에 보안을 생성합니다.
$ oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crtssl.key및ssl.cert파일의 기본 네임스페이스에 보안을 생성합니다.$ oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.key
9.3.2.2.4. 구성 YAML에 시크릿 데이터 복사 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 시크릿 데이터를 config.yaml 파일에 복사합니다.
절차
-
워크로드
시크릿의 콘솔 UI에서 새 보안을 찾습니다. 각 시크릿에 대해 YAML 보기를 찾습니다.
kind: Secret apiVersion: v1 metadata: name: temp-crt namespace: quay-enterprise uid: a4818adb-8e21-443a-a8db-f334ace9f6d0 resourceVersion: '9087855' creationTimestamp: '2022-03-28T13:05:30Z' ... data: extra_ca_cert_build_cluster.crt: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJBZ0l.... type: Opaquekind: Secret apiVersion: v1 metadata: name: quay-config-ssl namespace: quay-enterprise uid: 4f5ae352-17d8-4e2d-89a2-143a3280783c resourceVersion: '9090567' creationTimestamp: '2022-03-28T13:10:34Z' ... data: ssl.cert: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVaakNDQTA2Z0F3SUJBZ0lVT... ssl.key: >- LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc... type: Opaque다음과 같이 명령을 실행하여 UI에서 Red Hat Quay 레지스트리 구성 번들의 시크릿을 또는 명령줄을 통해 찾습니다.
$ oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterpriseOpenShift Container Platform 콘솔에서 구성 번들 시크릿의 YAML 탭을 선택하고 생성한 두 보안의 데이터를 추가합니다.
kind: Secret apiVersion: v1 metadata: name: init-config-bundle-secret namespace: quay-enterprise uid: 4724aca5-bff0-406a-9162-ccb1972a27c1 resourceVersion: '4383160' creationTimestamp: '2022-03-22T12:35:59Z' ... data: config.yaml: >- RkVBVFVSRV9VU0VSX0lOSVRJQUxJWkU6IHRydWUKQlJ... extra_ca_cert_build_cluster.crt: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNakNDQWhxZ0F3SUJBZ0ldw.... ssl.cert: >- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVaakNDQTA2Z0F3SUJBZ0lVT... ssl.key: >- LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBc... type: Opaque- 저장을 클릭합니다.
다음 명령을 입력하여 Pod가 다시 시작되었는지 확인합니다.
$ oc get pods -n quay-enterprise출력 예
NAME READY STATUS RESTARTS AGE ... example-registry-quay-app-6786987b99-vgg2v 0/1 ContainerCreating 0 2s example-registry-quay-app-7975d4889f-q7tvl 1/1 Running 0 5d21h example-registry-quay-app-7975d4889f-zn8bb 1/1 Running 0 5d21h example-registry-quay-app-upgrade-lswsn 0/1 Completed 0 6d1h example-registry-quay-config-editor-77847fc4f5-nsbbv 0/1 ContainerCreating 0 2s example-registry-quay-config-editor-c6c4d9ccd-2mwg2 1/1 Running 0 5d21h example-registry-quay-database-66969cd859-n2ssm 1/1 Running 0 6d1h example-registry-quay-mirror-764d7b68d9-jmlkk 1/1 Terminating 0 5d21h example-registry-quay-mirror-764d7b68d9-jqzwg 1/1 Terminating 0 5d21h example-registry-quay-redis-7cc5f6c977-956g8 1/1 Running 0 5d21hRed Hat Quay 레지스트리가 재구성된 후 다음 명령을 입력하여 Red Hat Quay 앱 Pod가 실행 중인지 확인합니다.
$ oc get pods -n quay-enterprise출력 예
example-registry-quay-app-6786987b99-sz6kb 1/1 Running 0 7m45s example-registry-quay-app-6786987b99-vgg2v 1/1 Running 0 9m1s example-registry-quay-app-upgrade-lswsn 0/1 Completed 0 6d1h example-registry-quay-config-editor-77847fc4f5-nsbbv 1/1 Running 0 9m1s example-registry-quay-database-66969cd859-n2ssm 1/1 Running 0 6d1h example-registry-quay-mirror-758fc68ff7-5wxlp 1/1 Running 0 8m29s example-registry-quay-mirror-758fc68ff7-lbl82 1/1 Running 0 8m29s example-registry-quay-redis-7cc5f6c977-956g8 1/1 Running 0 5d21h브라우저에서 레지스트리 끝점에 액세스하여 인증서가 적절하게 업데이트되었는지 확인합니다. 예를 들면 다음과 같습니다.
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAY
9.3.2.3. UI를 사용하여 빌드 트리거 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에 따라 UI를 사용하여 빌드 트리거를 생성합니다.
절차
- Red Hat Quay 리포지토리에 로그인합니다.
-
Create New Repository 를 클릭하고 새 레지스트리(예:
testrepo)를 생성합니다. Repositories (리포지토리) 페이지의 탐색 창에서 Builds 탭을 클릭합니다. 또는 해당 URL을 직접 사용합니다.
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds중요경우에 따라 빌더에 호스트 이름을 확인하는 데 문제가 있을 수 있습니다. 이 문제는 작업 오브젝트에 대해
dnsPolicy가default로 설정되는 것과 관련이 있을 수 있습니다. 현재 이 문제에 대한 해결방법이 없습니다. 이 문제는 향후 Red Hat Quay 버전에서 해결될 예정입니다.-
빌드 트리거 생성
사용자 지정 Git 리포지토리 내보내기를 클릭합니다. Git 리포지토리를 복제하는 데 사용되는 HTTPS 또는 SSH 스타일 URL을 입력한 다음 Continue 를 클릭합니다. 예를 들면 다음과 같습니다.
https://github.com/gabriel-rh/actions_test.git- 분기 또는 태그 이름으로 태그 매니페스트를 확인한 다음 Continue 를 클릭합니다.
-
트리거를 호출할 때 빌드할 Dockerfile의 위치를 입력하고(예:
/Dockerfile) 계속 을 클릭합니다. -
Docker 빌드에 대한 컨텍스트 위치(예:
/)를 입력하고 Continue 를 클릭합니다. - 필요한 경우 WebSocket 계정을 만듭니다. 그렇지 않으면 Continue 를 클릭합니다.
- Continue 를 클릭하여 매개 변수를 확인합니다.
- 빌드 페이지에서 트리거 이름의 옵션 아이콘을 클릭한 다음 지금 트리거 실행을 클릭합니다.
- Git 리포지토리에서 커밋 SHA를 입력하고 Start Build 를 클릭합니다.
빌드 기록 페이지에서 커밋을 클릭하거나
oc get pods -n virtual-builders를 실행하여 빌드 상태를 확인할 수 있습니다. 예를 들면 다음과 같습니다.$ oc get pods -n virtual-builders출력 예
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s$ oc get pods -n virtual-builders출력 예
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9s$ oc get pods -n virtual-builders출력 예
No resources found in virtual-builders namespace.빌드가 완료되면 탐색 창에서 태그 아래에 있는 태그의 상태를 확인할 수 있습니다.
참고초기 액세스 권한을 사용하면 현재 전체 빌드 로그 및 빌드 타임 스탬프를 사용할 수 없습니다.
9.3.2.4. AWS S3 스토리지 버킷 수정 링크 복사링크가 클립보드에 복사되었습니다!
AWS S3 스토리지를 사용하는 경우 빌더를 실행하기 전에 AWS 콘솔에서 스토리지 버킷을 변경해야 합니다.
절차
- s3.console.aws.com 에서 AWS 콘솔에 로그인합니다.
-
검색 창에서 S3 을 검색한 다음
S3을 클릭합니다. -
버킷 이름을 클릭합니다(예:
myawsbucket). - 권한 탭을 클릭합니다.
CORS(Cross-origin resource sharing) 아래에서 다음 매개변수를 포함합니다.
[ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 }, { "AllowedHeaders": [ "Content-Type", "x-amz-acl", "origin" ], "AllowedMethods": [ "PUT" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]