在阅读《Kubernetes in Action》一书时,我看到了以下摘录(第 124 页):
清单 5.2 为容器启用标准输入
apiVersion: v1
kind: Pod
metadata:
name: kiada-stdin
spec:
containers:
- name: kiada
image: luksa/kiada:0.2
stdin: true
ports:
- containerPort: 8080
正如您在清单中看到的,如果 pod 中运行的应用程序想要从标准输入读取,则必须通过将容器定义中的 stdin 字段设置为 true 来在 pod 清单中指示这一点。这告诉 Kubernetes 为标准输入流分配一个缓冲区,否则,应用程序在尝试从中读取数据时将始终收到 EOF。
最后一句话让我很困惑。 “为标准输入分配缓冲区”是什么意思?我试图寻找一些线索,但我只看到一些与C编程相关的东西,我对此没有太多了解,也很难理解这个概念。
有人可以用更“与语言无关”的方式解释它吗?那个缓冲区是什么?什么是EOF?
据我所知,每个(?)Linux 进程都会被赋予三个文件:
- 标准输入
- 标准输出
- 标准错误
该进程可以写入最后两个,也可以读取第一个。
答案1
它是 kubernetes 保留的内存量,用于保存放入应用程序 stdin 中的任何内容。如果你说不需要stdin,那么就没有必要持有这么大的内存。这里的技巧是,因为它是一个具有一定大小的缓冲区,所以应用程序将确保不会溢出它......所以即使输入到 k8s 应用程序的应用程序向它抛出 TB/s,一旦缓冲区填充后,k8s 将不再从 stdin 读取数据,直到应用程序捕获该数据。
关于EOF
(又名End of File
),这就是当您尝试从文件(或流)读取文件(或流)时,一旦到达文件(或流)末尾并且没有更多数据可供读取时,您会得到什么。如果没有设置缓冲区并且应用程序尝试从标准输入读取,那么,将会在那里看到 EOF。