Operator-SDK简介

本篇介绍了CoreOS(已被红帽收购)的开源项目Operator-SDK的基本使用。该项目是Operator Framework的一个组件,它是一个开源工具包,以有效,自动化和可扩展的方式管理称为Operators的Kubernetes原生应用程序。

项目状态:pre-alpha

该项目Operator-SDK当前是pre-alpha状态,预计将在即将发布的版本中会对API进行重大更改。有关即将到来的里程碑的计划工作,请参阅设计文档

概述

该项目是Operator Framework的一个组件,这是一个开源工具包,以有效,自动化和可扩展的方式管理Kubernetes原生应用程序,称为Operators。更多介绍内容,请阅读博客

Operators 可以在Kubernetes之上轻松地管理复杂有状态的应用程序。然而,由于诸如使用低级API,编写样板以及缺乏模块导致重复性工作等挑战,导致目前编写Operator可能很困难。

Operator SDK是一个框架,旨在简化Operator的编写,它提供如下功能:

  • 高级API和抽象,更直观地编写操作逻辑

  • 用于脚手架和代码生成的工具,可以快速引导新项目

  • 扩展以涵盖常见的操作员用例

工作流程

SDK提供以下工作流程来开发新的Operator:

  1. 使用SDK命令行界面(CLI)创建新的Operator项目

  2. 通过添加自定义资源定义(CRD)定义新资源API

  3. 使用SDK API监控指定的资源

  4. 在指定的处理程序中定义Operator协调逻辑(对比期望状态与实际状态),并使用SDK API与资源进行交互

  5. 使用SDK CLI构建并生成Operator部署manifests

Operator使用SDK在用户自定义的处理程序中以高级API处理监视资源的事件,并采取措施来reconcile(对比期望状态与实际状态)应用程序的状态。

预备条件

  • dep version v0.5.0+.

  • go version v1.10+.

  • docker version 17.03+.

  • kubectl version v1.10.0+.

  • Access to a kubernetes v.1.10.0+ cluster.

快速开始

首先,checkout并安装operator-sdk CLI:

$ mkdir -p $GOPATH/src/github.com/operator-framework
$ cd $GOPATH/src/github.com/operator-framework
$ git clone https://github.com/operator-framework/operator-sdk
$ cd operator-sdk
$ git checkout master
$ make dep
$ make install

使用SDK CLI创建和部署app-operator:

# 创建一个定义App 用户资源的app-operator项目。
$ mkdir -p $GOPATH/src/github.com/example-inc/
# 创建app-operator项目
$ cd $GOPATH/src/github.com/example-inc/
$ operator-sdk new app-operator
$ cd app-operator

# 为AppService用户资源添加一个新的API
$ operator-sdk add api --api-version=app.example.com/v1alpha1 --kind=AppService

# 添加一个新的控制器来监控AppService
$ operator-sdk add controller --api-version=app.example.com/v1alpha1 --kind=AppService

# 构建并推送app-operator镜像到一个公开的registry,例如:quay.io
$ operator-sdk build quay.io/example/app-operator
$ docker push quay.io/example/app-operator

# 更新operator manifest来使用新构建的镜像
$ sed -i 's|REPLACE_IMAGE|quay.io/example/app-operator|g' deploy/operator.yaml

# 建立Service Account
$ kubectl create -f deploy/service_account.yaml
# 建立RBAC
$ kubectl create -f deploy/role.yaml
$ kubectl create -f deploy/role_binding.yaml
# 建立CRD
$ kubectl create -f deploy/crds/app_v1alpha1_appservice_crd.yaml
# 部署app-operator
$ kubectl create -f deploy/operator.yaml

# 创建一个AppService用户资源
# 默认控制器将监视AppService对象并为每一个CR创建一个pod
$ kubectl create -f deploy/crds/app_v1alpha1_appservice_cr.yaml

# 验证pod是否创建
$ kubectl get pod -l app=example-appservice
NAME                     READY     STATUS    RESTARTS   AGE
example-appservice-pod   1/1       Running   0          1m

# 清空
$ kubectl delete -f deploy/app_v1alpha1_appservice_cr.yaml
$ kubectl delete -f deploy/operator.yaml
$ kubectl delete -f deploy/role.yaml
$ kubectl delete -f deploy/role_binding.yaml
$ kubectl delete -f deploy/service_account.yaml
$ kubectl delete -f deploy/crds/app_v1alpha1_appservice_crd.yaml

用户指南

要了解有关operator-sdk的更多信息,请参阅用户指南

例子

要探索使用operator-sdk构建的任何Operator样本,请参阅operator-sdk-samples

许可证

Operator SDK受Apache 2.0许可。有关详细信息,请参阅LICENSE文件。

最后更新于