GitLab-Migrations 차트 사용하기
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.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
호스트
사용할 데이터베이스가 있는 Redis 서버의 호스트 이름입니다. serviceName
을 대신하여 생략할 수 있습니다. Redis Sentinel을 사용하는 경우 host
속성은 sentinel.conf
에 지정된 클러스터 이름으로 설정해야 합니다.
serviceName
Redis 데이터베이스를 운영하는 service
의 이름입니다. 이 값이 존재하고 host
가 없으면 차트는 host
값 대신 서비스의 호스트 이름(및 현재 .Release.Name
)으로 템플릿을 생성합니다. 이는 Redis를 전체 GitLab 차트의 일부로 사용할 때 편리합니다. 기본값은 redis
입니다.
포트
Redis 서버에 연결할 포트입니다. 기본값은 6379
입니다.
비밀번호
Redis의 password
속성은 두 개의 하위 키를 가지고 있습니다:
-
secret
은 가져올 KubernetesSecret
의 이름을 정의합니다. -
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
은 가져올 KubernetesSecret
의 이름을 정의합니다. -
key
는 비밀번호를 포함하고 있는 위의 비밀의 키 이름을 정의합니다.