GitLab-Migrations 차트 사용하기

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

migrations 서브 차트는 GitLab 데이터베이스의 시드/마이그레이션을 처리하는 단일 마이그레이션 Job를 제공합니다. 이 차트는 GitLab Rails 코드베이스를 사용하여 실행됩니다.

마이그레이션을 완료한 후, 이 Job은 또한 데이터베이스에서 인증 키 파일 쓰기를 해제하기 위해 응용 프로그램 설정을 편집합니다. 차트에서는 SSH AuthorizedKeysCommand를 사용하여 GitLab 인증 키 API를 지원하기 때문에 인증된 키 파일에 쓰기를 지원하지 않습니다.

요구 사항

이 차트는 Redis 및 PostgreSQL에 의존하며, 완전한 GitLab 차트의 일부로서 또는 이 차트가 배포된 Kubernetes 클러스터에서 도달 가능한 외부 서비스로 제공됩니다.

설계 선택 사항

migrations는 차트가 배포될 때마다 새로운 마이그레이션 Job을 작성합니다. Job 이름 충돌을 방지하기 위해 차트 수정본과 임의의 알파벳-숫자 값을 Job 이름에 추가합니다. 무작위 텍스트의 목적은 이 섹션에서 자세히 설명되어 있습니다.

현재도 Job이 완료된 후에도 클러스터에 개체로 남아 있는 상태를 유지합니다. 이는 마이그레이션 로그를 볼 수 있도록 하는 것입니다. 현재 이러한 Job은 helm uninstall 후에도 지속됩니다. 이것이 동일한 릴리스 이름을 사용하여 미래 배포에서 충돌을 일으키지 않도록 Job 이름에 임의의 텍스트를 추가하는 이유 중 하나입니다. 미래에 로그 배송 형태가 갖추어지면 이러한 개체의 지속성을 재검토할 수 있습니다.

이 차트에 사용된 컨테이너에는 현재 차트에서 사용하지 않는 몇 가지 추가 최적화가 있습니다. 주로 이미 최신 상태인 경우 빠르게 마이그레이션을 건너뛸 수 있는 기능으로, 레일 응용 프로그램을 부팅하여 확인할 필요 없이 이미 마이그레이션이 완료된 경우를 빠르게 건너뛸 수 있습니다. 이 최적화에는 현재 차트에서 마이그레이션 상태를 계속 보존해야 한다는 것이 필요합니다. 현재 이 차트에서는 이 작업을 수행하지 않고 있습니다. 미래에는 이 차트에 마이그레이션 상태의 저장소 지원을 도입할 것입니다.

구성

migrations 차트는 외부 서비스와 차트 설정 두 부분으로 구성됩니다.

설치 명령줄 옵션

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

매개변수 설명 기본값
common.labels 이 차트에 의해 생성된 모든 개체에 적용되는 보충 레이블 {}
image.repository 마이그레이션 이미지 저장소 registry.gitlab.com/gitlab-org/build/cng/gitlab-toolbox-ee
image.tag 마이그레이션 이미지 태그  
image.pullPolicy 마이그레이션 풀 정책 Always
image.pullSecrets 이미지 저장소의 비밀을 위한 비밀  
init.image.repository initContainer 이미지 저장소 registry.gitlab.com/gitlab-org/build/cng/gitlab-base
init.image.tag initContainer 이미지 태그 master
init.image.containerSecurityContext initContainer 보안 컨텍스트 재정의 {}
init.containerSecurityContext.allowPrivilegeEscalation initContainer 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 제어 false
init.containerSecurityContext.runAsNonRoot initContainer 특정: 컨테이너가 비루트 사용자로 실행되는지 제어 true
init.containerSecurityContext.capabilities.drop initContainer 특정: 컨테이너의 Linux capabilities 제거 [ "ALL" ]
enabled 마이그레이션 활성화 플래그 true
tolerations pod 할당을 위한 참작 레이블 []
affinity pod 할당을 위한 친밀도 규칙 {}
annotations 작업 스펙의 주석 {}
podAnnotations pod 스펙의 주석 {}
podLabels 보충 Pod 레이블. 선택기에 사용되지 않음.  
redis.serviceName Redis 서비스 이름 redis
psql.serviceName PostgreSQL을 제공하는 서비스 이름 release-postgresql
psql.password.secret psql 비밀 gitlab-postgres
psql.password.key psql 비밀 키 psql-password
psql.port PostgreSQL 서버 포트 설정. global.psql.port보다 우선합니다.  
resources.requests.cpu GitLab 마이그레이션 최소 CPU 250m
resources.requests.memory GitLab 마이그레이션 최소 메모리 200Mi
securityContext.fsGroup Pod가 시작될 그룹 ID 1000
securityContext.runAsUser Pod가 시작될 사용자 ID 1000
securityContext.fsGroupChangePolicy 볼륨 소유권 및 권한 변경 정책 (Kubernetes 1.23 이상 필요)  
securityContext.seccompProfile.type 사용할 Seccomp 프로필 RuntimeDefault
containerSecurityContext.runAsUser 컨테이너가 시작될 때 사용할 컨테이너 보안 컨텍스트를 재정의합니다 1000
containerSecurityContext.allowPrivilegeEscalation 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 제어 false
containerSecurityContext.runAsNonRoot 컨테이너가 비루트 사용자로 실행되는지 제어 true
containerSecurityContext.capabilities.drop Gitaly 컨테이너의 Linux capabilities 제거 [ "ALL" ]
serviceAccount.annotations ServiceAccount 주석 {}
serviceAccount.automountServiceAccountToken 기본 ServiceAccount 액세스 토큰을 팟에 장착해야 하는지 여부 표시 false
serviceAccount.create ServiceAccount를 생성해야 하는지 여부 표시 false
serviceAccount.enabled ServiceAccount를 사용해야 하는지 여부 표시 false
serviceAccount.name ServiceAccount의 이름. 설정하지 않으면 전체 차트 이름이 사용됨  
extraInitContainers 포함할 추가 init 컨테이너 목록  
extraContainers 포함할 추가 컨테이너 목록  
extraVolumes 생성할 추가 볼륨 목록  
extraVolumeMounts 수행할 추가 볼륨 마운트 목록  
extraEnv 노출할 추가 환경 변수 목록  
extraEnvFrom 다른 데이터 소스에서 노출할 추가 환경 변수 목록  
bootsnap.enabled 레일을 위한 Bootsnap 캐시 활성화 true
priorityClassName 팟에 할당된 우선 순위 클래스  

차트 구성 예시

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

extraEnvFrom

extraEnvFrom를 사용하면 팟의 모든 컨테이너에 다른 데이터 소스의 추가적인 환경 변수를 노출할 수 있습니다.

아래에 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
      # optional: boolean
  CONFIG_STRING:
    configMapKeyRef:
      name: useful-config
      key: some-string
      # optional: boolean

image.pullSecrets

pullSecrets를 사용하면 팟에서 이미지를 가져오기 위해 프라이빗 레지스트리에 인증할 수 있습니다.

프라이빗 레지스트리 및 해당 인증 방법에 대한 자세한 내용은 쿠버네티스 문서에서 확인할 수 있습니다.

아래에 pullSecrets를 사용한 예시가 있습니다:

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

serviceAccount

이 섹션은 ServiceAccount가 생성되어야 하는지 여부와 기본 액세스 토큰이 팟에 마운트되어야 하는지를 제어합니다.

이름 유형 기본값 설명
annotations Map {} ServiceAccount의 어노테이션입니다.
automountServiceAccountToken Boolean false 기본 ServiceAccount 액세스 토큰이 팟에 마운트되어야 하는지 여부를 제어합니다. 특정 사이드카가 올바르게 작동해야 하는 경우에만 이를 활성화해야 합니다(예: Istio).
create Boolean false ServiceAccount가 생성되어야 하는지 여부를 나타냅니다.
enabled Boolean false ServiceAccount를 사용해야 하는지 여부를 나타냅니다.
name String   ServiceAccount의 이름입니다. 설정되지 않으면 전체 차트 이름이 사용됩니다.

affinity

자세한 정보는 affinity를 참조하세요.

이 차트의 Community Edition 사용하기

기본적으로 Helm 차트는 GitLab의 Enterprise Edition을 사용합니다. 원하는 경우 Community Edition을 대신 사용할 수 있습니다. 두 가지 간의 차이점에 대해 자세히 알아보세요.

Community Edition을 사용하려면 image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-toolbox-ce로 설정하세요.

외부 서비스

Redis

redis:
  host: redis.example.com
  serviceName: redis
  port: 6379
  sentinels:
    - host: sentinel1.example.com
      port: 26379
  password:
    secret: gitlab-redis
    key: redis-password

host

사용할 데이터베이스가 있는 Redis 서버의 호스트 이름입니다. serviceName 대신에 이를 생략할 수 있습니다. Redis Sentinels를 사용하는 경우 host 속성은 sentinel.conf에서 지정된 클러스터 이름으로 설정되어야 합니다.

serviceName

Redis 데이터베이스를 운영하는 service의 이름입니다. 이 속성이 존재하고 host가 존재하지 않는 경우, 차트는 host 값 대신에 서비스의 호스트 이름을 (그리고 현재 .Release.Name) 템플릿화합니다. 전체적인 GitLab 차트의 일부로 Redis를 사용하는 경우 편리합니다. 기본값은 redis입니다.

port

Redis 서버에 연결할 포트입니다. 기본값은 6379입니다.

password

Redis의 password 속성에는 두 개의 하위 키가 있습니다:

  • secret: 사용할 쿠버네티스 Secret의 이름을 정의합니다
  • key: 위의 Secret에 포함된 비밀번호의 이름을 정의합니다.

sentinels

sentinels 속성을 사용하면 Redis HA 클러스터에 연결할 수 있습니다. 하위 키는 각각의 Sentinel 연결을 설명합니다.

  • host: Sentinel 서비스의 호스트 이름을 정의합니다
  • port: Sentinel 서비스에 도달하기 위한 포트 번호를 정의합니다. 기본값은 26379입니다.

참고: 현재 Redis Sentinel 지원은 GitLab 차트와 별도로 배포된 Sentinels만 지원합니다. 따라서 GitLab 차트를 통해 Redis 배포를 비활성화해야 합니다(redis.install=false). Redis 비밀번호를 포함하는 Secret는 GitLab 차트를 배포하기 전에 수동으로 생성되어야 합니다.

PostgreSQL

psql:
  host: psql.example.com
  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 데이터베이스를 운영하는 서비스의 이름입니다. 이 속성이 존재하고 host가 존재하지 않는 경우, 차트는 서비스의 호스트 이름을 host값 대신에 템플릿화합니다.

port

PostgreSQL 서버에 연결할 포트입니다. 기본값은 5432입니다.

database

PostgreSQL 서버에서 사용할 데이터베이스의 이름입니다. 기본값은 gitlabhq_production입니다.

preparedStatements

PostgreSQL 서버와 통신할 때 준비된 문을 사용해야 하는지 여부입니다. 기본값은 false입니다.

username

데이터베이스에 인증할 사용자 이름입니다. 기본값은 gitlab입니다.

password

PostgreSQL의 password 속성에는 두 개의 하위 키가 있습니다:

  • secret: 사용할 쿠버네티스 Secret의 이름을 정의합니다
  • key: 위의 Secret에 포함된 비밀번호의 이름을 정의합니다.