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-3
Copy 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-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.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
ターゲットのディレクトリー引数.
は、podman
CLI が想定する内容に合わせて最後の位置引数に移動されるので、置換が整理されます。以前のターゲット
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.3
Copy 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: system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスアカウントを RBAC リソースの一覧に追加します。
echo "- service_account.yaml" >> config/rbac/kustomization.yaml
$ echo "- service_account.yaml" >> config/rbac/kustomization.yaml
Copy 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.yaml
Copy 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.yaml
Copy 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: system
Copy 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.yaml
Copy 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.yaml
Copy 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 との互換性が確保されました。