Kubernetes服务Pod优先级

时间:2018-08-10 12:22:10

标签: networking kubernetes

我手头有以下情况,我希望在Pod之间获得尽可能低的延迟(我不希望将所有容器都部署到同一Pod)。因此,以下情况是我想要实现的目标:

假设您有一个带有4个节点的Kubernetes集群: -在每个节点上,都有一个不属于kubernetes的中央数据库的sqlproxy -在每个节点上,您有4个Pod通过该sqlproxy调用数据库

据我在创建服务时所学,服务在服务中的各个Pod之间“随机”分配流量。意味着节点1的pod可以在节点4上调用sqlproxy,节点2的pod可以在节点3上调用sqlproxy,依此类推。

我希望在节点1上尽可能通过sqlproxy实现对节点1上的pod的调用,因此它具有最小的延迟。

这是否有可能,或者节点之间的延迟如此之小以至于可以忽略不计?

2 个答案:

答案 0 :(得分:1)

将SQL代理作为辅助工具部署到您的应用(一个容器中有两个容器,一个是应用,一个是代理)。

您的部署将如下所示:

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,以连接到在同一容器中运行的SQL代理。这样,您可以避免潜在的昂贵的跨节点跃点,并保持本地连接。

答案 1 :(得分:0)

@Oliver提出的解决方案-将sqlproxy作为sidecar容器与应用程序放在同一吊舱中运行-可能会为您带来最低的延迟。

如果由于某种原因您仍然想在每个节点上运行一个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),我们可以在同一部署配置中的其他位置引用环境变量。