安装:
- 参考资料
gitlab 安装文档:
https://docs.gitlab.com/charts/charts/globals.html
安装命令行参数:
https://docs.gitlab.com/charts/installation/command-line-options.html#incoming-email-configuration
ssh配置:
https://docs.gitlab.com/charts/advanced/external-nginx/#tcp-services-in-the-external-ingress-controller
secrets 备份恢复及重制root密码:
https://docs.gitlab.com/charts/backup-restore/restore.html
备份恢复文档:
http://vlabs.iitb.ac.in/gitlab/help/raketasks/backup_restore.md
ingress控制器选择文档:
https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/multiple-ingress.md#multiple-ingress-controllers
安装步骤:
- 获取chart包:
helm repo addd gitlab https://charts.gitlab.io/
helm fetch gitlab/gitlab --version=2.5.6 --untar
- 安装指令:
helm install --name gitlab --namespace gitlab gitlab/gitlab --version=2.5.6 \
--set global.hosts.domain=example.cn \
--set global.hosts.ssh=gitlab-beta.example.cn \
--set global.hosts.hostSuffix=beta \ #If hostSuffix is `beta` it will produce `minio-beta.example.com` 如果此处为beta,那么产生的地址就是会是gitlab-beta.example.CN
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false \
--set global.ingress.tls.secretName=exampl.tls \ #给ingress添加域名的证书( kubectl create secret generic tls-cert--from-file=tls.crt=cert.pem --from-file=tls.key=key.pem -n YOUR_NAME_SPACE)cert.pem是应用层证书,由CA签发; key.pem是私钥;如果是第三方证书机构给的cert证书需要将cert文件ca-bundle写到一起(cat xxx.crt xxx.ca-bundle > new.crt #crt和ca-bundle文件位置填对,注意内容不要有重叠)。
--set global.edition=ce \ #安装gitlab社区版
--set prometheus.install=false \
--set gitlab-runner.install=true \ #开启gitlab自带ci
--set gitlab.sidekiq.timeout=20 \
--set gitlab.unicorn.workerTimeout=250 \
--set gitlab-runner.image="example.image.cn/gitlab-runner:alpine-v12.5.0" \ # runner 的镜像,默认拉取国外的,此处可更换为自己环境的镜像
--set gitlab-runner.runners.cache.s3CacheInsecure=true \ #是否开启runner ci的cache
--set nginx-ingress.enabled=false \
--set redis.persistence.storageClass=cephfs \ #对应集群内的存储类
--set minio.persistence.storageClass=cephfs \ #对应集群内的存储类
--set gitlab.gitaly.persistence.storageClass=cephfs \ #对应集群内的存储类
--set postgresql.persistence.storageClass=cephfs \ #对应集群内的存储类
--set gitlab.gitaly.securityContext.runAsUser=0 \
--set global.ingress.annotations."kubernetes\.io/ingress\.class"=nginx #此处是选择ingress控制器,此次部署是使用已经存在于进群中的ingress- controller
--set global.appConfig.omniauth.enabled=true \ #对接外部oauth认证
--set global.appConfig.omniauth.allowSingleSignOn=true \ #允许用户使用指定的提供程序登录,而无需两步验证。可以设置为true
--set global.appConfig.omniauth.autoLinkSamlUser=false \ #如果启用了SAML集成,则可以使用。启用后,通过OmniAuth自动创建的用户也将链接到其SAML条目。
--set global.appConfig.omniauth.blockAutoCreatedUsers=false \ #如果true自动创建的用户默认情况下将被阻止,并且必须先由管理员取消阻止,然后他们才能登录。
--set global.appConfig.omniauth.providers[0].secret=gitlab-azure \ #对接azure
--set global.appConfig.omniauth.syncProfileAttributes[0]=email \ #登录时从提供者同步的配置文件属性列表。
--set global.appConfig.omniauth.syncProfileFromProvider[0]=azure_oauth2 \ #GitLab应该自动从中同步配置文件信息的提供商名称列表。条目应与提供者的名称匹配,例如saml或google_oauth2
--set global.smtp.address=smtp.exmail.qq.com \ #使用qq邮件服务器,固定
--set global.smtp.port=465 \ #固定
--set global.smtp.tls=true \ #qq邮件服务器必须开启tls
--set [email protected] \ #显示为来自GitLab的电子邮件发件人的电子邮件地址
--set global.smtp.enabled=true \
--set global.smtp.password.secret=smtp-password \ #Secret包含SMTP密码的 名称 ,kubectl create secret generic smtp-password --from-literal=password=“your password” -n gitlab
--set global.smtp.starttls_auto=true \ #是否在邮件服务器上启用了STARTTLS
--set [email protected] \ #SMTP验证https的用户名
--set global.smtp.authentication=login \
--set global.smtp.domain=example.io \ #SMTP的可选HELO域
--set global.appConfig.omniauth.syncProfileFromProvider[1]=bitbucket \ #对接bitbucket
--set global.appConfig.omniauth.providers[1].secret=gitlab-bit #bitbucket配置信息 [https://docs.gitlab.com/ee/integration/bitbucket.html](https://docs.gitlab.com/ee/integration/bitbucket.html)
下面是对接office356时的参数 :
# --set global.smtp.address=smtp.office365.com \
# --set global.smtp.port=587 \
# --set global.smtp.tls=false \
# --set [email protected] \
# --set global.smtp.enabled=true \
# --set global.smtp.password.secret=smtp-password \
# --set global.smtp.starttls_auto=true \
# --set [email protected] \
# --set global.smtp.authentication=login \
# --set global.smtp.domain=example.io \
下面是对接LDAP时的参数:
# --set global.appConfig.ldap.servers.main.label='LDAP' \
# --set global.appConfig.ldap.servers.main.host='your_ldap_server' \
# --set global.appConfig.ldap.servers.main.port='636' \
# --set global.appConfig.ldap.servers.main.uid='sAMAccountName' \ # 用户名的LDAP属性。应该是属性,而不是映射到的值uid ('sAMAccountName','uid','userPrincipalName')
# --set global.appConfig.ldap.servers.main.bind_dn='cn=administrator\,cn=Users\,dc=domain\,dc=net' #您要绑定的用户的完整DN('america\momo' 要么 'CN=Gitlab,OU=Users,DC=domain,DC=com')
# --set global.appConfig.ldap.servers.main.password.secret='my-ldap-password-secret' # kubectl create secret generic my-ldap-password-secret --from-literal=password=yourpasswordhere -n gitlab
# --set global.appConfig.ldap.servers.main.password.key='the-key-containing-the-password' #(The key within the secret, which contains the password. The password should be unencoded value.) 暂时不清楚这个怎么创建,貌似不需要
*** global.appConfig.omniauth.providers[1].secret=gitlab-bit的信息:***
cat << eof > bit.yaml
name: bitbucket
app_id: 'xxxxxxxxxxxxxxxxx'
app_secret: 'xxxxxxxxxxxxxxxxxxxxxxx'
url: 'https://bitbucket.org/'
eof
kubectl create secret generic -n gitlab gitlab-bit --from-file=provider=bit.yaml注意修改bitbucket上的callback地址
***global.appConfig.omniauth.providers[0].secret=gitlab-azure的信息:***
cat << eof > provider.yaml
name: azure_oauth2
args:
base_azure_url: 'gitlab-beta.example.cn'
client_id: 'xxxxxxxxxxxxxxx'
client_secret: 'xxxxxxxxxxxxxx'
tenant_id: 'xxxxxxxxxxxxxxx'
eof
kubectl create secret generic -n gitlab gitlab-azure --from-file=provider=provider.yaml
注意修改azure上的callback地址
minio挂载pvc权限问题:
修改deploy,添加一个initContainers
- command:
- sh
- -c
- chmod -R 777 /export
image: busybox:latest
imagePullPolicy: IfNotPresent
name: configure-1
resources:
requests:
cpu: 50m
securityContext:
runAsUser: 0
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /export
name: export
redis配置修改:
(kubectl etcd cm -n gitlab gitlab-redis)添加“stop-writes-on-bgsave-error no”
备份:
在gitlab-task-runner容器中执行gitlab:backup:create会对当前gitlab进行一次全备,备份文件会在生成在容器中 /srv/gitlab/tmp/backups路径下
根据以上信息写了如下备份脚本,在k8s集群的master节点执行,将生成的备份文件拷贝到宿主机的 /gitbackup路径下,并删除容器中的备份文件,执行时需要修改下列指令的中namespaces
mkdir /gitbackup
kubectl exec -it -n gitlab `kubectl get po -n gitlab |grep gitlab-task-runner |awk '{print $1}'` gitlab-rake gitlab:backup:create
back=$(kubectl exec -it -n gitlab `kubectl get po -n gitlab |grep gitlab-task-runner |awk '{print $1}'` ls /srv/gitlab/tmp/backups)
back_path=/srv/gitlab/tmp/backups
echo "kubectl cp -n gitlab $(kubectl get po -n gitlab |grep gitlab-task-runner |awk '{print $1}'):$back_path /gitbackup" |bash
echo "kubectl exec -it -n gitlab `kubectl get po -n gitlab |grep gitlab-task-runner |awk '{print $1}'` rm /srv/gitlab/tmp/backups/$back" |tr -d '\r' |bash
恢复:
进入到备份集群的gitlab-task-runner容器中mkdir /srv/gitlab/tmp/backups
将主机群的备份的文件拷贝到 /srv/gitlab/tmp/backups下执行 gitlab-rake gitlab:backup:restore
并将gitlab-rails-secret的secrets也要拷贝到备份集群