5.3. 新しい Operator SDK バージョンのプロジェクトのアップグレード
OpenShift Container Platform 4.10 は Operator SDK v1.16.0 をサポートします。ワークステーションに v1.10.1 CLI がすでにインストールされている場合は、最新バージョンをインストール して CLI を v1.16.0 にアップグレードできます。
ただし、既存の Operator プロジェクトが Operator SDK v1.16.1 との互換性を維持するには、v1.10.0 以降に導入された関連する重大な変更に対し、アップグレード手順を実行する必要があります。アップグレードの手順は、以前は v1.10.1 で作成または維持されている Operator プロジェクトのいずれかで手動で実行する必要があります。
5.3.1. Operator SDK v1.16.0 のプロジェクトのアップグレード
次の手順では、v1.16.0 との互換性を確保するため、既存の Operator プロジェクトを更新します。
- Operator SDK v1.16.0 は Kubernetes 1.22 をサポートします。
-
非推奨の
v1beta1
API の多くは、sigs.k8s.io/controller-runtime v0.10.0
およびcontroller-gen v0.7
を含む Kubernetes 1.22 で削除されました。 -
カスタムリソース定義 (CRD) または Webhook の
v1beta1
API をスキャフォールディングする必要がある場合には、Kubernetes 1.22 にプロジェクトへの更新は重大な変更になります。
Kubernetes 1.22 で導入された変更の詳細は、Kubernetes 1.22 から削除された API のバンドルマニフェストの検証とベータ版 API が Kubernetes 1.22 から削除について参照してください。
前提条件
- Operator SDK v1.16.0 がインストールされている
- Operator SDKv1.10.1 で作成または保守されている Operator プロジェクト。
手順
config/default/manager_auth_proxy_patch.yaml
とconfig/rbac/auth_proxy_service.yaml
ファイルにprotocol
フィールドを追加します。... ports: - containerPort: 8443 + protocol: TCP name: https
config/manager/manager.yaml
ファイルに以下の変更を加えます。CPU とメモリーのリソース制限を増やします。
resources: limits: - cpu: 100m - memory: 30Mi + cpu: 200m + memory: 100Mi
デフォルトのコンテナーマネージャーを指定するアノテーションを追加します。
... template: metadata: annotations: kubectl.kubernetes.io/default-container: manager ...
-
Makefile
ファイル内のすべてのターゲットにPHONY
ターゲットを追加します。 Go ベースの Operator プロジェクトの場合には、次の変更を加えます。
-
setup-envtest
バイナリーをインストールします。 go.mod
ファイルを変更して、依存関係を更新します。k8s.io/api v0.22.1 k8s.io/apimachinery v0.22.1 k8s.io/client-go v0.22.1 sigs.k8s.io/controller-runtime v0.10.0
go mod tidy
コマンドを実行して、依存関係をダウンロードします。$ go mod tidy
Makefile
に以下の変更を加えます。... + ENVTEST_K8S_VERSION = 1.22 test: manifests generate fmt vet envtest ## Run tests. - go test ./... -coverprofile cover.out + KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out ... - $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases + $(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases ... # Produce CRDs that work back to Kubernetes 1.11 (no version conversion) - CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false" ... - admissionReviewVersions={v1,v1beta1} + admissionReviewVersions=v1 ... + ifndef ignore-not-found + ignore-not-found = false + endif ##@ Deployment ... - sh kubectl delete -f - + sh kubectl delete --ignore-not-found=$(ignore-not-found) -f -
make manifest
コマンドを実行して Kubernetes の更新バージョンでマニフェストを生成します。$ make manifest
-
Ansible ベースの Operator プロジェクトの場合には、次の変更を加えます。
以下を含めるように
requirements.yml
ファイルを変更します。community.kubernetes
コレクションは、kubernetes.core
コレクションに置き換えます。... - name: kubernetes.core version: "2.2.0" ...
operator_sdk.util
ユーティリティーをバージョン0.2.0
から0.3.1
に更新します。... - name: operator_sdk.util version: "0.3.1"
config/manager/manager.yaml
ファイルでデフォルトのリソース制限を確認します。... # TODO(user): Configure the resources accordingly based on the project requirements. # More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ resources: limits: cpu: 500m memory: 768Mi requests: cpu: 10m memory: 256Mi
重要Operator SDK は、これらの値を妥当なデフォルト設定としてスキャフォールディングします。Operator の作成者は、プロジェクトの要件に基づいてリソース制限を設定および最適化する必要があります。
オプション:
make run
コマンドを使用して Ansible ベースの Operator をローカルで実行する場合は、次の変更を加えます。Makefile
ファイルで実行ターゲットを変更します。ANSIBLE_ROLES_PATH="$(ANSIBLE_ROLES_PATH):$(shell pwd)/roles" $(ANSIBLE_OPERATOR) run
ansible-runner
のローカルバージョンを 2.0.2 以降に更新します。重要バージョン 2.0 の時点で、
ansible-runner
ツールには、以前のバージョンと互換性のないコマンド署名の変更が含まれています。