gpt4 book ai didi

docker - Kubernetes : Is it possible to hit multiple pods with a single request in Kubernetes cluster

转载 作者:IT老高 更新时间:2023-10-28 12:38:23 25 4
gpt4 key购买 nike

我想清除 Kubernetes 命名空间中所有 pod 中的缓存。我想向端点发送一个请求,然后它将向命名空间中的所有 pod 发送 HTTP 调用以清除缓存。目前,我使用 Kubernetes 只能命中一个 pod,而且我无法控制哪个 pod 会被命中。

即使负载均衡器设置为 RR,连续访问 pod(n 次,其中 n 是 pod 的总数)也无济于事,因为其他一些请求可能会悄悄进入。

这里讨论了同样的问题,但我找不到实现的解决方案: https://github.com/kubernetes/kubernetes/issues/18755

我正在尝试使用 Hazelcast 实现清除缓存部分,其中我将存储所有缓存,而 Hazelcast 会自动处理缓存更新。

如果有解决此问题的替代方法,或者配置 kubernetes 以针对某些特定请求达到所有端点的方法,那么在此处分享将有很大帮助。

最佳答案

如果你的 pod 中有 kubectl 并且可以访问 api-server,你就可以获取所有端点地址并将它们传递给 curl:

kubectl get endpoints <servicename> \
-o jsonpath="{.subsets[*].addresses[*].ip}" | xargs curl

pod 中没有 kubectl 的替代方案:

从 pod 访问 api 服务器的推荐方法是使用 kubectl 代理:https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#accessing-the-api-from-a-pod这当然会增加至少相同的开销。或者您可以直接调用 REST api,您必须手动提供 token 。

APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
TOKEN=$(kubectl describe secret $(kubectl get secrets \
| grep ^default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d " ")

如果你提供 APISERVER 和 TOKEN 变量,你的 pod 中不需要 kubectl,这样你只需要 curl 访问 api 服务器和“jq”来解析 json 输出:

curl $APISERVER/api/v1/namespaces/default/endpoints --silent \
--header "Authorization: Bearer $TOKEN" --insecure \
| jq -rM ".items[].subsets[].addresses[].ip" | xargs curl

更新(最终版本)

APISERVER 通常可以设置为 kubernetes.default.svc 并且 token 应该在 pod 中的/var/run/secrets/kubernetes.io/serviceaccount/token 可用,因此无需手动提供任何东西:

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token); \
curl https://kubernetes.default.svc/api/v1/namespaces/default/endpoints --silent \
--header "Authorization: Bearer $TOKEN" --insecure \
| jq -rM ".items[].subsets[].addresses[].ip" | xargs curl

jq 在此处可用:https://stedolan.github.io/jq/download/ (< 4 MiB,但值得轻松解析 JSON)

关于docker - Kubernetes : Is it possible to hit multiple pods with a single request in Kubernetes cluster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49612412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com