无需框架和SDK!使用Python来写一个Kubernetes Operator

本文介绍如何不依赖Operator SDK,而是直接使用Python编写Kubernetes Operator。Operator通过CRD与Kubernetes交互,并且可配置,支持通过命令行参数或环境变量进行配置。此外,提供了多个相关项目的GitHub链接作为参考。
摘要由CSDN通过智能技术生成

640?wx_fmt=jpeg

目前,Go在人们创建Kubernetes Operator时选用的编程语言中成为了事实上的垄断者。他们的偏好源于以下客观原因:

  1. Operator SDK[1]这个强大的框架可用于使用Go来开发Operator

  2. 许多基于Go的应用程序,例如Docker和Kubernetes,已成为改变游戏规则的角色。使用Go来编写Operator允许你使用同种语言与这些生态对话。

  3. 基于Go的应用程序的高性能以及开箱即用的简单机制。


但是如果你缺少时间或仅是积极性阻碍了你学习Go呢?在此文中,我们将向你展示如何使用几乎所有DevOps工程师熟悉的、最流行的编程语言之一即Python来创建一个可靠的Operator。

欢迎Copyrator!

640?wx_fmt=png

为了简单实用,我们将创建一个简单的Operator,用于当新的命名空间出现或当ConfigMap或Secret两者之一更改其状态时复制ConfigMap。从实用角度来看,我们新的Operator可用于批量更新应用程序配置(通过更新ConfigMap)或者重设secrets。例如用于Docker Registry的密钥(当Secret添加到命名空间时)。

那么一个优秀的Kubernetes Operator需具备什么功能呢?让我们罗列一下:

  1. 与Operator的交互是通过Custom Resource Definitions[2](以下简称CRD)

  2. 该Operator是可配置的,我们能使用命令行参数或者是环境变量来配置它。

  3. Docker镜像和Helm图表在创建时考虑了易用性,所以用户可以毫不费力地安装它(基本上只需一个命令)到他们的Kubernetes集群。


CRD

640?wx_fmt=png

为了让Operator知道哪些资源以及从哪里查找,我们需要配置一些规则。每个规则将被表示为指定的CRD对象。那这个CRD对象中需要有哪些字段呢?

  1. 我们所感兴趣的资源的类型(ConfigMap或者是Secret)

  2. 存储资源的命名空间列表

  3. Selector用于帮助我们在特定的命名空间中查找资源。


让我们来定义我们的CRD:

apiVersion: apiextensions.k8s.io/v1beta1	
kind: CustomResourceDefinition	
metadata:	
  name: copyrator.flant.com	
spec:	
  group: flant.com	
  versions:	
  - name: v1	
    served: true	
    storage: true	
  scope: Namespaced	
  names:	
    plural: copyrators	
    singular: copyrator	
    kind: CopyratorRule	
    shortNames:	
    - copyr	
  validation:	
    openAPIV3Schema:	
      type: object	
      properties:	
        ruleType:	
          type: string	
        namespaces:	
          type: array	
          items:	
            type: string	
        selector:	
          type: string

并立即添加一个简单的规则来选择匹配在default命名空间中带有 copyrator:"true"标签的ConfigMap。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值