- 요구 사항
- 설계 선택
- 구성
- 설치 명령줄 옵션
- 차트 구성 예제
- Using the Community Edition of this chart
- External Services
- 메트릭
- 차트 전체 기본값
- Per-pod 설정
-
networkpolicy
구성 - KEDA 구성
GitLab-Sidekiq 차트 사용하기
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.cpu 와 hpa.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.repository
를 registry.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 서버에 연결할 포트입니다. |
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의 Deployment 와 ConfigMap 의 이름으로 사용됩니다. 짧게 유지해야 하며 두 개의 항목 간에 중복되어서는 안 됩니다. |
|
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 소스의 다음 파일을 참조하세요:
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.cpu 및 hpa.memory 에서 계산된 트리거입니다. |