#controller #status #postgresql #kubernetes #events #object #coredb

bin+lib coredb-controller

Postgres的CoreDB控制器

2个版本

0.0.1 2023年5月22日
0.0.1-alpha.12023年3月9日

#136 in #controller

Download history 7/week @ 2024-03-08 2/week @ 2024-03-15 27/week @ 2024-03-29 10/week @ 2024-04-05

81 每月下载量

Apache-2.0

140KB
3K SLoC

CoreDB操作员

基于Rust的Kubernetes控制器,用于CoreDB资源,使用kube-rs

当检测到对Controller对象的更改时,Controller对象会进行reconciliation,写入其.status对象,创建相关事件,并使用finalizers进行确保删除的处理。

要求

  • Kubernetes集群:kind
  • rust
  • just
  • Opentelemetry collector(可选)

Rust Linting

使用cargo fmtclippy运行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

依赖关系

~84MB
~1.5M SLoC