我有一个部署了rke witch的kubernetes集群,它由3个不同服务器中的3个节点组成,在这些服务器中有1个运行yatsukino / healthereum的pod,这是对ethereum / client-go:stable的个人修改。 问题是我不了解如何添加外部ip以将请求发送到Pod女巫
我的广告连播可能处于3种状态:
我不希望我的负载均衡器将请求转移到前两个状态,只有第三个点将我的Pod视为最新状态。
我一直在搜索kubernetes文档,但是(也许是因为缺少理解),我只发现了唯一节点内pod的负载平衡。
这是我的部署文件:
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/
答案 0 :(得分:2)
以上答案解释了这些概念,但涉及有关服务和外部IP的问题;您必须声明服务,例如;
apiVersion: v1
kind: Service
metadata:
name: goerli
spec:
selector:
app: goerli
ports:
- port: 8545
type: LoadBalancer
type: LoadBalancer
将为公共云或使用metallb之类的地址分配一个外部地址。用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将在您的就绪 POD之间进行负载平衡。
答案 1 :(得分:1)
要进行负载平衡和暴露吊舱,可以使用https://kubernetes.io/docs/concepts/services-networking/service/
要检查Pod准备就绪的时间,您可以按照https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
的说明来调整活动和就绪状态探针对于探针,您可能需要考虑执行操作,例如执行检查所需内容并根据状态返回0或1的脚本。
答案 2 :(得分:0)
启动容器时,可以将Kubernetes配置为等待可配置的 进行第一次就绪检查之前要经过的时间。之后,它 定期调用探针,并根据就绪探针的结果进行操作。如果一个 pod表示尚未准备就绪,已将其从服务中删除。如果豆荚变成 再次准备好,重新添加。 与活动探针不同,如果容器未通过就绪检查,它不会被杀死或 重新启动。这是对活动性和就绪性探针的重要区别。 活度探针可以杀死不健康的容器并进行更换,从而使豆荚保持健康 他们使用新的健康的豆荚,而准备情况调查则确保只有 准备好为收到的请求提供服务。这在容器中最有必要 启动,但是在容器运行了一段时间后也很有用。
我认为您可以针对自己的目标使用探测