go, k8s

Operator SDK介绍

介绍

Operator SDK 是 Operator Framework 的一个组件,Operator Framework 是一个开源工具包,用于以有效、自动化和可扩展的方式管理 Kubernetes 原生应用程序即 Operator。文档地址:

功能

Operator SDK 的主要功能包括:

  • 脚手架: Operator SDK 提供了一个命令行工具,可以快速生成 Operator 的基础代码结构,包括 API 定义、控制器逻辑、测试框架等。这大大减少了手动编写样板代码的工作量。
  • Reconciliation: Operator SDK 提供了一个基于 controller-runtime 库的 Reconciler 模型,可以帮助开发者编写控制器逻辑,实现对自定义资源的持续调协。
  • OLM: Operator SDK 集成了 Operator Lifecycle Manager (OLM),帮助你安装、更新和管理跨集群的运行中的所有 Operator(以及他们的相关服务)
  • 测试: Operator SDK 提供了一个内置的测试框架,可以帮助开发者编写单元测试和端到端测试,确保 Operator 的正确性。

工作流程

Operator SDK 提供了三种开发 Operator 的工作流。

go

  • 使用SDK命令行界面(CLI)创建新的 Operator 项目
  • 通过添加自定义资源定义(CRD)定义新资源 API
  • 定义控制器以监视和协调资源
  • 使用 SDK 和控制器运行时 API 编写控制器的协调逻辑
  • 使用 SDK CLI 构建和生成部署清单

ansible

  • 使用 SDK 命令行界面 (CLI) 创建新的 Operator 项目
  • 使用 ansible playbook 和角色编写对象的协调逻辑
  • 使用 SDK CLI 构建和生成部署清单
  • 使用 SDK CLI 添加其他 CRD,然后重复步骤 2 和 3(可选)

helm

  • 使用 SDK 命令行界面 (CLI) 创建新的 Operator 项目
  • 创建一个新的(或添加现有的)Helm chart,供 Operator 的协调逻辑使用
  • 使用 SDK CLI 构建和生成部署清单
  • 使用 SDK CLI 添加其他 CRD,然后重复步骤 2 和 3(可选)

和kubebuilder的区别

两者都是为了用户方便创建和管理 Operator 而生的脚手架项目。对于用基于Golang开发的 Operator 项目而言,Operator SDK 在底层使用了 kubebuilder,例如 Operator SDK 的命令行工具底层实际是调用 kubebuilder 的命令行工具。所以无论由 Operator SDK 还是 kubebuilder 创建的 Operator 项目都是调用的 controller-runtime 接口。

Operator SDK 的功能更丰富,因此学习起来可能会更加复杂。kubebuilder 则相对更简单,更容易上手。

除此以外,Operator SDK 还增加了一些特性。默认情况下,使用 Operator SDK init生成的项目集成如下功能:

  • Operator Lifecycle Manager,安装和管理 Operator 的系统
  • OperatorHub,发布 Operator 的社区中心
  • Operator sdk scorecard,它根据配置文件和测试映像对 Operator 进行测试。

另外,Operator SDK 除了支持 GO 以外,还支持 Ansible 和 Helm。

安装

可以采用下载安装包或者clone的方法。

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.34.2
# https://github.com/operator-framework/operator-sdk/releases/download/v1.34.2/helm-operator_linux_amd64
# https://github.com/operator-framework/operator-sdk/releases/download/v1.34.2/operator-sdk_linux_amd64
curl -LO ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH}
chmod +x operator-sdk_${OS}_${ARCH} && sudo mv operator-sdk_${OS}_${ARCH} /usr/local/bin/operator-sdk
# mv operator-sdk_linux_amd64 /usr/local/bin/operator-sdk

git clone https://github.com/operator-framework/operator-sdk
cd operator-sdk
git checkout master
make install
operator-sdk -h

The first step is to initialize your project:
    operator-sdk init [--plugins=<PLUGIN KEYS> [--project-version=<PROJECT VERSION>]]

<PLUGIN KEYS> is a comma-separated list of plugin keys from the following table
and <PROJECT VERSION> a supported project version for these plugins.

                                   Plugin keys | Supported project versions
-----------------------------------------------+----------------------------
           ansible.sdk.operatorframework.io/v1 |                          3
              declarative.go.kubebuilder.io/v1 |                       2, 3
       deploy-image.go.kubebuilder.io/v1-alpha |                          3
                          go.kubebuilder.io/v2 |                       2, 3
                          go.kubebuilder.io/v3 |                          3
                          go.kubebuilder.io/v4 |                          3
               grafana.kubebuilder.io/v1-alpha |                          3
              helm.sdk.operatorframework.io/v1 |                          3
 hybrid.helm.sdk.operatorframework.io/v1-alpha |                          3
            quarkus.javaoperatorsdk.io/v1-beta |                          3

For more specific help for the init command of a certain plugins and project version
configuration please run:
    operator-sdk init --help --plugins=<PLUGIN KEYS> [--project-version=<PROJECT VERSION>]

Default plugin keys: "go.kubebuilder.io/v4"
Default project version: "3"

Available Commands:
  alpha            Alpha-stage subcommands
  bundle           Manage operator bundle metadata
  cleanup          Clean up an Operator deployed with the 'run' subcommand
  completion       Load completions for the specified shell
  create           Scaffold a Kubernetes API or webhook
  edit             Update the project configuration
  generate         Invokes a specific generator
  help             Help about any command
  init             Initialize a new project
  olm              Manage the Operator Lifecycle Manager installation in your cluster
  pkgman-to-bundle Migrates packagemanifests to bundles
  run              Run an Operator in a variety of environments
  scorecard        Runs scorecard
  version          Print the operator-sdk version

-h, --help                     help for operator-sdk
      --plugins strings          plugin keys to be used for this subcommand execution
      --project-version string   project version (default "3")
      --verbose                  Enable verbose logging

命令补全

operator-sdk completion bash > /etc/bash_completion.d/operator-sdk
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x