7 个不稳定版本 (3 个破坏性更新)
0.4.2 | 2024 年 4 月 19 日 |
---|---|
0.4.1 | 2024 年 3 月 25 日 |
0.3.3 |
|
0.3.2 | 2024 年 1 月 23 日 |
0.1.0 | 2023 年 10 月 1 日 |
#653 在 开发工具
每月下载量 694 次
在 generic-db-observer 中使用
25KB
381 代码行
kube-discovery
使用场景
"我在 Kubernetes 集群上有一个测试环境,但我不想不断更新我的环境变量中的位置和认证信息。我能否直接访问集群并从中加载相关数据?"
局限性
此 crate 是为我的特定用例编写的,因此它所做的某些假设可能对其他配置不适用。
注意:此 crate 使用固定版本的 Kubernetes 的 k8s_openapi
。请确保为相应版本启用对应的 v1
-feature。此外,请确保使用 kube_discovery::kube
作为 kube
crate,并使用 kube_discovery::k8s_openapi
作为 k8s_openapi
crate。这样您就可以避免版本冲突。
示例(位置发现)
use kube_discovery::k8s_openapi::api::core::v1::Service;
use kube_discovery::kube::{
api::{DeleteParams, PostParams},
Api, Client, Config,
};
use kube_discovery::*;
#[tokio::main]
async fn main() {
// doctest setup
let kube_config = Config::infer().await.unwrap();
let kube_client = Client::try_from(kube_config.clone()).unwrap();
let svc_api: Api<Service> = Api::namespaced(kube_client.clone(), "scratch");
// Say you've got a service like this
let service_with_nodeport: Service = serde_yaml::from_str(
"
apiVersion: v1
kind: Service
metadata:
name: doctest-example
labels:
app: doctest-example
spec:
type: NodePort
selector:
app: example-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 31234
",
)
.unwrap();
svc_api
.create(&PostParams::default(), &service_with_nodeport)
.await
.unwrap();
// Instead of storing the service's public url in some environment variable
// (or, heavens forbid, even hardcoding it), just load the location based
// on the service's labels.
let service_uri = LabelSelector("app=doctest-example")
.load_service_host(&kube_config, &kube_client)
.await
.unwrap();
assert_eq!(service_uri, "162.55.38.94:31234");
// doctest cleanup
svc_api
.delete("doctest-example", &DeleteParams::default())
.await
.unwrap();
}
许可证
MIT OR Apache-2.0
依赖关系
~46MB
~733K SLoC