OpenShift에서 GitLab Runner 구성
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 문서는 OpenShift에서 GitLab Runner를 구성하는 방법을 설명합니다. Runner를 생성할 때, spec에 속성을 설정하여 구성할 수 있습니다. Operator 속성에서 사용 가능한 모든 속성을 확인하세요.
이 문서는 OpenShift에서 GitLab Runner를 구성하는 방법을 설명합니다.
GitLab Runner Operator에 속성 전달#
Runner를 생성할 때, spec에 속성을 설정하여 구성할 수 있습니다.
예를 들어, Runner가 등록된 GitLab URL이나 등록 토큰이 포함된 시크릿의 이름을 지정할 수 있습니다:
apiVersion: apps.gitlab.com/v1beta2
kind: Runner
metadata:
name: dev
spec:
gitlabUrl: https://gitlab.example.com
token: gitlab-runner-secret # 러너 토큰이 포함된 시크릿의 이름
Operator 속성에서 사용 가능한 모든 속성을 확인하세요.
Operator 속성#
다음 속성을 Operator에 전달할 수 있습니다.
일부 속성은 더 최신 버전의 Operator에서만 사용 가능합니다.
| 설정 | Operator | 설명 |
|---|---|---|
gitlabUrl |
all | GitLab 인스턴스의 정규화된 도메인 이름. 예: https://gitlab.example.com. |
token |
all | runner 등록에 사용되는 runner-registration-token 키를 포함하는 Secret의 이름. |
tags |
all | Runner에 적용할 쉼표로 구분된 태그 목록. |
concurrent |
all | 동시에 실행할 수 있는 작업 수를 제한합니다. 최대 수는 정의된 모든 러너입니다. 0은 무제한을 의미하지 않습니다. 기본값은 10입니다. |
interval |
all | 새 작업 확인 간격(초)을 정의합니다. 기본값은 30입니다. |
locked |
1.8 | Runner를 프로젝트에 잠글지 여부를 정의합니다. 기본값은 false입니다. |
runUntagged |
1.8 | 태그 없는 작업을 실행할지 여부를 정의합니다. 태그가 지정되지 않은 경우 기본값은 true입니다. 그렇지 않으면 false입니다. |
protected |
1.8 | Runner가 보호된 브랜치에서만 작업을 실행할지 여부를 정의합니다. 기본값은 false입니다. |
cloneURL |
all | GitLab 인스턴스의 URL을 덮어씁니다. Runner가 GitLab URL에 연결할 수 없는 경우에만 사용됩니다. |
env |
all | Runner 포드의 환경 변수로 삽입되는 키-값 쌍을 포함하는 ConfigMap의 이름. |
runnerImage |
1.7 | 기본 GitLab Runner 이미지를 덮어씁니다. 기본값은 Operator와 함께 번들된 Runner 이미지입니다. |
helperImage |
all | 기본 GitLab Runner 헬퍼 이미지를 덮어씁니다. |
buildImage |
all | 빌드에 사용할 기본 Docker 이미지. 지정되지 않은 경우 사용됩니다. |
cacheType |
all | Runner 아티팩트에 사용되는 캐시 유형. 다음 중 하나: gcs, s3, azure. |
cachePath |
all | 파일 시스템의 캐시 경로를 정의합니다. |
cacheShared |
all | Runner 간 캐시 공유를 활성화합니다. |
s3 |
all | S3 캐시 설정에 사용되는 옵션. 캐시 속성을 참조하세요. |
gcs |
all | gcs 캐시 설정에 사용되는 옵션. 캐시 속성을 참조하세요. |
azure |
all | Azure 캐시 설정에 사용되는 옵션. 캐시 속성을 참조하세요. |
ca |
all | 사용자 정의 인증 기관(CA) 인증서를 포함하는 TLS 시크릿의 이름. |
serviceaccount |
all | Runner 포드를 실행하는 데 사용되는 서비스 계정을 재정의합니다. |
config |
all | 구성 템플릿과 함께 사용자 정의 ConfigMap을 제공하는 데 사용합니다. |
shutdownTimeout |
1.34 | 강제 종료 작업이 타임아웃되고 프로세스를 종료하기까지의 초 수. 기본값은 30입니다. 0 이하로 설정하면 기본값이 사용됩니다. |
logLevel |
1.34 | 로그 수준을 정의합니다. debug, info, warn, error, fatal, panic 중 하나입니다. |
logFormat |
1.34 | 로그 형식을 지정합니다. runner, text, json 중 하나입니다. 기본값은 색상 지정을 위한 ANSI 이스케이프 코드를 포함하는 runner입니다. |
listenAddr |
1.34 | Prometheus 메트릭 HTTP 서버가 수신할 주소(<host>:<port>)를 정의합니다. 구성에 대한 정보는 GitLab Runner Operator 모니터링을 참조하세요. |
sentryDsn |
1.34 | Sentry에 대한 모든 시스템 수준 오류 추적을 활성화합니다. |
connectionMaxAge |
1.34 | GitLab 서버에 대한 TLS 연결 유지를 재연결하기 전에 열어 둘 최대 기간. 기본값은 15분을 의미하는 15m입니다. 0 이하로 설정하면 연결이 가능한 한 오래 유지됩니다. |
podSpec |
1.23 | GitLab Runner 포드(템플릿)에 적용할 패치 목록. 자세한 내용은 Runner 포드 템플릿 패치를 참조하세요. |
deploymentSpec |
1.40 | GitLab Runner 디플로이먼트에 적용할 패치 목록. 자세한 내용은 Runner 디플로이먼트 템플릿 패치를 참조하세요. |
캐시 속성#
S3 캐시#
| 설정 | Operator | 설명 |
|---|---|---|
server |
all | S3 서버 주소. |
credentials |
all | 오브젝트 스토리지에 접근하는 데 사용되는 accesskey 및 secretkey 속성을 포함하는 Secret의 이름. |
bucket |
all | 캐시가 저장된 버킷 이름. |
location |
all | 캐시가 저장된 S3 리전 이름. |
insecure |
all | 안전하지 않은 연결 또는 HTTP를 사용합니다. |
gcs 캐시#
| 설정 | Operator | 설명 |
|---|---|---|
credentials |
all | 오브젝트 스토리지에 접근하는 데 사용되는 access-id 및 private-key 속성을 포함하는 Secret의 이름. |
bucket |
all | 캐시가 저장된 버킷 이름. |
credentialsFile |
all | gcs 자격 증명 파일 keys.json을 사용합니다. |
Azure 캐시#
| 설정 | Operator | 설명 |
|---|---|---|
credentials |
all | 오브젝트 스토리지에 접근하는 데 사용되는 accountName 및 privateKey 속성을 포함하는 Secret의 이름. |
container |
all | 캐시가 저장된 Azure 컨테이너 이름. |
storageDomain |
all | Azure Blob 스토리지의 도메인 이름. |
프록시 환경 구성#
프록시 환경을 생성하려면:
-
custom-env.yaml파일을 편집합니다. 예:apiVersion: v1 data: HTTP_PROXY: example.com kind: ConfigMap metadata: name: custom-env -
변경 사항을 적용하도록 OpenShift를 업데이트합니다.
oc apply -f custom-env.yaml -
gitlab-runner.yml파일을 업데이트합니다.apiVersion: apps.gitlab.com/v1beta2 kind: Runner metadata: name: dev spec: gitlabUrl: https://gitlab.example.com token: gitlab-runner-secret # 러너 토큰이 포함된 시크릿의 이름 env: custom-env
프록시가 Kubernetes API에 도달할 수 없는 경우 CI/CD 작업에서 오류가 발생할 수 있습니다:
ERROR: Job failed (system failure): prepare environment: setting up credentials: Post https://172.21.0.1:443/api/v1/namespaces//secrets: net/http: TLS handshake timeout. Check https://docs.gitlab.com/runner/shells/#shell-profile-loading for more information
이 오류를 해결하려면 custom-env.yaml 파일의 NO_PROXY 구성에 Kubernetes API의 IP 주소를 추가합니다:
apiVersion: v1
data:
NO_PROXY: 172.21.0.1
HTTP_PROXY: example.com
kind: ConfigMap
metadata:
name: custom-env
다음 명령으로 Kubernetes API의 IP 주소를 확인할 수 있습니다:
oc get services --namespace default --field-selector='metadata.name=kubernetes' | grep -v NAME | awk '{print $3}'
구성 템플릿으로 config.toml 사용자 지정#
구성 템플릿을 사용하여 Runner의 config.toml 파일을 사용자 지정할 수 있습니다.
-
사용자 정의 구성 템플릿 파일을 생성합니다. 예를 들어, Runner가
EmptyDir볼륨을 마운트하고cpu_limit을 설정하도록 지시해 보겠습니다.custom-config.toml파일을 생성합니다:[[runners]] [runners.kubernetes] cpu_limit = "500m" [runners.kubernetes.volumes] [[runners.kubernetes.volumes.empty_dir]] name = "empty-dir" mount_path = "/path/to/empty_dir" medium = "Memory" -
custom-config.toml파일에서custom-config-toml이라는 이름의ConfigMap을 생성합니다:oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -
Runner의config속성을 설정합니다:apiVersion: apps.gitlab.com/v1beta2 kind: Runner metadata: name: dev spec: gitlabUrl: https://gitlab.example.com token: gitlab-runner-secret config: custom-config-toml
알려진 이슈로 인해, 다음 설정을 수정하려면 구성 템플릿 대신 환경 변수를 사용해야 합니다:
| 설정 | 환경 변수 | 기본값 |
|---|---|---|
runners.request_concurrency |
RUNNER_REQUEST_CONCURRENCY |
1 |
runners.output_limit |
RUNNER_OUTPUT_LIMIT |
4096 |
kubernetes.runner.poll_timeout |
KUBERNETES_POLL_TIMEOUT |
180 |
사용자 정의 TLS 인증서 구성#
-
사용자 정의 TLS 인증서를 설정하려면
tls.crt키로 시크릿을 생성합니다. 이 예에서 파일 이름은custom-tls-ca-secret.yaml입니다:apiVersion: v1 kind: Secret metadata: name: custom-tls-ca type: Opaque stringData: tls.crt: | -----BEGIN CERTIFICATE----- MIIEczCCA1ugAwIBAgIBADANBgkqhkiG9w0BAQQFAD..AkGA1UEBhMCR0Ix ..... 7vQMfXdGsRrXNGRGnX+vWDZ3/zWI0joDtCkNnqEpVn..HoX -----END CERTIFICATE----- -
시크릿을 생성합니다:
oc apply -f custom-tls-ca-secret.yaml -
runner.yaml의ca키를 시크릿 이름과 동일하게 설정합니다:apiVersion: apps.gitlab.com/v1beta2 kind: Runner metadata: name: dev spec: gitlabUrl: https://gitlab.example.com token: gitlab-runner-secret ca: custom-tls-ca
Runner 포드의 CPU 및 메모리 크기 구성#
사용자 정의 config.toml 파일에서 CPU 제한 및 메모리 제한을 설정하려면 이 항목의 지침을 따르세요.
클러스터 리소스에 따른 Runner별 작업 동시성 구성#
Runner 리소스의 concurrent 속성을 설정합니다:
apiVersion: apps.gitlab.com/v1beta2
kind: Runner
metadata:
name: dev
spec:
gitlabUrl: https://gitlab.example.com
token: gitlab-runner-secret
concurrent: 2
작업 동시성은 프로젝트의 요구 사항에 따라 결정됩니다.
- 먼저 CI 작업을 실행하는 데 필요한 컴퓨팅 및 메모리 리소스를 결정합니다.
- 클러스터의 리소스를 감안하여 해당 작업이 몇 번 실행될 수 있는지 계산합니다.
높은 동시성 값을 설정하면 Kubernetes 실행자가 가능한 빨리 작업을 처리합니다. 그러나 Kubernetes 클러스터의 스케줄러 용량이 작업이 언제 스케줄될지를 결정합니다.
GitLab Runner 관리자의 서비스 계정#
신규 설치의 경우, GitLab Runner는 다음 RBAC 역할 바인딩 리소스가 없는 경우 Runner 관리자 포드에 대해 gitlab-runner-app-sa라는 이름의 Kubernetes ServiceAccount를 생성합니다:
gitlab-runner-app-rolebindinggitlab-runner-rolebinding
역할 바인딩 중 하나가 존재하는 경우 GitLab은 역할 바인딩에 정의된 subjects 및 roleRef에서 역할과 서비스 계정을 확인합니다.
두 역할 바인딩이 모두 존재하는 경우 gitlab-runner-app-rolebinding이 gitlab-runner-rolebinding보다 우선합니다.
트러블슈팅#
Root 대 non-root#
GitLab Runner Operator와 GitLab Runner 포드는 non-root 사용자로 실행됩니다. 결과적으로 작업에 사용되는 빌드 이미지도 성공적으로 완료하려면 non-root 사용자로 실행되어야 합니다. 이렇게 하면 작업이 최소한의 권한으로 성공적으로 실행될 수 있습니다.
이것이 작동하려면 CI/CD 작업에 사용되는 빌드 이미지가 다음을 확인해야 합니다:
- Non-root로 실행됨
- 제한된 파일 시스템에 쓰지 않음
OpenShift 클러스터의 대부분의 컨테이너 파일 시스템은 읽기 전용이며, 예외는 다음과 같습니다:
- 마운트된 볼륨
/var/tmp/tmp- 루트 파일 시스템에
tmpfs로 마운트된 기타 볼륨
HOME 환경 변수 재정의#
사용자 정의 빌드 이미지를 생성하거나 환경 변수를 재정의하는 경우, HOME 환경 변수가 읽기 전용인 /로 설정되지 않도록 합니다.
특히 작업이 홈 디렉터리에 파일을 써야 하는 경우입니다.
예를 들어 /home 아래에 /home/ci와 같은 디렉터리를 생성하고 Dockerfile에서 ENV HOME=/home/ci를 설정할 수 있습니다.
Runner 포드의 경우 HOME이 /home/gitlab-runner로 설정될 것으로 예상됩니다.
이 변수가 변경되면 새 위치에 적절한 권한이 있어야 합니다.
이러한 지침은 Red Hat Container Platform 문서에도 문서화되어 있습니다.
locked 변수 재정의#
Runner 토큰을 등록할 때 locked 변수를 true로 설정하면 다음 오류가 발생합니다:
Runner configuration other than name, description, and exector is reserved and cannot be specified
locked: true # REQUIRED
tags: ""
runUntagged: false
protected: false
maximumTimeout: 0
자세한 내용은 이슈 472를 참조하세요.
보안 컨텍스트 제약 사항 주의#
기본적으로 새 OpenShift 프로젝트에 설치될 때 GitLab Runner Operator는 non-root로 실행됩니다.
default 프로젝트와 같이 모든 서비스 계정이 anyuid 액세스를 가지는 일부 프로젝트는 예외입니다.
이 경우 이미지의 사용자는 root입니다. 모든 컨테이너 셸에서 whoami를 실행하여 이를 확인할 수 있습니다. 예를 들어 작업에서 확인합니다.
보안 컨텍스트 제약 사항에 대한 자세한 내용은 Red Hat Container Platform 문서를 참조하세요.
anyuid 보안 컨텍스트 제약 사항으로 실행#
root로 작업을 실행하거나 root 파일 시스템에 쓰면 시스템이 보안 위험에 노출될 수 있습니다.
CI/CD 작업을 root 사용자로 실행하거나 root 파일 시스템에 쓰려면
gitlab-runner-app-sa 서비스 계정에 anyuid 보안 컨텍스트 제약 사항을 설정합니다.
GitLab Runner 컨테이너는 이 서비스 계정을 사용합니다.
OpenShift 4.3.8 이전:
oc adm policy add-scc-to-user anyuid -z gitlab-runner-app-sa -n <runner_namespace>
# anyiud SCC가 설정되었는지 확인:
oc get scc anyuid -o yaml
OpenShift 4.3.8 이후:
oc create -f - <
rules:
- apiGroups:
- security.openshift.io
resourceNames:
- anyuid
resources:
- securitycontextconstraints
verbs:
- use
EOF
oc create -f - <
subjects:
- kind: ServiceAccount
name: gitlab-runner-app-sa
roleRef:
kind: Role
name: scc-anyuid
apiGroup: rbac.authorization.k8s.io
EOF
헬퍼 컨테이너와 빌드 컨테이너의 사용자 ID 및 그룹 ID 일치#
GitLab Runner Operator 디플로이먼트는 기본 헬퍼 이미지로 registry.gitlab.com/gitlab-org/ci-cd/gitlab-runner-ubi-images/gitlab-runner-helper-ocp를 사용합니다.
이 이미지는 보안 컨텍스트에 의해 명시적으로 수정되지 않는 한 1001:1001의 사용자 ID 및 그룹 ID로 실행됩니다.
빌드 컨테이너의 사용자 ID가 헬퍼 이미지의 사용자 ID와 다를 경우 빌드 중 권한 관련 오류가 발생할 수 있습니다. 다음은 일반적인 오류 메시지입니다:
fatal: detected dubious ownership in repository at '/builds/gitlab-org/gitlab-runner'
이 오류는 저장소가 사용자 ID 1001(헬퍼 컨테이너)에 의해 복제되었지만 빌드 컨테이너의 다른 사용자 ID가 이에 액세스하려고 함을 나타냅니다.
해결 방법: 빌드 컨테이너의 보안 컨텍스트를 헬퍼 컨테이너의 사용자 ID 및 그룹 ID와 일치하도록 구성합니다:
[runners.kubernetes.build_container_security_context]
run_as_user = 1001
run_as_group = 1001
추가 참고 사항:
- 이러한 설정은 저장소를 복제하는 컨테이너와 빌드하는 컨테이너 간에 일관된 파일 소유권을 보장합니다.
- 헬퍼 이미지를 다른 사용자 ID 또는 그룹 ID로 사용자 정의한 경우 해당 값을 적절히 조정합니다.
- OpenShift 디플로이먼트의 경우 이러한 보안 컨텍스트 설정이 클러스터의 보안 컨텍스트 제약 사항(SCC)을 준수하는지 확인합니다.
SETFCAP 구성#
RHOCP(Red Hat OpenShift Container Platform) 4.11 이상을 사용하는 경우 다음 오류 메시지가 발생할 수 있습니다:
error reading allowed ID mappings:error reading subuid mappings for user
일부 작업(예: buildah)은 올바르게 실행하기 위해 SETFCAP 기능이 필요합니다. 이 문제를 해결하려면:
-
GitLab Runner가 사용하는 보안 컨텍스트 제약 사항에 SETFCAP 기능을 추가합니다(
gitlab-scc를 GitLab Runner 포드에 할당된 보안 컨텍스트 제약 사항으로 교체):oc patch scc gitlab-scc --type merge -p '{"allowedCapabilities":["SETFCAP"]}' -
config.toml을 업데이트하고kubernetes섹션 아래에SETFCAP기능을 추가합니다:[[runners]] [runners.kubernetes] [runners.kubernetes.pod_security_context] [runners.kubernetes.build_container_security_context] [runners.kubernetes.build_container_security_context.capabilities] add = ["SETFCAP"] -
GitLab Runner가 배포된 네임스페이스에서 이
config.toml을 사용하여ConfigMap을 생성합니다:oc create configmap custom-config-toml --from-file config.toml=config.toml -
수정하려는 Runner를 수정하여 최근에 생성한
ConfigMap을 가리키는config:매개변수를 추가합니다(my-runner를 올바른 Runner 포드 이름으로 교체).oc patch runner my-runner --type merge -p '{"spec": {"config": "custom-config-toml"}}'
자세한 내용은 Red Hat 문서를 참조하세요.
FIPS 준수 GitLab Runner 사용#
Operator의 경우 헬퍼 이미지만 변경할 수 있습니다. 아직 GitLab Runner 이미지를 변경할 수 없습니다. 이슈 28814에서 이 기능을 추적합니다.
FIPS 준수 GitLab Runner 헬퍼를 사용하려면 헬퍼 이미지를 다음과 같이 변경합니다:
apiVersion: apps.gitlab.com/v1beta2
kind: Runner
metadata:
name: dev
spec:
gitlabUrl: https://gitlab.example.com
token: gitlab-runner-secret
helperImage: gitlab/gitlab-runner-helper:ubi-fips
concurrent: 2
자체 서명 인증서를 사용하여 GitLab Runner 등록#
GitLab Self-Managed에서 자체 서명 인증서를 사용하려면 개인 인증서에 서명하는 데 사용한 CA 인증서가 포함된 시크릿을 생성합니다.
시크릿의 이름은 Runner spec 섹션에서 CA로 제공됩니다:
KIND: Runner
VERSION: apps.gitlab.com/v1beta2
FIELD: ca <string>
DESCRIPTION:
Name of tls secret containing the custom certificate authority (CA)
certificates
다음 명령으로 시크릿을 생성할 수 있습니다:
oc create secret generic mySecret --from-file=tls.crt=myCert.pem -o yaml
IP 주소를 가리키는 외부 URL로 GitLab Runner 등록#
Runner가 자체 서명 인증서와 호스트 이름을 일치시킬 수 없는 경우 오류 메시지가 발생할 수 있습니다.
이 문제는 GitLab Self-Managed를 호스트 이름 대신 IP 주소(예: ###.##.##.##)를 사용하도록 구성할 때 발생합니다:
[31;1mERROR: Registering runner... failed [0;m [31;1mrunner[0;m=A5abcdEF [31;1mstatus[0;m=couldn't execute POST against https://###.##.##.##/api/v4/runners:
Post https://###.##.##.##/api/v4/runners: x509: cannot validate certificate for ###.##.##.## because it doesn't contain any IP SANs
[31;1mPANIC: Failed to register the runner. You may be having network problems.[0;m
이 문제를 해결하려면:
-
GitLab Self-Managed 서버에서
openssl을 수정하여subjectAltName매개변수에 IP 주소를 추가합니다:# vim /etc/pki/tls/openssl.cnf [ v3_ca ] subjectAltName=IP:169.57.64.36 <---- 이 줄을 추가합니다. 169.57.64.36은 GitLab 서버 IP입니다. -
아래 명령으로 자체 서명 CA를 다시 생성합니다:
# cd /etc/gitlab/ssl # openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/gitlab/ssl/169.57.64.36.key -out /etc/gitlab/ssl/169.57.64.36.crt # openssl dhparam -out /etc/gitlab/ssl/dhparam.pem 4096 # gitlab-ctl restart -
이 새 인증서를 사용하여 새 시크릿을 생성합니다.
패치 구조#
각 스펙 패치는 다음 속성으로 구성됩니다:
| 설정 | 설명 |
|---|---|
name |
사용자 정의 스펙 패치의 이름. |
patchFile |
생성되기 전에 최종 스펙에 적용할 변경 사항을 정의하는 파일의 경로. 파일은 JSON 또는 YAML 파일이어야 합니다. |
patch |
생성되기 전에 최종 스펙에 적용할 변경 사항을 설명하는 JSON 또는 YAML 형식 문자열. |
patchType |
스펙에 지정된 변경 사항을 적용하는 데 사용되는 전략. 허용 값은 merge, json, strategic(기본값)입니다. |
동일한 스펙 구성에서 patchFile과 patch를 동시에 설정할 수 없습니다.
Runner 포드 템플릿 패치#
포드 스펙
패치는 Operator가 생성한 Kubernetes 디플로이먼트에 패치를 적용하여 GitLab Runner가 배포되는 방식을 사용자 정의할 수 있게 해줍니다.
패치는 포드 템플릿의 스펙(deployment.spec.template.spec)에 적용됩니다.
다음과 같은 포드 수준 설정을 제어할 수 있습니다:
- 리소스 요청 및 제한
- 보안 컨텍스트
- 볼륨 마운트 및 볼륨
- 환경 변수
- 노드 셀렉터 및 어피니티 규칙
- 톨러레이션
- 호스트 이름 및 DNS 구성
Runner 디플로이먼트 템플릿 패치#
디플로이먼트 스펙
패치는 Operator가 생성한 Kubernetes 디플로이먼트에 패치를 적용하여 GitLab Runner가 배포되는 방식을 사용자 정의할 수 있게 해줍니다.
패치는 디플로이먼트 스펙(deployment.spec)에 적용됩니다.
다음과 같은 디플로이먼트 수준 설정을 제어할 수 있습니다:
- 레플리카 수
- 디플로이먼트 전략 (RollingUpdate, Recreate)
- 리비전 히스토리 제한
- 진행 데드라인 초
- 레이블 및 어노테이션
패치 순서#
디플로이먼트 스펙 패치는 포드 스펙 패치 전에 적용됩니다. 즉, 디플로이먼트와 포드 스펙이 동일한 필드를 수정하는 경우 포드 스펙이 우선합니다.
예시#
포드 스펙 패치 예시#
apiVersion: apps.gitlab.com/v1beta2
kind: Runner
metadata:
name: dev
spec:
gitlabUrl: https://gitlab.example.com
token: gitlab-runner-secret
podSpec:
- name: "set-hostname"
patch: |
hostname: "custom-hostname"
patchType: "merge"
- name: "add-resource-requests"
patch: |
containers:
- name: build
resources:
requests:
cpu: "500m"
memory: "256Mi"
patchType: "strategic"
디플로이먼트 스펙 패치 예시#
apiVersion: apps.gitlab.com/v1beta2
kind: Runner
metadata:
name: dev
spec:
gitlabUrl: https://gitlab.example.com
token: gitlab-runner-secret
deploymentSpec:
- name: "set-replicas"
patch: |
replicas: 3
patchType: "strategic"
- name: "configure-strategy"
patch: |
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 50%
patchType: "strategic"
- name: "set-revision-history"
patch: |
[{"op": "add", "path": "/revisionHistoryLimit", "value": 10}]
patchType: "json"
모범 사례#
- 프로덕션 디플로이먼트에 적용하기 전에 비프로덕션 환경에서 패치를 테스트합니다.
- 개별 포드 설정보다 디플로이먼트 동작에 영향을 미치는 설정에는 디플로이먼트 수준 패치를 사용합니다.
- 충돌하는 필드에 대해 포드 스펙 패치가 디플로이먼트 스펙 패치보다 우선한다는 점을 기억합니다.
