OperatorHub.ioへの公開方法
OperatorHub.ioは、KubernetesコミュニティがOperatorを共有するためのホームです。
scripts/tools/publish.sh
で部分的に自動化されています。 このプロセスを実行するには、publish.sh ${VERSION} operatorhub
を使用できます。詳細については、スクリプトのドキュメントを参照してください。GitLabオペレータを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
-
-
シェルをセットアップしてください:
# Published Operator Image tag export OPERATOR_TAG="0.3.1" # Version that we're going to apply to 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" export OPERATOR_SDK="${HOME}/bin/operator-sdk_linux_amd64" # Optional # point to local instance of "yq" binary: export YQ="yq-go"
-
https://gitlab.com/gitlab-org/cloud-native/gitlab-operator
の新しいブランチを作成します:cd ${OPERATORHUB_DIR} git checkout -B gitlab-release-${OPERATOR_TAG}
-
metadata.annotations.alm-examples
の下にあるconfig/manifests/bases/gitlab-operator-kubernetes.clusterserviceversion.yaml
を編集して、このバージョンのOperatorが同梱している有効なChartのバージョンを参照するようにしてください。 -
ローカルの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.22.4" 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
-
オペレーションをデプロイします(手動でのインストール承認者を避けるため、
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: # Ensure this value matches `spec.chart.values.global.ingress.class` # in the GitLab CR on the next step. 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.22.4"
-
必ず新しいKinDクラスターを作成してください:
scripts/olm_bundle.sh initialize_kind install_olm create_namespace
-
この時点で、
${BUNDLE_REGISTRY}:${BUNDLE_IMAGE_TAG}
で公開された “テスト “バージョンのバンドルがあるはずです (ない場合 - “ローカルKinDクラスタでのバンドルオペレーションのテスト “に従ってください) 以前のリリースが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}
-
オペレータのデプロイに備えて、
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"
-
deploy
Subscription
:# deploy previous release OSDK_BASE_DIR=".build/operatortest1" OLM_PACKAGE_VERSION=${PREVIOUS_BUNDLE_VERSION} scripts/olm_bundle.sh deploy_subscription
-
location
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バンドルの作成
# assemble bundle scripts/olm_bundle.sh build_manifests generate_bundle patch_bundle # validate 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レビュアーからの承認を待ちます。