이 문서에서는 GKE 포드 스냅샷 및 관련 리소스의 일반적인 문제를 해결하는 방법을 보여줍니다.
이 정보는 포드 스냅샷을 사용하여 워크로드를 체크포인트하고 복원하는 애플리케이션 개발자, 플랫폼 관리자, 운영자에게 중요합니다. 콘텐츠 Cloud de Confiance by S3NS 에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 사용자 역할 및 태스크를 참조하세요.
PVC를 사용한 체크포인트 후 변경 위험
포드에서 영구 볼륨 클레임 (PVC)을 사용하는 경우 '체크포인트 및 재개' 워크플로 중에 상당한 위험이 발생합니다. 체크포인트 직후에 워크로드를 재개하도록 구성하면 (postCheckpoint: resume 필드 사용) 애플리케이션이 활성 상태를 유지하고 체크포인트 후에 PVC를 수정할 수 있습니다.
- 단계적 종료 문제: 체크포인트 및 재개 주기 후 포드를 삭제하면 Kubernetes는 컨테이너의 기본 프로세스에
SIGTERM신호를 전송하여 단계적 종료 시퀀스를 시작합니다. 많은 애플리케이션이 단계적 종료 로직을 구현하는 동안 PVC에서 임시 파일을 삭제하거나 업데이트하는 정리 루틴을 트리거할 수 있습니다. - 복원 실패: 포드 스냅샷을 가져온 후 PVC에서 이러한 변경사항이 발생하면 복원 절차에서 체크포인트 시점에 존재했던 PVC 상태를 예상하므로 복원 실패 또는 데이터 불일치가 발생할 수 있습니다.
- 권장되는 완화: 워크로드에 PVC를 사용해야 하는 경우
체크포인트 후에 워크로드를 재개하지 마세요.
PodSnapshotPolicy에서postCheckpoint: stop구성을 사용합니다. 이 구성은 체크포인트 단계가 완료된 후 프로세스가 보조 쓰기 또는 상태 변경을 수행할 기회가 없도록 하는 데 도움이 됩니다.
ConfigMap 마운트 및 디렉터리 마스크 처리
구성 데이터를 컨테이너에 통합할 때 마운트 방법이 스냅샷의 무결성에 영향을 줄 수 있습니다.
표준 볼륨 마운트를 사용하여 ConfigMap을 마운트하면 Kubernetes는 전체 대상 디렉터리를 외부 마운트로 처리합니다. 스냅샷 중에 외부 마운트가 건너뛰므로 전체 디렉터리가 스냅샷에서 제외됩니다.
다음 예시에서는 전체 디렉터리가 외부 마운트이므로 /etc/my-app/ 디렉터리의 변경사항이 스냅샷에 캡처되지 않습니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
config.json: |
{
"mode": "local"
}
---
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
runtimeClassName: gvisor
containers:
- name: my-app-container
image: my-app-image
volumeMounts:
- mountPath: /etc/my-app
name: config-volume
volumes:
- name: config-volume
configMap:
name: my-config
이 문제를 해결하려면 subPath를 사용하세요. subPath는 특정 구성 파일만 외부 마운트로 처리되도록 하는 데 도움이 됩니다. 이 구성은 정확한 파일을 타겟팅하므로 상위 디렉터리 내의 나머지 파일과 구조가 컨테이너의 로컬 파일 시스템의 일부로 유지되어 체크포인트 프로세스 중에 올바르게 캡처됩니다.
다음 예시는 subPath를 사용하는 volumeMounts 구성을 보여줍니다.
volumeMounts:
- mountPath: /etc/my-app/config.json
name: config-volume
subPath: config.json
암시적 익명 볼륨
특정 컨테이너 이미지는 Dockerfile의 VOLUME 명령어를 통해 메타데이터 내에 볼륨을 정의합니다. 포드 사양에서 볼륨을 정의하지 않더라도 Kubernetes는 기본 이미지에서 볼륨으로 정의된 모든 경로에 대해 익명 볼륨을 자동으로 만듭니다. 예를 들어 alpine/git 이미지는 /git을 암시적 볼륨으로 정의합니다.
이러한 익명 볼륨은 외부 마운트로 처리되며 PVC와 마찬가지로 체크포인트되지 않습니다. 기본 이미지를 확인하여 중요한 데이터가 암시적 볼륨에 저장되지 않도록 하세요.