我手头有以下场景,我希望在pod之间获得尽可能低的延迟(我不希望将所有容器部署到同一pod)。所以下面的场景是我想要实现的:
假设您有一个具有4个节点的Kubernetes集群:-在每个节点上,您有一个不属于kubernetes的中央数据库的sqlproxy -在每个节点上,您有4个pod,通过该sqlproxy调用数据库
据我所知,当我创建一个服务时,服务会在服务中的pod之间“随机”分配流量。这意味着来自节点1的pod可以调用节点4上的sqlproxy,节点2上的pod可以调用节点3上的sqlproxy,依此类推。
我希望尽可能在节点1上实现pod on node 1调用sqlproxy,因此它具有最小的延迟。
这是可能的吗?或者节点之间的延迟是如此之小以至于可以忽略吗?
发布于 2018-08-11 00:51:14
将SQL代理作为侧车部署到您的应用程序中(一个pod中有两个容器,一个是应用程序,一个是代理)。
您的部署将如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
namespace: ...
name: my-app
labels:
app: my-app
spec:
replicas: 3
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: << app image >>
ports:
- containerPort: 8080
- name: sql-proxy
image: << SQL proxy image >>
ports:
- containerPort: 3306现在让应用程序连接到localhost:3306,以连接到在同一pod中运行的SQL代理。通过这种方式,您可以避免潜在的代价高昂的跨节点跳跃,并保持本地连接。
发布于 2018-08-12 05:44:12
@Oliver提出的解决方案-将sqlproxy作为sidecar容器运行在与应用程序相同的pod中-可能会为您提供最低的延迟。
如果出于某种原因,您仍然希望在每个节点上运行一个sqlproxy实例(例如,为了利用数据库连接池和重用),应用程序将需要在运行时动态发现运行它的节点的IP地址,并使用它连接到同一节点上的sqlproxy实例。
下面是一种动态发现主机节点IP地址并将其设置为环境变量的方法(另请参阅Kubernetes文档中的The Downward API ):
...
spec:
containers:
- name: app-container-name
image: <app-image>
env:
- name: POD_HOST_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP使用$(POD_HOST_IP),我们可以在同一部署配置中的其他地方引用环境变量。
https://stackoverflow.com/questions/51786447
复制相似问题