This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.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 プロジェクト
手順
PROJECTファイルに対して以下の変更を実行します。PROJECTファイルのpluginsオブジェクトを、manifestsとscorecardを使用するように更新します。Operator Lifecycle Manager (OLM) およびスコアカードマニフェストを作成する
manifestsおよびscorecardプラグインには、関連ファイルを作成するcreateサブコマンドを実行するためのプラグインプラグインが含まれるようになりました。Go ベースの Operator プロジェクトでは、既存の Go ベースのプラグイン設定オブジェクトがすでに存在します。以前の設定は引き続きサポートされますが、設定オプションがそれぞれのプラグインに追加されるため、これらの新しいオブジェクトは今後役に立ちます。
以前の設定
version: 3-alpha ... plugins: go.sdk.operatorframework.io/v2-alpha: {}version: 3-alpha ... plugins: go.sdk.operatorframework.io/v2-alpha: {}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規設定
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Ansible および Helm ベースの Operator プロジェクトの場合に、プラグイン設定オブジェクトは存在しませんでした。プラグイン設定オブジェクトを追加する必要はありませんが、設定オプションがそれぞれのプラグインに追加されるため、これらの新しいオブジェクトは今後役に立ちます。
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PROJECT設定バージョン3-alphaは3にアップグレードする必要があります。PROJECTファイルのversionキーは、PROJECTの設定バージョンを表します。以前の
PROJECTファイルversion: 3-alpha resources: - crdVersion: v1 ...
version: 3-alpha resources: - crdVersion: v1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow バージョン
3alphaは バージョン 3 として安定しており、プロジェクトの完全記述に十分な設定フィールドが含まれています。この変更は、仕様がアルファバージョンであるため、技術的には重大ではありませんが、デフォルトでoperator-sdkコマンドで使用されていたので、Breaking とマークして、便利なアップグレードパスを設定する必要があります。alpha config-3alpha-to-3コマンドを実行して、PROJECTファイルの多くをバージョン3-alphaから3に変換します。operator-sdk alpha config-3alpha-to-3
$ operator-sdk alpha config-3alpha-to-3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Your PROJECT config file has been converted from version 3-alpha to 3. Please make sure all config data is correct.
Your PROJECT config file has been converted from version 3-alpha to 3. Please make sure all config data is correct.Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、自動変換が不可能な方向を示すコメントも出力します。
変更内容を確認します。
新規の
PROJECTファイルversion: "3" resources: - api: crdVersion: v1 ...
version: "3" resources: - api: crdVersion: v1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
config/manager/manager.yamlファイルに以下の変更を加えます。Ansible および Helm ベースの Operator プロジェクトの場合は、liveness および readiness プローブを追加します。
Operator SDK でビルドされた新規プロジェクトには、デフォルトでプローブが設定されます。指定のイメージベースで、エンドポイント
/healthzおよび/readyzが利用可能になりました。Dockerfileを更新して最新のベースイメージを使用するように既存のプロジェクトを更新し、以下をconfig/manager/manager.yamlファイルのmanagerコンテナーに追加できます。例5.1 Ansible ベースの Operator プロジェクトの設定
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.2 Helm ベースの Operator プロジェクトの設定
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ansible および Helm ベースの Operator プロジェクトについては、セキュリティーコンテキストをマネージャーのデプロイメントに追加します。
config/manager/manager.yamlファイルに、以下のセキュリティーコンテキストを追加します。例5.3
config/manager/manager.yamlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Makefileに以下の変更を加えます。Ansible および Helm ベースの Operator プロジェクトの場合には、
Makefileでhelm-operatorおよびansible-operatorURL を更新します。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.3.0/ansible-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように変更します。
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator_$(OS)_$(ARCH)
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator_$(OS)_$(ARCH)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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.3.0/helm-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように変更します。
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator_$(OS)_$(ARCH)
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator_$(OS)_$(ARCH)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Ansible および Helm ベースの Operator プロジェクトの場合は、
Makefileでhelm-operator、ansible-operatorおよびkustomizeルールを更新します。これらのルールはローカルのバイナリーをダウンロードしますが、グローバルバイナリーが存在する場合はローカルのバイナリーは使用されません。例5.4 Ansible ベースの Operator プロジェクトの
Makefileの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.5 Helm ベースの Operator プロジェクトの
Makefileの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow docker-buildのmakeターゲットで、位置ディレクトリー引数.を移動します。docker-buildターゲットのディレクトリー引数.は、podmanCLI が想定する内容に合わせて最後の位置引数に移動されるので、置換が整理されます。以前のターゲット
docker-build: docker build . -t ${IMG}docker-build: docker build . -t ${IMG}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新規ターゲット
docker-build: docker build -t ${IMG} .docker-build: docker build -t ${IMG} .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して変更を加えます。
sed -i 's/docker build . -t ${IMG}/docker build -t ${IMG} ./' $(git grep -l 'docker.*build \. ')$ sed -i 's/docker build . -t ${IMG}/docker build -t ${IMG} ./' $(git grep -l 'docker.*build \. ')Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ansible および Helm ベースの Operator プロジェクトの場合は、
Makefileにヘルプターゲットを追加します。Ansible および Helm ベースのプロジェクトでは、
--helpフラグと同様に、デフォルトでMakefileでヘルプターゲットを提供するようになりました。以下の行を使用して、このターゲットをMakefileに手動で追加できます。例5.6
helpターゲットCopy to Clipboard Copied! Toggle word wrap Toggle overflow opmとcatalog-buildターゲットを追加します。これらのターゲットを使用して Operator の独自のカタログを作成するか、Operator バンドルを既存のカタログに追加できます。以下の行を追加して、
Makefileにターゲットを追加します。例5.7
opmおよびcatalog-buildターゲットCopy to Clipboard Copied! Toggle word wrap Toggle overflow Go ベースの Operator プロジェクトを更新する場合は、以下の
Makefile変数も追加します。例5.8
Makefile変数OS = $(shell go env GOOS) ARCH = $(shell go env GOARCH)
OS = $(shell go env GOOS) ARCH = $(shell go env GOARCH)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Go ベースの Operator プロジェクトの場合は、
MakefileのSHELL変数をシステムbashバイナリーに設定します。setup-envtest.shスクリプトをインポートするにはbashが必要であるため、SHELL変数をエラーオプションでbashに設定する必要があります。例5.9
Makefileの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
... 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.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow system:controller-managerサービスアカウントをプロジェクトに追加します。デフォルト以外のサービスアカウントcontroller-managerがoperator-sdk initコマンドで生成されるようになり、共有 namespace にインストールされている Operator のセキュリティーが改善されます。このサービスアカウントを既存プロジェクトに追加するには、以下の手順に従います。ファイルに
ServiceAccount定義を作成します。例5.11
config/rbac/service_account.yamlファイルapiVersion: v1 kind: ServiceAccount metadata: name: controller-manager namespace: system
apiVersion: v1 kind: ServiceAccount metadata: name: controller-manager namespace: systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスアカウントを RBAC リソースの一覧に追加します。
echo "- service_account.yaml" >> config/rbac/kustomization.yaml
$ echo "- service_account.yaml" >> config/rbac/kustomization.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Operator のサービスアカウントを参照する
RoleBindingおよびClusterRoleBindingオブジェクトをすべて更新します。find config/rbac -name *_binding.yaml -exec sed -i -E 's/ name: default/ name: controller-manager/g' {} \;$ find config/rbac -name *_binding.yaml -exec sed -i -E 's/ name: default/ name: controller-manager/g' {} \;Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスアカウント名をマネージャーデプロイメントの
spec.template.spec.serviceAccountNameフィールドに追加します。sed -i -E 's/([ ]+)(terminationGracePeriodSeconds:)/\1serviceAccountName: controller-manager\n\1\2/g' config/manager/manager.yaml
$ sed -i -E 's/([ ]+)(terminationGracePeriodSeconds:)/\1serviceAccountName: controller-manager\n\1\2/g' config/manager/manager.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変更が以下の差分のようになっていることを確認します。
例5.12
config/manager/manager.yamlファイルの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.13
config/rbac/auth_proxy_role_binding.yamlファイルの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.14
config/rbac/kustomization.yamlファイルの差分resources: +- service_account.yaml - role.yaml - role_binding.yaml - leader_election_role.yaml
resources: +- service_account.yaml - role.yaml - role_binding.yaml - leader_election_role.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.15
config/rbac/leader_election_role_binding.yamlファイルの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.16
config/rbac/role_binding.yamlファイルの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.17
config/rbac/service_account.yamlファイルの差分+apiVersion: v1 +kind: ServiceAccount +metadata: + name: controller-manager + namespace: system
+apiVersion: v1 +kind: ServiceAccount +metadata: + name: controller-manager + namespace: systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
config/manifests/kustomization.yamlファイルに以下の変更を加えます。Kustomize パッチを追加して、cert-manager
ボリュームおよびvolumeMountオブジェクトをクラスターサービスバージョン (CSV) から削除します。Operator Lifecycle Manager (OLM) ではまだ cert-manager がサポートされないため、OLM が Operator 用の証明書を作成して管理できるように、このボリュームを削除してマウントするように、JSON パッチが追加されました。
config/manifests/kustomization.yamlファイルに、以下の行を追加します。例5.18
config/manifests/kustomization.yamlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Ansible および Helm ベースの Operator プロジェクトの場合は、コンポーネント設定で
ansible-operatorおよびhelm-operatorを設定します。このオプションを追加するには、以下の手順に従います。以下のファイルを作成します。
例5.19
config/default/manager_config_patch.yamlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のファイルを作成します。
例5.20
config/manager/controller_manager_config.yamlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の変更を
resourcesに適用して、config/default/kustomization.yamlファイルを更新します。例5.21
config/default/kustomization.yamlファイルresources: ... - manager_config_patch.yaml
resources: ... - manager_config_patch.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の変更を適用して、
config/manager/kustomization.yamlファイルを更新します。例5.22
config/manager/kustomization.yamlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow
オプション:
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.
# 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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow フラグはそのまま使用したり、設定ファイルの値を上書きしたりできます。
Ansible および Helm ベースの Operator プロジェクトについては、
config/rbac/leader_election_role.yamlファイルに以下の変更を加え、リーダー選出のロールルールを追加します。例5.24
config/rbac/leader_election_role.yamlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ansible ベースの Operator プロジェクトの場合は、Ansible コレクションを更新します。
requirements.ymlファイルでcommunity.kubernetesのバージョンフィールドを1.2.1に変更し、operator_sdk.utilのバージョンフィールドを0.2.0に変更します。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ファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow Helm ベースの Operator のプロジェクト:
--health-probe-bind-address=:8081引数をconfig/default/manager_auth_proxy_patch.yamlファイルに追加します。例5.26
config/default/manager_auth_proxy_patch.yamlファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
非推奨のフラグ
--enable-leader-electionを--leader-electに置き換え、非推奨のフラグ--metrics-addrを--metrics-bind-addressに置き換えます。
config/prometheus/monitor.yamlファイルに以下の変更を加えます。スキーム、トークン、および TLS 設定を Prometheus
ServiceMonitorメトリクスエンドポイントに追加します。マネージャー Pod で
httpsポートを指定しているにも拘らず、tlsConfigが設定されていないので、/metricsエンドポインが HTTPS 経由でサービスを提供されるように実際には設定されていません。kube-rbac-proxyは、Pod にマウントされたサービスアカウントトークンを使用して、このエンドポイントのセキュリティーをマネージャーサイドカーコンテナーとして確保するので、デフォルトでこの問題が修正されます。以下の差分に示されるように、
config/prometheus/monitor.yamlファイルに変更を適用します。例5.27
config/prometheus/monitor.yamlファイルの差分Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記kube-rbac-proxyをプロジェクトから削除した場合には、適切な TLS 設定 を使用して/metricsエンドポイントのセキュリティーを確保するようにしてください。
既存の依存リソースに所有者アノテーションがあることを確認します。
Ansible ベースの Operator プロジェクトの場合には、クラスタースコープの依存リソースおよび他の namespace の依存関係リソースで 所有者の参照アノテーション が正しく適用されませんでした。これらのアノテーションを手動で追加することが回避策でしたが、このバグが修正されたため、これは必要なくなりました。
パッケージマニフェストのサポートを非推奨にします。
Operator Framework では、今後のリリースで Operator パッケージマニフェスト形式のサポートが削除されます。非推奨のプロセスの一環として、
operator-sdk generate packagemanifestsおよびoperator-sdk run packagemanifestsコマンドが非推奨となりました。パッケージマニフェストをバンドルに移行するには、operator-sdk pkgman-to-bundleコマンドを使用できます。operator-sdk pkgman-to-bundle --helpコマンドを実行して、パッケージマニフェストプロジェクトのバンドル形式への移行を参照してください。Operator のファイナライザー名を更新します。
Kubernetes ドキュメント が提案するファイナライザーの名前の形式は、以下のとおりです。
<qualified_group>/<finalizer_name>
<qualified_group>/<finalizer_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以前の Operator SDK の記述形式は次のとおりです。
<finalizer_name>.<qualified_group>
<finalizer_name>.<qualified_group>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator が、名前の形式が不適切なファイナライザーを使用する場合は、公式の形式に一致するようにこれらのファイナライザーを変更します。たとえば、
finalizer.cache.example.comをcache.example.com/finalizerに変更する必要があります。
Operator プロジェクトは Operator SDK v1.8.0 との互換性が確保されました。