Image Layers : docker build 시, image layer 생성되며 빌드 후에는 새롭게 build 하지 않는 이상 수정할 수 없다.(Read Only)
Container Layer : docker run 시, container layer가 생성되며 애플리케이션의 로그파일과 같은 데이터 들이 컨테이너에 의해 저장된다. 다만 해당 파일들은 컨테이너가 실행중일 때만 이용가능하며 종료 시 모든 기록은 삭제된다.(Read Write)
Practice
// 로그 조회
kubectl exec POD명 -- cat /log/LOG파일명
apiVersion: v1
kind: Pod
metadata:
name: webapp
spec:
containers:
- name: event-simulator
image: kodekloud/event-simulator
env:
- name: LOG_HANDLERS
value: file
volumeMounts:
- mountPath: /log
name: log-volume
volumes:
- name: log-volume
hostPath:
# directory location on host
path: /var/log/webapp
# this field is optional
type: Directory
// 기존 POD 삭제 후 재생성
kubectl replace -f web.yaml --force
Persistent Volume Claims
Practice
// PersistentVolume 생성
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-log
spec:
persistentVolumeReclaimPolicy: Retain
accessModes:
- ReadWriteMany
capacity:
storage: 100Mi
hostPath:
path: /pv/log
// PersistentVolumeClaim 생성
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: claim-log-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
*중요 : PV와 PVC의 accessMode가 일치하지 않을 시 PVC는 pending 상태가된다.
// POD에 PVC 연결
apiVersion: v1
kind: Pod
metadata:
name: webapp
spec:
containers:
- name: event-simulator
image: kodekloud/event-simulator
env:
- name: LOG_HANDLERS
value: file
volumeMounts:
- mountPath: /log
name: log-volume
volumes:
- name: log-volume
persistentVolumeClaim:
claimName: claim-log-1
*중요 : POD에 연결된 PVC는 도중에 PVC를 삭제해도 POD이 삭제되기 전까지 terminating 상태가 된다.
// SC 생성
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: delayed-volume-sc
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer