220524 Today I Learned
일지
근 1주일? 2주일간 슬럼프와서 많이 좀 내려놓았었다.
Docker와 Kubernetes 하는 지금이 부트캠프 중 제일 중요한 시기일텐데
여기서 힘이빠지면 어떡하냐 싶기도 했고
그런데 오늘 수업들으면서 이것저것 찾아보다가
또 다른 열심히 하는 분을 발견했다 (새벽4시,6시 포스팅이라니 세상에)
스스로 열심히 할 수 없으면, 다른 열심히하는 사람들에게 자극받아서 해야지 휴.. 열심히하자
오늘의 할일
- 220524 TIL 작성
- 깃블로그 구글 Search 등록
주요 키워드
K8s
Volume
- emptyDir
- hostpath
수업 정리
볼륨
쿠버네티스의 파드에서 저장소를 제공하는 기능
기본적인 파드의 특성인 Stateless 으로 인해 데이터가 유지되지 않으므로, 데이터를 파드의 라이프사이클과 별개로 유지하기 위해서는 별도의 볼륨이 필요
파드 내 컨테이너 간 공유 저장소 기능 제공
쿠버네티스의 볼륨 유형
emptyDir
파드의 라이프사이클과 같이하는 볼륨
임시공간으로 파드 내 컨테이너 간 공유 목적으로 사용
hostPath
도커의 BindMount 와 유사한 개념
파드에게 호스트의 파일시스템을 볼륨으로 제공
네트워크 볼륨
nfs 등 네트워크를 통해 접근 가능한 파일시스템을 볼륨으로 제공
클라우드 볼륨
클라우드 서비스에서 제공하는 저장소를 볼륨으로 제공
영구 볼륨(PersistentVolume)
볼륨 사용 시 관리자의 관리영역과 사용자의 관리영역을 분리하는 볼륨
정적 : 관리자에 의해 사전에 생성된 볼륨을 사용
동적 : 사용자의 요청에 의해 자동으로 생성되는 볼륨을 사용
특수 볼륨
ConfigMap
Secret
EmptyDir
아무런 데이터가 들어있지 않은 빈 공간을 제공
파드 내 컨테이너 간 공유 저장소를 사용할 수 있음
볼륨 사용을 위한 리소스 오브젝트 기본 구조
apiVersion: v1
kind: Pod
metadata:
name: testpod
spec:
containers:
- name: test-pod-container
image: ubuntu
volumeMounts:
- name: <VOLUME_NAME>
mountPath: <MOUNTPOINT>
volumes:
- name: <VOLUME_NAME>
<VOLUME_TYPE>
emptyDir 예시
apiVersion: v1
kind: Pod
metadata:
name: testpod
spec:
containers:
- name: test-pod-container
image: ubuntu
command:
- sleep
- infinity
volumeMounts:
- name: emptydir-vol
mountPath: /test
volumes:
- name: emptydir-vol
emptyDir: {}
emptyDir 볼륨 사용 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: emptydir-share-deployment
spec:
replicas: 1
selector:
matchLabels:
app: fortune
template:
metadata:
labels:
app: fortune
spec:
containers:
- name: webserver
image: nginx:latest
volumeMounts:
- name: share-vol
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
- name: fortune
image: ghcr.io/c1t1d0s7/fortune
volumeMounts:
- name: share-vol
mountPath: /var/htdocs
volumes:
- name: share-vol
emptyDir: {}
참고) gitRepo 볼륨
git으로부터 필요한 데이터를 받아와서 초기화되는 볼륨
현재는 사용하지 않음
필요할 경우 emptyDir + InitContainer 조합으로 사용
InitContainer
실제 파드 운영상 필요한 파드가 아니라 파드 초기화 단계에서 필요한 파드
apiVersion: v1
kind: Pod
metadata:
name: gitrepo-test
spec:
initContainers:
- name: git-container
image: alpine/git
args:
- clone
- https://github.com/kubernetes-sigs/kubespray.git
- /git
volumeMounts:
- name: git-vol
mountPath: /git
containers:
- name: test-container
image: busybox
command:
- sleep
- infinity
volumeMounts:
- name: git-vol
mountPath: /git
volumes:
- name: git-vol
emptyDir: {}
HostPath
Docker Bind Mount와 유사한 동작 방식을 가짐
hostPath 예시
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: hostpath-rs
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: hostpath-rs-container
image: ubuntu
command:
- sleep
- infinity
volumeMounts:
- name: hostpath-vol
mountPath: /hostpath
volumes:
- name: hostpath-vol
hostPath:
type: DirectoryOrCreate
path: /tmp/hostpath
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: webserver-rs
spec:
replicas: 3
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: webserver
image: nginx:latest
volumeMounts:
- name: web-contents
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volumes:
- name: web-contents
hostPath:
type: Directory
path: /web_contents
Leave a comment