레이블이 dd인 게시물을 표시합니다. 모든 게시물 표시
레이블이 dd인 게시물을 표시합니다. 모든 게시물 표시

k8s pod ephemeral storage

# 운영중인 pod 다음과 에러로 evicted(pod 중지) 됐다.
# evicted pod event log describe
Type    Reason   .. From .... Message
Warngin evicted ... kubelet ... Pod ephemeral local storage usage exceeds the total limit of containers 5000Mi
Normal killing ... kubelet ... Stopping containers ysoftman_pod

# 원인은 서버가 pod 내 /tmp/xxx  업로드한 파일을 쓰고 있어 발생했다.

# 테스트를 위해 container 접속해서
# ysoftman_10GB 크기가 커지는것으로 모니터링 하고
watch -n 1 ls -ahl ysoftman_10GB

# container 접속 터미널을 하나 더 열고
# ysoftman_10GB 를 1GB 씩 늘려 본다.
rm -rf ysoftman_10GB
touch ysoftman_10GB
for ((i=1;i<=10;i++)); do
    echo $i
    sleep 1
    dd if=/dev/urandom bs=1000000 count=1000 >> ysoftman_10GB
done

# 참고로 한번에 쓸 경우
# dd if=/dev/urandom of=ysoftman_10GB bs=1000000 count=10000

# 이러면 1GB write 이후 pod 가 evicted 된다.
# ephemeral-storage 값을 늘리면 된다.
pod > spec > containers >  ... 
resources
  requests:
    ephemeral-storage: 10Gi
  limits:
    ephemeral-storage: 10Gi


##########


# 참고
# ephemeral-storage 리소스 종류에는
# [emptydir]
# pod 시작시 생서 pod 내 모든 container 들은 emptydir 볼륨에 동일한 파일을 읽고 쓴다.(컨테이너들간 공유)
# 로컬의 kubelet 베이스 디렉터리(보통 루트 디스크) 또는 램에서 제공
# 외 configmap 등이 있다.
# 다음과 같이 명시해 적용하면 /cache 를 emptyDir 로 사용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

# emptydir 는 pod 삭제되면 사라지는 휘발성이지만
# hostpath 를 이용하면 실제 호스트 노드에 마운트해서 pod 가 내려가도 노드에 데이터가 남는다.
# 하지만 pod 다른 호스트 노드에 뜰 수 있기 때문에 완벽한 데이터 보존 방법은 아니다.
# 그리고 hostpath 은 호스트 노드를 접근하는거라 보안 위험이 있어 되도록이면 사용하지 않는것이 좋다.
# 다음과 같이 명시해 적용하면 /test-pd 로 호스트의 /data 에 접근해 사용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      # this field is optional
      type: Directory

Linux/Mac dd 를 이용한 부팅 USB 만들기

부팅 이미지 파일이 있는 경우 USB 로 그냥 복사하면 안된다.
dd 명령으로 부팅 이미지를 복사해줘야 한다.

# USB 디바이스를 파악
diskutil list

# USB 가 /dev/disk1 일 경우, 마운트 해제
diskutil unmountDisk /dev/disk1

# dd 를 사용하여 부팅이미지(예 gparted-live) USB 복사하기
sudo dd if=./gparted-live-0.18.0-2-i486.iso of=/dev/rdisk1 bs=4m;

Windows/Linux MBR 초기화

# MBR(Master Boot Recod)은 디스크의 첫번째 섹터를 말한다.
# 섹터 하나의 크기는 512바이트이다.
# POST(Power On Self Test) 후 MBR 의 부트코드가 실행된다.
# 부트코드는 부팅 가능한 파티션의 부트섹터를 호출해주는 역할이다.
# 다음은 운영체제에 따라 MBR 영역을 초기화 하는 방법이다.

# 윈도우 계열
fdisk /mbr
또는 윈도우 XP 로 부팅후 'R'키로 복구모드로 들어가서 fixmbr 실행

# 리눅스 계열
dd if=/dev/zero of=/dev/hda bs=512 count=1