2个版本
0.0.1 | 2023年5月22日 |
---|---|
0.0.1-alpha.1 | 2023年3月9日 |
#136 in #controller
81 每月下载量
140KB
3K SLoC
CoreDB操作员
基于Rust的Kubernetes控制器,用于CoreDB资源
,使用kube-rs。
当检测到对Controller
对象的更改时,Controller
对象会进行reconciliation,写入其.status对象,创建相关事件,并使用finalizers进行确保删除的处理。
要求
Rust Linting
使用cargo fmt
和clippy
运行linting
Clippy
rustup component add clippy
cargo clippy
cargo fmt
rustup toolchain install nightly
rustup component add rustfmt --toolchain nightly
cargo +nightly fmt
运行
要本地构建和运行操作员
just start-kind
just run
- 或者,您可以运行自动重新加载您的本地更改。
- 首先,安装cargo-watch
cargo install cargo-watch
- 然后,运行自动重新加载
just watch
测试
单元测试
just test
集成测试
要自动设置本地集群以进行功能测试,请使用此脚本。这将启动一个本地kind集群,为测试注释default
命名空间并安装CRD定义。
just start-kind
或者,您可以按照以下步骤进行。
- 连接到可以运行测试的集群
- 将您的kubecontext设置为任何命名空间,并对其进行标记以指示可以在此集群上运行测试(不要在非测试集群上运行测试)
NAMESPACE=<namespace> just annotate
- 启动或安装您想要测试的控制器(请参阅以下部分)
- 运行集成测试
cargo test -- --ignored
- 集成测试假定您已经安装或正在运行连接到集群的操作员。
其他测试说明
- 包含
--nocapture
标志以在测试运行期间显示打印语句
集群
例如;安装kind
。安装后,按照这些说明创建一个连接到本地镜像注册表的kind集群。
CRD
应用来自缓存文件的CRD,或者从crdgen
(如果需要更改最佳)中管道传输。
just install-crd
OpenTelemetry(待定)
在您的集群中设置一个OpenTelemetry Collector。以下组件应该可以即插即用:Tempo / opentelemetry-operator / Grafana Agent。如果您的收集器不支持grpc otlp,您需要更改main.rs
中的导出器。
运行
本地
cargo run
- 或者,可选的遥测(根据需求更改)
OPENTELEMETRY_ENDPOINT_URL=https://0.0.0.0:55680 RUST_LOG=info,kube=trace,controller=debug cargo run --features=telemetry
集群内
使用以下命令编译控制器:
just compile
使用以下命令构建镜像:
just build
使用以下命令将镜像推送到您的本地仓库:
docker push localhost:5001/controller:<tag>
适当地编辑部署的镜像标签,然后运行
kubectl apply -f yaml/deployment.yaml
kubectl port-forward service/coredb-controller 8080:80
注意:假设命名空间为default
。如果您需要不同的命名空间,您可以在yaml中将default
替换为您想要的任何内容,并在当前上下文中设置命名空间,以便使此处所有命令生效。
用法
在任一运行场景中,您的应用程序监听端口8080
,并将观察CoreDB
事件。
尝试以下之一
kubectl apply -f yaml/sample-coredb.yaml
kubectl delete coredb sample-coredb
kubectl edit coredb sample-coredb # change replicas
协调器将运行并在每次更改时写入状态对象。您应该在Pod的日志中看到结果,或者在kubectl get coredb -o yaml
的.status对象输出中看到结果。
Web应用输出
示例Web服务器公开了一些您可以使用curl
检查的示例指标和调试信息。
$ kubectl apply -f yaml/sample-coredb.yaml
$ curl 0.0.0.0:8080/metrics
# HELP cdb_controller_reconcile_duration_seconds The duration of reconcile to complete in seconds
# TYPE cdb_controller_reconcile_duration_seconds histogram
cdb_controller_reconcile_duration_seconds_bucket{le="0.01"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="0.1"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="0.25"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="0.5"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="1"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="5"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="15"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="60"} 1
cdb_controller_reconcile_duration_seconds_bucket{le="+Inf"} 1
cdb_controller_reconcile_duration_seconds_sum 0.013
cdb_controller_reconcile_duration_seconds_count 1
# HELP cdb_controller_reconciliation_errors_total reconciliation errors
# TYPE cdb_controller_reconciliation_errors_total counter
cdb_controller_reconciliation_errors_total 0
# HELP cdb_controller_reconciliations_total reconciliations
# TYPE cdb_controller_reconciliations_total counter
cdb_controller_reconciliations_total 1
$ curl 0.0.0.0:8080/
{"last_event":"2019-07-17T22:31:37.591320068Z"}
如果您有一个标准的PodMonitor
针对prometheus.io/scrape
,则指标将自动抓取。
开发
更新CRD
-
根据需要编辑CoreDBSpec结构体。
-
>仅生成-crd
依赖关系
~84MB
~1.5M SLoC