OperatorHub.ioへの公開方法

OperatorHub.ioは、KubernetesコミュニティがOperatorを共有するためのホームです。

note
以下のプロセスは、scripts/tools/publish.sh で部分的に自動化されています。 このプロセスを実行するには、publish.sh ${VERSION} operatorhub を使用できます。詳細については、スクリプトのドキュメントを参照してください。

GitLabオペレータをOperatorHubに公開します:

  1. community-operatorsリポジトリをフォークします。
  2. フォークした 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
      
  3. シェルをセットアップしてください:

    # 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"
    
  4. https://gitlab.com/gitlab-org/cloud-native/gitlab-operator の新しいブランチを作成します:

    cd ${OPERATORHUB_DIR}
    git checkout -B gitlab-release-${OPERATOR_TAG}
    
  5. metadata.annotations.alm-examples の下にあるconfig/manifests/bases/gitlab-operator-kubernetes.clusterserviceversion.yaml を編集して、このバージョンのOperatorが同梱している有効なChartのバージョンを参照するようにしてください。

  6. ローカルのKinDクラスターでOperatorバンドルをテストします:

    1. BUNDLE_REGISTRY は有効な公開レジストリを指す必要があります(そのために独自のプロジェクト/レジストリを作成してください):

      export BUNDLE_REGISTRY=registry.gitlab.com/dmakovey/gitlab-operator-bundle
      
    2. 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
    
    1. gitlab-operator-kubernetespackagemanifest が利用可能になるのを待ちます (Community Operators をスキップすることに注意してください):

      $ kubectl get packagemanifests | grep -F gitlab | grep -vF "Community Operators"
      gitlab-operator-kubernetes                                       48m
      
    2. オペレーションをデプロイします(手動でのインストール承認者を避けるため、AUTO_UPGRADE="true" を設定します):

      OSDK_BASE_DIR=".build/operatortest1" AUTO_UPGRADE="true" scripts/olm_bundle.sh step3
      
    3. 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
      
    4. 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
      
    5. KinDクラスターを削除します:

      kind delete cluster --name=${KIND_CLUSTER_NAME}
      
  7. テストOLMバンドルのアップグレード

    1. テストで使用した変数(上記参照)を再利用します:

      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"
      
    2. 必ず新しいKinDクラスターを作成してください:

      scripts/olm_bundle.sh initialize_kind install_olm create_namespace
      
    3. この時点で、${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}
      
    4. オペレータのデプロイに備えて、CatalogSourceOperatorGroup をデプロイします:

            
      OSDK_BASE_DIR=".build/operatortest1" scripts/olm_bundle.sh deploy_catalogsource
            
      OSDK_BASE_DIR=".build/operatortest1" scripts/olm_bundle.sh deploy_operatorgroup 
      
    5. PackageManifest をお待ちください:

      kubectl get packagemanifests | grep -F gitlab | grep -vF "Community Operators"
      
    6. deploySubscription

      # deploy previous release
      OSDK_BASE_DIR=".build/operatortest1" OLM_PACKAGE_VERSION=${PREVIOUS_BUNDLE_VERSION} scripts/olm_bundle.sh deploy_subscription 
      
    7. locationInstallPlan

      $ kubectl get installplans -A
      NAMESPACE       NAME            CSV                                 APPROVAL   APPROVED
      gitlab-system   install-jfqrb   gitlab-operator-kubernetes.v0.3.1   Manual     false
      
    8. 承認者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
            
      
    9. アップグレードを承認します:

      kubectl -n gitlab-system patch installplan install-4dvgh -p '{"spec":{"approved":true}}' --type merge
      
    10. KinDクラスターを削除します:

      kind delete cluster --name=${KIND_CLUSTER_NAME}
      
  8. Operatorバンドルの作成

    # assemble bundle
    scripts/olm_bundle.sh build_manifests generate_bundle patch_bundle
    # validate bundle
    scripts/olm_bundle.sh validate_bundle
    
  9. バンドルファイルを適切な場所にコピーします:

    mkdir -p ${OPERATORHUB_DIR}/operators/${OPERATORHUB_NAME}/${OLM_PACKAGE_VERSION}
    cp -r ${OSDK_BASE_DIR}/bundle/* ${OPERATORHUB_DIR}/operators/${OPERATORHUB_NAME}/${OLM_PACKAGE_VERSION}
    
  10. 変更を追加してコミット(署名付き)します:

    cd ${OPERATORHUB_DIR}
    git add operators/${OPERATOR_HUB_NAME}/${OLM_PACKAGE_VERSION}
    git commit -s
    
  11. ブランチをフォークにプッシュし、プルリクエストをアップストリームに作成します。マージが完了する前に、GitLabチームメンバーおよび/またはOperatorHubレビュアーからの承認を待ちます。