OperatorHub.io에 게시하는 방법
OperatorHub.io는 Kubernetes 커뮤니티가 Operators를 공유하는 공간입니다.
주의:
다음 프로세스는 scripts/tools/publish.sh
에서 부분 자동화되어 있습니다.
publish.sh ${VERSION} operatorhub
를 사용하여 이 프로세스를 실행할 수 있습니다.
자세한 내용은 스크립트 문서를 참조하십시오.
GitLab Operator를 OperatorHub에 게시하려면:
-
community-operators 저장소를 포크합니다.
- 포크한 community-operators 저장소를 클론합니다:
-
포크가 새로 생성된 경우:
git clone -o mine git@github.com:<your_github_username>/community-operators.git cd community-operators git remote add upstream https://github.com/k8s-operatorhub/community-operators.git
-
이미 생성된 포크에 대한 후속 업데이트인 경우:
cd community-operators git fetch --all git checkout main git rebase -i upstream/main
-
-
셸을 설정합니다:
# 게시된 Operator 이미지 태그 export OPERATOR_TAG="0.3.1" # OLM에 적용할 버전 export OLM_PACKAGE_VERSION=${OPERATOR_TAG} export OPERATORHUB_DIR="${HOME}/work/community-operators" export OPERATORHUB_NAME="gitlab-operator-kubernetes" export OSDK_BASE_DIR=".build/operatorhub-io" # 선택 사항 # "yq" 바이너리의 로컬 인스턴스를 가리킵니다: export YQ="yq-go"
-
https://gitlab.com/gitlab-org/cloud-native/gitlab-operator
의 새 브랜치를 만듭니다:cd ${OPERATORHUB_DIR} git checkout -B gitlab-release-${OPERATOR_TAG}
-
config/manifests/bases/gitlab-operator-kubernetes.clusterserviceversion.yaml
파일을 편집하여, 유효한 차트 버전을 참조하도록metadata.annotations.alm-examples
를 수정합니다. 이 Operator의 현재 버전과 함께 제공되는 차트 버전입니다. -
로컬 KinD 클러스터에서 Operator 번들을 테스트합니다:
-
BUNDLE_REGISTRY
는 유효한 공개 레지스트리를 가리켜야 합니다(이 목적을 위해 자신의 프로젝트/레지스트리를 생성합니다):export BUNDLE_REGISTRY=registry.gitlab.com/dmakovey/gitlab-operator-bundle
-
podman
(또는docker
)은BUNDLE_REGISTRY
에 로그인해야 합니다.
이전에 설정한 값을 일시적으로 재정의하여 Kind-Specific 번들 등을 사용할 수 있습니다.
OSDK_BASE_DIR=".build/operatortest1" KIND_CLUSTER_NAME="optest1" BUNDLE_IMAGE_TAG="beta1" DOCKER="podman" OPERATOR_TAG=0.6.0 KIND_CONFIG="${HOME}/work/gitlab/examples/kind/kind-ssl.yaml" KIND_IMAGE="kindest/node:v1.25.9" scripts/olm_bundle.sh step1 step2
-
gitlab-operator-kubernetes
의packagemanifest
가 사용 가능해질 때까지 기다립니다 (이때Community Operators
는 건너뜁니다):$ kubectl get packagemanifests | grep -F gitlab | grep -vF "Community Operators" gitlab-operator-kubernetes 48m
-
Operator를 배포합니다 (수동 설치 승인을 피하기 위해
AUTO_UPGRADE="true"
를 설정합니다):OSDK_BASE_DIR=".build/operatortest1" AUTO_UPGRADE="true" scripts/olm_bundle.sh step3
-
IngressClass를 생성합니다:
cat << EOF | kubectl apply -f - apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: # 이 값이 다음 단계에서 GitLab CR의 `spec.chart.values.global.ingress.class`와 일치하는지 확인합니다. name: gitlab-nginx spec: controller: k8s.io/ingress-nginx EOF
-
GitLab을 배포합니다 (값은 귀하의 설정에 맞게 사용자 정의해야 합니다):
KIND_CLUSTER_NAME="optest1" GITLAB_CR_DEPLOPOY_MODE="ss" LOCAL_IP=192.168.3.194 GITLAB_CHART_DIR=~/work/gitlab GITLAB_OPERATOR_DOMAIN=192.168.3.194.nip.io GITLAB_OPERATOR_DIR=. scripts/provision_and_deploy.sh deploy_gitlab
-
KinD 클러스터를 삭제합니다:
kind delete cluster --name=${KIND_CLUSTER_NAME}
-
-
OLM 번들 업그레이드를 테스트합니다.
-
테스트에 사용했던 변수를 재사용합니다 (위 참조):
export BUNDLE_REGISTRY=registry.gitlab.com/dmakovey/gitlab-operator-bundle export BUNDLE_IMAGE_TAG="beta1" export KIND_CLUSTER_NAME="optest1u" export KIND_CONFIG="${HOME}/work/gitlab/examples/kind/kind-ssl.yaml" export KIND_IMAGE="kindest/node:v1.25.9"
-
새로운 KinD 클러스터를 생성해야 합니다:
scripts/olm_bundle.sh initialize_kind install_olm create_namespace
-
이 시점에서
${BUNDLE_REGISTRY}:${BUNDLE_IMAGE_TAG}
에 “테스트” 버전의 번들이 게시되어 있어야 합니다 (게시되지 않았다면 “로컬 KinD 클러스터에서 Operator 번들 테스트”를 따르십시오). 이전 릴리스가0.3.1
이라고 가정하면, 테스트를 위한 카탈로그를 생성할 것입니다 (카탈로그 태그beta1u
가 이전에 게시된 카탈로그 태그beta1
과 다릅니다):export CATALOG_IMAGE_TAG="beta1u" PREVIOUS_BUNDLE_VERSION="0.3.1" opm index add -p docker \ --bundles registry.gitlab.com/gitlab-org/cloud-native/gitlab-operator/bundle:${PREVIOUS_BUNDLE_VERSION},${BUNDLE_REGISTRY}:${BUNDLE_IMAGE_TAG} \ --mode semver \ --tag ${BUNDLE_REGISTRY}/gitlab-operator-catalog:${CATALOG_IMAGE_TAG} podman push ${BUNDLE_REGISTRY}/gitlab-operator-catalog:${CATALOG_IMAGE_TAG}
-
Operator 배포 준비를 위해
CatalogSource
및OperatorGroup
를 배포합니다:OSDK_BASE_DIR=".build/operatortest1" scripts/olm_bundle.sh deploy_catalogsource OSDK_BASE_DIR=".build/operatortest1" scripts/olm_bundle.sh deploy_operatorgroup
-
PackageManifest
를 기다립니다:kubectl get packagemanifests | grep -F gitlab | grep -vF "Community Operators"
-
Subscription
을 배포합니다:# 이전 릴리스를 배포합니다 OSDK_BASE_DIR=".build/operatortest1" OLM_PACKAGE_VERSION=${PREVIOUS_BUNDLE_VERSION} scripts/olm_bundle.sh deploy_subscription
-
InstallPlan
을 찾습니다:$ kubectl get installplans -A NAMESPACE NAME CSV APPROVAL APPROVED gitlab-system install-jfqrb gitlab-operator-kubernetes.v0.3.1 Manual false
-
InstallPlan
을 승인합니다:kubectl -n gitlab-system patch installplan install-jfqrb -p '{"spec":{"approved":true}}' --type merge
이렇게 하면 현재 버전(
0.6.1
)에 대한 새로운 설치 계획이 자동으로 생성됩니다:$ kubectl get installplans -A NAMESPACE NAME CSV APPROVAL APPROVED gitlab-system install-4dvgh gitlab-operator-kubernetes.v0.6.1 Manual false gitlab-system install-jfqrb gitlab-operator-kubernetes.v0.3.1 Manual true
-
업그레이드를 승인합니다:
kubectl -n gitlab-system patch installplan install-4dvgh -p '{"spec":{"approved":true}}' --type merge
-
KinD 클러스터를 삭제합니다:
kind delete cluster --name=${KIND_CLUSTER_NAME}
-
-
Operator 번들을 생성합니다.
# 번들 조립 scripts/olm_bundle.sh build_manifests generate_bundle patch_bundle # 번들 검증 scripts/olm_bundle.sh validate_bundle
-
번들 파일을 올바른 위치로 복사합니다:
mkdir -p ${OPERATORHUB_DIR}/operators/${OPERATORHUB_NAME}/${OLM_PACKAGE_VERSION} cp -r ${OSDK_BASE_DIR}/bundle/* ${OPERATORHUB_DIR}/operators/${OPERATORHUB_NAME}/${OLM_PACKAGE_VERSION}
-
변경 사항을 추가하고(서명 포함) 커밉니다:
cd ${OPERATORHUB_DIR} git add operators/${OPERATOR_HUB_NAME}/${OLM_PACKAGE_VERSION} git commit -s
-
포크한 브랜치를 푸시하고 상류에 대한 풀 요청을 생성합니다.
병합이 완료되기 전에 GitLab 팀원 및/또는 OperatorHub 검토자의 승인을 기다립니다.