「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プロセスには3つのファイルがあります。
- 標準入力
- 標準出力
- 標準エラー
プロセスは最後の2つを書き、最初のものを読むことができます。
答え1
これは、アプリケーションのstdinに入力されたすべてのエントリを保持するためにkubernetesによって予約されたメモリ量です。 stdinが必要ないと言えば、それほど大きなメモリを保持する必要はありません。ここで重要なのは、特定のサイズのバッファなので、アプリケーションがオーバーフローしないようにすることです。したがって、k8sアプリケーションへの入力がTB / sを生成してもバッファがいっぱいになると、k8sはアプリケーションがそのデータをキャプチャするまでstdinからデータを読み取らなくなります。
EOF
(別名)については、End of File
ファイル(またはストリーム)の終わりに到達し、読み取るデータがなくなったときにファイル(またはストリーム)から読み取ろうとすると取得されます。バッファが設定されておらず、アプリケーションが標準入力から読み取ろうとすると、そこにEOFが表示されます。