Operator SDK

什么是 Operator SDK

Operator SDK 是由 Red Hat(原 CoreOS)开源的用于构建 Kubernetes Operator 的 SDK 工具集。它提供了高级 API、抽象和项目脚手架,帮助开发者更容易地创建、构建和发布 Kubernetes Operator。

在阅读本文前,建议你先了解 Operator 的基本概念

为什么需要 Operator SDK

使用 Kubernetes 原生对象来部署和管理复杂的有状态应用程序往往面临以下挑战:

  • 复杂的生命周期管理:应用的安装、升级、备份、恢复等操作复杂
  • 运维知识门槛高:需要深度了解应用的运维细节
  • 自动化程度低:通常依赖手动脚本和人工干预

Operator SDK 通过以下方式解决这些问题:

  • 将运维专家的知识编码到软件中
  • 提供声明式 API 来管理复杂应用
  • 支持使用 kubectl 操作自定义资源,保持一致的用户体验

安装 Operator SDK

前置条件

  • Go 1.19+
  • Docker 17.03+
  • kubectl v1.20.0+
  • 访问 Kubernetes 集群

安装方式

方式一:使用二进制文件(推荐)

# 设置版本和架构
export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac)
export OS=$(uname | awk '{print tolower($0)}')
export OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.32.0

# 下载二进制文件
curl -LO ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH}

# 验证下载的二进制文件
curl -LO ${OPERATOR_SDK_DL_URL}/checksums.txt
sha256sum -c checksums.txt --ignore-missing

# 安装
chmod +x operator-sdk_${OS}_${ARCH}
sudo mv operator-sdk_${OS}_${ARCH} /usr/local/bin/operator-sdk

方式二:使用 Homebrew (macOS)

brew install operator-sdk

验证安装

operator-sdk version

创建第一个 Operator 项目

初始化项目

# 创建项目目录
mkdir -p ~/projects/memcached-operator
cd ~/projects/memcached-operator

# 初始化项目
operator-sdk init --domain example.com --repo github.com/example/memcached-operator

创建 API

operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource --controller

这个命令会创建:

  • 自定义资源定义 (CRD)
  • 控制器逻辑
  • 相关的测试文件

项目结构说明

├── api/
│   └── v1alpha1/          # API 定义
├── config/
│   ├── crd/              # CRD 配置
│   ├── default/          # 默认配置
│   ├── manager/          # Manager 配置
│   ├── rbac/             # RBAC 配置
│   └── samples/          # 示例资源
├── controllers/          # 控制器逻辑
├── Dockerfile           # 容器镜像构建文件
├── Makefile            # 构建和部署命令
├── PROJECT             # 项目元数据
└── main.go             # 主入口文件

开发 Operator

定义 API

编辑 api/v1alpha1/memcached_types.go 文件来定义你的自定义资源:

type MemcachedSpec struct {
    Size int32 `json:"size"`
}

type MemcachedStatus struct {
    Nodes []string `json:"nodes"`
}

实现控制器逻辑

编辑 controllers/memcached_controller.go 文件来实现控制器逻辑。

构建和测试

# 生成代码
make generate

# 生成 CRD
make manifests

# 运行测试
make test

# 构建镜像
make docker-build IMG=controller:latest

部署 Operator

安装 CRD

make install

本地运行

make run

部署到集群

# 构建并推送镜像
make docker-build docker-push IMG=<registry>/memcached-operator:tag

# 部署
make deploy IMG=<registry>/memcached-operator:tag

最佳实践

  1. 版本管理:为 API 版本制定清晰的版本策略
  2. 错误处理:实现完善的错误处理和重试机制
  3. 状态管理:合理设计资源状态和状态转换
  4. 监控告警:添加适当的 metrics 和日志
  5. 文档:为用户提供完整的使用文档

参考资源

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区