Operator SDK 中基于 Ansible 的 Operator 项目迁移指南
前言
随着 Operator SDK 的发展,项目结构在 v1.0.0 版本后发生了重大变化。本文将详细介绍如何将基于 Ansible 的 Operator 项目从 v1.0.0 之前的版本迁移到最新版本。这些变化主要是为了提供更大的灵活性,并与 Kubebuilder 项目更好地集成。
迁移概述
主要变化点
-
目录结构调整:
deploy
目录被config
目录取代- CRD 定义从
deploy/crds/
移动到config/crd/bases
- CR 示例从
deploy/crds/
移动到config/samples
- Operator 部署文件从
deploy/operator.yaml
移动到config/manager/manager.yaml
- RBAC 相关文件从
deploy
移动到config/rbac/
-
Dockerfile 位置变更:
- 从
build/Dockerfile
移动到项目根目录的Dockerfile
- 从
-
Molecule 测试结构调整:
- 测试目录结构更符合 Ansible 标准和新项目布局
新增特性
-
Kustomize 支持:
- 使用 Kustomize 管理 Operator 部署所需的 Kubernetes 资源
-
增强的 Makefile:
- 提供构建、测试和部署的便捷目标
- 允许灵活定制项目需求
-
改进的指标配置:
- 使用 kube-auth-proxy
- 新增
--metrics-bind-address
标志 - 基于 Kustomize 的 Service 和 ServiceMonitor 部署
-
PROJECT 配置文件:
- 存储 GVK 和插件信息
- 帮助 CLI 做出决策
详细迁移步骤
准备工作
- 确保已安装最新版本的 Operator SDK
- 确认用户具有 cluster-admin 权限
- 准备可访问的镜像仓库(如公共镜像仓库或 Quay.io)
- 如果使用私有仓库,配置好认证和证书
创建新项目
-
确定现有项目的域(domain):
- 检查现有 CRD 中的
spec.group
字段 - 例如
cache.example.com
的域是example.com
- 检查现有 CRD 中的
-
初始化新项目:
mkdir memcached-operator
cd memcached-operator
operator-sdk init --plugins=ansible --domain=example.com
- 为每个 API 创建对应资源:
operator-sdk create api \
--group=cache \
--version=v1 \
--kind=Memcached
- 将旧项目的
roles/<kind>
内容复制到新项目
迁移自定义资源示例
将旧项目中 deploy/crds/<group>_<version>_<kind>_cr.yaml
的内容复制到新项目的 config/samples
目录下。
示例 config/samples/cache_v1alpha1_memcached.yaml
:
apiVersion: cache.example.com/v1alpha1
kind: Memcached
metadata:
name: memcached-sample
spec:
size: 3
迁移 watches.yaml 文件
- 更新
watches.yaml
中的 roles/playbooks 配置 - 保留
+kubebuilder:scaffold:watch
标记 - 注意
reconcilePeriod
参数格式变化:- 旧版:整数(秒)
- 新版:字符串(如 "3600s"、"60m"、"1h")
示例 watches.yaml:
---
- version: v1alpha1
group: cache.example.com
kind: Memcached
role: memcached
reconcilePeriod: 3600s
#+kubebuilder:scaffold:watch
迁移 Molecule 测试
- 调整测试目录结构以匹配新版布局
- 确保
provisioner.host_vars.localhost
包含必要的变量:
host_vars:
localhost:
ansible_python_interpreter: '{{ ansible_playbook_python }}'
config_dir: ${MOLECULE_PROJECT_DIRECTORY}/config
samples_dir: ${MOLECULE_PROJECT_DIRECTORY}/config/samples
operator_image: ${OPERATOR_IMAGE:-""}
operator_pull_policy: ${OPERATOR_PULL_POLICY:-"Always"}
kustomize: ${KUSTOMIZE_PATH:-kustomize}
检查 RBAC 权限
- 新项目的 RBAC 权限自动生成在
config/rbac/role.yaml
- 如果旧项目
deploy/role.yaml
有自定义权限,需要手动迁移 - 注意:
- 新项目默认使用 ClusterRole 以监控所有命名空间
- 旧版中用于指标收集的特定规则在新版中可能不再需要
配置 Operator
- 将旧项目
deploy/operator.yaml
中的自定义配置迁移到config/manager/manager.yaml
- 注意以下环境变量变更:
OPERATOR_NAME
已废弃,改用--leader-election-id
POD_NAME
已移除
指标导出配置
- 如需导出指标,需在
config/default/kustomization.yaml
中配置 - 默认指标端口从
:8383
改为:8080
- 如需继续使用 8383 端口,启动 Operator 时指定
--metrics-bind-address=:8383
验证迁移
- 部署 Operator:
make deploy IMG=example.com/memcached-operator:v0.0.1
- 检查日志排查问题:
kubectl logs deployment.apps/memcached-operator-controller-manager -n memcached-operator-system -c manager
总结
本文详细介绍了将基于 Ansible 的 Operator 项目从 v1.0.0 之前版本迁移到最新版本的过程。主要变化包括目录结构调整、新增 Kustomize 支持、RBAC 权限变更等。按照上述步骤操作,可以顺利完成项目迁移,并利用新版 Operator SDK 提供的增强功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考