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的编写,它提供如下功能:
工作流程
SDK提供以下工作流程来开发新的Operator:
使用SDK命令行界面(CLI)创建新的Operator项目
在指定的处理程序中定义Operator协调逻辑(对比期望状态与实际状态),并使用SDK API与资源进行交互
使用SDK CLI构建并生成Operator部署manifests
Operator使用SDK在用户自定义的处理程序中以高级API处理监视资源的事件,并采取措施来reconcile(对比期望状态与实际状态)应用程序的状态。
预备条件
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 文件。