This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.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 升级项目 复制链接链接已复制到粘贴板!
要升级现有 Operator 项目,请执行以下升级步骤,以便与 v1.8.0 兼容。
先决条件
- 安装了 operator SDK v1.8.0
- 之前使用 Operator SDK v1.3.0 创建或维护的 Operator 项目
流程
对
PROJECT
文件进行以下更改:更新
PROJECT
文件plugins
对象,以使用manifests
和scorecard
对象。用于创建 Operator Lifecycle Manager(OLM)和 scorecard 清单的
manifests
和scorecard
插件,现在具有用于运行create
子命令以创建相关文件的插件对象。对于基于 Go 的 Operator 项目,已存在一个基于 Go 的插件配置对象。虽然旧配置仍被支持,但将来这些新对象会很有用,因为配置选项会添加到其相应的插件中:
旧配置
version: 3-alpha ... plugins: go.sdk.operatorframework.io/v2-alpha: {}
version: 3-alpha ... plugins: go.sdk.operatorframework.io/v2-alpha: {}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新配置
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 对于基于 Ansible 和 Helm 的 Operator 项目,之前的插件配置对象不存在。虽然您不需要添加插件配置对象,但将来这些新对象会很有用,因为配置选项会添加到其相应的插件中:
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}
version: 3-alpha ... plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PROJECT
配置版本3-alpha
必须升级到3
。PROJECT
文件中的version
键代表PROJECT
配置版本:旧
PROJECT
文件version: 3-alpha resources: - crdVersion: v1 ...
version: 3-alpha resources: - crdVersion: v1 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 版本
3-alpha
已成为稳定的 版本 3,包含一组足以完全描述项目的配置字段。在技术上,这种更改不会破坏系统,因为此版本的 spec 是 alpha,但在operator-sdk
命令中默认使用它,因此应该将其标记为破坏并有方便的升级路径。运行
alpha config-3alpha-to-3
命令,将大多数PROJECT
文件从版本3-alpha
转换为3
:operator-sdk alpha config-3alpha-to-3
$ operator-sdk alpha config-3alpha-to-3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Your PROJECT config file has been converted from version 3-alpha to 3. Please make sure all config data is correct.
Your PROJECT config file has been converted from version 3-alpha to 3. Please make sure all config data is correct.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令也会以无法自动转换的指示输出注释。
验证更改:
新
PROJECT
文件version: "3" resources: - api: crdVersion: v1 ...
version: "3" resources: - api: crdVersion: v1 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对
config/manager/manager.yaml
文件进行以下更改:对于基于 Ansible 和 Helm 的 Operator 项目,添加存活度和就绪度探测。
使用 Operator SDK 构建的新项目默认配置有探测。端点
/healthz
和/readyz
现在包括在提供的镜像库中。您可以通过更新Dockerfile
来使用最新的基础镜像来更新现有项目以使用探测,然后将以下内容添加到config/manager/manager.yaml
文件中的manager
容器中:例 5.1. 配置基于 Ansible 的 Operator 项目
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.2. 配置基于 Helm 的 Operator 项目
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于基于 Ansible 和 Helm 的 Operator 项目,在管理器的部署中添加安全上下文。
在
config/manager/manager.yaml
文件中添加以下安全上下文:例 5.3.
config/manager/manager.yaml
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对
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.3.0/ansible-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 改为:
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator_$(OS)_$(ARCH)
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/ansible-operator_$(OS)_$(ARCH)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于基于 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.3.0/helm-operator-v1.3.0-$(ARCHOPER)-$(OSOPER)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 改为:
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator_$(OS)_$(ARCH)
https://github.com/operator-framework/operator-sdk/releases/download/v1.8.0/helm-operator_$(OS)_$(ARCH)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 Ansible 和基于 Helm 的 Operator 项目,更新
Makefile
中的helm-operator
、ansible-operator
和kustomize
规则。这些规则下载本地二进制文件,但如果有全局二进制文件,则不会使用它:例 5.4. 基于 Ansible 的 Operator 项目的
Makefile
diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.5. 基于 Helm 的 Operator 项目的
Makefile
diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将位置目录参数
.
移到docker-build
的make
目标中。docker-build
目标中的目录参数.
移到最后一个位置参数,以与podman
CLI 的预期一致,这样可以进行替换清理:旧目标
docker-build: docker build . -t ${IMG}
docker-build: docker build . -t ${IMG}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新目标
docker-build: docker build -t ${IMG} .
docker-build: docker build -t ${IMG} .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以运行以下命令进行此更改:
sed -i 's/docker build . -t ${IMG}/docker build -t ${IMG} ./' $(git grep -l 'docker.*build \. ')
$ sed -i 's/docker build . -t ${IMG}/docker build -t ${IMG} ./' $(git grep -l 'docker.*build \. ')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Ansible 和基于 Helm 的 Operator 项目,在
Makefile
中添加一个help
目标。Ansible 和 Helm 的项目现在默认在
Makefile
中提供help
目标,类似于--help
标志。您可以使用以下行手动将此目标添加到Makefile
中:例 5.6.
help
目标Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
opm
和catalog-build
目标。您可以使用这些目标为 Operator 创建自己的目录,或将 Operator 捆绑包添加到现有目录中:通过添加以下几行将目标添加到
Makefile
中:例 5.7.
OPM
和catalog-build
目标Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要更新基于 Go 的 Operator 项目,还要添加以下
Makefile
变量:例 5.8.
Makefile
变量OS = $(shell go env GOOS) ARCH = $(shell go env GOARCH)
OS = $(shell go env GOOS) ARCH = $(shell go env GOARCH)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于基于 Go 的 Operator 项目,将
Makefile
中的SHELL
变量设置为系统bash
二进制文件。导入
setup-envtest.sh
脚本需要bash
,因此SHELL
变量必须设置为带有错误选项的bash
:例 5.9.
Makefile
diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow
对于基于 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
... 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
system:controller-manager
服务帐户添加到您的项目。现在,operator-sdk init
命令生成了非默认服务帐户controller-manager
,以改进在共享命名空间中安装的 Operator 的安全性。要将此服务帐户添加到现有项目中,请按照以下步骤执行:在文件中创建
ServiceAccount
定义:例 5.11.
config/rbac/service_account.yaml
fileapiVersion: v1 kind: ServiceAccount metadata: name: controller-manager namespace: system
apiVersion: v1 kind: ServiceAccount metadata: name: controller-manager namespace: system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将服务帐户添加到 RBAC 资源列表中:
echo "- service_account.yaml" >> config/rbac/kustomization.yaml
$ echo "- service_account.yaml" >> config/rbac/kustomization.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新引用 Operator 服务帐户的所有
RoleBinding
和ClusterRoleBinding
对象:find config/rbac -name *_binding.yaml -exec sed -i -E 's/ name: default/ name: controller-manager/g' {} \;
$ find config/rbac -name *_binding.yaml -exec sed -i -E 's/ name: default/ name: controller-manager/g' {} \;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将服务帐户名称添加到管理器部署的
spec.template.spec.serviceAccountName
字段:sed -i -E 's/([ ]+)(terminationGracePeriodSeconds:)/\1serviceAccountName: controller-manager\n\1\2/g' config/manager/manager.yaml
$ sed -i -E 's/([ ]+)(terminationGracePeriodSeconds:)/\1serviceAccountName: controller-manager\n\1\2/g' config/manager/manager.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证更改是否类似以下 diffs:
例 5.12.
config/manager/manager.yaml
文件 diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.13.
config/rbac/auth_proxy_role_binding.yaml
文件 diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.14.
config/rbac/kustomization.yaml
文件 diffresources: +- service_account.yaml - role.yaml - role_binding.yaml - leader_election_role.yaml
resources: +- service_account.yaml - role.yaml - role_binding.yaml - leader_election_role.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.15.
config/rbac/leader_election_role_binding.yaml
文件 diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.16.
config/rbac/role_binding.yaml
文件 diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.17.
config/rbac/service_account.yaml
文件 diff+apiVersion: v1 +kind: ServiceAccount +metadata: + name: controller-manager + namespace: system
+apiVersion: v1 +kind: ServiceAccount +metadata: + name: controller-manager + namespace: system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对
config/manifests/kustomization.yaml
文件进行以下更改:添加 Kustomize 补丁,从集群服务版本(CSV)中删除 cert-manager
volume
和volumeMount
对象。因为 Operator Lifecycle Manager(OLM)尚不支持 cert-manager,因此添加了 JSON 补丁来删除这个卷并挂载,以便 OLM 可以为 Operator 创建和管理证书。
在
config/manifests/kustomization.yaml
文件中添加以下行:例 5.18.
config/manifests/kustomization.yaml
fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 对于基于 Ansible 和 Helm 的 Operator 项目,使用组件配置配置
ansible-operator
和helm-operator
。要添加这个选项,请按照以下步骤执行:创建以下文件:
例 5.19.
config/default/manager_config_patch.yaml
fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下文件:
例 5.20.
config/manager/controller_manager_config.yaml
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将以下更改应用到
resources
来更新config/default/kustomization.yaml
文件:例 5.21.
config/default/kustomization.yaml
文件resources: ... - manager_config_patch.yaml
resources: ... - manager_config_patch.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过应用以下更改来更新
config/manager/kustomization.yaml
文件:例 5.22.
config/manager/kustomization.yaml
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow
可选:在
config/default/kustomization.yaml
文件中添加管理器配置补丁。当最初添加配置文件支持时,生成的
--config
标志不会添加到ansible-operator
或helm-operator
二进制文件,因此它目前无法正常工作。--config
标志支持按文件配置两个二进制文件 ; 这种配置方法仅适用于底层控制器管理器,而不适用于整个 Operator。要使用配置文件配置 Operator 部署,对
config/default/kustomization.yaml
文件进行更改,如下 diff 所示:例 5.23.
config/default/kustomization.yaml
文件 diffIf you want your controller-manager to expose the /metrics # endpoint w/o any authn/z, please comment the following line.
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 标志可按原样使用,或者用于覆盖配置文件值。
对于基于 Ansible 和 Helm 的 Operator 项目,通过对
config/rbac/leader_election_role.yaml
文件进行以下更改,为领导选举添加角色规则:例 5.24.
config/rbac/leader_election_role.yaml
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于基于 Ansible 的 Operator 项目,请更新 Ansible 集合。
在
requirements.yml
文件中,将community.kubernetes
的version
字段更改为1.2.1
,将operator_sdk.util
的version
字段更改为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
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于基于 Helm 的 Operator 项目:
将
--health-probe-bind-address=:8081
参数添加到config/default/manager_auth_proxy_patch.yaml
文件:例 5.26.
config/default/manager_auth_proxy_patch.yaml
文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将已弃用的标志
--enable-leader-election
替换为--leader-elect
,将已弃用的标志--metrics-addr
替换为--metrics-bind-address
。
对
config/prometheus/monitor.yaml
文件进行以下更改:将方案、令牌和 TLS 配置添加到 Prometheus
ServiceMonitor
指标端点。当在 manager pod 上指定
https
端口时,/metrics
端点实际上没有被配置为通过 HTTPS 提供,因为没有设置tlsConfig
。因为kube-rbac-proxy
将这个端点作为管理器 sidecar 保护,因此使用挂载到 pod 的服务帐户令牌默认修正了这个问题。将更改应用到
config/prometheus/monitor.yaml
文件,如下所示:例 5.27.
config/prometheus/monitor.yaml
文件 diffCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您从项目中删除了
kube-rbac-proxy
,请确保使用正确的 TLS 配置保护/metrics
端点。
确保现有的依赖资源具有所有者注解。
对于基于 Ansible 的 Operator 项目,集群范围的依赖资源和依赖资源上的所有者引用注解 没有被正确应用。一个临时解决方案是手动添加这些注解。在这个问题被修复后将不再需要。
弃用软件包清单的支持。
Operator Framework 在以后的版本中删除了对 Operator 软件包清单格式的支持。作为持续弃用过程的一部分,
operator-sdk generate packagemanifests
和operator-sdk run packagemanifests
命令现已弃用。要将软件包清单迁移到捆绑包中,可以使用operator-sdk pkgman-to-bundle
命令。运行
operator-sdk pkgman-to-bundle --help
命令,并参阅"Migrating package manifest projects to bundle format"以了解更多详细信息。更新 Operator 的终结器名称。
Kubernetes 文档 给出的终结器名称格式为:
<qualified_group>/<finalizer_name>
<qualified_group>/<finalizer_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 虽然之前记录的 Operator SDK 格式为:
<finalizer_name>.<qualified_group>
<finalizer_name>.<qualified_group>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的 Operator 使用任何名称与不正确的格式匹配的终结器,请将其更改为与官方格式匹配。例如,
finalizer.cache.example.com
必须改为cache.example.com/finalizer
。
您的 Operator 项目现在与 Operator SDK v1.8.0 兼容。