CI
리뷰 환경
리뷰 환경은 1시간 후에 자동으로 언인스톨됩니다. 리뷰 환경을 더 오래 유지해야 하는 경우 환경 페이지에서 환경을 고정시킬 수 있습니다. 그러나 작업이 완료되면 Cleanup
단계의 작업을 수동으로 트리거하는 것이 중요합니다. 이렇게 함으로써 클러스터가 다른 Merge Request에 대한 리뷰 앱을 실행하는 데 충분한 자원을 보유하도록 할 수 있습니다.
자세한 내용은 환경 문서를 참조하십시오.
OpenShift CI 클러스터
우리는 QA 스위트를 포함한 수락 테스트에 사용되는 Google Cloud의 OpenShift 클러스터를 관리합니다.
이러한 클러스터에 연결하기 위한 kubeconfig 파일은 1Password의 cloud-native 보급고에 저장되어 있습니다. ocp-ci
를 검색하세요.
CI 클러스터는 이 프로젝트에서 scripts/create_openshift_cluster.sh
를 사용하여 시작되었습니다. KUBECONFIG_OCP_4_7
이라는 CI 변수를 통해 해당 스크립트가 kubeadmin으로 클러스터에 연결할 수 있습니다. 4_7
은 대상 OpenShift 클러스터의 주 버전 및 부 버전을 나타냅니다.
이 스크립트의 사용 방법에 대한 지침은 OpenShift 클러스터 설정 문서를 참조하십시오.
“public” 및 “dev” 클러스터
이 프로젝트에서는 두 세트의 OpenShift CI 클러스터를 유지합니다.
-
public
CI 클러스터는gitlab.com
에서 일반 CI 파이프라인을 담당합니다. -
dev
CI 클러스터는dev.gitlab.org
에서 태그를 지정하고 공식 릴리스를 생성합니다.
모든 클러스터는 본질에 관계없이 OpenShift 클러스터 설정 문서 및 스크립트를 사용하여 생성됩니다. public에 배포된 모든 OpenShift 버전에는 dev에 동일한 버전이 배포된 대응하는 클러스터가 있습니다. 두 클러스터 모두 cloud-native
GCP 프로젝트에 배포되며 DNS 기본 도메인으로 k8s-ft.win
을 사용합니다.
OpenShift 클러스터 확장
OpenShift 클러스터는 리소스를 풀링하기 위해 machineset
을 사용합니다. 기본 배포는 4개의 machineset
중 2개가 사용됩니다.
우리는 이 접근 방식을 유지하고 2개의 활성 machineset
을 2개의 노드로 확장합니다.
OpenShift 확장 문서에 따라 :
$ export KUBECONFIG=~/work/ocp/kubeconfig_4_8
$ oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp-ci-4717-abcde-worker-a 1 1 1 1 59d
ocp-ci-4717-abcde-worker-b 1 1 1 1 59d
ocp-ci-4717-abcde-worker-c 0 0 59d
ocp-ci-4717-abcde-worker-f 0 0 59d
작업 부하를 처리하기 위해 임시 용량을 만듭니다.:
$ oc scale --replicas=1 machineset ocp-ci-4717-abcde-worker-c -n openshift-machine-api
machineset.machine.openshift.io/ocp-ci-4717-abcde-worker-c scaled
$ oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp-ci-4717-abcde-worker-a 1 1 1 1 59d
ocp-ci-4717-abcde-worker-b 1 1 1 1 59d
ocp-ci-4717-abcde-worker-c 1 1 59d
ocp-ci-4717-abcde-worker-f 0 0 59d
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ocp-ci-4717-abcde-master-0.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-master-1.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-master-2.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-worker-a-wz8ts.c.cloud-native-123456.internal Ready worker 59d v1.20.0+2817867
ocp-ci-4717-abcde-worker-b-shnf4.c.cloud-native-123456.internal Ready worker 59d v1.20.0+2817867
ocp-ci-4717-abcde-worker-c-5gq6r.c.cloud-native-123456.internal NotReady worker 15s v1.20.0+2817867
하나의 machineset
을 축소합니다.:
oc scale --replicas=0 machineset ocp-ci-4717-abcde-worker-a -n openshift-machine-api
축소가 완료될 때까지 기다립니다.:
$ oc scale --replicas=2 machineset ocp-ci-4717-abcde-worker-a -n openshift-machine-api
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ocp-ci-4717-abcde-master-0.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-master-1.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-master-2.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-worker-b-shnf4.c.cloud-native-123456.internal Ready worker 59d v1.20.0+2817867
ocp-ci-4717-abcde-worker-c-5gq6r.c.cloud-native-123456.internal Ready worker 7m18s v1.20.0+2817867
필요한 노드 수로 다시 확장합니다.:
$ oc scale --replicas=2 machineset ocp-ci-4717-abcde-worker-a -n openshift-machine-api
machineset.machine.openshift.io/ocp-ci-4717-abcde-worker-a scaled
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ocp-ci-4717-abcde-master-0.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-master-1.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-master-2.c.cloud-native-123456.internal Ready master 59d v1.20.0+2817867
ocp-ci-4717-abcde-worker-a-n7qvs.c.cloud-native-123456.internal Ready worker 72s v1.20.0+2817867
ocp-ci-4717-abcde-worker-a-sqn77.c.cloud-native-123456.internal Ready worker 73s v1.20.0+2817867
ocp-ci-4717-abcde-worker-b-shnf4.c.cloud-native-123456.internal Ready worker 59d v1.20.0+2817867
ocp-ci-4717-abcde-worker-c-5gq6r.c.cloud-native-123456.internal Ready worker 11m v1.20.0+2817867
external-dns
external-dns는 Bitnami Helm Chart을 사용하여 ci/scripts/install_external_dns.sh를 통해 설치되었습니다. 이 도구는 외부로 노출된 로드 밸런서로 생성된 NGINX Ingress 컨트롤러 서비스를 위해 DNS 항목을 생성하여 QA 작업이 인스턴스에 도달할 수 있도록 합니다.
설정
작업 시간 초과
이를 구성하려면, deploy/chart/values.yaml
의 env
값을 업데이트하세요. (https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/blob/master/deploy/chart/values.yaml).
Kubernetes CI 클러스터
GKE(Google Kubernetes Engine)를 사용하여 Google Cloud에서 Kubernetes 클러스터를 관리합니다. 이러한 클러스터는 OpenShift CI 클러스터에서 실행되는 동일한 수락 테스트를 실행하는 데 사용됩니다.
클러스터는 charts/gitlab
의 gke_bootstrap_script.sh 스크립트를 사용하여 생성됩니다.
$ CLUSTER_NAME='gitlab-operator' \
PROJECT='cloud-native-182609' \
REGION='europe-west3' \
ZONE_EXTENSION='a' \
USE_STATIC_IP='false' \
EXTRA_CREATE_ARGS='' \
./scripts/gke_bootstrap_script.sh up
demo/.kube/config
가 생성되어 개발을 위해 클러스터에 kubectl
또는 k9s
를 사용하여 연결할 수 있습니다.
그런 다음 클러스터 엔드포인트 IP 주소를 사용하여 새로운 Cloud DNS 레코드 세트를 생성합니다.
$ ENDPOINT="$(gcloud container clusters describe gitlab-operator --zone europe-west3-a --format='value(endpoint)')"
$ gcloud dns record-sets create gitlab-operator.k8s-ft.win. \
--rrdatas=$ENDPOINT --type A --ttl 60 --zone k8s-ftw
클러스터가 생성되고 DNS와 연결된 후, ./scripts/install_certmanager
스크립트를 실행하여 Letsencrypt TLS 인증서를 설정합니다.
$ KUBECONFIG=demo/.kube/config \
CLUSTER_NAME=gitlab-operator \
BASE_DOMAIN=k8s-ft.win \
GCP_PROJECT_ID=cloud-native-182609 \
./scripts/install_certmanager.sh 'kubernetes'
클러스터 도메인을 위해 와일드카드 인증서가 발급되면 클러스터는 테스트를 실행할 준비가 됩니다.
CI 클러스터의 경우, Google Cloud에서 서비스 액운트를 생성하여 Google Cloud의 인증 문서의 단계를 따릅니다. 이를 통해 이 프로젝트를 위해 CI 변수 KUBECONFIG_GKE
및 GOOGLE_APPLICATION_CREDENTIALS
을 생성할 수 있습니다. 이 작업은 스크립트화되어 있으며, scripts/create_gcloud_sa_kubeconfig.sh를 참조하십시오. 이러한 kubeconfig 파일은 1Password cloud-native 보관함에 저장됩니다. “gitlab-operator”를 검색하세요.
Kubernetes 클러스터 확장
GKE 클러스터에 gcloud CLI를 사용하여 워커 노드를 추가하거나 제거합니다. Google Cloud 웹 UI도 사용할 수 있습니다.
예를 들어, gitlab-operator
CI 클러스터의 노드 수를 4개로 확장하려면:
$ gcloud container clusters resize \
gitlab-operator --num-nodes 4
QA 파이프라인
기본적으로 QA 파이프라인에는 작은 일부의 빠른 종단 간 기능 테스트인 Smoke suite가 포함되어 기본 기능이 작동하는지 빠르게 확인합니다. 추가 테스트가 필요한 경우, 해당 클러스터의 qa_<cluster>_full_suite_manual_trigger
작업을 사용하여 전체 종단 간 테스트의 매뉴얼 QA 파이프라인을 트리거할 수 있습니다.
테스트 실패를 디버깅하려면 QA 실패 조사 가이드를 따르세요.
컨테이너 빌드
Operator 이미지는 BUILDX_K8S_*
변수를 사용하여 Kubernetes buildx 드라이버를 구성함으로써 여러 아키텍처로 빌드할 수 있습니다. 대상 아키텍처의 쉼표로 구분된 문자열(예: amd64,arm64
)을 BUILDX_ARCHS
에 설정하세요. BUILDX_K8S_DISABLE
가 true
로 설정된 경우 amd64
로 빌드할 플랫폼 수를 자동으로 줄일 수 있습니다.
구성된 Kubernetes 드라이버가 없는 경우 하나의 아키텍처만 (크로스-) 컴파일할 수 있습니다.