GitLab-Migrations 차트 사용하기
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.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
: 사용할 쿠버네티스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에 포함된 비밀번호의 이름을 정의합니다.