如何在一个pod中运行多个无状态容器?

时间:2017-11-02 23:30:34

标签: docker kubernetes openshift

我有几个小容器,内存占用很少,流量很小。我认为每个人都有一个单独的吊舱,这太过分了,太贵了。

我目前只需将Docker镜像推送到 OpenShift Online Container Registry即可部署容器。一旦新图像到达,OpenShift将重建并部署应用程序。它工作正常,但我无法找到一种方法让OpenShift接受同一应用程序/ pod的多个图像/容器。

有谁知道如何在一个应用程序/ pod中运行多个容器?<​​/ p>

2 个答案:

答案 0 :(得分:5)

我不知道在创建多个pod时您会遇到什么样的缺点。 Pod与容器的开销可以忽略不计。

但是将多个应用程序放入单个pod中显然有缺点:

  • 如果要重新启动单个容器,则需要重新启动所有容器
  • 您无法单独扩展容器,因此您无法获得不同的服务数(对于HA或负载分配)
  • 您必须按端口识别服务,因为服务发现适用于每个Pod
    • 即。拥有多个HTTP服务,您可以将它们全部映射到端口80并使用http://fooservicehttp://barservice代替http://uberpod:8001http://uberpod:8002

同样,几乎没有多个Pod的开销。

我不知道Kubernetes在OpenShift中的集成是如何工作的,但是使用普通的Kubernetes YAML文件,你可以在容器列表中添加另一个容器:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: foo
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
  - name: bar
    image: mycontainer:latest

答案 1 :(得分:1)

鉴于每个pod或服务都使用IP,而在kubernetes中,每个CPU核心建议限制为10个pod,因此每个pod有多个容器用于微服务绝对是个好主意。

在Openshift Online中,您的命名空间将限制POD的数量。

此外,你可以为一个pod提供多种服务......但我不推荐它,因为它也使用IP ....和证书,如果你需要一个,....

您可以通过发出请求和放大来管理容器的内存。限制它。我想如果你没有限制,容器配置自己的默认值。但是如果你设置限制,容器初始化应该考虑到这一点。 (这是Redhat提供的容器的情况)。

对于扩展:您应该根据扩展需求以智能方式将容器分组到pod中。在某些情况下,它可能意味着一个容器用于一个容器。但如果只消耗0.0001%CPU则不行。如果你需要缩放,  它应该意味着你需要比核心的10%更多的CPU。

要重新启动容器,您可能需要重新启动POD。并非总是如此,它可以是透明的:为什么要重新启动容器?

  • 容器中的错误?活动检查可以为您解决这个问题......我认为它是在容器级别。
  • 升级容器的映像时,触发器可以重新启动容器,在准备检查的帮助下,该容器对于应用程序的用户是透明的。

    所以我认为这不足以要求1个容器/容器。