<aside> 💡 본 문서에서는 Gitlab Runner Helm 배포와 istio sidecar resource limit 값 조정을 설명합니다.
0.66.0
17.1.0
</aside>
Gitlab Runner 배포는 Gitlab이 사전에 배포되어 있음을 전제합니다.
현재(24.7.19 기준) Gitlab Helm 차트의 global
변수를 통해 특정 Nodepool에만 배포하는 기능이 제공되고 있지 않아 기존 차트의 Affinity 설정을 수정하여 배포했습니다.
관련 이슈 : https://gitlab.com/gitlab-com/gl-infra/production-engineering/-/issues/25403
# templates/deployment.yaml
...
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: {{ .Values.global.custom.nodeAffinity.key | quote }}
operator: In
values:
- {{ .Values.global.custom.nodeAffinity.value | quote }}
...
# values.yaml
# 아래 항목 추가
global:
custom:
nodeAffinity:
key: ncloud.com/nks-nodepool
value: custom-nodepool-name
# Namespace 생성 및 istio sidecar 설정 적용
kubectl create ns gitlab-runner && kubectl label ns istio-injection=enabled
# Helm 차트 다운로드
# gitlab repo의 차트 확인 : helm search repo gitlab
helm pull gitlab/gitlab-runner
# Template 수정 및 custom value 추가
# 상단 참조
cat << EOF > gitlab-runner-resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: runner-resource-quota
namespace: gitlab-runner
spec:
hard:
limits.cpu: "10"
limits.memory: "16Gi"
EOF
kubectl apply -f gitlab-runner-resourcequota.yaml
istio-injection이 활성화되어 있는 경우 namespace에 pod가 생성될 때 사이드카 컨테이너로 istio-proxy, istio-init이 생성됩니다.
이 때 istio 사이드카 기본 설정으로 istio-proxy의 resources.limits이 아래와 같이 설정되어 있습니다.
resources:
limits:
cpu: "2"
memory: 1Gi
requests:
cpu: 100m
memory: 128Mi
특정 Pod의 istio-proxy 컨테이너 리소스를 변경하려면 pod에 아래 annotation을 추가합니다.
sidecar.istio.io/proxyCPULimit: "value"
sidecar.istio.io/proxyMemoryLimit: "value"
Gitlab runner Helm 배포 시 values.yaml
파일의 podAnnotations
를 아래와 같이 수정합니다.
podAnnotations:
sidecar.istio.io/proxyCPULimit: "500m"
sidecar.istio.io/proxyMemoryLimit: "1Gi"
Token 발급
Secret 생성
“”
으로 남겨둡니다. (하단 링크 내 “Installing GitLab Runner with Helm chart” 참조)
https://docs.gitlab.com/ee/ci/runners/new_creation_workflow.html# 방법 1) kubectl
kubectl create secret generic gitlab-runner-secret \\
--namespace=gitlab-runner \\
--from-literal=runner-registration-token="" \\
--from-literal=runner-token=GITLAB_RUNNER_TOKEN
# 방법 2) 파일 생성 및 적용
cae << EOF > gitlab-runner-token-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: gitlab-runner-secret
namespace: gitlab-runner
type: Opaque
data:
runner-registration-token: ""
runner-token: GITLAB_RUNNER_TOKEN
EOF
kubectl apply -f gitlab-runner-token-secret.yaml
# helm -n <namespace> <release-name> <chart> -f <values-file.yaml>
# -i: 설치되어 있지 않은 경우 설치 진행
# --wait: 모든 리소스가 성공적으로 배포되고 준비될 때까지 Helm이 기다리도록 하는 옵션. Timeout 시간 내에 모든 Pod가 준비 상태가 되기를 기다립니다.
# --timeout: timeout값 변경(기본 : 5m)
helm -n gitlab-runner upgrade gitlab-runner ./gitlab-runner -f gitlab-runner/values.yaml -i --wait --debug --timeout 10m