5.3. 新しい Operator SDK バージョンのプロジェクトのアップグレード


OpenShift Container Platform 4.8 は Operator SDK v1.8.0 をサポートします。ワークステーションに v1.3.0 CLI がすでにインストールされている場合は、最新バージョンをインストール して CLI を v1.8.0 にアップグレードできます。

ただし、既存の Operator プロジェクトが Operator SDK v1.8.0 との互換性を維持するには、v1.3.0 以降に導入された関連する重大な変更に対し、アップグレード手順を実行する必要があります。アップグレードの手順は、以前は v1.3.0 で作成または維持されている Operator プロジェクトのいずれかで手動で実行する必要があります。

5.3.1. Operator SDK v1.8.0 のプロジェクトのアップグレード

v1.8.0 との互換性を確保して既存の Operator プロジェクトをアップグレードするには、以下のアップグレード手順を実行する必要があります。

前提条件

  • Operator SDK v1.8.0 がインストールされている
  • 以前に Operator SDK v1.3.0 で作成または維持された Operator プロジェクト

手順

  1. PROJECT ファイルに対して以下の変更を実行します。

    1. PROJECT ファイルの plugins オブジェクトを、manifestsscorecard を使用するように更新します。

      Operator Lifecycle Manager (OLM) およびスコアカードマニフェストを作成する manifests および scorecard プラグインには、関連ファイルを作成する create サブコマンドを実行するためのプラグインプラグインが含まれるようになりました。

      • Go ベースの Operator プロジェクトでは、既存の Go ベースのプラグイン設定オブジェクトがすでに存在します。以前の設定は引き続きサポートされますが、設定オプションがそれぞれのプラグインに追加されるため、これらの新しいオブジェクトは今後役に立ちます。

        以前の設定

        version: 3-alpha
        ...
        plugins:
          go.sdk.operatorframework.io/v2-alpha: {}

        新規設定

        version: 3-alpha
        ...
        plugins:
          manifests.sdk.operatorframework.io/v2: {}
          scorecard.sdk.operatorframework.io/v2: {}

      • オプション: Ansible および Helm ベースの Operator プロジェクトの場合に、プラグイン設定オブジェクトは存在しませんでした。プラグイン設定オブジェクトを追加する必要はありませんが、設定オプションがそれぞれのプラグインに追加されるため、これらの新しいオブジェクトは今後役に立ちます。

        version: 3-alpha
        ...
        plugins:
          manifests.sdk.operatorframework.io/v2: {}
          scorecard.sdk.operatorframework.io/v2: {}
    2. PROJECT 設定バージョン 3-alpha3 にアップグレードする必要があります。PROJECT ファイルの version キーは、PROJECT の設定バージョンを表します。

      以前の PROJECT ファイル

      version: 3-alpha
      resources:
      - crdVersion: v1
      ...

      バージョン 3alphaバージョン 3 として安定しており、プロジェクトの完全記述に十分な設定フィールドが含まれています。この変更は、仕様がアルファバージョンであるため、技術的には重大ではありませんが、デフォルトで operator-sdk コマンドで使用されていたので、Breaking とマークして、便利なアップグレードパスを設定する必要があります。

      1. alpha config-3alpha-to-3 コマンドを実行して、PROJECT ファイルの多くをバージョン 3-alpha から 3 に変換します。

        $ operator-sdk alpha config-3alpha-to-3

        出力例

        Your PROJECT config file has been converted from version 3-alpha to 3. Please make sure all config data is correct.

        このコマンドは、自動変換が不可能な方向を示すコメントも出力します。

      2. 変更内容を確認します。

        新規の PROJECT ファイル

        version: "3"
        resources:
        - api:
          crdVersion: v1
        ...

  2. config/manager/manager.yaml ファイルに以下の変更を加えます。

    1. Ansible および Helm ベースの Operator プロジェクトの場合は、liveness および readiness プローブを追加します。

      Operator SDK でビルドされた新規プロジェクトには、デフォルトでプローブが設定されます。指定のイメージベースで、エンドポイント /healthz および /readyz が利用可能になりました。Dockerfile を更新して最新のベースイメージを使用するように既存のプロジェクトを更新し、以下を config/manager/manager.yaml ファイルの manager コンテナーに追加できます。

      例5.1 Ansible ベースの Operator プロジェクトの設定

        livenessProbe:
          httpGet:
            path: /healthz
            port: 6789
          initialDelaySeconds: 15
          periodSeconds: 20
        readinessProbe:
          httpGet:
            path: /readyz
            port: 6789
          initialDelaySeconds: 5
          periodSeconds: 10

      例5.2 Helm ベースの Operator プロジェクトの設定

        livenessProbe:
          httpGet:
            path: /healthz
            port: 8081
          initialDelaySeconds: 15
          periodSeconds: 20
        readinessProbe:
          httpGet:
            path: /readyz
            port: 8081
          initialDelaySeconds: 5
          periodSeconds: 10
    2. Ansible および Helm ベースの Operator プロジェクトについては、セキュリティーコンテキストをマネージャーのデプロイメントに追加します。

      config/manager/manager.yaml ファイルに、以下のセキュリティーコンテキストを追加します。

      例5.3 config/manager/manager.yaml ファイル

      spec:
        ...
        template:
          ...
          spec:
            securityContext:
              runAsNonRoot: true
            containers:
            - name: manager
              securityContext:
                allowPrivilegeEscalation: false
  3. Makefile に以下の変更を加えます。

    1. Ansible および Helm ベースの Operator プロジェクトの場合には、Makefilehelm-operator および ansible-operator URL を更新します。

      • Ansible ベース Operator のプロジェクトの場合:

        https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/ansible-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)

        以下のように変更します。

        https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator_$(OS)_$(ARCH)
      • Helm ベースの Operator プロジェクトの場合:

        https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/helm-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)

        以下のように変更します。

        https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator_$(OS)_$(ARCH)
    2. Ansible および Helm ベースの Operator プロジェクトの場合は、Makefilehelm-operatoransible-operator および kustomize ルールを更新します。これらのルールはローカルのバイナリーをダウンロードしますが、グローバルバイナリーが存在する場合はローカルのバイナリーは使用されません。

      例5.4 Ansible ベースの Operator プロジェクトの Makefile の差分

       PATH  := $(PATH):$(PWD)/bin
       SHELL := env PATH=$(PATH) /bin/sh
      -OS := $(shell uname -s | tr '[:upper:]' '[:lower:]')
      -ARCH := $(shell uname -m | sed 's/x86_64/amd64/')
      +OS    = $(shell uname -s | tr '[:upper:]' '[:lower:]')
      +ARCH  = $(shell uname -m | sed 's/x86_64/amd64/')
      +OSOPER   = $(shell uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/apple-darwin/' | sed 's/linux/linux-gnu/')
      +ARCHOPER = $(shell uname -m )
      
      -# Download kustomize locally if necessary, preferring the $(pwd)/bin path over global if both exist.
      -.PHONY: kustomize
      -KUSTOMIZE = $(shell pwd)/bin/kustomize
       kustomize:
      -ifeq (,$(wildcard $(KUSTOMIZE)))
      -ifeq (,$(shell which kustomize 2>/dev/null))
      +ifeq (, $(shell which kustomize 2>/dev/null))
       	@{ \
       	set -e ;\
      -	mkdir -p $(dir $(KUSTOMIZE)) ;\
      -	curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | \
      -	tar xzf - -C bin/ ;\
      +	mkdir -p bin ;\
      +	curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | tar xzf - -C bin/ ;\
       	}
      +KUSTOMIZE=$(realpath ./bin/kustomize)
       else
      -KUSTOMIZE = $(shell which kustomize)
      -endif
      +KUSTOMIZE=$(shell which kustomize)
       endif
      
      -# Download ansible-operator locally if necessary, preferring the $(pwd)/bin path over global if both exist.
      -.PHONY: ansible-operator
      -ANSIBLE_OPERATOR = $(shell pwd)/bin/ansible-operator
       ansible-operator:
      -ifeq (,$(wildcard $(ANSIBLE_OPERATOR)))
      -ifeq (,$(shell which ansible-operator 2>/dev/null))
      +ifeq (, $(shell which ansible-operator 2>/dev/null))
       	@{ \
       	set -e ;\
      -	mkdir -p $(dir $(ANSIBLE_OPERATOR)) ;\
      -	curl -sSLo $(ANSIBLE_OPERATOR) https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/ansible-operator_$(OS)_$(ARCH) ;\
      -	chmod +x $(ANSIBLE_OPERATOR) ;\
      +	mkdir -p bin ;\
      +	curl -LO https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ;\
      +	mv ansible-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ./bin/ansible-operator ;\
      +	chmod +x ./bin/ansible-operator ;\
       	}
      +ANSIBLE_OPERATOR=$(realpath ./bin/ansible-operator)
       else
      -ANSIBLE_OPERATOR = $(shell which ansible-operator)
      -endif
      +ANSIBLE_OPERATOR=$(shell which ansible-operator)
       endif

      例5.5 Helm ベースの Operator プロジェクトの Makefile の差分

       PATH  := $(PATH):$(PWD)/bin
       SHELL := env PATH=$(PATH) /bin/sh
      -OS := $(shell uname -s | tr '[:upper:]' '[:lower:]')
      -ARCH := $(shell uname -m | sed 's/x86_64/amd64/')
      +OS    = $(shell uname -s | tr '[:upper:]' '[:lower:]')
      +ARCH  = $(shell uname -m | sed 's/x86_64/amd64/')
      +OSOPER   = $(shell uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/apple-darwin/' | sed 's/linux/linux-gnu/')
      +ARCHOPER = $(shell uname -m )
      
      -# Download kustomize locally if necessary, preferring the $(pwd)/bin path over global if both exist.
      -.PHONY: kustomize
      -KUSTOMIZE = $(shell pwd)/bin/kustomize
       kustomize:
      -ifeq (,$(wildcard $(KUSTOMIZE)))
      -ifeq (,$(shell which kustomize 2>/dev/null))
      +ifeq (, $(shell which kustomize 2>/dev/null))
       	@{ \
       	set -e ;\
      -	mkdir -p $(dir $(KUSTOMIZE)) ;\
      -	curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | \
      -	tar xzf - -C bin/ ;\
      +	mkdir -p bin ;\
      +	curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v3.5.4/kustomize_v3.5.4_$(OS)_$(ARCH).tar.gz | tar xzf - -C bin/ ;\
       	}
      +KUSTOMIZE=$(realpath ./bin/kustomize)
       else
      -KUSTOMIZE = $(shell which kustomize)
      -endif
      +KUSTOMIZE=$(shell which kustomize)
       endif
      
      -# Download helm-operator locally if necessary, preferring the $(pwd)/bin path over global if both exist.
      -.PHONY: helm-operator
      -HELM_OPERATOR = $(shell pwd)/bin/helm-operator
       helm-operator:
      -ifeq (,$(wildcard $(HELM_OPERATOR)))
      -ifeq (,$(shell which helm-operator 2>/dev/null))
      +ifeq (, $(shell which helm-operator 2>/dev/null))
       	@{ \
       	set -e ;\
      -	mkdir -p $(dir $(HELM_OPERATOR)) ;\
      -	curl -sSLo $(HELM_OPERATOR) https://github.com/operator-framework/operator-sdk/releases/download/v1.3.0/helm-operator_$(OS)_$(ARCH) ;\
      -	chmod +x $(HELM_OPERATOR) ;\
      +	mkdir -p bin ;\
      +	curl -LO https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ;\
      +	mv helm-operator-v1.8.0-$(ARCHOPER)-$(OSOPER) ./bin/helm-operator ;\
      +	chmod +x ./bin/helm-operator ;\
       	}
      +HELM_OPERATOR=$(realpath ./bin/helm-operator)
       else
      -HELM_OPERATOR = $(shell which helm-operator)
      -endif
      +HELM_OPERATOR=$(shell which helm-operator)
       endif
    3. docker-buildmake ターゲットで、位置ディレクトリー引数 . を移動します。

      docker-build ターゲットのディレクトリー引数 . は、podman CLI が想定する内容に合わせて最後の位置引数に移動されるので、置換が整理されます。

      以前のターゲット

      docker-build:
        docker build . -t ${IMG}

      新規ターゲット

      docker-build:
        docker build -t ${IMG} .

      以下のコマンドを実行して変更を加えます。

      $ sed -i 's/docker build . -t ${IMG}/docker build -t ${IMG} ./' $(git grep -l 'docker.*build \. ')
    4. Ansible および Helm ベースの Operator プロジェクトの場合は、Makefileヘルプ ターゲットを追加します。

      Ansible および Helm ベースのプロジェクトでは、 --help フラグと同様に、デフォルトで Makefileヘルプ ターゲットを提供するようになりました。以下の行を使用して、このターゲットを Makefile に手動で追加できます。

      例5.6 help ターゲット

      ##@ General
      
      # The help target prints out all targets with their descriptions organized
      # beneath their categories. The categories are represented by '##@' and the
      # target descriptions by '##'. The awk commands is responsible for reading the
      # entire set of makefiles included in this invocation, looking for lines of the
      # file as xyz: ## something, and then pretty-format the target and help. Then,
      # if there's a line with ##@ something, that gets pretty-printed as a category.
      # More info on the usage of ANSI control characters for terminal formatting:
      # https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
      # More info on the awk command:
      # http://linuxcommand.org/lc3_adv_awk.php
      
      help: ## Display this help.
      	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
    5. opmcatalog-build ターゲットを追加します。これらのターゲットを使用して Operator の独自のカタログを作成するか、Operator バンドルを既存のカタログに追加できます。

      1. 以下の行を追加して、Makefile にターゲットを追加します。

        例5.7 opm および catalog-build ターゲット

        .PHONY: opm
        OPM = ./bin/opm
        opm:
        ifeq (,$(wildcard $(OPM)))
        ifeq (,$(shell which opm 2>/dev/null))
        	@{ \
        	set -e ;\
        	mkdir -p $(dir $(OPM)) ;\
        	curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v1.15.1/$(OS)-$(ARCH)-opm ;\
        	chmod +x $(OPM) ;\
        	}
        else
        OPM = $(shell which opm)
        endif
        endif
        BUNDLE_IMGS ?= $(BUNDLE_IMG)
        CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:v$(VERSION) ifneq ($(origin CATALOG_BASE_IMG), undefined) FROM_INDEX_OPT := --from-index $(CATALOG_BASE_IMG) endif
        .PHONY: catalog-build
        catalog-build: opm
        	$(OPM) index add --container-tool docker --mode semver --tag $(CATALOG_IMG) --bundles $(BUNDLE_IMGS) $(FROM_INDEX_OPT)
        
        .PHONY: catalog-push
        catalog-push: ## Push the catalog image.
        	$(MAKE) docker-push IMG=$(CATALOG_IMG)
      2. Go ベースの Operator プロジェクトを更新する場合は、以下の Makefile 変数も追加します。

        例5.8 Makefile 変数

        OS = $(shell go env GOOS)
        ARCH = $(shell go env GOARCH)
    6. Go ベースの Operator プロジェクトの場合は、MakefileSHELL 変数をシステム bash バイナリーに設定します。

      setup-envtest.sh スクリプトをインポートするには bash が必要であるため、SHELL 変数をエラーオプションで bash に設定する必要があります。

      例5.9 Makefile の差分

      else GOBIN=$(shell go env GOBIN)
      endif
      +# Setting SHELL to bash allows bash commands to be executed by recipes.
      +# This is a requirement for 'setup-envtest.sh' in the test target.
      +# Options are set to exit when a recipe line exits non-zero or a piped command fails.
      +SHELL = /usr/bin/env bash -o pipefail
      +.SHELLFLAGS = -ec
      + all: build
  4. Go ベースの Operator プロジェクトの場合は、go.mod ファイルの以下のエントリーを変更して controller-runtime を v0.8.3 に、Kubernetes の依存関係を v0.20.2 にアップグレードし、プロジェクトを再ビルドします。

    例5.10 go.mod ファイル

    ...
    	k8s.io/api v0.20.2
    	k8s.io/apimachinery v0.20.2
    	k8s.io/client-go v0.20.2
    	sigs.k8s.io/controller-runtime v0.8.3
  5. system:controller-manager サービスアカウントをプロジェクトに追加します。デフォルト以外のサービスアカウント controller-manageroperator-sdk init コマンドで生成されるようになり、共有 namespace にインストールされている Operator のセキュリティーが改善されます。このサービスアカウントを既存プロジェクトに追加するには、以下の手順に従います。

    1. ファイルに ServiceAccount 定義を作成します。

      例5.11 config/rbac/service_account.yaml ファイル

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: controller-manager
        namespace: system
    2. サービスアカウントを RBAC リソースの一覧に追加します。

      $ echo "- service_account.yaml" >> config/rbac/kustomization.yaml
    3. Operator のサービスアカウントを参照する RoleBinding および ClusterRoleBinding オブジェクトをすべて更新します。

      $ find config/rbac -name *_binding.yaml -exec sed -i -E 's/  name: default/  name: controller-manager/g' {} \;
    4. サービスアカウント名をマネージャーデプロイメントの spec.template.spec.serviceAccountName フィールドに追加します。

      $ sed -i -E 's/([ ]+)(terminationGracePeriodSeconds:)/\1serviceAccountName: controller-manager\n\1\2/g' config/manager/manager.yaml
    5. 変更が以下の差分のようになっていることを確認します。

      例5.12 config/manager/manager.yaml ファイルの差分

      ...
                 requests:
                   cpu: 100m
                   memory: 20Mi
      +      serviceAccountName: controller-manager
             terminationGracePeriodSeconds: 10

      例5.13 config/rbac/auth_proxy_role_binding.yaml ファイルの差分

      ...
         name: proxy-role
       subjects:
       - kind: ServiceAccount
      -  name: default
      +  name: controller-manager
         namespace: system

      例5.14 config/rbac/kustomization.yaml ファイルの差分

       resources:
      +- service_account.yaml
       - role.yaml
       - role_binding.yaml
       - leader_election_role.yaml

      例5.15 config/rbac/leader_election_role_binding.yaml ファイルの差分

      ...
         name: leader-election-role
       subjects:
       - kind: ServiceAccount
      -  name: default
      +  name: controller-manager
         namespace: system

      例5.16 config/rbac/role_binding.yaml ファイルの差分

      ...
         name: manager-role
       subjects:
       - kind: ServiceAccount
      -  name: default
      +  name: controller-manager
         namespace: system

      例5.17 config/rbac/service_account.yaml ファイルの差分

      +apiVersion: v1
      +kind: ServiceAccount
      +metadata:
      +  name: controller-manager
      +  namespace: system
  6. config/manifests/kustomization.yaml ファイルに以下の変更を加えます。

    1. Kustomize パッチを追加して、cert-manager ボリューム および volumeMount オブジェクトをクラスターサービスバージョン (CSV) から削除します。

      Operator Lifecycle Manager (OLM) ではまだ cert-manager がサポートされないため、OLM が Operator 用の証明書を作成して管理できるように、このボリュームを削除してマウントするように、JSON パッチが追加されました。

      config/manifests/kustomization.yaml ファイルに、以下の行を追加します。

      例5.18 config/manifests/kustomization.yaml ファイル

      patchesJson6902:
      - target:
          group: apps
          version: v1
          kind: Deployment
          name: controller-manager
          namespace: system
        patch: |-
          # Remove the manager container's "cert" volumeMount, since OLM will create and mount a set of certs.
          # Update the indices in this path if adding or removing containers/volumeMounts in the manager's Deployment.
          - op: remove
            path: /spec/template/spec/containers/1/volumeMounts/0
          # Remove the "cert" volume, since OLM will create and mount a set of certs.
          # Update the indices in this path if adding or removing volumes in the manager's Deployment.
          - op: remove
            path: /spec/template/spec/volumes/0
    2. オプション: Ansible および Helm ベースの Operator プロジェクトの場合は、コンポーネント設定で ansible-operator および helm-operator を設定します。このオプションを追加するには、以下の手順に従います。

      1. 以下のファイルを作成します。

        例5.19 config/default/manager_config_patch.yaml ファイル

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: controller-manager
          namespace: system
        spec:
          template:
            spec:
              containers:
              - name: manager
                args:
                - "--config=controller_manager_config.yaml"
                volumeMounts:
                - name: manager-config
                  mountPath: /controller_manager_config.yaml
                  subPath: controller_manager_config.yaml
              volumes:
              - name: manager-config
                configMap:
                  name: manager-config
      2. 以下のファイルを作成します。

        例5.20 config/manager/controller_manager_config.yaml ファイル

        apiVersion: controller-runtime.sigs.k8s.io/v1alpha1
        kind: ControllerManagerConfig
        health:
          healthProbeBindAddress: :6789
        metrics:
          bindAddress: 127.0.0.1:8080
        
        leaderElection:
          leaderElect: true
          resourceName: <resource_name>
      3. 以下の変更を resources に適用して、config/default/kustomization.yaml ファイルを更新します。

        例5.21 config/default/kustomization.yaml ファイル

          resources:
          ...
          - manager_config_patch.yaml
      4. 以下の変更を適用して、config/manager/kustomization.yaml ファイルを更新します。

        例5.22 config/manager/kustomization.yaml ファイル

          generatorOptions:
            disableNameSuffixHash: true
        
          configMapGenerator:
          - files:
            - controller_manager_config.yaml
            name: manager-config
          apiVersion: kustomize.config.k8s.io/v1beta1
          kind: Kustomization
          images:
          - name: controller
            newName: quay.io/example/memcached-operator
            newTag: v0.0.1
    3. オプション: config/default/kustomization.yaml ファイルにマネージャー設定パッチを追加します。

      config file のサポートが最初に追加されたタイミングで、生成された --config フラグが ansible-operator または helm-operator バイナリーのいずれかに追加されていなかったため、現在は機能しません。--config フラグは、ファイルによるバイナリーの設定をサポートします。この設定の方法は、Operator 全体としてではなく、基盤の コントローラーマネージャー にのみ適用されます。

      オプションで設定ファイルで Operator のデプロイメントを設定するには、以下の差分に示されるように config/default/kustomization.yaml ファイルに変更を加えます。

      例5.23 config/default/kustomization.yaml ファイルの差分

      # If you want your controller-manager to expose the /metrics # endpoint w/o any authn/z, please comment the following line.
      \- manager_auth_proxy_patch.yaml
      +# Mount the controller config file for loading manager configurations
      +# through a ComponentConfig type
      +- manager_config_patch.yaml

      フラグはそのまま使用したり、設定ファイルの値を上書きしたりできます。

  7. Ansible および Helm ベースの Operator プロジェクトについては、config/rbac/leader_election_role.yaml ファイルに以下の変更を加え、リーダー選出のロールルールを追加します。

    例5.24 config/rbac/leader_election_role.yaml ファイル

    - apiGroups:
      - coordination.k8s.io
      resources:
      - leases
      verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
      - delete
  8. Ansible ベースの Operator プロジェクトの場合は、Ansible コレクションを更新します。

    requirements.yml ファイルで community.kubernetesバージョン フィールドを 1.2.1 に変更し、operator_sdk.utilバージョン フィールドを 0.2.0 に変更します。

  9. config/default/manager_auth_proxy_patch.yaml ファイルに以下の変更を加えます。

    • Ansible ベースの Operator プロジェクトの場合は、--health-probe-bind-address=:6789 引数を config/default/manager_auth_proxy_patch.yaml ファイルに追加します。

      例5.25 config/default/manager_auth_proxy_patch.yaml ファイル

      spec:
        template:
          spec:
            containers:
            - name: manager
              args:
              - "--health-probe-bind-address=:6789"
              ...
    • Helm ベースの Operator のプロジェクト:

      1. --health-probe-bind-address=:8081 引数を config/default/manager_auth_proxy_patch.yaml ファイルに追加します。

        例5.26 config/default/manager_auth_proxy_patch.yaml ファイル

        spec:
          template:
            spec:
              containers:
              - name: manager
                args:
                - "--health-probe-bind-address=:8081"
                ...
      2. 非推奨のフラグ --enable-leader-election--leader-elect に置き換え、非推奨のフラグ --metrics-addr--metrics-bind-address に置き換えます。
  10. config/prometheus/monitor.yaml ファイルに以下の変更を加えます。

    1. スキーム、トークン、および TLS 設定を Prometheus ServiceMonitor メトリクスエンドポイントに追加します。

      マネージャー Pod で https ポートを指定しているにも拘らず、tlsConfig が設定されていないので、/metrics エンドポインが HTTPS 経由でサービスを提供されるように実際には設定されていません。kube-rbac-proxy は、Pod にマウントされたサービスアカウントトークンを使用して、このエンドポイントのセキュリティーをマネージャーサイドカーコンテナーとして確保するので、デフォルトでこの問題が修正されます。

      以下の差分に示されるように、config/prometheus/monitor.yaml ファイルに変更を適用します。

      例5.27 config/prometheus/monitor.yaml ファイルの差分

      spec:
         endpoints:
           - path: /metrics
             port: https
      +      scheme: https
      +      bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
      +      tlsConfig:
      +        insecureSkipVerify: true
         selector:
           matchLabels:
             control-plane: controller-manager
      注記

      kube-rbac-proxy をプロジェクトから削除した場合には、適切な TLS 設定 を使用して /metrics エンドポイントのセキュリティーを確保するようにしてください。

  11. 既存の依存リソースに所有者アノテーションがあることを確認します。

    Ansible ベースの Operator プロジェクトの場合には、クラスタースコープの依存リソースおよび他の namespace の依存関係リソースで 所有者の参照アノテーション が正しく適用されませんでした。これらのアノテーションを手動で追加することが回避策でしたが、このバグが修正されたため、これは必要なくなりました。

  12. パッケージマニフェストのサポートを非推奨にします。

    Operator Framework では、今後のリリースで Operator パッケージマニフェスト形式のサポートが削除されます。非推奨のプロセスの一環として、operator-sdk generate packagemanifests および operator-sdk run packagemanifests コマンドが非推奨となりました。パッケージマニフェストをバンドルに移行するには、operator-sdk pkgman-to-bundle コマンドを使用できます。

    operator-sdk pkgman-to-bundle --help コマンドを実行して、パッケージマニフェストプロジェクトのバンドル形式への移行を参照してください。

  13. Operator のファイナライザー名を更新します。

    Kubernetes ドキュメント が提案するファイナライザーの名前の形式は、以下のとおりです。

    <qualified_group>/<finalizer_name>

    以前の Operator SDK の記述形式は次のとおりです。

    <finalizer_name>.<qualified_group>

    Operator が、名前の形式が不適切なファイナライザーを使用する場合は、公式の形式に一致するようにこれらのファイナライザーを変更します。たとえば、finalizer.cache.example.comcache.example.com/finalizer に変更する必要があります。

Operator プロジェクトは Operator SDK v1.8.0 との互換性が確保されました。

5.3.2. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.