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.0controller-gen v0.7
  • 如果您需要 scaffold v1beta1 API 为自定义资源定义(CRD)或 webhook 将项目发布至旧的集群版本,则将项目更新到 Kubernetes 1.22 会造成问题。

如需了解有关 Kubernetes 1.22 中引入的更改的更多信息,请参阅 Validating bundle manifests for APIs removed from Kubernetes 1.22Beta APIs removed from Kubernetes 1.22

先决条件

  • 安装了 operator SDK v1.16.0。
  • 使用 Operator SDK v1.10.1 创建或维护的 Operator 项目。

流程

  1. config/default/manager_auth_proxy_patch.yamlconfig/rbac/auth_proxy_service.yaml 文件中添加 protocol 字段:

    ...
     ports:
     - containerPort: 8443
    +  protocol: TCP
       name: https
  2. config/manager/manager.yaml 文件进行以下更改:

    1. 增加 CPU 和内存限值:

      resources:
        limits:
      -     cpu: 100m
      -     memory: 30Mi
      +     cpu: 200m
      +     memory: 100Mi
    2. 添加注解来指定默认容器管理器:

      ...
      template:
        metadata:
          annotations:
            kubectl.kubernetes.io/default-container: manager
      ...
  3. PHONY 目标添加到 Makefile 文件中所有目标。
  4. 对于基于 Go 的 Operator 项目,请进行以下更改:

    1. 安装 setup-envtest 二进制文件。
    2. 更改您的 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
    3. 运行 go mod tidy 命令以下载依赖项:

      $ go mod tidy
    4. 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 -
    5. 运行 make manifest 命令以使用更新版本的 Kubernetes 生成清单:

      $ make manifest
  5. 对于基于 Ansible 的 Operator 项目,请进行以下更改:

    1. 将您的 requirements.yml 文件更改为包含以下内容:

      1. community.kubernetes 集合替换为 kubernetes.core 集合:

        ...
        - name: kubernetes.core
          version: "2.2.0"
        ...
      2. operator_sdk.util 程序从 0.2.0 更新至 0.3.1

        ...
        - name: operator_sdk.util
          version: "0.3.1"
    2. 验证 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 作者应根据项目的要求设置和优化资源限值。

    3. 可选: 如果要使用 make run 命令在本地运行基于 Ansible 的 Operator,进行以下更改:

      1. 更改 Makefile 文件中的运行目标:

        ANSIBLE_ROLES_PATH="$(ANSIBLE_ROLES_PATH):$(shell pwd)/roles" $(ANSIBLE_OPERATOR) run
      2. ansible-runner 的本地版本更新为 2.0.2 或更高版本。

        重要

        自版本 2.0 起,ansible-runner 工具包括与早期版本不兼容的命令签名的更改。

5.3.2. 其他资源