Configure GitLab Runner for Oracle Cloud Infrastructure
GitLab Code Quality jobs that run in Oracle Cloud Infrastructure (OCI) environments with Container Runtime Interface (CRI) can experience performance degradation.
To optimize your GitLab Runner performance in OCI:
- Add an empty directory volume to your GitLab Runner configuration.
- Configure specific Docker driver settings in your
.gitlab-ci.ymlfile.
This configuration applies to environments with:
- Cloud provider: Oracle Cloud Infrastructure (OCI)
- Container runtime: Container Runtime Interface (CRI)
- Process: GitLab Code Quality jobs
- Runner type: GitLab Self-Managed Runners
Add an empty directory volume
To define an empty directory for GitLab Runner configuration, add the following block to the runners section of your values.yaml file:
[[runners.kubernetes.volumes.empty_dir]]
mount_path = "/var/lib"
name = "docker-data"Example runner configuration
The following example shows a complete Helm chart values.yaml for the GitLab Runner that includes the fix:
image:
registry: registry.gitlab.com
image: gitlab-org/gitlab-runner
tag: alpine-v16.11.0
useTini: false
imagePullPolicy: IfNotPresent
gitlabUrl: https://gitlab.com/
runnerToken: ""
terminationGracePeriodSeconds: 3600
concurrent: 100
shutdown_timeout: 0
checkInterval: 5
logLevel: debug
sessionServer:
enabled: false
## For RBAC support:
rbac:
create: true
rules: []
clusterWideAccess: false
podSecurityPolicy:
enabled: false
resourceNames:
- gitlab-runner
metrics:
enabled: false
portName: metrics
port: 9252
serviceMonitor:
enabled: false
service:
enabled: false
type: ClusterIP
runners:
config: |
[[runners]]
output_limit = 200960
[runners.kubernetes]
privileged = true
allow_privilege_escalation = true
namespace = "{{.Release.Namespace}}"
image = "ubuntu:22.04"
helper_image_flavor = "ubuntu"
pull_policy = "if-not-present"
executor = "kubernetes"
[[runners.kubernetes.volumes.host_path]]
name = "buildah"
mount_path = "/var/lib/containers/storage"
read_only = false
[runners.kubernetes.volumes]
[[runners.kubernetes.volumes.empty_dir]]
mount_path = "/var/lib"
name = "docker-data"
[[runners.kubernetes.services]]
alias = "dind"
command = [
"--host=tcp://0.0.0.0:2375",
"--host=unix://var/run/docker.sock",
]
[runners.cache]
Type = "s3"
Path = "gitlab_runner"
Shared = true
[runners.cache.s3]
BucketName = "gitlab-shared-caching"
BucketLocation = "ap-singapore-1"
ServerAddress = ".compat.objectstorage.ap-singapore-1.oraclecloud.com"
AccessKey = ""
SecretKey = ""
configPath: ""
tags: ""
cache: {}
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: false
runAsNonRoot: true
privileged: false
capabilities:
drop: ["ALL"]
strategy: {}
podSecurityContext:
runAsUser: 100
fsGroup: 65533
resources: {}
affinity: {}
topologySpreadConstraints: {}
nodeSelector: {}
tolerations: []
hostAliases: []
deploymentAnnotations: {}
deploymentLabels: {}
podAnnotations: {}
podLabels: {}
priorityClassName: ""
secrets: []
configMaps: {}
volumeMounts: []
volumes: []Update your .gitlab-ci.yml file
To unselect the default overlay2 driver, add the following key as an empty variable to your existing Code Quality job:
DOCKER_DRIVER: ""Example Code Quality job configuration
The following example shows Code Quality job configuration in your .gitlab-ci.yml file:
code_quality:
services:
- name: $CODE_QUALITY_DIND_IMAGE
command: ['--tls=false', '--host=tcp://0.0.0.0:2375']
variables:
CODECLIMATE_PREFIX: $CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX/
CODECLIMATE_REGISTRY_USERNAME: $CI_DEPENDENCY_PROXY_USER
CODECLIMATE_REGISTRY_PASSWORD: $CI_DEPENDENCY_PROXY_PASSWORD
DOCKER_DRIVER: ""