使用极狐GitLab-Migrations chart
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
migrations 子chart 提供了一个单一的迁移 Job,用于处理极狐GitLab 数据库的初始化/迁移。该chart 使用极狐GitLab Rails 代码库运行。
迁移完成后,此 Job 还会编辑数据库中的应用程序设置,以关闭写入授权密钥文件。在chart 中,我们仅支持使用 SSH AuthorizedKeysCommand 的极狐GitLab Authorized Keys API,而不是支持写入授权密钥文件。
要求
此chart 依赖于 Redis 和 PostgreSQL,可以作为完整极狐GitLab chart 的一部分,或者作为可从部署此chart 的 Kubernetes 集群中访问的外部服务提供。
设计选择
每次安装chart ,或使用新 chart 版本、appVersion 或对任何值的更改升级chart 时,migrations chart 都会创建一个新的迁移 Job。
使用 helm install 和 helm upgrade 安装和升级此chart 时,此chart 创建的 Jobs 将保留在集群中,直到下次chart 升级为止。这样我们可以观察迁移日志。一旦我们有某种形式的日志传输,我们可以重新审视这些对象的持久性。
如果使用 helm template 和 kubectl apply 或类似工具生成的清单进行部署,则旧的迁移 Job 对象不会从集群中删除。
此chart 中使用的容器有一些额外的优化,我们目前未在此处使用。主要是能够快速跳过已经是最新的迁移,而无需启动 Rails 应用程序进行检查。此优化要求我们持久化迁移状态。我们目前没有在此chart 中执行此操作。未来我们将为此chart 引入迁移状态的存储支持。
配置
migrations chart 分为两个部分进行配置:外部服务和chart 设置。
安装命令行选项
下表包含所有可以通过 --set 标志提供给 helm install 命令的可能chart 配置。
参数 | 描述 | 默认值 |
---|---|---|
common.labels | 应用于此chart 创建的所有对象的补充标签 | {} |
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 容器 securityContext 重写 | {} |
init.containerSecurityContext.allowPrivilegeEscalation | initContainer 特定:控制进程是否可以获得比其父进程更多的权限 | false |
init.containerSecurityContext.runAsNonRoot | initContainer 特定:控制容器是否以非 root 用户身份运行 | true |
init.containerSecurityContext.capabilities.drop | initContainer 特定:移除容器的 Linux 功能 | [ "ALL" ] |
enabled | 迁移启用 FLAG | true |
tolerations | Pod 分配的容忍标签 | [] |
affinity | Pod 分配的亲和性规则 | {} |
annotations | Job 规范的注释 | {} |
podAnnotations | Pod 规范的注释 | {} |
podLabels | 补充 Pod 标签。不会用于选择器。 | |
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 迁移的最小 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 | 重写启动容器的 securityContext | 1000 |
containerSecurityContext.allowPrivilegeEscalation | 控制容器进程是否可以获得比其父进程更多的权限 | false |
containerSecurityContext.runAsNonRoot | 控制容器是否以非 root 用户身份运行 | true |
containerSecurityContext.capabilities.drop | 移除 Gitaly 容器的 Linux 功能 | [ "ALL" ] |
serviceAccount.annotations | ServiceAccount 注释 | {} |
serviceAccount.automountServiceAccountToken | 指示是否应在 pods 中挂载默认的 ServiceAccount 访问令牌 | false |
serviceAccount.create | 指示是否应创建 ServiceAccount | false |
serviceAccount.enabled | 指示是否使用 ServiceAccount | false |
serviceAccount.name | ServiceAccount 的名称。如果未设置,则使用完整chart 名称 | |
extraInitContainers | 要包括的额外初始化容器列表 | |
extraContainers | 包含要包括的容器列表的多行文本样式字符串 | |
extraVolumes | 要创建的额外卷列表 | |
extraVolumeMounts | 要进行的额外卷挂载列表 | |
extraEnv | 要公开的额外环境变量列表 | |
extraEnvFrom | 要从其他数据源公开的额外环境变量列表 | |
priorityClassName | 分配给 pods 的优先级类 |
chart 配置示例
extraEnv
extraEnv 允许您在 pods 中的所有容器中公开额外的环境变量。
以下是 extraEnv 的一个示例用法:
yamlextraEnv: SOME_KEY: some_value SOME_OTHER_KEY: some_other_value
当容器启动时,您可以确认环境变量已被公开:
shellenv | grep SOME SOME_KEY=some_value SOME_OTHER_KEY=some_other_value
extraEnvFrom
extraEnvFrom 允许您从其他数据源在 pods 中的所有容器中公开额外的环境变量。
以下是 extraEnvFrom 的一个示例用法:
yaml1extraEnvFrom: 2 MY_NODE_NAME: 3 fieldRef: 4 fieldPath: spec.nodeName 5 MY_CPU_REQUEST: 6 resourceFieldRef: 7 containerName: test-container 8 resource: requests.cpu 9 SECRET_THING: 10 secretKeyRef: 11 name: special-secret 12 key: special_token 13 # optional: boolean 14 CONFIG_STRING: 15 configMapKeyRef: 16 name: useful-config 17 key: some-string 18 # optional: boolean
image.pullSecrets
pullSecrets 允许您进行身份验证以从私有镜像仓库中提取 pod 的镜像。
有关私有镜像仓库及其身份验证方法的更多详细信息,请参阅 Kubernetes 文档。
以下是 pullSecrets 的一个示例用法:
YAML1image: 2 repository: my.migrations.repository 3 pullPolicy: Always 4 pullSecrets: 5 - name: my-secret-name 6 - name: my-secondary-secret-name
serviceAccount
此部分控制是否应创建 ServiceAccount 以及是否应在 pods 中挂载默认访问令牌。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
annotations | Map | {} | ServiceAccount 注释。 |
automountServiceAccountToken | Boolean | false | 控制是否应在 pods 中挂载默认 ServiceAccount 访问令牌。除非某些 sidecars 需要此功能才能正常工作(例如 Istio),否则不应启用此功能。 |
create | Boolean | false | 指示是否应创建 ServiceAccount。 |
enabled | Boolean | false | 指示是否使用 ServiceAccount。 |
name | String | ServiceAccount 的名称。如果未设置,则使用完整chart 名称。 |
affinity
有关更多信息,请参阅 affinity。
使用此chart 的基础版
默认情况下,Helm chart 使用极狐GitLab 企业版。如果需要,您也可以使用基础版。了解有关两者之间区别的更多信息。
外部服务
Redis
YAML1redis: 2 host: redis.example.com 3 serviceName: redis 4 port: 6379 5 sentinels: 6 - host: sentinel1.example.com 7 port: 26379 8 password: 9 secret: gitlab-redis 10 key: redis-password
host
Redis 服务器的主机名,使用的数据库。可以省略此项而代之以 serviceName。如果使用 Redis 哨兵,host 属性需要设置为 sentinel.conf 中指定的集群名称。
serviceName
操作 Redis 数据库的 service 名称。如果此项存在且 host 不存在,chart 将在 host 值处模板化服务(和当前 .Release.Name)的主机名。这在将 Redis 作为整体极狐GitLab chart 的一部分时非常方便。默认值为 redis
port
连接到 Redis 服务器的端口。默认为 6379。
password
Redis 的 password 属性有两个子键:
- secret 定义要从中提取的 Kubernetes Secret 的名称
- key 定义上述 secret 中包含密码的键的名称。
sentinels
sentinels 属性允许连接到 Redis HA 集群。子键描述每个哨兵连接。
- host 定义哨兵服务的主机名
- port 定义到达哨兵服务的端口号,默认为 26379
NOTE: 当前的 Redis 哨兵支持仅支持从极狐GitLab chart 中单独部署的哨兵。因此,通过极狐GitLab chart 的 Redis 部署应通过 redis.install=false 禁用。在部署极狐GitLab chart 之前,需要手动创建包含 Redis 密码的 Secret。
PostgreSQL
yaml1psql: 2 host: psql.example.com 3 serviceName: pgbouncer 4 port: 5432 5 database: gitlabhq_production 6 username: gitlab 7 preparedStatements: false 8 password: 9 secret: gitlab-postgres 10 key: psql-password
host
PostgreSQL 服务器的主机名,使用的数据库。如果 postgresql.install=true(默认非生产环境),则可以省略此项。
serviceName
操作 PostgreSQL 数据库的服务名称。如果此项存在且 host 不存在,chart 将在 host 值处模板化服务的主机名。
port
连接到 PostgreSQL 服务器的端口。默认为 5432。
database
在 PostgreSQL 服务器上使用的数据库名称。默认为 gitlabhq_production。
preparedStatements
与 PostgreSQL 服务器通信时是否应使用准备好的语句。默认为 false。
username
用于验证数据库的用户名。默认为 gitlab
password
PostgreSQL 的 password 属性有两个子键:
- secret 定义要从中提取的 Kubernetes Secret 的名称
- key 定义上述 secret 中包含密码的键的名称。