gpt4 book ai didi

kubernetes - 如何使用负载均衡器公开 Statefulset?

转载 作者:行者123 更新时间:2023-12-01 11:13:56 24 4
gpt4 key购买 nike

我目前正在尝试创建一组 X pod,每个都有一个个人持久卷。为此,我创建了一个 StateFulSet带有 X 个副本和一个 PersistentVolumeClaimTemplate这部分正在工作。

问题是似乎不可能以与 deployment 相同的方式使用 LoadBalancer 公开这些 Pod。 (因为 pod 在 statefulset 中的唯一性)。

此时我已经尝试将它公开,因为一个简单的部署女巫不起作用,我发现的唯一方法是一个一个地公开每个 pod(我没有测试过,但我在 this 上看到了它)但它不是那么可扩展......

我没有在任何云提供商平台上运行 kubernetes,那么请避免使用独占命令行。

最佳答案

The problem is that it's seem's to be impossible to expose thoses pods with a LoadBalancer in the same way as a deployment (because of the uniqueness of a pods in a statefulset).



为什么不?这是我的 StatefulSet 和默认的 Nginx
$ k -n test get statefulset
NAME DESIRED CURRENT AGE
web 2 2 5d
$ k -n test get pods
web-0 1/1 Running 0 5d
web-1 1/1 Running 0 5d

这是我的服务类型 LoadBalancer,在 Minikube 的情况下它是 NodePort(实际上)
$ k -n test get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.110.22.74 <pending> 80:32710/TCP 5d

让我们用 curl 运行一些 pod 并向 ClusterIP 发出一些请求:
$ kubectl -n test run -i --tty tools --image=ellerbrock/alpine-bash-curl-ssl -- bash
bash-4.4$ curl 10.110.22.74 &> /dev/null
bash-4.4$ curl 10.110.22.74 &> /dev/null
bash-4.4$ curl 10.110.22.74 &> /dev/null
bash-4.4$ curl 10.110.22.74 &> /dev/null

让我们查看 Nginx 日志:
$ k -n test logs web-0
172.17.0.7 - - [18/Apr/2019:23:35:04 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"
172.17.0.7 - - [18/Apr/2019:23:35:05 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"
172.17.0.7 - - [18/Apr/2019:23:35:17 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"
$ k -n test logs web-1
172.17.0.7 - - [18/Apr/2019:23:35:15 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.0"

172.17.0.7 - 是我的 curl pod :
NAME                     READY     STATUS    RESTARTS   AGE       IP           NODE
tools-654cfc5cdc-8zttt 1/1 Running 1 5d 172.17.0.7 minikube

实际上,在 StatefulSet 的 pod 之间进行负载平衡的情况下,ClusterIP 是完全足够的,因为您有一个端点列表
$ k -n test get endpoints
NAME ENDPOINTS AGE
nginx 172.17.0.5:80,172.17.0.6:80 5d

YAML:
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type: LoadBalancer
ports:
- port: 80
name: web
selector:
app: nginx

关于kubernetes - 如何使用负载均衡器公开 Statefulset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55826653/

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