Operator #
Operator 的工作原理 #
利用了 Kubernetes 的自定义 API 资源(CRD),来描述我们想要部署的 “有状态应用”; 然后在自定义控制器里,根据自定义 API 对象的变化,来完成具体的部署和运维工作。
所以,编写一个 Etcd Operator,与编写一个自定义控制器的过程,没什么不同。
Operator 开发 #
Kubebuilder #
operator-framework/operator-sdk #
SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.
https://sdk.operatorframework.io
kudobuilder/kudo #
GoogleCloudPlatform/metacontroller #
Lightweight Kubernetes controllers as a service https://metacontroller.app/
可与 Webhook 结合使用,以实现自己的功能。
operator-framework/operator-lifecycle-manager #
A management framework for extending Kubernetes with Operators
Operator 示例 #
coreos/etcd-operator #
Etcd Operator #
$ git clone https://github.com/coreos/etcd-operator
# 因为,Etcd Operator 需要访问 Kubernetes 的 APIServer 来创建对象
# 为 Etcd Operator 创建 RBAC 规则
$ example/rbac/create_role.sh
Etcd Operator 本身,其实就是一个 Deployment
而一旦 Etcd Operator 的 Pod 进入了 Running 状态,你就会发现,有一个 CRD 被自动创建了出来
这个 CRD 名叫 etcdclusters.etcd.database.coreos.com
实际上是在 Kubernetes 里添加了一个名叫 EtcdCluster 的自定义资源类型(CRD)。
而 Etcd Operator 本身,就是这个 CRD 对应的自定义控制器。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: etcd-operator
spec:
replicas: 1
template:
metadata:
labels:
name: etcd-operator
spec:
containers:
- name: etcd-operator
image: quay.io/coreos/etcd-operator:v0.9.2
command:
- etcd-operator
env:
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
当 Etcd Operator 部署好之后,接下来在这个 Kubernetes 里创建一个 Etcd 集群的工作就非常简单了。
你只需要编写一个 EtcdCluster 的 YAML 文件,然后把它提交给 Kubernetes
$ kubectl apply -f example/example-etcd-cluster.yaml
example-etcd-cluster.yaml
定义的是 EtcdCluster 这个 CRD 的一个具体实例,
也就是一个 Custom Resource(CR)
EtcdCluster 的 spec 字段非常简单。其中,size=3 指定了它所描述的 Etcd 集群的节点个数。 而 version=“3.2.13”,则指定了 Etcd 的版本,仅此而已。
而真正把这样一个 Etcd 集群创建出来的逻辑,就是 Etcd Operator 要实现的主要工作
apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
name: "example-etcd-cluster"
spec:
size: 3
version: "3.2.13"
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。