龙空技术网

「云原生」Kubernetes 有状态应用程序控制器 Operator

大数据老司机 21234

前言:

当前你们对“operatorc语言”大约比较注意,姐妹们都想要知道一些“operatorc语言”的相关知识。那么小编同时在网摘上网罗了一些关于“operatorc语言””的相关知识,希望兄弟们能喜欢,兄弟们快快来学习一下吧!

一、概述Operator 概念是由 CoreOS 的工程师于2016年提出的,也是由 CoreOS 开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator SDK 是一个框架,它使用控制器运行时库通过提供以下功能使编写运算符更容易。Operator SDKOperator Framework的一个组件,这是一个开源工具包,用于以有效、自动化和可扩展的方式管理 Kubernetes 原生应用程序,称为 OperatorsOperator Framework 框架包含两个主要的部分:Operator SDK——无需了解复杂的 Kubernetes API 特性,即可让你根据你自己的专业知识构建一个 Operator 应用。Operator Lifecycle Management——监督跨 Kubernetes 集群运行的所有 Operator(及其相关服务)的生命周期的安装、更新和管理。Operator SDK 提供了构建、测试和打包 Operator 的工具。最初,SDK 促进了应用程序的业务逻辑(例如,如何扩展、升级或备份)与 Kubernetes API 的结合以执行这些操作。随着时间的推移,SDK 可以让工程师让应用程序更智能,并拥有云服务的用户体验。SDK 中包含了在 Operator 之间共享的领先实践和代码模式,以帮助防止重新发明轮子。Operator SDK 它本身也是一个框架,它使用控制器运行时库通过提供以下功能使编写运算符更容易:高级 API 和抽象,更直观地编写操作逻辑用于快速启动新项目的脚手架和代码生成工具涵盖常见操作员用例的扩展

官方文档:Overview | Operator SDK

在这里插入图片描述

二、Operator Lifecycle Manager(OLM)Operator Lifecycle Manager 是便于管理 Kubernetes 集群上的 Operator 的基础。有了它,管理员可以控制哪些 Operator 在哪些命名空间中可用,以及谁可以与正在运行的 Operator 进行交互。他们还可以管理 Operator 及其资源的整个生命周期,例如触发对 Operator 及其资源的更新或授予团队访问 Operator 以获取其集群切片的权限。多个应用程序的生命周期在 Kubernetes 集群上进行管理。简单的无状态应用程序可以利用 Operator Framework 的生命周期管理功能,而无需使用通用 Operator(例如Helm Operator)编写任何代码。复杂和有状态的应用程序是 Operator 可以大放异彩的地方。编码到 Operator 代码中的类似云的功能可以提供高级用户体验,自动执行更新、备份和扩展等功能。三、Operator 的三种类型

每种 Operator 类型都有一组不同的功能。在选择用于项目的类型时,了解每种项目类型的特性和限制以及Operator的用例非常重要。

SDK 提供了在 GoAnsibleHelm 中开发operators的工作流程。

Go Operator 类型的工作流程:

使用 SDK 命令行界面 (CLI) 创建新的Operator项目通过添加自定义资源定义 (CRD) 来定义新的资源 API定义控制器来监视和协调资源使用 SDK 和控制器运行时 API 为控制器编写协调逻辑使用 SDK CLI 构建和生成算子部署清单

Ansible Operator 类型的工作流程:

使用 SDK 命令行界面 (CLI) 创建新的Operator项目使用 ansible 剧本和角色为您的对象编写协调逻辑使用 SDK CLI 构建和生成算子部署清单(可选)使用 SDK CLI 添加其他 CRD 并重复步骤 2 和 3

Helm Operator 类型的工作流程:

使用 SDK 命令行界面 (CLI) 创建新的Operator项目创建一个新的(或添加您现有的)Helm 图表以供操作员的协调逻辑使用

使用 SDK CLI 构建和生成算子部署清单(可选)使用 SDK CLI 添加其他 CRD 并重复步骤 2 和 3四、Operator 项目目录结构

所有初始化的项目operator-sdk init都有一个共同的基础结构,它建立在kubebuilder 的项目布局上。每个项目类型都使用该类型语言的代码进一步定制。

1)公共目录/文件

文件/目录

描述

Dockerfile

Operator项目的 Dockerfile,用于使用make docker-build 构建镜像。

Makefile

使用帮助目标构建文件以帮助您处理项目。

PROJECT

该文件代表项目的配置,用于跟踪 CLI 和插件的有用信息。

bin/

该目录包含有用的二进制文件,例如manager用于在本地运行项目的二进制文件和kustomize用于项目配置的实用程序。对于其他语言类型,它可能具有其他对开发Operator 有用的二进制文件。

bundle/

此目录包含用于将您的项目与OLM以捆绑格式集成的所有文件。它是从 Makefile 目标构建的make bundle。

bundle/manifests/

此目录包含您的bundle的OLM 清单。

bundle/metadata/

此目录包含您的捆绑包的OLM 元数据,例如索引图像注释。

bundle/tests/

此目录包含随您的Operator 包一起提供的记分卡测试。

config/

包含用于在集群上启动项目的配置文件。插件可能会使用它来提供功能。例如,为了让 CLI 帮助创建您的Operator 包,它将查找在此目录中搭建的 CRD 和 CR。您还将找到所有Kustomize YAML 定义。

config/crd/

包含自定义资源定义。

config/default/

包含一个Kustomize 基础配置,用于在标准配置中启动控制器。

config/manager/

包含清单以将您的操作员项目作为集群上的 pod 启动。

config/manifests/

包含在捆绑目录中生成 OLM 清单的基础。

config/prometheus/

包含使项目能够向Prometheus提供指标(例如ServiceMonitor资源)所需的清单。

config/scorecard/

包含允许您使用记分卡测试项目所需的清单。

config/rbac/

包含运行项目所需的RBAC权限。

config/samples/

包含自定义资源。

bundle.Dockerfile

用于构建捆绑镜像的 Dockerfile。用于使用 make bundle-build。

2)Operator Ansible 专属目录/文件

文件/目录

描述

config/testing/

清单文件可帮助您测试项目。例如,更改Molecule 测试的映像策略或在 Ansible 日志中启用调试级别。

molecule/

包含分子测试的清单。

molecule/default

包含默认分子任务。

molecule/kind

包含要在集群上执行的Molecule任务。

playbooks/

包含 Ansible 剧本。

roles/

包含每个 Kind 脚手架的 Ansible 角色文件。

requirements.yml

此文件指定需要安装的 Ansible 依赖项,您的Operator 才能正常工作。

watches.yaml

包含组、版本、种类以及剧本和规则位置。用于配置Ansible Watches。

3)Operator Golang 专属目录/文件

文件/目录

描述

api/

包含 api 定义

config/certmanager

包含通过 Webhook 配置证书管理器的 Kustomize 清单。

config/webhook

包含用于配置 Webhook 的 Kustomize 清单。

controllers

包含控制器。

main.go

实现项目初始化。

hack/

包含实用程序文件,例如用于为项目文件构建许可证头的文件。

4)Operator Helm 专属目录/文件

文件/目录

描述

helm-charts

包含可以使用operator-sdk init --plugins=helm [options]或初始化的每个 Kind 脚手架的 Helm 图表operator-sdk create api [options]。

watches.yaml

包含组、版本、种类和 Helm 图表位置。用于配置Helm Watches 。

五、Operator SDK CLI 安装

下载地址:

operator sdk 官方文档:

【温馨提示】根据k8s版本下载版本版本的Operator SDK CLI

1)operator-sdk(go)

wget  添加可执行权限chmod +x operator-sdk_linux_amd64 # 添加软链ln -s /opt/k8s/crd/Operator/operator-sdk_linux_amd64 /usr/local/bin/operator-sdkoperator-sdk versionkubectl version --output=jsonkubelet --version
2)ansible-operator(ansible)
wget  添加可执行权限chmod +x ansible-operator_linux_amd64 # 添加软链ln -s /opt/k8s/crd/Operator/ansible-operator_linux_amd64 /usr/local/bin/ansible-operatoransible-operator versionkubectl version --output=jsonkubelet --version
3)helm-operator(helm)
wget  添加可执行权限chmod +x helm-operator_linux_amd64# 添加软链ln -s /opt/k8s/crd/Operator/helm-operator_linux_amd64 /usr/local/bin/helm-operatorhelm-operator versionkubectl version --output=jsonkubelet --version
六、简单使用1)operator-sdk 简单使用1、安装 go 环境

安装包下载地址为:

如果打不开可以使用这个地址:

wget  -xzf go1.19.1.linux-386.tar.gz -C /usr/local/export PATH=$PATH:/usr/local/go/bin# ~/.bash_profile 或者 /etc/profile,并将以下命令添加该文件的末尾,这样就永久生效了:export PATH=$PATH:/usr/local/go/binsource ~/.bash_profile# 或source /etc/profile# go get更换国内镜像源go env -w GO111MODULE=ongo env -w GOPROXY= helpgo version
2、初始化项目
mkdir memcached-operator ; cd memcached-operator# 注意当前目录必须是空目录operator-sdk init --domain example.com --repo github.com/example/memcached-operator

目录结构

3、创建api

operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource --controller
4、构建镜像
# 如果需要push镜像,加上docker-push参数make docker-build IMG="example.com/memcached-operator:v0.0.1"
5、运行Operator

准备镜像:

docker save example.com/memcached-operator:v0.0.1 > memcached.tarctr -n k8s.io image import memcached.tardocker pull kubesphere/kube-rbac-proxy:v0.11.0docker tag kubesphere/kube-rbac-proxy:v0.11.0 gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0docker save gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0 > kube-rabc-proxy.tarctr -n k8s.io image import kube-rabc-proxy.tar

运行:

make deploy IMG=example.com/memcached-operator:v0.0.1
6、创建自定义资源
kubectl apply -f config/samples/cache_v1_memcached.yaml
7、删除自定义资源
kubectl delete -f config/samples/cache_v1_memcached.yaml
8、卸载 operator
make undeploy
2)helm-operator 简单使用1、初始化项目
mkdir nginx-operatorcd nginx-operatoroperator-sdk init --domain example.com --plugins helm
2、创建api
operator-sdk create api --group demo --version v1alpha1 --kind Nginx
3、构建镜像
make docker-build IMG="example.com/nginx-operator:v0.0.1"
4、运行Operator

准备镜像:

docker save example.com/nginx-operator:v0.0.1 > nginx.tarctr -n k8s.io image import nginx.tardocker pull kubesphere/kube-rbac-proxy:v0.11.0docker tag kubesphere/kube-rbac-proxy:v0.11.0 gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0docker save gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0 > kube-rabc-proxy.tarctr -n k8s.io image import kube-rabc-proxy.tar

运行:

make deploy IMG="example.com/nginx-operator:v0.0.1"
5、创建自定义资源
kubectl apply -f config/samples/demo_v1alpha1_nginx.yaml
6、删除自定义资源
kubectl delete -f config/samples/demo_v1alpha1_nginx.yaml
7、卸载 operator
make undeploy

关于 Kubernetes 有状态应用程序控制器 Operator 介绍和简单使用 就先到这里了,这里只是简单的演示了官方文档(Overview | Operator SDK)里的示例,后面会有企业实战案例,请小伙伴耐心等待哦,有疑问的小伙伴欢迎给我留言哦,会持续更新【云原生和大数据】相关的文章~

标签: #operatorc语言