google-kubernetes-engine - 初始化容器是否与 GKE 中的应用容器在同一节点上运行
问题描述
我只是想了解我可以在 kubernetes 中使用 init 容器的内容。
我有一个在具有本地 ssd 的节点上运行的应用程序容器。我计划通过本地卷静态配置器执行此操作,并让 pod 具有持久卷声明 - 我的理由是我有 1-1 节点-pod 关系,我希望能够使用节点/pod 自动缩放。我的应用程序容器需要从外部存储桶中提取一些数据才能工作,这就是我计划让我的 init 容器做的事情。
我的问题是;是否保证我的 init 容器和 app 容器将在同一个节点上执行?如果是这样,我假设他们可以安装同一个磁盘,而无需静态配置擦除它们之间的磁盘安装它?
解决方案
是的,它们在同一个节点上运行,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
将您需要的任何数据写入共享卷,您将能够从您的容器中访问它。
推荐阅读
- intellij-idea - 如何使用 intellij 在所有模块中显示错误?
- java - Glide 不从云存储加载图像
- python - 为 pandas 数据框中的所有链接元素行分配相同的唯一 ID
- javascript - 如何使用 socket.io 向不同的用户发送不同的通知
- ios - 如何在swift5中删除弹跳?
- c - 问题从我的 Linux 内核模块向用户空间应用程序发送信号
- node.js - Lambda 中的 NodeJS 异步不会运行所有条目
- c - 使用 getchar() 和 putchar() 输入和输出带有数组的一组字符
- arrays - 颠簸变换中字符串到数组的转换
- python - 删除一些大写的单词,但不删除小写的单词