GitLab-Migrations 차트 사용하기

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

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

마이그레이션 후에이 작업은 또한 데이터베이스의 응용 프로그램 설정을 편집하여 권한이 부여된 키 파일에 대한 쓰기를 중지합니다. 차트에서는 권한이 부여된 키 파일로의 쓰기 지원 대신 SSH AuthorizedKeysCommand를 사용하여 GitLab 승인된 키 API의 사용을 지원합니다.

요구 사항

이 차트는 Kubernetes 클러스터에서 배포된 외부 서비스로 제공되는 외부 서비스 또는 완전한 GitLab 차트의 일부로 Redis 및 PostgreSQL에 따라합니다.

설계 선택 사항

migrations는 차트가 배포 될 때마다 새로운 마이그레이션 작업을 만듭니다. 작업 이름 충돌을 방지하려면 작업 이름에 차트 리비전 및 임의의 알파벳 숫자 값을 추가합니다. 임의의 텍스트의 목적은 이 섹션에서 자세히 설명되어 있습니다.

우리는 현재 이러한 작업을 완료한 후에도 클러스터의 객체로 유지하도록 합니다. 이렇게 함으로써 우리는 마이그레이션 로그를 관찰할 수 있습니다. 현재 이로 인해 이러한 작업은 helm uninstall 후에도 지속됩니다. 이것이 동일한 릴리스 이름을 사용하는 미래의 배포가 충돌을 일으키지 않도록 작업 이름에 임의의 텍스트를 추가하는 이유 중 하나입니다. 로그 전송의 형태를 갖추면 이러한 객체의 지속성을 재검토 할 수 있습니다.

이 차트에서 사용하는 컨테이너에는 현재이 차트에서 사용하지 않는 몇 가지 추가 최적화가 있습니다. 주로 레일익스 애플리케이션을 부팅할 필요없이 이미 마이그레이션이 완료된 경우에 대해 빠르게 마이그레이션을 건너 뛸 수 있는 기능입니다. 이 최적화를 위해서는 마이그레이션 상태를 유지해야 합니다. 현재 이 차트에서는 이것을 수행하지 않고 있습니다. 미래에는 이 차트에 마이그레이션 상태의 저장소 지원을 도입할 것입니다.

구성

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

설치 명령줄 옵션

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

매개변수 설명 기본값
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 컨테이너 보안 컨텍스트 재정의 {}
enabled 마이그레이션 활성화 플래그 true
tolerations Pod 할당을위한 허용 레이블 []
annotations 작업 사양에 대한 주석 {}
podAnnotations pob 사양에 대한 주석 {}
podLabels 추가 Pod 레이블. 선택기에는 사용되지 않습니다.  
redis.serviceName 레디스 서비스 이름 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 250m GitLab 마이그레이션 최소 CPU
resources.requests.memory 200Mi GitLab 마이그레이션 최소 메모리
securityContext.fsGroup 1000 Pod가 시작되어야 하는 그룹 ID
securityContext.runAsUser 1000 Pod가 시작되어야 하는 사용자 ID
securityContext.fsGroupChangePolicy 볼륨의 소유권과 권한을 변경하는 정책 (Kubernetes 1.23 이상 필요)  
containerSecurityContext.runAsUser 컨테이너가 시작되는 securityContext 재정의 1000
extraInitContainers 포함 할 추가 init 컨테이너 목록  
extraContainers 포함 할 추가 컨테이너 목록  
extraVolumes 생성 할 추가 볼륨 목록  
extraVolumeMounts 실행할 추가 볼륨 마운트 목록  
extraEnv 노출 할 추가 환경 변수 목록  
extraEnvFrom 다른 데이터 소스에서 노출 할 추가 환경 변수 목록  
bootsnap.enabled 레일 응용 프로그램을위한 보온 캐시 활성화 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를 사용하면 팟에서 이미지를 가져오기 위해 개인 레지스트리에 인증할 수 있습니다.

개인 레지스트리 및 해당 인증 방법에 대한 자세한 내용은 Kubernetes 문서에서 확인할 수 있습니다.

아래는 pullSecrets를 사용한 예시입니다:

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

이 차트의 Community Edition 사용하기

기본적으로 Helm 차트는 GitLab의 Enterprise Edition을 사용합니다. 원하는 경우 Community Edition을 대신 사용할 수 있습니다. 두 버전 간의 차이점에 대해 더 알아보세요(https://about.gitlab.com/install/ce-or-ee/).

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가 없는 경우, 차트는 serviceName 값의 호스트 이름을 템플릿화합니다(그리고 현재 .Release.Name을 사용합니다). 전체적으로 GitLab 차트의 일부로 Redis를 사용하는 경우 편리합니다. 기본값은 redis입니다.

port

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

password

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

  • secret은 Kubernetes Secret의 이름을 정의합니다.
  • key는 위의 시크릿에서 비밀번호를 포함하는 키의 이름을 정의합니다.

sentinels

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

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

참고: 현재 Redis Sentinel 지원은 별도로 배포된 Sentinels만 지원합니다. 그 결과로, GitLab 차트를 통한 Redis 배포는 redis.install=false로 비활성화해야 합니다. Redis 비밀번호를 포함하는 시크릿은 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인 경우(기본값은 production이 아님)에는 생략할 수 있습니다.

serviceName

PostgreSQL 데이터베이스를 운영하는 서비스의 이름입니다. 이 속성이 있고, host가 없는 경우, 차트는 host 값 대신에 서비스의 호스트 이름을 템플릿화합니다.

port

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

database

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

preparedStatements

PostgreSQL 서버와의 통신에 준비된 문이 사용되어야 하는지 여부입니다. 기본값은 false입니다.

사용자 이름

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

비밀번호

PostgreSQL의 password 속성은 다음과 같은 하위 키를 가져야 합니다:

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