searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

搭建 K8s Operator 应用 (一)

2023-07-28 07:17:58
20
0

背景

Kubernetes Operator 是 Kubernetes 生态系统中的一个重要概念,它是一种自动化管理和运维应用程序的方式。Operator 是一个自定义控制器,它扩展了 Kubernetes API,使您能够定义和使用自定义资源,并在这些资源的状态发生变化时采取特定的操作。

传统的 Kubernetes 控制器负责管理内置资源,如 Deployments、Services、Pods 等,它们对于 Kubernetes 的核心功能至关重要。但是,许多应用程序需要更高级的管理,以满足特定的业务需求,这就是 Operator 出现的原因。

Operator 通过将应用程序专业知识内嵌到 Kubernetes 控制器中,实现了对应用程序的自动化管理。这使得 Operator 能够在 Kubernetes 上自动执行复杂的应用程序操作,而不仅仅是简单的部署和伸缩。

Operator 的特点包括:

  1. 自定义资源定义(CRD): Operator 使用自定义资源定义来扩展 Kubernetes API。通过定义自己的 CRD,您可以在 Kubernetes 中创建自定义资源,这些资源由 Operator 进行管理。

  2. 自动化管理: Operator 能够根据定义的规则自动处理自定义资源的状态变化,如创建、更新和删除资源。

  3. 声明式配置: 通过使用 CRD,Operator 使应用程序的配置和管理变得声明式。您只需要定义期望状态,Operator 会负责确保实际状态与期望状态一致。

  4. 多种工具支持: 有许多工具和框架可用于开发 Operator。其中,Operator SDK 是一个流行的工具,它提供了一组开发工具、模板和框架,简化了 Operator 的开发过程。

  5. 社区驱动: Kubernetes Operator 生态系统是一个活跃的社区,有许多开源 Operator 可供使用,涵盖了各种不同的应用程序和服务。

Operator 在许多方面都有用武之地,例如数据库管理、应用程序配置管理、监控和自愈、复杂服务部署等。它们能够为 Kubernetes 用户提供更高级、更智能的管理体验,简化了应用程序的部署和运维工作。

要开发自己的 Operator,可以使用 Operator SDK 或手动编写 Kubernetes 控制器代码。然后,通过自定义资源定义来描述您的应用程序,并实现 Operator 的逻辑,以根据应用程序的需求自动化管理和维护。

 

现在我们正式开始一步步搭建k8s operator应用。

 

一.搭建开发环境

1.安装kubernetes

    推荐先安装docker-desktop,然后在配置中选择部署k8s进行一键安装

    https://www.docker.com/products/docker-desktop/

   

 

2.安装operator-sdk

macOS: 直接使用使用homebrew

brew install operator-sdk

 linux: 指定目录然后执行一下命令

 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.30.0
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

3.创建项目

上一步我们把operator-sdk放到了bin目录,现在可以直接执行命令,一下命令均以linux系统为例

mkdir idc-demo-operator

cd idc-demo-operator

operator-sdk init --plugins go/v3 --domain idc.demo.com --owner "Myname"

一上命令我们在idc-demo-operator创建了项目,可以看到项目结构如下

tree

.
├── Dockerfile
├── Makefile
├── PROJECT
├── README.md
├── config
│   ├── default
│   │   ├── kustomization.yaml
│   │   ├── manager_auth_proxy_patch.yaml
│   │   └── manager_config_patch.yaml
│   ├── manager
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── manifests
│   │   └── kustomization.yaml
│   ├── prometheus
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   ├── rbac
│   │   ├── auth_proxy_client_clusterrole.yaml
│   │   ├── auth_proxy_role.yaml
│   │   ├── auth_proxy_role_binding.yaml
│   │   ├── auth_proxy_service.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── role_binding.yaml
│   │   └── service_account.yaml
│   └── scorecard
│       ├── bases
│       │   └── config.yaml
│       ├── kustomization.yaml
│       └── patches
│           ├── basic.config.yaml
│           └── olm.config.yaml
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
└── main.go

10 directories, 29 files

 

4.创建自定义资源 (CRD)

在这个例子中我们利用operator部署套应用,下面我们定义应用都需要的资源-数据库,资源名称叫MyDatabase

operator-sdk create api --group idc.demo --version v1alpha1 --kind MyDatabase

然后我们再创建一个资源叫MyApplication

operator-sdk create api --group idc.demo --version v1alpha1 --kind MyApplication

至此,一个简单的operator框架已搭建完成。

项目结构如下:

.
├── Dockerfile
├── Makefile
├── PROJECT
├── README.md
├── api
│   └── v1alpha1
│       ├── groupversion_info.go
│       ├── myapplication_types.go
│       ├── mydatabase_types.go
│       └── zz_generated.deepcopy.go
├── bin
│   └── controller-gen
├── config
│   ├── crd
│   │   ├── kustomization.yaml
│   │   ├── kustomizeconfig.yaml
│   │   └── patches
│   │       ├── cainjection_in_myapplications.yaml
│   │       ├── cainjection_in_mydatabases.yaml
│   │       ├── webhook_in_myapplications.yaml
│   │       └── webhook_in_mydatabases.yaml
│   ├── default
│   │   ├── kustomization.yaml
│   │   ├── manager_auth_proxy_patch.yaml
│   │   └── manager_config_patch.yaml
│   ├── manager
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── manifests
│   │   └── kustomization.yaml
│   ├── prometheus
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   ├── rbac
│   │   ├── auth_proxy_client_clusterrole.yaml
│   │   ├── auth_proxy_role.yaml
│   │   ├── auth_proxy_role_binding.yaml
│   │   ├── auth_proxy_service.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── myapplication_editor_role.yaml
│   │   ├── myapplication_viewer_role.yaml
│   │   ├── mydatabase_editor_role.yaml
│   │   ├── mydatabase_viewer_role.yaml
│   │   ├── role_binding.yaml
│   │   └── service_account.yaml
│   ├── samples
│   │   ├── idc.demo_v1alpha1_myapplication.yaml
│   │   ├── idc.demo_v1alpha1_mydatabase.yaml
│   │   └── kustomization.yaml
│   └── scorecard
│       ├── bases
│       │   └── config.yaml
│       ├── kustomization.yaml
│       └── patches
│           ├── basic.config.yaml
│           └── olm.config.yaml
├── controllers
│   ├── myapplication_controller.go
│   ├── mydatabase_controller.go
│   └── suite_test.go
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
└── main.go

17 directories, 50 files

 

其中:

api目录下的是我们需要修改的实体类

controller目录下的我们需要实现我们的部署逻辑,以上将在下一期介绍

5.结语

本篇文章介绍了如何搭建operator项目框架,下一期我将介绍如何实现operator的逻辑。

 

0条评论
0 / 1000
生存战略W
2文章数
0粉丝数
生存战略W
2 文章 | 0 粉丝
生存战略W
2文章数
0粉丝数
生存战略W
2 文章 | 0 粉丝
原创

搭建 K8s Operator 应用 (一)

2023-07-28 07:17:58
20
0

背景

Kubernetes Operator 是 Kubernetes 生态系统中的一个重要概念,它是一种自动化管理和运维应用程序的方式。Operator 是一个自定义控制器,它扩展了 Kubernetes API,使您能够定义和使用自定义资源,并在这些资源的状态发生变化时采取特定的操作。

传统的 Kubernetes 控制器负责管理内置资源,如 Deployments、Services、Pods 等,它们对于 Kubernetes 的核心功能至关重要。但是,许多应用程序需要更高级的管理,以满足特定的业务需求,这就是 Operator 出现的原因。

Operator 通过将应用程序专业知识内嵌到 Kubernetes 控制器中,实现了对应用程序的自动化管理。这使得 Operator 能够在 Kubernetes 上自动执行复杂的应用程序操作,而不仅仅是简单的部署和伸缩。

Operator 的特点包括:

  1. 自定义资源定义(CRD): Operator 使用自定义资源定义来扩展 Kubernetes API。通过定义自己的 CRD,您可以在 Kubernetes 中创建自定义资源,这些资源由 Operator 进行管理。

  2. 自动化管理: Operator 能够根据定义的规则自动处理自定义资源的状态变化,如创建、更新和删除资源。

  3. 声明式配置: 通过使用 CRD,Operator 使应用程序的配置和管理变得声明式。您只需要定义期望状态,Operator 会负责确保实际状态与期望状态一致。

  4. 多种工具支持: 有许多工具和框架可用于开发 Operator。其中,Operator SDK 是一个流行的工具,它提供了一组开发工具、模板和框架,简化了 Operator 的开发过程。

  5. 社区驱动: Kubernetes Operator 生态系统是一个活跃的社区,有许多开源 Operator 可供使用,涵盖了各种不同的应用程序和服务。

Operator 在许多方面都有用武之地,例如数据库管理、应用程序配置管理、监控和自愈、复杂服务部署等。它们能够为 Kubernetes 用户提供更高级、更智能的管理体验,简化了应用程序的部署和运维工作。

要开发自己的 Operator,可以使用 Operator SDK 或手动编写 Kubernetes 控制器代码。然后,通过自定义资源定义来描述您的应用程序,并实现 Operator 的逻辑,以根据应用程序的需求自动化管理和维护。

 

现在我们正式开始一步步搭建k8s operator应用。

 

一.搭建开发环境

1.安装kubernetes

    推荐先安装docker-desktop,然后在配置中选择部署k8s进行一键安装

    https://www.docker.com/products/docker-desktop/

   

 

2.安装operator-sdk

macOS: 直接使用使用homebrew

brew install operator-sdk

 linux: 指定目录然后执行一下命令

 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.30.0
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

3.创建项目

上一步我们把operator-sdk放到了bin目录,现在可以直接执行命令,一下命令均以linux系统为例

mkdir idc-demo-operator

cd idc-demo-operator

operator-sdk init --plugins go/v3 --domain idc.demo.com --owner "Myname"

一上命令我们在idc-demo-operator创建了项目,可以看到项目结构如下

tree

.
├── Dockerfile
├── Makefile
├── PROJECT
├── README.md
├── config
│   ├── default
│   │   ├── kustomization.yaml
│   │   ├── manager_auth_proxy_patch.yaml
│   │   └── manager_config_patch.yaml
│   ├── manager
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── manifests
│   │   └── kustomization.yaml
│   ├── prometheus
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   ├── rbac
│   │   ├── auth_proxy_client_clusterrole.yaml
│   │   ├── auth_proxy_role.yaml
│   │   ├── auth_proxy_role_binding.yaml
│   │   ├── auth_proxy_service.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── role_binding.yaml
│   │   └── service_account.yaml
│   └── scorecard
│       ├── bases
│       │   └── config.yaml
│       ├── kustomization.yaml
│       └── patches
│           ├── basic.config.yaml
│           └── olm.config.yaml
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
└── main.go

10 directories, 29 files

 

4.创建自定义资源 (CRD)

在这个例子中我们利用operator部署套应用,下面我们定义应用都需要的资源-数据库,资源名称叫MyDatabase

operator-sdk create api --group idc.demo --version v1alpha1 --kind MyDatabase

然后我们再创建一个资源叫MyApplication

operator-sdk create api --group idc.demo --version v1alpha1 --kind MyApplication

至此,一个简单的operator框架已搭建完成。

项目结构如下:

.
├── Dockerfile
├── Makefile
├── PROJECT
├── README.md
├── api
│   └── v1alpha1
│       ├── groupversion_info.go
│       ├── myapplication_types.go
│       ├── mydatabase_types.go
│       └── zz_generated.deepcopy.go
├── bin
│   └── controller-gen
├── config
│   ├── crd
│   │   ├── kustomization.yaml
│   │   ├── kustomizeconfig.yaml
│   │   └── patches
│   │       ├── cainjection_in_myapplications.yaml
│   │       ├── cainjection_in_mydatabases.yaml
│   │       ├── webhook_in_myapplications.yaml
│   │       └── webhook_in_mydatabases.yaml
│   ├── default
│   │   ├── kustomization.yaml
│   │   ├── manager_auth_proxy_patch.yaml
│   │   └── manager_config_patch.yaml
│   ├── manager
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── manifests
│   │   └── kustomization.yaml
│   ├── prometheus
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   ├── rbac
│   │   ├── auth_proxy_client_clusterrole.yaml
│   │   ├── auth_proxy_role.yaml
│   │   ├── auth_proxy_role_binding.yaml
│   │   ├── auth_proxy_service.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── myapplication_editor_role.yaml
│   │   ├── myapplication_viewer_role.yaml
│   │   ├── mydatabase_editor_role.yaml
│   │   ├── mydatabase_viewer_role.yaml
│   │   ├── role_binding.yaml
│   │   └── service_account.yaml
│   ├── samples
│   │   ├── idc.demo_v1alpha1_myapplication.yaml
│   │   ├── idc.demo_v1alpha1_mydatabase.yaml
│   │   └── kustomization.yaml
│   └── scorecard
│       ├── bases
│       │   └── config.yaml
│       ├── kustomization.yaml
│       └── patches
│           ├── basic.config.yaml
│           └── olm.config.yaml
├── controllers
│   ├── myapplication_controller.go
│   ├── mydatabase_controller.go
│   └── suite_test.go
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
└── main.go

17 directories, 50 files

 

其中:

api目录下的是我们需要修改的实体类

controller目录下的我们需要实现我们的部署逻辑,以上将在下一期介绍

5.结语

本篇文章介绍了如何搭建operator项目框架,下一期我将介绍如何实现operator的逻辑。

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0