# Set the Operator SDK version to use. By default, what is installed on the system is used.
# This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
OPERATOR_SDK_VERSION ?= v1.36.1-ocp
OpenShift Dedicated 支持 Operator SDK 1.36.1。如果您已经在工作站上安装了 1.31.0 CLI,可以通过安装最新版本将 CLI 更新到 1.36.1。
Red Hat 支持的 Operator SDK CLI 工具版本(包括与 Operator 项目相关的脚手架和测试工具)已弃用,计划在未来版本的 OpenShift Dedicated 中删除。Red Hat 将在此版本的生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Dedicated 版本中删除。 不建议使用 Red Hat 支持的 Operator SDK 版本创建新的 Operator 项目。拥有现有 Operator 项目的 Operator 作者可以使用 OpenShift Dedicated 发布的 Operator SDK CLI 工具版本来维护其项目并创建针对较新版本的 OpenShift Dedicated 的 Operator 版本。 以下与 Operator 项目相关的基础镜像并未弃用。这些基础镜像的运行时功能和配置 API 仍受支持,用于修复错误和解决 CVE。
有关不受支持的社区维护的 Operator SDK 版本的信息,请参阅Operator SDK (Operator Framework)。 |
但是,为确保您的现有 Operator 项目与 Operator SDK 1.36.1 保持兼容性,需要针对自 1.31.0 版本以来引入的关联重大更改执行更新步骤。您必须在之前使用 1.31.0 创建或维护的任何 Operator 项目中手动执行更新步骤。
以下过程将更新现有的基于 Go 的 Operator 项目以使其与 1.36.1 兼容。
已安装 Operator SDK 1.36.1
使用 Operator SDK 1.31.0 创建或维护的 Operator 项目
编辑您的 Operator 项目的 Makefile 以将 Operator SDK 版本更新为`v1.36.1-ocp`,如下例所示
# Set the Operator SDK version to use. By default, what is installed on the system is used.
# This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
OPERATOR_SDK_VERSION ?= v1.36.1-ocp
更新`kube-rbac-proxy`容器以使用基于 Red Hat Enterprise Linux (RHEL) 9 的镜像
在以下文件中查找`kube-rbac-proxy`容器的条目
config/default/manager_auth_proxy_patch.yaml
您的 Operator 项目的`bundle/manifests/
将拉取规范中的镜像名称从`ose-kube-rbac-proxy`更新为`ose-kube-rbac-proxy-rhel9`,并将标签更新为`v`
# ...
containers:
- name: kube-rbac-proxy
image: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9:v
# ...
`go/v4`插件现在已稳定,并且是在搭建基于 Go 的 Operator 时使用的默认版本。从 Golang v2 和 v3 插件到新的 Golang v4 插件的转换带来了重大更改。此迁移旨在增强项目的功和兼容性,反映了 Golang 开发不断变化的格局。
有关这些更改背后原因的更多信息,请参阅 Kubebuilder 文档中的go/v3 vs go/v4。
要全面了解迁移到 v4 插件格式的过程以及详细的迁移步骤,请参阅 Kubebuilder 文档中的通过手动更新文件从 go/v3 迁移到 go/v4。
`kustomize/v2`插件现在已稳定,并且在使用`go/v4`、`ansible/v1`、`helm/v1`和`hybrid/v1-alpha`插件时是插件链中使用的默认版本。有关此默认脚手架的更多信息,请参阅 Kubebuilder 文档中的Kustomize v2。
如果您的 Operator 项目使用多平台或多架构构建,请在您的项目 Makefile 中将现有的`docker-buildx`目标替换为以下定义
docker-buildx:
## Build and push the Docker image for the manager for multi-platform support
- docker buildx create --name project-v3-builder
docker buildx use project-v3-builder
- docker buildx build --push --platform=$(PLATFORMS) --tag ${IMG} -f Dockerfile .
- docker buildx rm project-v3-builder
您必须将 Operator 项目中的 Kubernetes 版本升级到 1.29。您需要对项目结构、Makefile 和 `go.mod` 文件进行以下更改。
Kubebuilder 即将弃用 `go/v3` 插件,因此 Operator SDK 也将在未来的版本中迁移到 `go/v4`。 |
更新您的 `go.mod` 文件以升级您的依赖项
k8s.io/api v0.29.2
k8s.io/apimachinery v0.29.2
k8s.io/client-go v0.29.2
sigs.k8s.io/controller-runtime v0.17.3
运行以下命令下载升级后的依赖项
$ go mod tidy
您现在可以生成一个包含所有使用 Kustomize 构建的资源的文件,这些资源对于在没有依赖项的情况下安装此项目是必要的。请对您的 Makefile 进行以下更改
+ .PHONY: build-installer
+ build-installer: manifests generate kustomize ## Generate a consolidated YAML with CRDs and deployment.
+ mkdir -p dist
+ cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
+ $(KUSTOMIZE) build config/default > dist/install.yaml
通过进行以下更改来更新 Makefile 中的 `ENVTEST_K8S_VERSION` 变量
- ENVTEST_K8S_VERSION = 1.28.3
+ ENVTEST_K8S_VERSION = 1.29.0
从您的 Makefile 中删除以下部分
- GOLANGCI_LINT = $(shell pwd)/bin/golangci-lint
- GOLANGCI_LINT_VERSION ?= v1.54.2
- golangci-lint:
- @[ -f $(GOLANGCI_LINT) ] || { \
- set -e ;\
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell dirname $(GOLANGCI_LINT)) $(GOLANGCI_LINT_VERSION) ;\
- }
更新您的 Makefile,进行以下更改
- ## Tool Binaries
- KUBECTL ?= kubectl
- KUSTOMIZE ?= $(LOCALBIN)/kustomize
- CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
- ENVTEST ?= $(LOCALBIN)/setup-envtest
-
- ## Tool Versions
- KUSTOMIZE_VERSION ?= v5.2.1
- CONTROLLER_TOOLS_VERSION ?= v0.13.0
-
- .PHONY: kustomize
- kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. If wrong version is installed, it will be removed before downloading.
- $(KUSTOMIZE): $(LOCALBIN)
- @if test -x $(LOCALBIN)/kustomize && ! $(LOCALBIN)/kustomize version | grep -q $(KUSTOMIZE_VERSION); then \
- echo "$(LOCALBIN)/kustomize version is not expected $(KUSTOMIZE_VERSION). Removing it before installing."; \
- rm -rf $(LOCALBIN)/kustomize; \
- fi
- test -s $(LOCALBIN)/kustomize || GOBIN=$(LOCALBIN) GO111MODULE=on go install sigs.k8s.io/kustomize/kustomize/v5@$(KUSTOMIZE_VERSION)
-
- .PHONY: controller-gen
- controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. If wrong version is installed, it will be overwritten.
- $(CONTROLLER_GEN): $(LOCALBIN)
- test -s $(LOCALBIN)/controller-gen && $(LOCALBIN)/controller-gen --version | grep -q $(CONTROLLER_TOOLS_VERSION) || \
- GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION)
-
- .PHONY: envtest
- envtest: $(ENVTEST) ## Download envtest-setup locally if necessary.
- $(ENVTEST): $(LOCALBIN)
- test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
+ ## Tool Binaries
+ KUBECTL ?= kubectl
+ KUSTOMIZE ?= $(LOCALBIN)/kustomize-$(KUSTOMIZE_VERSION)
+ CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen-$(CONTROLLER_TOOLS_VERSION)
+ ENVTEST ?= $(LOCALBIN)/setup-envtest-$(ENVTEST_VERSION)
+ GOLANGCI_LINT = $(LOCALBIN)/golangci-lint-$(GOLANGCI_LINT_VERSION)
+
+ ## Tool Versions
+ KUSTOMIZE_VERSION ?= v5.3.0
+ CONTROLLER_TOOLS_VERSION ?= v0.14.0
+ ENVTEST_VERSION ?= release-0.17
+ GOLANGCI_LINT_VERSION ?= v1.57.2
+
+ .PHONY: kustomize
+ kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary.
+ $(KUSTOMIZE): $(LOCALBIN)
+ $(call go-install-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v5,$(KUSTOMIZE_VERSION))
+
+ .PHONY: controller-gen
+ controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary.
+ $(CONTROLLER_GEN): $(LOCALBIN)
+ $(call go-install-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen,$(CONTROLLER_TOOLS_VERSION))
+
+ .PHONY: envtest
+ envtest: $(ENVTEST) ## Download setup-envtest locally if necessary.
+ $(ENVTEST): $(LOCALBIN)
+ $(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest,$(ENVTEST_VERSION))
+
+ .PHONY: golangci-lint
+ golangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary.
+ $(GOLANGCI_LINT): $(LOCALBIN)
+ $(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint,${GOLANGCI_LINT_VERSION})
+
+ # go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
+ # $1 - target path with name of binary (ideally with version)
+ # $2 - package url which can be installed
+ # $3 - specific version of package
+ define go-install-tool
+ @[ -f $(1) ] || { \
+ set -e; \
+ package=$(2)@$(3) ;\
+ echo "Downloading $${package}" ;\
+ GOBIN=$(LOCALBIN) go install $${package} ;\
+ mv "$$(echo "$(1)" | sed "s/-$(3)$$//")" $(1) ;\
+ }
+ endef
升级 Operator SDK 1.31.0 的项目 (OpenShift Dedicated 4.16)