GitLab-Migrations 차트 사용하기

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

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

마이그레이션 후, 이 Job은 데이터베이스의 애플리케이션 설정을 편집하여 인증된 키 파일에 대한 쓰기를 끕니다. 차트에서는 인증된 키 파일에 쓰기를 지원하는 대신 SSH AuthorizedKeysCommand를 사용하는 GitLab Authorized Keys API의 사용만 지원합니다.

요구 사항

이 차트는 Redis 및 PostgreSQL에 따라 달라지며, 완전한 GitLab 차트의 일부로 제공되거나 이 차트가 배포되는 Kubernetes 클러스터에서 접근할 수 있는 외부 서비스로 제공됩니다.

디자인 선택

migrations는 차트가 배포될 때마다 새로운 마이그레이션 Job을 생성합니다. Job 이름 충돌을 방지하기 위해 각 Job이 생성될 때 차트 리비전과 임의의 알파-벳 숫자 값을 Job 이름에 추가합니다. 임의 텍스트의 목적은 이 섹션에서 더 자세히 설명됩니다.

현재 우리는 작업이 완료된 후에도 클러스터에서 객체로 남아 있도록 하고 있습니다. 이는 마이그레이션 로그를 관찰할 수 있도록 하기 위함입니다. 현재 이로 인해 이러한 Jobs는 helm uninstall 후에도 지속됩니다. 이는 임의 텍스트를 Job 이름에 추가하는 이유 중 하나이며, 동일한 릴리스 이름을 사용하는 미래 배포가 충돌을 일으키지 않도록 하기 위함입니다. 로그 배송 방식이 확립되면 이러한 객체의 지속성을 다시 검토할 수 있습니다.

이 차트에서 사용되는 컨테이너는 현재 이 차트에서 사용하고 있지 않은 추가 최적화를 갖추고 있습니다. 주로 마이그레이션이 이미 최신 상태일 경우 Rails 애플리케이션을 부팅할 필요 없이 신속하게 마이그레이션을 건너뛰는 기능입니다. 이 최적화는 마이그레이션 상태를 지속해야 합니다. 현재 이 차트에서 이를 수행하고 있지는 않습니다. 향후에는 이 차트에 마이그레이션 상태에 대한 저장소 지원을 도입할 것입니다.

구성

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

설치 명령줄 옵션

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

Parameter Description Default
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 init 컨테이너 보안 컨텍스트 오버라이드 {}
init.containerSecurityContext.allowPrivilegeEscalation initContainer 전용: 프로세스가 부모 프로세스보다 더 많은 권한을 가질 수 있는지 제어합니다. false
init.containerSecurityContext.runAsNonRoot initContainer 전용: 컨테이너가 비루트 사용자로 실행되는지 제어합니다. true
init.containerSecurityContext.capabilities.drop initContainer 전용: 컨테이너에 대한 Linux 능력을 제거합니다. [ "ALL" ]
enabled 마이그레이션 활성화 플래그 true
tolerations 포드 할당을 위한 관용 라벨 []
affinity 포드 할당을 위한 친화성 규칙 {}
annotations Job spec을 위한 주석 {}
podAnnotations pob spec을 위한 주석 {}
podLabels 보조 포드 레이블. 선택자에는 사용되지 않음.  
redis.serviceName Redis 서비스 이름 redis
psql.serviceName PostgreSQL을 제공하는 서비스의 이름 release-postgresql
psql.password.secret psql 비밀 gitlab-postgres
psql.password.key psql 비밀의 psql 비밀번호 키 psql-password
psql.port PostgreSQL 서버 포트를 설정합니다. global.psql.port를 우선합니다.  
resources.requests.cpu GitLab Migrations의 최소 CPU 250m
resources.requests.memory GitLab Migrations의 최소 메모리 200Mi
securityContext.fsGroup 포드가 시작해야 하는 그룹 ID 1000
securityContext.runAsUser 포드가 시작해야 하는 사용자 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 능력을 제거합니다. [ "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 Rails의 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
      # 선택적: boolean
  CONFIG_STRING:
    configMapKeyRef:
      name: useful-config
      key: some-string
      # 선택적: boolean

image.pullSecrets

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

개인 레지스트리 및 해당 인증 방법에 대한 추가 세부정보는 Kubernetes 문서를 참조하십시오.

다음은 pullSecrets를 사용하는 예입니다:

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

serviceAccount

이 섹션은 ServiceAccount를 생성할지와 기본 접근 토큰이 파드에 탑재될지 여부를 제어합니다.

이름 유형 기본값 설명
annotations {} ServiceAccount 주석.
automountServiceAccountToken 불린 false 기본 ServiceAccount 접근 토큰이 파드에 탑재될지 여부를 제어합니다. 특정 사이드카가 원활하게 작동하기 위해 필요한 경우가 아니면 활성화하지 않아야 합니다(예: Istio).
create 불린 false ServiceAccount를 생성할지 여부를 나타냅니다.
enabled 불린 false ServiceAccount 사용 여부를 나타냅니다.
name 문자열   ServiceAccount의 이름. 설정되지 않으면 전체 차트 이름이 사용됩니다.

affinity

자세한 정보는 affinity를 참조하십시오.

이 차트의 커뮤니티 에디션 사용하기

기본적으로 Helm 차트는 GitLab의 엔터프라이즈 에디션을 사용합니다. 원하신다면 커뮤니티 에디션을 사용할 수 있습니다. 두 가지의 차이점에 대해 자세히 알아보세요.

커뮤니티 에디션을 사용하려면 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

호스트

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

serviceName

Redis 데이터베이스를 운영하는 service의 이름입니다. 이 값이 존재하고 host가 없으면 차트는 host 값 대신 서비스의 호스트 이름(및 현재 .Release.Name)으로 템플릿을 생성합니다. 이는 Redis를 전체 GitLab 차트의 일부로 사용할 때 편리합니다. 기본값은 redis입니다.

포트

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

비밀번호

Redis의 password 속성은 두 개의 하위 키를 가지고 있습니다:

  • secret은 가져올 Kubernetes Secret의 이름을 정의합니다.
  • key는 비밀번호를 포함하고 있는 위의 비밀의 키 이름을 정의합니다.

센티넬

sentinels 속성은 Redis HA 클러스터에 대한 연결을 허용합니다. 하위 키는 각 Sentinel 연결을 설명합니다.

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

참고: 현재 Redis Sentinel 지원은 GitLab 차트와 별도로 배포된 Sentinel만 지원합니다. 따라서 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

호스트

사용할 데이터베이스가 있는 PostgreSQL 서버의 호스트 이름입니다. postgresql.install=true(기본 비생산 설정)인 경우 생략할 수 있습니다.

serviceName

PostgreSQL 데이터베이스를 운영하는 서비스의 이름입니다. 이 값이 존재하고 host가 없으면 차트는 host 값 대신 서비스의 호스트 이름으로 템플릿을 생성합니다.

포트

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

데이터베이스

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

preparedStatements

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

사용자 이름

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

비밀번호

PostgreSQL의 password 속성은 두 개의 하위 키를 가지고 있습니다:

  • secret은 가져올 Kubernetes Secret의 이름을 정의합니다.
  • key는 비밀번호를 포함하고 있는 위의 비밀의 키 이름을 정의합니다.