【问题标题】:Do init containers run on the same node as their app container in GKE初始化容器是否与 GKE 中的应用容器在同一节点上运行
【发布时间】:2019-03-05 20:36:34
【问题描述】:
我只是想了解一下我可以在 kubernetes 中使用哪些 init 容器。
我有一个在具有本地 ssd 的节点上运行的应用程序容器。我计划通过本地卷静态配置器执行此操作,并让 pod 具有持久卷声明 - 我的理由是我有 1-1 节点-pod 关系,我希望能够使用节点/pod 自动缩放。我的应用容器需要从外部存储桶中提取一些数据才能工作,这就是我计划让我的 init 容器做的事情。
我的问题是;是否保证我的 init 容器和 app 容器将在同一个节点上执行?如果是这样,我假设他们可以挂载同一个磁盘,而无需使用静态配置擦除它们之间的磁盘吗?
【问题讨论】:
标签:
google-kubernetes-engine
【解决方案1】:
是的,它们在同一个节点上运行,init 容器是 Pod 的一部分:
Pod 中的容器共享一个 IP 地址和端口空间,始终处于同一位置并共同调度,并在同一节点上的共享上下文中运行。
and:
一个 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
将您需要的任何数据写入共享卷,您就可以从您的容器中访问它。