首页 > 解决方案 > 初始化容器是否与 GKE 中的应用容器在同一节点上运行

问题描述

我只是想了解我可以在 kubernetes 中使用 init 容器的内容。

我有一个在具有本地 ssd 的节点上运行的应用程序容器。我计划通过本地卷静态配置器执行此操作,并让 pod 具有持久卷声明 - 我的理由是我有 1-1 节点-pod 关系,我希望能够使用节点/pod 自动缩放。我的应用程序容器需​​要从外部存储桶中提取一些数据才能工作,这就是我计划让我的 init 容器做的事情。

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

标签: google-kubernetes-engine

解决方案


是的,它们在同一个节点上运行,init 容器是Pod的一部分:

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

一个 Pod 可以有多个容器在其中运行应用程序,但它也可以有一个或多个 Init Containers,它们在应用程序容器启动之前运行。

您可以在 init 容器和您的 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

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


推荐阅读