GitLab-Migrations 차트 사용하기
migrations
서브차트는 GitLab 데이터베이스를 시드하는/마이그레이션하는 단일 마이그레이션 Job을 제공합니다. 이 차트는 GitLab Rails 코드베이스를 사용하여 실행됩니다.
마이그레이션을 완료한 후, 이 Job은 또한 데이터베이스에서 authorized keys 파일에 대한 쓰기를 끄는 애플리케이션 설정을 편집합니다. 차트에서는 인증된 키 API를 사용하여 SSH AuthorizedKeysCommand
을 지원하는데, 인증된 키 파일에 쓰기를 지원하는 대신 이를 지원합니다.
요구 사항
이 차트는 Redis 및 PostgreSQL에 의존하며, 이는 완전한 GitLab 차트의 일부로 제공되거나, 이 차트가 배포된 Kubernetes 클러스터에서 도달 가능한 외부 서비스로 제공됩니다.
디자인 선택 사항
migrations
는 차트를 배포할 때마다 새로운 마이그레이션 Job를 만듭니다. 작업 이름 충돌을 방지하기 위해, 작업 이름에 차트 리비전 및 무작위 알파벳-숫자 값을 추가합니다. 무작위 텍스트의 목적은 이 섹션에서 자세히 설명됩니다.
현재 우리는 작업이 완료된 후에도 그 작업을 클러스터에 객체로서 유지하도록 하고 있습니다. 이는 마이그레이션 로그를 관찰할 수 있도록 하는 것입니다. 현재로서는 이러한 작업은 helm uninstall
이후에도 지속됩니다. 이것은 동일한 릴리스 이름을 사용하여 미래의 배포가 충돌을 일으키지 않도록 작업 이름에 무작위 텍스트를 추가한 이유 중 하나입니다. 우리가 어떤 형태의 로그 쉬핑을 도입하면, 이러한 객체들의 지속성을 재검토할 수 있습니다.
이 차트에서 사용 중인 컨테이너에는 아직 사용하고 있지 않은 몇 가지 추가적인 최적화가 있습니다. 주로 이미 최신 상태인 경우 빨리 마이그레이션 실행을 건너뛸 수 있는 능력이며, 레일 애플리케이션을 부팅할 필요 없이 체크하는 것을 필요로 하지 않습니다. 이러한 최적화를 위해서는 마이그레이션 상태를 지속해야 합니다. 현재로서는 이를 하고 있지 않습니다. 미래에는 마이그레이션 상태에 대한 저장 지원을 이 차트에 도입할 것입니다.
구성
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
| init 컨테이너 보안 컨텍스트 재정의 | {}
|
enabled
| 마이그레이션 활성화 플래그 | true
|
tolerations
| 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
| 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
| 컨테이너가 시작될 때 사용되는 오버라이드 컨테이너 보안 컨텍스트 | 1000
|
extraInitContainers
| 포함할 추가 init 컨테이너 디렉터리 | |
extraContainers
| 포함할 추가 컨테이너 디렉터리 | |
extraVolumes
| 만들어야 하는 추가 볼륨 디렉터리 | |
extraVolumeMounts
| 수행해야 할 추가 볼륨 마운트 디렉터리 | |
extraEnv
| 노출할 추가 환경 변수 디렉터리 | |
extraEnvFrom
| 다른 데이터 소스에서 노출할 추가 환경 변수 디렉터리 | |
bootsnap.enabled
| 레일스에 대한 Bootsnap 캐시 활성화 | true
|
priorityClassName
| pod에 할당된 우선 순위 클래스 |
차트 구성 예시
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을 대신 사용할 수 있습니다. 두 가지의 차이점에 대해 자세히 알아보세요.
Community Edition을 사용하려면 image.repository
를 registry.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
은 가져올 KubernetesSecret
의 이름을 정의합니다. -
key
는 위의 Secret에 포함된 비밀번호의 키 이름을 정의합니다.
sentinels
sentinels
속성은 Redis HA 클러스터에 연결할 수 있게 합니다.
하위 키는 각 Sentinel 연결을 설명합니다.
-
host
는 Sentinel 서비스의 호스트 이름을 정의합니다. -
port
는 Sentinel 서비스에 도달할 포트 번호를 정의합니다. 기본값은26379
입니다.
참고: 현재 Redis Sentinel 지원은 별도로 GitLab 차트에서 배포된 Sentinels만 지원합니다. 그 결과로 GitLab 차트를 통해 Redis 배포를 비활성화해야 합니다. GitLab 차트를 배포하기 전에 Redis 비밀번호를 포함하는 Secret를 매뉴얼으로 생성해야 합니다.
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
는 가져올 KubernetesSecret
의 이름을 정의합니다. -
key
는 위의 Secret에 포함된 비밀번호의 키 이름을 정의합니다.