Kubernetes 有没有办法在多个节点的pod之间进行负载平衡?
我使用rke部署了kubernetes群集,该群集由3个不同服务器中的3个节点组成,在这些服务器中有1个pod运行yatsukino/healthereum,这是以太坊/客户端go:stable的个人修改。 问题是,我不明白如何添加一个外部ip来发送请求到POD 我的播客可能有3种状态:Kubernetes 有没有办法在多个节点的pod之间进行负载平衡?,kubernetes,load-balancing,Kubernetes,Load Balancing,我使用rke部署了kubernetes群集,该群集由3个不同服务器中的3个节点组成,在这些服务器中有1个pod运行yatsukino/healthereum,这是以太坊/客户端go:stable的个人修改。 问题是,我不明白如何添加一个外部ip来发送请求到POD 我的播客可能有3种状态: 他们正在同步以太坊区块链 由于同步问题,它们重新启动 它们是同步的,一切都很好 < P>我不希望我的负载均衡器将请求转移到2个第一状态,只有第三点认为我的POD是最新的。 我一直在kubernetes文档中搜索
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: goerli
name: goerli-deploy
spec:
replicas: 3
selector:
matchLabels:
app: goerli
template:
metadata:
labels:
app: goerli
spec:
containers:
- image: yatsukino/healthereum
name: goerli-geth
args: ["--goerli", "--datadir", "/app", "--ipcpath", "/root/.ethereum/geth.ipc"]
env:
- name: LASTBLOCK
value: "0"
- name: FAILCOUNTER
value: "0"
ports:
- containerPort: 30303
name: geth
- containerPort: 8545
name: console
livenessProbe:
exec:
command:
- /bin/sh
- /app/health.sh
initialDelaySeconds: 20
periodSeconds: 60
volumeMounts:
- name: app
mountPath: /app
initContainers:
- name: healthcheck
image: ethereum/client-go:stable
command: ["/bin/sh", "-c", "wget -O /app/health.sh http://my-bash-script && chmod 544 /app/health.sh"]
volumeMounts:
- name: app
mountPath: "/app"
restartPolicy: Always
volumes:
- name: app
hostPath:
path: /app/
对于负载平衡和公开吊舱,您可以使用 为了检查pod何时准备就绪,您可以使用所解释的调整您的活跃度和准备度探测器
对于探针,您可能需要考虑执行操作,如执行脚本,检查需要什么,返回依赖于状态的0或1。<以上>解释了概念,但是关于您的问题,服务和外部IP;例如,您必须声明服务
apiVersion: v1
kind: Service
metadata:
name: goerli
spec:
selector:
app: goerli
ports:
- port: 8545
type: LoadBalancer
type:LoadBalancer
将为公共云中的或如果您使用类似的方式,分配一个外部地址。使用kubectl get svc goerli
检查您的地址。如果外部地址“挂起”,则您有问题
如果这是您自己的设置,您可以使用externalIPs
分配您自己的外部ip
apiVersion: v1
kind: Service
metadata:
name: goerli
spec:
selector:
app: goerli
ports:
- port: 8545
externalIPs:
- 222.0.0.30
externalIPs
可以从集群外部使用,但您必须自己将流量路由到任何节点,例如
ip route add 222.0.0.30/32 \
nexthop via 192.168.0.1 \
nexthop via 192.168.0.2 \
nexthop via 192.168.0.3
假设您的k8s节点具有ip 192.168.0.x。这将设置到节点的ECMP路由。当您从集群外部向222.0.0.30:8545发出请求时,k8s将在您准备好的吊舱之间实现负载平衡。当容器启动时,Kubernetes可以配置为等待可配置的 在执行第一次准备就绪检查之前要经过的时间量。在那之后,它 定期调用探测,并根据准备就绪探测的结果进行操作。如果 pod报告它还没有准备好,已经从服务中删除。如果豆荚变成 准备好了,它被重新添加。 与活动性探测不同,如果容器未通过就绪性检查,它将不会被终止或终止 重新启动。这是活性和就绪性探测之间的一个重要区别。 Liveness探测器通过清除不健康的容器和更换容器来保持豆荚的健康 他们使用新的健康的,而就绪探测器确保只有那些 已准备好处理请求并接收它们。这在集装箱运输过程中是非常必要的 启动,但在容器运行一段时间后也很有用
我想你可以用probe来实现你的目标写的都是同样的东西哈哈@FrankYuchengGu是的,它确实发生在开放论坛:)对于负载平衡,我已经看过那些文档页面,但我不理解它的工作方式。为什么客户端位于节点中?为什么总是有一个kubeProxy?服务在哪里?因为我已经做好了准备。我只是更准确地解释了我的想法,但问题是如何实现负载平衡。很抱歉造成这种混乱!负载平衡是在服务中实现的。谢谢!我很欣赏这个明确的答案。在第一种情况下,我似乎有问题。。。状态为挂起。我已经尝试了第二种方法,然后和外部IP,但它的钢不可能为我ping的外部IP。。。有什么想法吗?可能是因为rke?您永远无法在k8s中ping服务(外部或内部),因为ICMP echo未转发。不过,TCP连接仍然可以工作。