"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
이는 애플리케이션의 stdin에 입력된 모든 항목을 보관하기 위해 kubernetes가 예약한 메모리 양입니다. stdin이 필요하지 않다고 말하면 그렇게 큰 메모리를 보유할 필요가 없습니다. 여기서 중요한 점은 특정 크기의 버퍼이기 때문에 애플리케이션이 오버플로되지 않도록 한다는 것입니다. 따라서 k8s 애플리케이션에 대한 입력이 TB/s를 발생시키더라도 일단 버퍼가 채워지면 k8s는 애플리케이션이 해당 데이터를 캡처할 때까지 더 이상 stdin에서 데이터를 읽지 않습니다.
EOF
(일명 ) 에 관해서는 End of File
파일(또는 스트림)의 끝에 도달하고 더 이상 읽을 데이터가 없을 때 파일(또는 스트림)에서 읽으려고 할 때 얻게 되는 것입니다. 버퍼가 설정되지 않고 애플리케이션이 표준 입력에서 읽으려고 시도하면 거기에 EOF가 표시됩니다.