Operator 概念是由 CoreOS 的工程师于2016年提出的,也是由 CoreOS 开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator SDK 是Operator Framework的一个组件,这是一个开源工具包,用于以有效、自动化和可扩展的方式管理 Kubernetes 原生应用程序,称为 Operators。Operator Framework 框架包含两个主要的部分:
Operator SDK——无需了解复杂的 Kubernetes API 特性,即可让你根据你自己的专业知识构建一个 Operator 应用。Operator Lifecycle Management——监督跨 Kubernetes 集群运行的所有 Operator(及其相关服务)的生命周期的安装、更新和管理。Operator SDK 提供了构建、测试和打包 Operator 的工具。最初,SDK 促进了应用程序的业务逻辑(例如,如何扩展、升级或备份)与 Kubernetes API 的结合以执行这些操作。随着时间的推移,SDK 可以让工程师让应用程序更智能,并拥有云服务的用户体验。SDK 中包含了在 Operator 之间共享的领先实践和代码模式,以帮助防止重新发明轮子。Operator SDK 它本身也是一个框架,它使用控制器运行时库通过提供以下功能使编写运算符更容易:
官方文档:https://sdk.operatorframework.io/docs/overview/
在这里插入图片描述
Operator Lifecycle Manager 是便于管理 Kubernetes 集群上的 Operator 的基础。Operator Framework 的生命周期管理功能,而无需使用通用 Operator(例如Helm Operator)编写任何代码。
每种
Operator类型都有一组不同的功能。在选择用于项目的类型时,了解每种项目类型的特性和限制以及Operator的用例非常重要。

SDK 提供了在 Go、Ansible 或 Helm 中开发operators的工作流程。
Go Operator 类型的工作流程:
Ansible Operator 类型的工作流程:
Helm Operator 类型的工作流程:
所有初始化的项目
operator-sdk init都有一个共同的基础结构,它建立在kubebuilder 的项目布局上。每个项目类型都使用该类型语言的代码进一步定制。
| 文件/目录 | 描述 |
|---|---|
| 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。 |
| 文件/目录 | 描述 |
|---|---|
| config/testing/ | 清单文件可帮助您测试项目。例如,更改Molecule 测试的映像策略或在 Ansible 日志中启用调试级别。 |
| molecule/ | 包含分子测试的清单。 |
| molecule/default | 包含默认分子任务。 |
| molecule/kind | 包含要在集群上执行的Molecule任务。 |
| playbooks/ | 包含 Ansible 剧本。 |
| roles/ | 包含每个 Kind 脚手架的 Ansible 角色文件。 |
| requirements.yml | 此文件指定需要安装的 Ansible 依赖项,您的Operator 才能正常工作。 |
| watches.yaml | 包含组、版本、种类以及剧本和规则位置。用于配置Ansible Watches。 |
| 文件/目录 | 描述 |
|---|---|
| api/ | 包含 api 定义 |
| config/certmanager | 包含通过 Webhook 配置证书管理器的 Kustomize 清单。 |
| config/webhook | 包含用于配置 Webhook 的 Kustomize 清单。 |
| controllers | 包含控制器。 |
| main.go | 实现项目初始化。 |
| hack/ | 包含实用程序文件,例如用于为项目文件构建许可证头的文件。 |
| 文件/目录 | 描述 |
|---|---|
| helm-charts | 包含可以使用operator-sdk init --plugins=helm [options]或初始化的每个 Kind 脚手架的 Helm 图表operator-sdk create api [options]。 |
| watches.yaml | 包含组、版本、种类和 Helm 图表位置。用于配置Helm Watches 。 |
下载地址:https://github.com/operator-framework/operator-sdk/releases
operator sdk 官方文档:https://sdk.operatorframework.io/docs/installation/
【温馨提示】根据k8s版本下载版本版本的Operator SDK CLI
wget https://github.com/operator-framework/operator-sdk/releases/download/v1.22.1/operator-sdk_linux_amd64
# 添加可执行权限
chmod +x operator-sdk_linux_amd64
# 添加软链
ln -s /opt/k8s/crd/Operator/operator-sdk_linux_amd64 /usr/local/bin/operator-sdk
operator-sdk version
kubectl version --output=json
kubelet --version

wget https://github.com/operator-framework/operator-sdk/releases/download/v1.22.2/ansible-operator_linux_amd64
# 添加可执行权限
chmod +x ansible-operator_linux_amd64
# 添加软链
ln -s /opt/k8s/crd/Operator/ansible-operator_linux_amd64 /usr/local/bin/ansible-operator
ansible-operator version
kubectl version --output=json
kubelet --version

wget https://github.com/operator-framework/operator-sdk/releases/download/v1.22.2/helm-operator_linux_amd64
# 添加可执行权限
chmod +x helm-operator_linux_amd64
# 添加软链
ln -s /opt/k8s/crd/Operator/helm-operator_linux_amd64 /usr/local/bin/helm-operator
helm-operator version
kubectl version --output=json
kubelet --version

安装包下载地址为:https://golang.org/dl/
如果打不开可以使用这个地址:https://golang.google.cn/dl/
wget https://golang.google.cn/dl/go1.19.1.linux-386.tar.gz
tar -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/bin
source ~/.bash_profile
# 或
source /etc/profile
# go get更换国内镜像源
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
go help
go version
mkdir memcached-operator ; cd memcached-operator
# 注意当前目录必须是空目录
operator-sdk init --domain example.com --repo github.com/example/memcached-operator
目录结构

operator-sdk create api --group cache --version v1alpha1 --kind Memcached --resource --controller
# 如果需要push镜像,加上docker-push参数
make docker-build IMG="example.com/memcached-operator:v0.0.1"
准备镜像:
docker save example.com/memcached-operator:v0.0.1 > memcached.tar
ctr -n k8s.io image import memcached.tar
docker pull kubesphere/kube-rbac-proxy:v0.11.0
docker tag kubesphere/kube-rbac-proxy:v0.11.0 gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0
docker save gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0 > kube-rabc-proxy.tar
ctr -n k8s.io image import kube-rabc-proxy.tar
运行:
make deploy IMG=example.com/memcached-operator:v0.0.1
kubectl apply -f config/samples/cache_v1_memcached.yaml
kubectl delete -f config/samples/cache_v1_memcached.yaml
make undeploy
mkdir nginx-operator
cd nginx-operator
operator-sdk init --domain example.com --plugins helm
operator-sdk create api --group demo --version v1alpha1 --kind Nginx
make docker-build IMG="example.com/nginx-operator:v0.0.1"
准备镜像:
docker save example.com/nginx-operator:v0.0.1 > nginx.tar
ctr -n k8s.io image import nginx.tar
docker pull kubesphere/kube-rbac-proxy:v0.11.0
docker tag kubesphere/kube-rbac-proxy:v0.11.0 gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0
docker save gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0 > kube-rabc-proxy.tar
ctr -n k8s.io image import kube-rabc-proxy.tar
运行:
make deploy IMG="example.com/nginx-operator:v0.0.1"
kubectl apply -f config/samples/demo_v1alpha1_nginx.yaml
kubectl delete -f config/samples/demo_v1alpha1_nginx.yaml
make undeploy
关于 Kubernetes 有状态应用程序控制器 Operator 介绍和简单使用 就先到这里了,这里只是简单的演示了官方文档里的示例,后面会有企业实战案例,请小伙伴耐心等待哦,有疑问的小伙伴欢迎给我留言哦,会持续更新【云原生和大数据】相关的文章~