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: 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: {}
PROJECT
設定バージョン3-alpha
は3
にアップグレードする必要があります。PROJECT
ファイルのversion
キーは、PROJECT
の設定バージョンを表します。以前の
PROJECT
ファイルversion: 3-alpha resources: - crdVersion: v1 ...
バージョン
3alpha
は バージョン 3 として安定しており、プロジェクトの完全記述に十分な設定フィールドが含まれています。この変更は、仕様がアルファバージョンであるため、技術的には重大ではありませんが、デフォルトでoperator-sdk
コマンドで使用されていたので、Breaking とマークして、便利なアップグレードパスを設定する必要があります。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.
このコマンドは、自動変換が不可能な方向を示すコメントも出力します。
変更内容を確認します。
新規の
PROJECT
ファイルversion: "3" resources: - api: crdVersion: v1 ...
config/manager/manager.yaml
ファイルに以下の変更を加えます。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
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
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.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)
Ansible および Helm ベースの Operator プロジェクトの場合は、
Makefile
でhelm-operator
、ansible-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
docker-build
のmake
ターゲットで、位置ディレクトリー引数.
を移動します。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 \. ')
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)
opm
とcatalog-build
ターゲットを追加します。これらのターゲットを使用して Operator の独自のカタログを作成するか、Operator バンドルを既存のカタログに追加できます。以下の行を追加して、
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)
Go ベースの Operator プロジェクトを更新する場合は、以下の
Makefile
変数も追加します。例5.8
Makefile
変数OS = $(shell go env GOOS) ARCH = $(shell go env GOARCH)
Go ベースの Operator プロジェクトの場合は、
Makefile
のSHELL
変数をシステム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
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
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
サービスアカウントを RBAC リソースの一覧に追加します。
$ echo "- service_account.yaml" >> config/rbac/kustomization.yaml
Operator のサービスアカウントを参照する
RoleBinding
およびClusterRoleBinding
オブジェクトをすべて更新します。$ find config/rbac -name *_binding.yaml -exec sed -i -E 's/ name: default/ name: controller-manager/g' {} \;
サービスアカウント名をマネージャーデプロイメントの
spec.template.spec.serviceAccountName
フィールドに追加します。$ sed -i -E 's/([ ]+)(terminationGracePeriodSeconds:)/\1serviceAccountName: controller-manager\n\1\2/g' config/manager/manager.yaml
変更が以下の差分のようになっていることを確認します。
例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
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
ファイル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
オプション: Ansible および Helm ベースの Operator プロジェクトの場合は、コンポーネント設定で
ansible-operator
およびhelm-operator
を設定します。このオプションを追加するには、以下の手順に従います。以下のファイルを作成します。
例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
以下のファイルを作成します。
例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>
以下の変更を
resources
に適用して、config/default/kustomization.yaml
ファイルを更新します。例5.21
config/default/kustomization.yaml
ファイルresources: ... - manager_config_patch.yaml
以下の変更を適用して、
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
オプション:
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
フラグはそのまま使用したり、設定ファイルの値を上書きしたりできます。
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
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
ファイルspec: template: spec: containers: - name: manager args: - "--health-probe-bind-address=:6789" ...
Helm ベースの Operator のプロジェクト:
--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" ...
-
非推奨のフラグ
--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
ファイルの差分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
エンドポイントのセキュリティーを確保するようにしてください。
既存の依存リソースに所有者アノテーションがあることを確認します。
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>
以前の Operator SDK の記述形式は次のとおりです。
<finalizer_name>.<qualified_group>
Operator が、名前の形式が不適切なファイナライザーを使用する場合は、公式の形式に一致するようにこれらのファイナライザーを変更します。たとえば、
finalizer.cache.example.com
をcache.example.com/finalizer
に変更する必要があります。
Operator プロジェクトは Operator SDK v1.8.0 との互換性が確保されました。