GitLab-Sidekiq 차트 사용하기

Tier: Free, Premium, Ultimate Offering: Self-managed

sidekiq 하위 차트는 Sidekiq 작업자의 구성 가능한 배포를 제공하며,
개별적으로 확장 가능성과 구성에 맞춰 여러 Deployment 간의 큐 분리를 제공하도록 설계되어 있습니다.

이 차트는 기본 pods: 선언을 제공하지만, 정의를 비워 두면
작업자가 없게 됩니다.

요구 사항

이 차트는 Redis, PostgreSQL 및 Gitaly 서비스에 대한 접근에 의존하며,
전체 GitLab 차트의 일환으로 또는 이 차트가 배포되는 Kubernetes 클러스터에서
접근할 수 있는 외부 서비스로 제공됩니다.

설계 선택

이 차트는 여러 Deployment와 연관된 ConfigMap을 생성합니다.
명령 길이에 대한 우려를 피하기 위해 environment 속성이나
추가 인수를 컨테이너의 command에 사용하는 대신
ConfigMap 동작을 사용하는 것이 더 명확할 것이라고 판단했습니다.
이 선택은 많은 수의 ConfigMap을 생성하지만, 각 팟이
무엇을 해야 하는지 매우 명확한 정의를 제공합니다.

구성

sidekiq 차트는 세 부분으로 구성됩니다: 차트 전체 외부 서비스,
차트 전체 기본값, 및 퍼-팟 정의.

설치 명령줄 옵션

아래 표에는 --set 플래그를 사용하여 helm install 명령에 제공할 수 있는
모든 가능한 차트 구성이 포함되어 있습니다:

매개변수 기본값 설명
annotations   팟 주석
podLabels   보조 팟 라벨. 선택자에는 사용되지 않습니다.
common.labels   이 차트에 의해 생성된 모든 객체에 적용되는 보조 라벨입니다.
concurrency 20 Sidekiq 기본 동시성
deployment.strategy {} 배포에 의해 사용되는 업데이트 전략을 구성할 수 있게 해줍니다.
deployment.terminationGracePeriodSeconds 30 팟이 정상적으로 종료되는 데 필요한 선택적 기간(초)입니다.
enabled true Sidekiq 활성화 플래그
extraContainers   포함할 추가 컨테이너 목록
extraInitContainers   포함할 추가 초기화 컨테이너 목록
extraVolumeMounts   구성할 추가 볼륨 마운트의 문자열 템플릿입니다.
extraVolumes   구성할 추가 볼륨의 문자열 템플릿입니다.
extraEnv   노출할 추가 환경 변수 목록
extraEnvFrom   노출할 다른 데이터 소스의 추가 환경 변수 목록
gitaly.serviceName gitaly Gitaly 서비스 이름
health_checks.port 3808 헬스 체크 서버 포트
hpa.behaviour {scaleDown: {stabilizationWindowSeconds: 300 }} 동적 조정 동작의 사양을 포함합니다. (requires autoscaling/v2beta2 or higher)
hpa.customMetrics [] 원하는 복제 수를 계산하기 위해 사용할 사용자 정의 메트릭 사양을 포함합니다. (overrides the default use of Average CPU Utilization configured in targetAverageUtilization)
hpa.cpu.targetType AverageValue 자동 확장 CPU 대상 유형을 설정합니다. Utilization 또는 AverageValue 중 하나여야 합니다.
hpa.cpu.targetAverageValue 350m 자동 확장 CPU 대상 값을 설정합니다.
hpa.cpu.targetAverageUtilization   자동 확장 CPU 대상 활용도를 설정합니다.
hpa.memory.targetType   자동 확장 메모리 대상 유형을 설정합니다. Utilization 또는 AverageValue 중 하나여야 합니다.
hpa.memory.targetAverageValue   자동 확장 메모리 대상 값을 설정합니다.
hpa.memory.targetAverageUtilization   자동 확장 메모리 대상 활용도를 설정합니다.
hpa.targetAverageValue   DEPRECATED 자동 확장 CPU 대상 값을 설정합니다.
keda.enabled false KEDA ScaledObjects를 사용하여 HorizontalPodAutoscalers 대신 사용하는 옵션입니다.
keda.pollingInterval 30 각 트리거를 체크하는 간격입니다.
keda.cooldownPeriod 300 마지막 트리거가 활성 상태로 보고된 후 리소스를 0으로 되돌리기 전까지 기다리는 기간입니다.
keda.minReplicaCount   KEDA가 리소스를 축소할 최소 복제 수, 기본값은 minReplicas입니다.
keda.maxReplicaCount   KEDA가 리소스를 확장할 최대 복제 수, 기본값은 maxReplicas입니다.
keda.fallback   KEDA 폴백 구성, 문서를 참조하십시오.
keda.hpaName   KEDA가 생성할 HPA 리소스의 이름, 기본값은 keda-hpa-{scaled-object-name}입니다.
keda.restoreToOriginalReplicaCount   ScaledObject가 삭제된 후 대상 리소스가 원래 복제 수로 되돌려야 하는지 여부를 지정합니다.
keda.behavior   업/다운 스케일링 동작의 사양, 기본값은 hpa.behavior입니다.
keda.triggers   대상 리소스의 스케일링을 활성화하는 트리거 목록, 기본값은 hpa.cpuhpa.memory에서 계산된 트리거입니다.
minReplicas 2 최소 복제 수
maxReplicas 10 최대 복제 수
maxUnavailable 1 사용할 수 없는 최대 팟의 수 제한
image.pullPolicy Always Sidekiq 이미지 풀 정책
image.pullSecrets   이미지 리포지토리의 비밀
image.repository registry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-ee Sidekiq 이미지 리포지토리
image.tag   Sidekiq 이미지 태그
init.image.repository   초기화 컨테이너 이미지
init.image.tag   초기화 컨테이너 이미지 태그
init.containerSecurityContext   초기화 컨테이너 특정 securityContext
init.containerSecurityContext.runAsUser 1000 초기화 컨테이너 특정: 컨테이너가 시작되어야 하는 사용자 ID
init.containerSecurityContext.allowPrivilegeEscalation false 초기화 컨테이너 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 가질 수 있는지 여부를 제어합니다.
init.containerSecurityContext.runAsNonRoot true 초기화 컨테이너 특정: 컨테이너가 비루트 사용자로 실행되는지 여부를 제어합니다.
init.containerSecurityContext.capabilities.drop [ "ALL" ] 초기화 컨테이너 특정: 컨테이너에 대한 Linux capabilities를 제거합니다.
logging.format json 비JSON 로그에 대해 text로 설정합니다.
metrics.enabled true 메트릭 엔드포인트가 스크래핑을 위해 제공되어야 하는지 여부
metrics.port 3807 메트릭 엔드포인트 포트
metrics.path /metrics 메트릭 엔드포인트 경로
metrics.log_enabled false sidekiq_exporter.log에 기록되는 메트릭 서버 로그의 활성화 또는 비활성화
metrics.podMonitor.enabled false Prometheus Operator가 메트릭 스크래핑을 관리할 수 있도록 PodMonitor를 생성할지 여부
metrics.podMonitor.additionalLabels {} PodMonitor에 추가할 라벨
metrics.podMonitor.endpointConfig {} PodMonitor에 대한 추가 엔드포인트 구성
metrics.annotations   DEPRECATED 명시적 메트릭 주석을 설정합니다. 템플릿 내용으로 대체되었습니다.
metrics.tls.enabled false metrics/sidekiq_exporter 엔드포인트에 대한 TLS 활성화
metrics.tls.secretName {Release.Name}-sidekiq-metrics-tls metrics/sidekiq_exporter 엔드포인트 TLS 인증서 및 키에 대한 비밀
psql.password.key psql-password psql 비밀번호의 비밀번호 키
psql.password.secret gitlab-postgres psql 비밀번호 비밀
psql.port   PostgreSQL 서버 포트를 설정합니다. global.psql.port보다 우선합니다.
redis.serviceName redis Redis 서비스 이름
resources.requests.cpu 900m Sidekiq에서 필요한 최소 CPU
resources.requests.memory 2G Sidekiq에서 필요한 최소 메모리
resources.limits.memory   Sidekiq에서 허용되는 최대 메모리
timeout 25 Sidekiq 작업 타임아웃
tolerations [] 팟 할당을 위한 내성 라벨
memoryKiller.daemonMode true false인 경우 레거시 메모리 킬러 모드를 사용합니다.
memoryKiller.maxRss 2000000 지연된 종료가 트리거되기 전 최대 RSS, 킬로바이트 단위로 표현됩니다.
memoryKiller.graceTime 900 트리거된 종료 전에 대기해야 하는 시간, 초 단위로 표현됩니다.
memoryKiller.shutdownWait 30 트리거된 종료 후 기존 작업이 완료될 때까지 대기하는 시간, 초 단위로 표현됩니다.
memoryKiller.hardLimitRss   데몬 모드에서 즉각적인 종료가 트리거되기 전 최대 RSS, 킬로바이트 단위로 표현됩니다.
memoryKiller.checkInterval 3 메모리 확인 간격의 시간입니다.
livenessProbe.initialDelaySeconds 20 생존성 프로브가 시작되기 전 대기 시간
livenessProbe.periodSeconds 60 생존성 프로브를 수행하는 빈도
livenessProbe.timeoutSeconds 30 생존성 프로브 타임아웃
livenessProbe.successThreshold 1 생존성 프로브가 실패한 후 성공적인 것으로 간주하기 위한 최소 연속 성공 수
livenessProbe.failureThreshold 3 생존성 프로브가 성공한 후 실패한 것으로 간주하기 위한 최소 연속 실패 수
readinessProbe.initialDelaySeconds 0 준비 프로브가 시작되기 전 대기 시간
readinessProbe.periodSeconds 10 준비 프로브를 수행하는 빈도
readinessProbe.timeoutSeconds 2 준비 프로브 타임아웃
readinessProbe.successThreshold 1 준비 프로브가 실패한 후 성공적인 것으로 간주하기 위한 최소 연속 성공 수
readinessProbe.failureThreshold 3 준비 프로브가 성공한 후 실패한 것으로 간주하기 위한 최소 연속 실패 수
securityContext.fsGroup 1000 팟이 시작되어야 하는 그룹 ID
securityContext.runAsUser 1000 팟이 시작되어야 하는 사용자 ID
securityContext.fsGroupChangePolicy   볼륨의 소유권 및 권한을 변경하는 정책 (requires Kubernetes 1.23)
securityContext.seccompProfile.type RuntimeDefault 사용할 Seccomp 프로필
containerSecurityContext   컨테이너가 시작될 때 사용되는 컨테이너 securityContext를 재정의합니다.
containerSecurityContext.runAsUser 1000 컨테이너가 시작될 때 사용되는 보안 컨텍스트를 덮어쓸 수 있습니다.
containerSecurityContext.allowPrivilegeEscalation false 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 가질 수 있는지 여부를 제어합니다.
containerSecurityContext.runAsNonRoot true 컨테이너가 비루트 사용자로 실행되는지 여부를 제어합니다.
containerSecurityContext.capabilities.drop [ "ALL" ] Gitaly 컨테이너에 대한 Linux capabilities를 제거합니다.
serviceAccount.annotations {} ServiceAccount 주석
serviceAccount.automountServiceAccountToken false 기본 ServiceAccount 접근 토큰이 팟에 마운트될지 여부를 나타냅니다.
serviceAccount.create false ServiceAccount를 생성할지 여부를 나타냅니다.
serviceAccount.enabled false ServiceAccount를 사용할지 여부를 나타냅니다.
serviceAccount.name   ServiceAccount의 이름. 설정하지 않으면 전체 차트 이름이 사용됩니다.
priorityClassName "" 팟의 priorityClassName을 구성할 수 있도록 허용하며, 이는 퇴거 시의 팟 우선순위를 제어하는 데 사용됩니다.

차트 구성 예제

resources

resources는 Sidekiq pod가 소비할 수 있는 메모리 및 CPU의 최소 및 최대 양을 구성할 수 있게 해줍니다.

Sidekiq pod의 워크로드는 배포에 따라 크게 다릅니다. 일반적으로 각 Sidekiq 프로세스는 약 1 vCPU와 2 GB의 메모리를 소비하는 것으로 이해됩니다. 수직 스케일링은 일반적으로 이 1:2 비율의 vCPU:Memory에 맞춰져야 합니다.

아래는 resources의 사용 예입니다:

resources:
  limits:
    memory: 5G
  requests:
    memory: 2G
    cpu: 900m

extraEnv

extraEnv는 종속성 컨테이너에서 추가 환경 변수를 노출할 수 있게 해줍니다.

아래는 extraEnv의 사용 예입니다:

extraEnv:
  SOME_KEY: some_value
  SOME_OTHER_KEY: some_other_value

컨테이너가 시작되면, 환경 변수가 노출되었는지 확인할 수 있습니다:

env | grep SOME
SOME_KEY=some_value
SOME_OTHER_KEY=some_other_value

지정된 pod에 대해 extraEnv를 설정할 수도 있습니다:

extraEnv:
  SOME_KEY: some_value
  SOME_OTHER_KEY: some_other_value
pods:
  - name: mailers
    queues: mailers
    extraEnv:
      SOME_POD_KEY: some_pod_value
  - name: catchall

이렇게 하면 mailers pod의 애플리케이션 컨테이너에 대해서만 SOME_POD_KEY가 설정됩니다. Pod 수준의 extraEnv 설정은 init containers에 추가되지 않습니다.

extraEnvFrom

extraEnvFrom은 pod의 모든 컨테이너에서 다른 데이터 소스의 추가 환경 변수를 노출할 수 있게 해줍니다.

아래는 extraEnvFrom의 사용 예입니다:

extraEnvFrom:
  MY_NODE_NAME:
    fieldRef:
      fieldPath: spec.nodeName
  MY_CPU_REQUEST:
    resourceFieldRef:
      containerName: test-container
      resource: requests.cpu
  SECRET_THING:
    secretKeyRef:
      name: special-secret
      key: special_token
      # 선택적: boolean
pods:
  - name: immediate
    extraEnvFrom:
      CONFIG_STRING:
        configMapKeyRef:
          name: useful-config
          key: some-string
          # 선택적: boolean

extraVolumes

extraVolumes는 차트 전반에 걸쳐 추가 볼륨을 구성할 수 있게 해줍니다.

아래는 extraVolumes의 사용 예입니다:

extraVolumes: |
  - name: example-volume
    persistentVolumeClaim:
      claimName: example-pvc

extraVolumeMounts

extraVolumeMounts는 차트 전반에 걸쳐 모든 컨테이너에 대해 추가 volumeMounts를 구성할 수 있게 해줍니다.

아래는 extraVolumeMounts의 사용 예입니다:

extraVolumeMounts: |
  - name: example-volume-mount
    mountPath: /etc/example

image.pullSecrets

pullSecrets는 pod에 대한 이미지를 가져오기 위해 개인 레지스트리에 인증할 수 있게 해줍니다.

개인 레지스트리 및 인증 방법에 대한 추가 정보는 Kubernetes 문서에서 확인할 수 있습니다.

아래는 pullSecrets의 사용 예입니다:

image:
  repository: my.sidekiq.repository
  pullPolicy: Always
  pullSecrets:
  - name: my-secret-name
  - name: my-secondary-secret-name

serviceAccount

이 섹션은 ServiceAccount가 생성되어야 하는지 여부와 기본 액세스 토큰이 파드에 탑재되어야 하는지 여부를 제어합니다.

Name Type Default Description
annotations Map {} ServiceAccount 주석.
automountServiceAccountToken Boolean false 기본 ServiceAccount 액세스 토큰이 파드에 탑재되어야 하는지 제어합니다. 특정 사이드카가 제대로 작동하기 위해 필요하지 않는 한 이를 활성화하지 않아야 합니다 (예: Istio).
create Boolean false ServiceAccount를 생성해야 하는지 여부를 나타냅니다.
enabled Boolean false ServiceAccount를 사용할지 여부를 나타냅니다.
name String   ServiceAccount의 이름. 설정되지 않은 경우 전체 차트 이름이 사용됩니다.

tolerations

tolerations는 오염된 작업자 노드에서 파드를 스케줄하도록 허용합니다.

아래는 tolerations의 사용 예입니다:

tolerations:
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoSchedule"
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoExecute"

annotations

annotations는 Sidekiq 파드에 주석을 추가할 수 있도록 합니다.

아래는 annotations의 사용 예입니다:

annotations:
  kubernetes.io/example-annotation: annotation-value

Using the Community Edition of this chart

기본적으로 Helm 차트는 GitLab의 Enterprise Edition을 사용합니다. 원하는 경우 커뮤니티 에디션을 대신 사용할 수 있습니다. 두 버전의 차이점에 대해 더 알아보세요.

커뮤니티 에디션을 사용하려면 image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-ce로 설정하세요.

External Services

이 차트는 Webservice 차트와 동일한 Redis, PostgreSQL 및 Gitaly 인스턴스에 연결되어야 합니다. 외부 서비스의 값은 모든 Sidekiq 파드에서 공유되는 ConfigMap에 채워집니다.

Redis

redis:
  host: rank-racoon-redis
  port: 6379
  sentinels:
    - host: sentinel1.example.com
      port: 26379
  password:
    secret: gitlab-redis
    key: redis-password
Name Type Default Description
host String   사용할 데이터베이스가 있는 Redis 서버의 호스트 이름입니다. serviceName 대신 생략할 수 있습니다. Redis Sentinel을 사용하는 경우, host 속성은 sentinel.conf에 지정된 클러스터 이름으로 설정해야 합니다.
password.key String   Redis의 password.key 속성은 비밀번호를 포함하는 비밀(아래)의 키 이름을 정의합니다.
password.secret String   Redis의 password.secret 속성은 가져올 Kubernetes Secret의 이름을 정의합니다.
port Integer 6379 Redis 서버에 연결할 포트입니다.
serviceName String redis Redis 데이터베이스를 운영하는 service의 이름입니다. 이 값이 존재하고 host가 없으면, 차트는 host 값을 대신하여 서비스(및 현재 .Release.Name)의 호스트 이름을 템플릿하게 됩니다. 이는 전체 GitLab 차트의 일부분으로 Redis를 사용할 때 편리합니다.
sentinels.[].host String   Redis HA 설정을 위한 Redis Sentinel 서버의 호스트 이름입니다.
sentinels.[].port Integer 26379 Redis Sentinel 서버에 연결할 포트입니다.
note
현재 Redis Sentinel 지원은 GitLab 차트와 별도로 배포된 Sentinel만 지원합니다. 따라서 GitLab 차트를 통해 Redis 배포는 redis.install=false로 비활성화되어야 합니다.

Redis 비밀번호를 포함하는 비밀은 GitLab 차트를 배포하기 전에 수동으로 생성해야 합니다.

PostgreSQL

psql:
  host: rank-racoon-psql
  serviceName: pgbouncer
  port: 5432
  database: gitlabhq_production
  username: gitlab
  preparedStatements: false
  password:
    secret: gitlab-postgres
    key: psql-password
이름 유형 기본값 설명
host 문자열   사용할 데이터베이스가 있는 PostgreSQL 서버의 호스트 이름입니다. postgresql.install=true인 경우 생략할 수 있습니다.(기본 비프로덕션).
serviceName 문자열   PostgreSQL 데이터베이스를 운영하는 service의 이름입니다. 이 값이 존재하고 host가 없을 경우, 차트는 host 값을 대신하여 서비스의 호스트 이름을 템플릿화합니다.
database 문자열 gitlabhq_production PostgreSQL 서버에서 사용할 데이터베이스의 이름입니다.
password.key 문자열   PostgreSQL의 password.key 속성은 비밀번호를 포함하는 비밀(아래)의 키 이름을 정의합니다.
password.secret 문자열   PostgreSQL의 password.secret 속성은 가져올 Kubernetes Secret의 이름을 정의합니다.
port 정수 5432 PostgreSQL 서버에 연결할 포트입니다.
username 문자열 gitlab 데이터베이스에 인증하기 위해 사용할 사용자 이름입니다.
preparedStatements 불리언 false PostgreSQL 서버와 통신할 때 준비된 문이 사용되어야 하는지 여부입니다.

Gitaly

gitaly:
  internal:
    names:
      - default
      - default2
  external:
    - name: node1
      hostname: node1.example.com
      port: 8079
  authToken:
    secret: gitaly-secret
    key: token
이름 유형 기본값 설명
host 문자열   사용할 Gitaly 서버의 호스트 이름입니다. serviceName을 대신하여 생략할 수 있습니다.
serviceName 문자열 gitaly Gitaly 서버를 운영하는 service의 이름입니다. 이 값이 존재하고 host가 없을 경우, 차트는 현재 .Release.Name을 포함하여 서비스의 호스트 이름을 템플릿화합니다. 이것은 Gitaly를 전체 GitLab 차트의 일부로 사용할 때 편리합니다.
port 정수 8075 Gitaly 서버에 연결할 포트입니다.
authToken.key 문자열   아래 비밀에서 authToken을 포함하는 키의 이름입니다.
authToken.secret 문자열   가져올 Kubernetes Secret의 이름입니다.

메트릭

기본적으로 각 포드에 대해 Prometheus 메트릭 수출자가 활성화됩니다. 메트릭은 GitLab Prometheus 메트릭이 관리 영역에서 활성화된 경우에만 사용할 수 있습니다. 수출자는 포트 3807에서 /metrics 엔드포인트를 노출합니다. 메트릭이 활성화되면, 주석이 각 포드에 추가되어 Prometheus 서버가 노출된 메트릭을 발견하고 스크랩할 수 있습니다.

차트 전체 기본값

다음 값들은 특정 값이 per-pod 기준으로 제시되지 않는 경우 차트 전체에서 사용됩니다.

이름 유형 기본값 설명
concurrency Integer 25 동시에 처리할 작업 수입니다.
timeout Integer 4 Sidekiq 종료 타임아웃입니다. Sidekiq가 TERM 신호를 받은 후 프로세스를 강제로 종료하기 전까지의 초 수입니다.
memoryKiller.checkInterval Integer 3 메모리 체크 사이의 시간(초)입니다.
memoryKiller.maxRss Integer 2000000 지연 종료를 트리거하기 전 최대 RSS(메모리 사용량)입니다. 킬로바이트로 표시됩니다.
memoryKiller.graceTime Integer 900 트리거된 종료를 기다리는 시간(초)입니다.
memoryKiller.shutdownWait Integer 30 트리거된 종료 후 현재 작업이 완료될 때까지의 시간(초)입니다.
minReplicas Integer 2 최소 복제본 수입니다.
maxReplicas Integer 10 최대 복제본 수입니다.
maxUnavailable Integer 1 사용할 수 없는 최대 Pod 수의 제한입니다.

참고: Sidekiq 메모리 킬러에 대한 자세한 문서가 있습니다 Linux 패키지 문서에서 확인할 수 있습니다.

Per-pod 설정

pods 선언은 작업 pod에 대한 모든 속성을 선언할 수 있도록 합니다. 이러한 속성은 Deployment에 템플릿화되며, 각 Sidekiq 인스턴스에 대해 개별 ConfigMap이 생성됩니다.

참고: 설정은 모든 큐를 모니터링하도록 설정된 단일 pod를 포함하는 것을 기본으로 합니다. pods 섹션에 변경 사항을 추가하면 기본 pod를 덮어쓰게 되며, 기본 pod와 함께 새로운 pod를 추가하지 않습니다.

이름 유형 기본값 설명
concurrency Integer   동시에 처리할 작업 수입니다. 제공되지 않으면 차트 전체 기본값에서 가져옵니다.
name String   해당 pod의 DeploymentConfigMap의 이름으로 사용됩니다. 짧게 유지해야 하며 두 개의 항목 간에 중복되어서는 안 됩니다.
queues String   아래를 참조하세요.
timeout Integer   Sidekiq 종료 타임아웃입니다. Sidekiq가 TERM 신호를 받은 후 프로세스를 강제로 종료하기 전까지의 초 수입니다. 제공되지 않으면 차트 전체 기본값에서 가져옵니다. 이 값은 terminationGracePeriodSeconds보다 작아야 합니다.
resources     각 pod는 자신의 resources 요구 사항을 제시할 수 있으며, 제공된 경우 생성된 Deployment에 추가됩니다. 이들은 Kubernetes 문서와 일치합니다.
nodeSelector     각 pod는 nodeSelector 속성으로 구성할 수 있으며, 제공된 경우 생성된 Deployment에 추가됩니다. 이 정의는 Kubernetes 문서와 일치합니다.
memoryKiller.checkInterval Integer 3 메모리 체크 사이의 시간입니다.
memoryKiller.maxRss Integer 2000000 특정 pod에 대한 최대 RSS를 재정의합니다.
memoryKiller.graceTime Integer 900 특정 Pod에 대한 트리거된 종료 전 대기 시간을 재정의합니다.
memoryKiller.shutdownWait Integer 30 특정 Pod에 대한 트리거된 종료 후 현재 작업이 완료될 때까지 기다리는 시간을 재정의합니다.
minReplicas Integer 2 최소 복제본 수입니다.
maxReplicas Integer 10 최대 복제본 수입니다.
maxUnavailable Integer 1 사용할 수 없는 최대 Pod 수의 제한입니다.
podLabels Map {} 보조 Pod 레이블입니다. 선택자에는 사용되지 않습니다.
strategy   {} 배포에 사용되는 업데이트 전략을 구성할 수 있습니다.
extraVolumes String   지정된 pod에 대한 추가 볼륨을 구성합니다.
extraVolumeMounts String   지정된 pod에 대한 추가 볼륨 마운트를 구성합니다.
priorityClassName String "" pod의 priorityClassName을 구성할 수 있습니다. 이는 축출 시 pod의 우선 순위를 제어하는 데 사용됩니다.
hpa.customMetrics Array [] 사용자 정의 메트릭은 원하는 복제본 수를 계산하는 데 사용될 사양을 포함합니다(기본적으로 targetAverageUtilization에 구성된 평균 CPU 사용량을 재정의).
hpa.cpu.targetType String AverageValue 자동 확장 CPU 대상 유형을 재정의하며, Utilization 또는 AverageValue여야 합니다.
hpa.cpu.targetAverageValue String 350m 자동 확장 CPU 대상 값을 재정의합니다.
hpa.cpu.targetAverageUtilization Integer   자동 확장 CPU 대상 활용도를 재정의합니다.
hpa.memory.targetType String   자동 확장 메모리 대상 유형을 재정의합니다. Utilization 또는 AverageValue여야 합니다.
hpa.memory.targetAverageValue String   자동 확장 메모리 대상 값을 재정의합니다.
hpa.memory.targetAverageUtilization Integer   자동 확장 메모리 대상 활용도를 재정의합니다.
hpa.targetAverageValue String   Deprecated 자동 확장 CPU 대상 값을 재정의합니다.
keda.enabled Boolean false KEDA 활성화를 재정의합니다.
keda.pollingInterval Integer 30 KEDA 폴링 간격을 재정의합니다.
keda.cooldownPeriod Integer 300 KEDA 쿨다운 기간을 재정의합니다.
keda.minReplicaCount Integer   KEDA 최소 복제본 수를 재정의합니다.
keda.maxReplicaCount Integer   KEDA 최대 복제본 수를 재정의합니다.
keda.fallback Map   KEDA 실패 구성 재정의합니다.
keda.hpaName String   KEDA HPA 이름을 재정의합니다.
keda.restoreToOriginalReplicaCount Boolean   원래 복제본 수의 복원을 활성화하는 것을 재정의합니다.
keda.behavior Map   KEDA HPA 동작을 재정의합니다.
keda.triggers Array   KEDA 트리거를 재정의합니다.
extraEnv Map   노출할 추가 환경 변수 목록입니다. 차트 전체 값은 이와 병합되며, pod의 값이 우선합니다.
extraEnvFrom Map   노출할 다른 데이터 소스에서의 추가 환경 변수 목록입니다.
terminationGracePeriodSeconds Integer 30 pod가 정상적으로 종료되는 데 필요한 선택적 기간(초)입니다.

queues 값은 처리할 큐의 쉼표로 구분된 목록을 포함하는 문자열입니다. 기본적으로 설정되어 있지 않으며, 이는 모든 큐가 처리됨을 의미합니다.

문자열에는 공백이 포함되어서는 안 됩니다: merge,post_receive,process_commit은 동작하지만 merge, post_receive, process_commit은 동작하지 않습니다.

작업이 추가되지만 최소한 하나의 팟 항목의 일부로 나타나지 않는 큐는 처리되지 않습니다. 모든 큐의 전체 목록은 GitLab 소스의 다음 파일을 참조하세요:

  1. app/workers/all_queues.yml
  2. ee/app/workers/all_queues.yml

gitlab.sidekiq.pods[].queues를 구성하는 것 외에도 global.appConfig.sidekiq.routingRules도 구성해야 합니다. 자세한 내용은 Sidekiq 라우팅 규칙 설정을 참조하세요.

예시 pod 항목

pods:
  - name: immediate
    concurrency: 10
    minReplicas: 2  # 기본값으로 상속된 값
    maxReplicas: 10 # 기본값으로 상속된 값
    maxUnavailable: 5 # 기본값으로 상속된 값
    queues: merge,post_receive,process_commit
    extraVolumeMounts: |
      - name: example-volume-mount
        mountPath: /etc/example
    extraVolumes: |
      - name: example-volume
        persistentVolumeClaim:
          claimName: example-pvc
    resources:
      limits:
        cpu: 800m
        memory: 2Gi
    hpa:
      cpu:
        targetType: Value
        targetAverageValue: 350m

Sidekiq 구성의 전체 예시

다음은 가져오기 관련 작업을 위한 별도의 Sidekiq 팟, 내보내기 관련 작업을 위한 Sidekiq 팟 및 기타 모든 작업을 위한 또 다른 팟을 사용하는 Sidekiq 구성의 전체 예입니다.

...
global:
  appConfig:
    sidekiq:
      routingRules:
      - ["feature_category=importers", "import"]
      - ["feature_category=exporters", "export", "queues_shard_extra_shard"]
      - ["*", "default"]
  redis:
    redisYmlOverride:
      queues_shard_extra_shard: ...
...
gitlab:
  sidekiq:
    pods:
    - name: import
      queues: import
    - name: export
      queues: export
      extraEnv:
        SIDEKIQ_SHARD_NAME: queues_shard_extra_shard # global.redis.redisYmlOverride의 키와 일치
    - name: default
...

networkpolicy 구성

이 섹션은 NetworkPolicy를 제어합니다. 이 구성은 선택 사항이며 특정 끝점으로의 Pods의 Egress 및 Ingress를 제한하는 데 사용됩니다.

이름 유형 기본값 설명
enabled Boolean false 이 설정은 네트워크 정책을 활성화합니다.
ingress.enabled Boolean false true로 설정되면 Ingress 네트워크 정책이 활성화됩니다. 이 경우 규칙이 지정되지 않으면 모든 Ingress 연결이 차단됩니다.
ingress.rules 배열 [] Ingress 정책에 대한 규칙, 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 및 아래 예를 참조하세요.
egress.enabled Boolean false true로 설정되면 Egress 네트워크 정책이 활성화됩니다. 이 경우 규칙이 지정되지 않으면 모든 Egress 연결이 차단됩니다.
egress.rules 배열 [] Egress 정책에 대한 규칙, 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 및 아래 예를 참조하세요.

예시 네트워크 정책

Sidekiq 서비스는 Prometheus exporter에 대해 Ingress 연결만 필요하며, 일반적으로 다양한 위치에 Egress 연결이 필요합니다. 이 예시는 다음과 같은 네트워크 정책을 추가합니다:

  • TCP 10.0.0.0/8 포트 3807에서 네트워크로부터의 모든 Ingress 요청을 메트릭스 내보내기를 위해 허용합니다.

  • UDP 10.0.0.0/8 포트 53으로 네트워크에 대한 모든 Egress 요청을 DNS를 위해 허용합니다.

  • TCP 10.0.0.0/8 포트 5432로 네트워크에 대한 모든 Egress 요청을 PostgreSQL을 위해 허용합니다.

  • TCP 10.0.0.0/8 포트 6379로 네트워크에 대한 모든 Egress 요청을 Redis를 위해 허용합니다.

  • 10.0.0.0/8의 로컬 네트워크에 대한 다른 Egress 요청은 제한됩니다.

  • 10.0.0.0/8 외부의 Egress 요청은 허용됩니다.

제공된 예시는 단지 예일 뿐이며 완전하지 않을 수 있습니다.

Sidekiq 서비스는 외부 오브젝트 스토리지에서 이미지를 위해 공용 인터넷에 대한 아웃바운드 연결이 필요합니다.

networkpolicy:
  enabled: true
  ingress:
    enabled: true
    rules:
      - from:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 3807
  egress:
    enabled: true
    rules:
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 53
          protocol: UDP
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 5432
          protocol: TCP
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 6379
          protocol: TCP
      - to:
        - ipBlock:
            cidr: 0.0.0.0/0
            except:
            - 10.0.0.0/8

KEDA 구성

keda 섹션은 일반 HorizontalPodAutoscalers 대신 KEDA ScaledObjects의 설치를 활성화합니다.

이 구성은 선택 사항이며 사용자 지정 또는 외부 메트릭에 기반한 자동 축척이 필요할 때 사용할 수 있습니다.

대부분의 설정은 가능한 경우 hpa 섹션에 설정된 값이 기본값으로 설정됩니다.

다음 조건이 충족되면 hpa 섹션에 설정된 CPU 및 메모리 임계값에 따라 CPU 및 메모리 트리거가 자동으로 추가됩니다:

  • triggers가 설정되지 않았습니다.

  • 해당 request.cpu.request 또는 request.memory.request 설정이 또한 영(0)이 아닌 값으로 설정되어 있습니다.

트리거가 설정되지 않으면 ScaledObject가 생성되지 않습니다.

해당 설정에 대한 자세한 내용은 KEDA 문서를 참조하세요.

이름 유형 기본값 설명
enabled Boolean false KEDA ScaledObjects를 사용하여 HorizontalPodAutoscalers 대신 사용합니다.
pollingInterval Integer 30 각 트리거를 확인하는 간격입니다.
cooldownPeriod Integer 300 마지막 트리거가 활성 상태로 보고된 이후 자원을 다시 0으로 축소하기까지 기다리는 기간입니다.
minReplicaCount Integer   KEDA가 자원을 축소할 최소 복제 수로 minReplicas가 기본값입니다.
maxReplicaCount Integer   KEDA가 자원을 늘릴 최대 복제 수로 maxReplicas가 기본값입니다.
fallback Map   KEDA 폴백 구성, 문서를 참조하세요.
hpaName String   KEDA가 생성할 HPA 리소스의 이름으로 기본값은 keda-hpa-{scaled-object-name}입니다.
restoreToOriginalReplicaCount Boolean   ScaledObject가 삭제된 후 타겟 리소스를 원래 복제 수로 다시 축소해야 하는지 여부를 지정합니다.
behavior Map   업 및 다운 스케일링 동작에 대한 사양으로 기본값은 hpa.behavior입니다.
triggers Array   타겟 리소스의 스케일링을 활성화하기 위한 트리거 목록으로 기본값은 hpa.cpuhpa.memory에서 계산된 트리거입니다.