初始化容器是否与GKE中的应用容器在同一节点上运行

时间:2019-03-05 12:24:23

标签: google-kubernetes-engine

我只是想把我可以在kubernetes中使用init容器的东西包住头。

我有一个应用程序容器,该容器在具有本地ssd的节点上运行。我正计划通过本地卷静态供应商进行此操作,并让Pod具有持久的卷声明-我这样做的原因是我有1-1节点-pod关系,并且我希望能够使用节点/吊舱自动缩放。我的应用容器需要一些从外部存储桶中提取的数据才能正常工作,这就是我计划让初始化容器执行的工作。

我的问题是;是否保证我的init容器和app容器将在同一节点上执行?如果是这样,我假设他们可以挂载相同的磁盘,而无需使用静态预配置擦除它们之间的挂载磁盘?

1 个答案:

答案 0 :(得分:2)

是的,它们在同一节点上运行,初始化容器是Pod的一部分:

  

Pod中的容器共享一个IP地址和端口空间,始终位于同一位置并共同调度,并在同一节点上的共享上下文中运行。

and

  

一个Pod可以在其中运行多个容器,但也可以有一个或多个初始化容器,它们在启动应用容器之前就已运行。

您可以在初始化容器和容器之间共享一个卷:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: deploy
spec:
  replicas: 1
  template:
    spec:
      volumes:
      - name: shared-data
        emptyDir: {}
      initContainers:
      - name: init
        image: <xxx>
        volumeMounts:
        - name: shared-data
          mountPath: /env
      containers:
      - name: <my-container>
        image: <my-image>
        volumeMounts:
        - name: shared-data
          mountPath: /env

将所需的任何数据写入共享卷,您将能够从容器中访问它。