文档章节

Kubernetes操作器Operator开发SDK简介

openthings
 openthings
发布于 03/03 10:19
字数 1054
阅读 71
收藏 0

概览

该项目是 Operator Framework的组成部分, 是一个开源的工具用于管理 Kubernetes 原生的应用, 称为 Operators, 以一种更为有效、自动化、可伸缩的方式。更多信息参考 introduction blog post

Operators 使在Kubernetes中管理复杂的有状态的应用更为简单。但是,目前编写 operator 还是比较困难,因为需要与底层的APIs打交道,编写模版和模块化资源缺乏也导致重复的工作。

该 Operator SDK 是一个框架,使用 controller-runtime 库来使得编写 operators 更为容易,提供了:

  • 高阶APIs 和抽象,使编写运维逻辑更为直观。
  • Tools和启动模块,使创建新的工程时更快。
  • 覆盖常用的operator的扩展。

工作流

该 SDK 提供了一个工作流程,用于使用 Go、 Ansible 或 Helm来开发operators。

下面的工作流用于创建新的 Go operator:

  1. 创建新的 operator project,使用 SDK Command Line Interface(CLI)。
  2. 定义新的resource APIs,通过添加Custom Resource Definitions(CRD)。
  3. 定义 Controllers 观察和协调资源。
  4. 编写协调逻辑,使用 SDK 和 controller-runtime APIs。
  5. 使用 SDK CLI 构建和生成 operator deployment manifests。

下面的工作流用于创建新的Ansible operator:

  1. 创建新的 operator project,使用SDK Command Line Interface(CLI)。
  2. 编写协调逻辑,为自己的对象,使用ansible playbooks 和 roles。
  3. 使用 SDK CLI 构建和生成 operator deployment manifests。
  4. 可选添加额外的 CRD's,使用 SDK CLI,重复步骤2、3。

下面的工作流用于创建新的Helm operator:

  1. 创建新的 operator project,使用 SDK Command Line Interface(CLI)。
  2. 创建新的  (或添加已有的) Helm chart,用于 operator's 协调逻辑使用。
  3. 使用SDK CLI 构建和生成operator deployment manifests。
  4. 可选添加额外的CRD's,使用SDK CLI,重复步骤 2 和 3。

预先要求

  • dep version v0.5.0+.
  • git
  • go version v1.10+.
  • docker version 17.03+.
  • kubectl version v1.11.0+.
  • Access to a kubernetes v.1.11.0+ cluster.

快速开始

首先, 检出和安装 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

创建和部署一个 app-operator,使用SDK CLI来完成,如下:

# Create an app-operator project that defines the App CR.
$ mkdir -p $GOPATH/src/github.com/example-inc/
# Create a new app-operator project
$ cd $GOPATH/src/github.com/example-inc/
$ operator-sdk new app-operator
$ cd app-operator

# Add a new API for the custom resource AppService
$ operator-sdk add api --api-version=app.example.com/v1alpha1 --kind=AppService

# Add a new controller that watches for AppService
$ operator-sdk add controller --api-version=app.example.com/v1alpha1 --kind=AppService

# Build and push the app-operator image to a public registry such as quay.io
$ operator-sdk build quay.io/example/app-operator
$ docker push quay.io/example/app-operator

# Update the operator manifest to use the built image name (if you are performing these steps on OSX, see note below)
$ sed -i 's|REPLACE_IMAGE|quay.io/example/app-operator|g' deploy/operator.yaml
# On OSX use:
$ sed -i "" 's|REPLACE_IMAGE|quay.io/example/app-operator|g' deploy/operator.yaml

# Setup Service Account
$ kubectl create -f deploy/service_account.yaml
# Setup RBAC
$ kubectl create -f deploy/role.yaml
$ kubectl create -f deploy/role_binding.yaml
# Setup the CRD
$ kubectl create -f deploy/crds/app_v1alpha1_appservice_crd.yaml
# Deploy the app-operator
$ kubectl create -f deploy/operator.yaml

# Create an AppService CR
# The default controller will watch for AppService objects and create a pod for each CR
$ kubectl create -f deploy/crds/app_v1alpha1_appservice_cr.yaml

# Verify that a pod is created
$ kubectl get pod -l app=example-appservice
NAME                     READY     STATUS    RESTARTS   AGE
example-appservice-pod   1/1       Running   0          1m

# Test the new Resource Type
$ kubectl describe appservice example-appservice
Name:         example-appservice
Namespace:    myproject
Labels:       <none>
Annotations:  <none>
API Version:  app.example.com/v1alpha1
Kind:         AppService
Metadata:
  Cluster Name:        
  Creation Timestamp:  2018-12-17T21:18:43Z
  Generation:          1
  Resource Version:    248412
  Self Link:           /apis/app.example.com/v1alpha1/namespaces/myproject/appservices/example-appservice
  UID:                 554f301f-0241-11e9-b551-080027c7d133
Spec:
  Size:  3

# Cleanup
$ kubectl delete -f deploy/crds/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

命令行界面-CLI

了解更多 SDK CLI, 查看 SDK CLI Reference, 或者运行 operator-sdk [command] -h

使用指南

了解更多使用 Go 语言编写 operator的方法,查看 user guide

该 SDK 同时支持使用 Ansible 和 Helm开发 operator。查看 AnsibleHelm 的operator 用户指南。

例子

探索operator-sdk的例子,查看 operator-sdk-samples

贡献

查看 CONTRIBUTING 了解提交布丁和贡献的方法和流程。

查看 proposal docs 提交需求和规划。

报告 bugs

查看 reporting bugs 报告Bugs。

许可

Operator SDK的许可为 Apache 2.0 license. 查看许可文件 LICENSE 了解细节。

© 著作权归作者所有

openthings
粉丝 320
博文 1129
码字总数 675031
作品 1
东城
架构师
私信 提问
Airflow在Kubernetes上的操作器

Airflow在Kubernetes (第一部分): 一种不同类型的Operator 作者: Daniel Imberman (Bloomberg LP) 译者:openthings,2019.02.26. 原文:https://kubernetes.io/blog/2018/06/28/airflow-on-......

openthings
2018/07/07
592
0
Rook:基于Ceph的Kubernetes存储解决方案

Rook是一款运行在Kubernetes集群中的存储服务编排工具,在0.8版本中,Rook已经变成Beta发行版,如果还没有尝试过Rook,可以现在尝鲜。 Rook是什么,为什么很重要?Ceph运行在Kubernetes集群中...

店家小二
2018/12/18
0
0
AirFlow/NiFi/MLFlow/KubeFlow进展

大数据分析中,进行流程化的批处理是必不可少的。传统的大数据处理大部分是基于关系数据库系统,难以实现大规模扩展;主流的基于Hadoop/Spark体系总体性能较强,但使用复杂、扩展能力弱。大数...

openthings
06/21
262
0
PingCAP 开源 TiDB 自动化部署运维工具 TiDB Operator

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,目前,TiDB Operator 已经正式开源。 借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 ...

TiDB
2018/08/23
2.5K
2
开源 TiDB Operator 让 TiDB 成为真正的 Cloud-Native 数据库

TiDB Operator 是 TiDB 在 Kubernetes 平台上的自动化部署运维工具,借助 TiDB Operator,TiDB 可以无缝运行在公有云厂商提供的 Kubernetes 平台上,让 TiDB 成为真正的 Cloud-Native 数据库...

CSDN资讯
2018/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部