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.0 的兼容性,需要执行更新的相关步骤才能解决因为 v1.10.1 的变化可能造成的问题。您必须在之前使用 v1.10.1 创建或维护的任何 Operator 项目中手动执行更新步骤。
5.3.1. 更新 Operator SDK v1.16.0 的项目
以下流程更新了现有 Operator 项目,以与 v1.16.0 兼容。
- Operator SDK v1.16.0 支持 Kubernetes 1.22。
-
Kubernetes 1.22 中删除了很多过时的
v1beta1
API,包括sigs.k8s.io/controller-runtime v0.10.0
和controller-gen v0.7
。 -
如果您需要 scaffold
v1beta1
API 为自定义资源定义(CRD)或 webhook 将项目发布至旧的集群版本,则将项目更新到 Kubernetes 1.22 会造成问题。
如需了解有关 Kubernetes 1.22 中引入的更改的更多信息,请参阅 Validating bundle manifests for APIs removed from Kubernetes 1.22 和 Beta APIs removed from Kubernetes 1.22。
先决条件
- 安装了 operator SDK v1.16.0。
- 使用 Operator SDK v1.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 ...
-
将
PHONY
目标添加到Makefile
文件中所有目标。 对于基于 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
工具包括与早期版本不兼容的命令签名的更改。